summaryrefslogtreecommitdiffstats
path: root/multimedia
diff options
context:
space:
mode:
author Vijay Marcel <vijaymarcel@outlook.com>2024-02-22 21:38:01 +0700
committer Willy Sudiarto Raharjo <willysr@slackbuilds.org>2024-02-23 16:28:11 +0700
commit7a5c5929f4c121ded607904829df1e6c45118490 (patch)
tree430752968536b0bde21006fc5e5040abfebebc05 /multimedia
parent6bc59c4bc7c9a2bb5058a2b61b3fe695157f9609 (diff)
downloadslackbuilds-7a5c5929f4c121ded607904829df1e6c45118490.tar.gz
slackbuilds-7a5c5929f4c121ded607904829df1e6c45118490.tar.xz
multimedia/shine: Updated for version 3.1.1.
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'multimedia')
-rw-r--r--multimedia/shine/fix-bugs.patch12394
-rw-r--r--multimedia/shine/shine.SlackBuild27
-rw-r--r--multimedia/shine/shine.info6
3 files changed, 12409 insertions, 18 deletions
diff --git a/multimedia/shine/fix-bugs.patch b/multimedia/shine/fix-bugs.patch
new file mode 100644
index 0000000000..8e97a12bce
--- /dev/null
+++ b/multimedia/shine/fix-bugs.patch
@@ -0,0 +1,12394 @@
+diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
+new file mode 100644
+index 0000000..500a5f6
+--- /dev/null
++++ b/.github/workflows/ci.yml
+@@ -0,0 +1,73 @@
++name: Build and install
++
++on:
++ push:
++ branches: [ "main" ]
++ pull_request:
++
++concurrency:
++ group: ${{ github.workflow }}-${{ github.ref }}
++ cancel-in-progress: true
++
++jobs:
++ build:
++ runs-on: ${{ matrix.os }}
++ strategy:
++ fail-fast: false
++ matrix:
++ os: [macos-latest, ubuntu-latest]
++ steps:
++ - uses: actions/checkout@v3
++ - name: Install required packages on macos
++ if: matrix.os == 'macos-latest'
++ run: brew install autoconf automake pkg-config
++ - name: Install required packages on ubuntu
++ if: matrix.os == 'ubuntu-latest'
++ run: sudo apt-get -y install automake autoconf pkg-config
++ - name: bootstrap
++ run: ./bootstrap
++ - name: configure
++ run: ./configure
++ - name: make
++ run: make
++ - name: make install on macos
++ if: matrix.os == 'macos-latest'
++ run: make install
++ - name: make install on ubuntu
++ if: matrix.os == 'ubuntu-latest'
++ run: sudo make install
++ - name: Test pkg-config setup
++ run: pkg-config --libs shine
++
++ android_build:
++ runs-on: ubuntu-latest
++ steps:
++ - uses: actions/checkout@v3
++ - uses: nttld/setup-ndk@v1
++ with:
++ ndk-version: r25b
++ local-cache: true
++ - name: Install autoconf/automake
++ run: sudo apt-get -y install automake autoconf
++ - name: bootstrap
++ run: ./bootstrap
++ - name: configure
++ run: ./configure
++ - name: make android
++ run: make android
++
++ js_build:
++ runs-on: ubuntu-latest
++ steps:
++ - uses: actions/checkout@v3
++ - uses: mymindstorm/setup-emsdk@v11
++ - name: JS build
++ run: |
++ cd js
++ make
++ - uses: actions/setup-node@v3
++ - name: Run node test
++ run: |
++ cd js/test/node
++ npm install
++ npm run test
+diff --git a/.gitignore b/.gitignore
+index aa76abe..ffdd74d 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -2,9 +2,9 @@
+ obj
+ libs
+ compile
+-android/lib
+-android/include
+-android/bin
++android/
++js/src/post-node.js
++!android/*.mk
+ shine
+ shine.pc
+ m4
+@@ -82,6 +82,6 @@ src/lib/reservoir.o
+ src/lib/tables.lo
+ src/lib/tables.o
+ shine-*.tar.gz
+-*.bc
++*.o
+ *.mp3
+ node_modules
+diff --git a/ChangeLog b/ChangeLog
+index 122dae5..0713282 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,3 +1,8 @@
++x.y.z ()
++=====
++* Be more specific when enabling MIPS assembly routines.
++* Fix wave header reading on big endian machines (#34)
++
+ 3.1.1 (2017-07-28)
+ =====
+ * Remove invalid MPEG 2.5 bitrates.
+diff --git a/Makefile.am b/Makefile.am
+index bebf32d..538256c 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -26,14 +26,14 @@ pkgconfigdir = $(libdir)/pkgconfig
+ pkgconfig_DATA = shine.pc
+
+ android:
+- [ -d android/bin ] || mkdir android/bin
+ [ -d android/include ] || mkdir android/include
+- [ -d android/lib ] || mkdir android/lib
+- NDK_PROJECT_PATH=$(shell pwd) ndk-build APP_BUILD_SCRIPT=$(shell pwd)/android/Library.mk
+- cp libs/armeabi/libshine.so android/lib
++ [ -d android/lib ] || mkdir android/lib
++ [ -d android/bin ] || mkdir android/bin
+ cp src/lib/layer3.h android/include
++ NDK_PROJECT_PATH=$(shell pwd) ndk-build APP_BUILD_SCRIPT=$(shell pwd)/android/Library.mk
++ mv libs/* android/lib
+ NDK_PROJECT_PATH=$(shell pwd) ndk-build APP_BUILD_SCRIPT=$(shell pwd)/android/Binary.mk
+- cp libs/armeabi/shineenc android/bin
++ mv libs/* android/bin
+
+ clean-local:
+ -rm -rf obj libs android/lib android/bin android/include
+diff --git a/README.md b/README.md
+index 1d30cbd..e9b781a 100644
+--- a/README.md
++++ b/README.md
+@@ -2,15 +2,15 @@ Shine: fast fixed-point mp3 encoding
+ ====================================
+
+ [shine](https://github.com/savonet/shine) is a blazing fast mp3 encoding library implemented in
+-fixed-point arithmetic. The library can thus be used to performe super fast mp3 encoding on architectures
+-without a FPU, such as `armel`, etc.. It is also, however, also super fast on architectures with a FPU!
++fixed-point arithmetic. The library can thus be used to perform super fast mp3 encoding on architectures
++without a FPU, such as `armel`, etc.. It is also super fast on architectures with a FPU!
+
+ How to use?
+ -----------
+
+ The encoding API should be quite straight forward:
+
+-```
++```c
+ #include <shine/layer3.h>
+
+ (...)
+@@ -42,46 +42,47 @@ shine_close(s);
+ How fast is it?
+ ---------------
+
+-On a [Raspberry Pi](http://www.raspberrypi.org/) (`ARM`, `FPU`):
++On a macbook pro (`arm64`/M1 pro, `FPU`, December 30, 2022):
+
+-Lame, `3m06s`, `1.8x` realtime:
+-```
+-pi@raspberrypi ~ $ lame bla.wav bla.mp3
+-LAME 3.99.5 32bits (http://lame.sf.net)
++Lame, `88.7x` realtime:
++```bash
++LAME 3.100 64bits (http://lame.sf.net)
+ Using polyphase lowpass filter, transition band: 16538 Hz - 17071 Hz
+-Encoding bla.wav to bla.mp3
++Encoding /tmp/decoded.wav to /tmp/lame.mp3
+ Encoding as 44.1 kHz j-stereo MPEG-1 Layer III (11x) 128 kbps qval=3
+ Frame | CPU time/estim | REAL time/estim | play/CPU | ETA
+- 12987/12987 (100%)| 3:06/ 3:06| 3:06/ 3:06| 1.8216x| 0:00
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
++ 12203/12203 (100%)| 0:03/ 0:03| 0:04/ 0:04| 88.773x| 0:00
++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ kbps LR MS % long switch short %
+- 128.0 0.1 99.9 89.1 6.1 4.9
++ 128.0 32.6 67.4 96.4 1.9 1.7
+ Writing LAME Tag...done
+-ReplayGain: -10.5dB
++ReplayGain: -9.3dB
++lame -b 128 /tmp/decoded.wav /tmp/lame.mp3 3.55s user 0.05s system 99% cpu 3.609 total
+ ```
+
+-Shine, `1m35s`, `3.6x` realtime:
++Shine, `318.0x` realtime:
+ ```
+-pi@raspberrypi ~ $ shineenc bla.wav bla.mp3
+ shineenc (Liquidsoap version)
+-WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:39
++WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:18
+ MPEG-I layer III, stereo Psychoacoustic Model: Shine
+ Bitrate: 128 kbps De-emphasis: none Original
+-Encoding "bla.wav" to "bla.mp3"
+-Finished in 00:01:35 (3.6x realtime)
++Encoding "/tmp/bla.wav" to "/tmp/shine.mp3"
++Finished in 00:00:01 (318.0x realtime)
+ ```
+
+-Now, on a mac airbook (`x86_64`, `FPU`):
++### ⚠ The following are outdated tests ⚠
+
+-Lame, `15s`, `22x` realtime:
+-```
+-toots@zulu tmp % lame bla.wav bla.mp3
+-LAME 3.99.5 64bits (http://lame.sf.net)
++On a [Raspberry Pi](http://www.raspberrypi.org/) (`ARM`, `FPU`):
++
++Lame, `1.8x` realtime:
++```bash
++pi@raspberrypi ~ $ lame bla.wav bla.mp3
++LAME 3.99.5 32bits (http://lame.sf.net)
+ Using polyphase lowpass filter, transition band: 16538 Hz - 17071 Hz
+ Encoding bla.wav to bla.mp3
+ Encoding as 44.1 kHz j-stereo MPEG-1 Layer III (11x) 128 kbps qval=3
+ Frame | CPU time/estim | REAL time/estim | play/CPU | ETA
+- 12987/12987 (100%)| 0:15/ 0:15| 0:17/ 0:17| 22.087x| 0:00
++ 12987/12987 (100%)| 3:06/ 3:06| 3:06/ 3:06| 1.8216x| 0:00
+ -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ kbps LR MS % long switch short %
+ 128.0 0.1 99.9 89.1 6.1 4.9
+@@ -89,20 +90,21 @@ Writing LAME Tag...done
+ ReplayGain: -10.5dB
+ ```
+
+-Shine, `9s`, `37.7x` realtime:
+-```
++Shine, `3.6x` realtime:
++```bash
++pi@raspberrypi ~ $ shineenc bla.wav bla.mp3
+ shineenc (Liquidsoap version)
+ WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:39
+ MPEG-I layer III, stereo Psychoacoustic Model: Shine
+ Bitrate: 128 kbps De-emphasis: none Original
+-Encoding "/tmp/bla.wav" to "/tmp/bla.mp3"
+-Finished in 00:00:09 (37.7x realtime)
++Encoding "bla.wav" to "bla.mp3"
++Finished in 00:01:35 (3.6x realtime)
+ ```
+
+ On a Google Nexus 5 (`ARM`, `FPU`):
+
+ Shine, `14s`, `24.2x` realtime:
+-```
++```bash
+ u0_a65@hammerhead:/mnt/sdcard $ shineenc bla.wav bla.mp3
+ shineenc (Liquidsoap version)
+ WAVE PCM Data, stereo 44100Hz 16bit, duration: 00:05:39
+@@ -128,7 +130,7 @@ A bit of history
+ This code was dug out from the dusty crates of those times before internet
+ and github. It apparently was created by Gabriel Bouvigne sometime around
+ the end of the 20th century. The encoder was converted circa 2001 by Pete
+-Everett to fixed-point arithmetic for the RISC OS. Latest we know, Patrick
++Everett to fixed-point arithmetic for the RISC OS. Last we know, Patrick
+ Roberts had worked on the code to make it multi-platform and more library
+ oriented. That was around 2006.
+
+diff --git a/configure.ac b/configure.ac
+index 87a5f68..6d6cb23 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1,6 +1,7 @@
+-AC_INIT([shine],[3.1.0],[savonet-users@lists.sourceforge.net])
++AC_INIT([shine],[3.1.1],[toots@rastageeks.org])
+ AM_INIT_AUTOMAKE([subdir-objects])
+ LT_INIT
+ AC_CONFIG_MACRO_DIR([m4])
+ AC_C_BIGENDIAN([CFLAGS="$CFLAGS -DSHINE_BIG_ENDIAN"])
++AC_CHECK_HEADER([byteswap.h],[CFLAGS="$CFLAGS -DSHINE_HAVE_BSWAP_H"])
+ AC_OUTPUT([Makefile shine.pc])
+diff --git a/js/.npmignore b/js/.npmignore
+new file mode 100644
+index 0000000..f1b84a5
+--- /dev/null
++++ b/js/.npmignore
+@@ -0,0 +1,4 @@
++test/
++src/
++Makefile
++.*
+diff --git a/js/.prettierignore b/js/.prettierignore
+new file mode 100644
+index 0000000..1b64941
+--- /dev/null
++++ b/js/.prettierignore
+@@ -0,0 +1,5 @@
++.next/
++dist/
++stubs/
++public/audio
++__ENV.js
+diff --git a/js/.prettierrc b/js/.prettierrc
+new file mode 100644
+index 0000000..a995c49
+--- /dev/null
++++ b/js/.prettierrc
+@@ -0,0 +1,12 @@
++{
++ "singleQuote": false,
++ "quoteProps": "as-needed",
++ "arrowParens": "avoid",
++ "tabWidth": 2,
++ "trailingComma": "es5",
++ "semi": true,
++ "jsxSingleQuote": true,
++ "bracketSameLine": false,
++ "printWidth": 120,
++ "parser": "typescript"
++}
+diff --git a/js/Makefile b/js/Makefile
+index 465ffde..3781b6e 100644
+--- a/js/Makefile
++++ b/js/Makefile
+@@ -1,24 +1,37 @@
+ # Emscriptem compilation
+
+ EMCC:=emcc
+-EXPORTED_FUNCTIONS:='["_shine_check_config", "_shine_js_init",\
++EXPORTED_FUNCTIONS:='["_malloc", "_free", "_shine_check_config", "_shine_js_init",\
++ "_shine_js_int16_len", "_shine_js_ptr_len", \
+ "_shine_samples_per_pass", "_shine_encode_buffer",\
+- "_shine_flush", "_shine_close"]'
++ "_shine_flush", "_shine_close"]'
+ CFLAGS:=-O3
+-LINKFLAGS:=-s EXPORTED_FUNCTIONS=$(EXPORTED_FUNCTIONS) --memory-init-file 0 $(CFLAGS)
++LINKFLAGS:=-s EXPORTED_FUNCTIONS=$(EXPORTED_FUNCTIONS) -s SINGLE_FILE=1 -s EXPORTED_RUNTIME_METHODS=setValue,getValue --memory-init-file 0 $(CFLAGS)
++WEB_LINKFLAGS:=$(LINKFLAGS) -s ENVIRONMENT='web' -s EXPORT_NAME='createModule' -s USE_ES6_IMPORT_META=0
+
+ C_FILES:=$(wildcard ../src/lib/*.c) src/wrapper.c
+ HEADER_FILES:=$(wildcard ../src/lib/*.h)
+ SOURCES:=$(C_FILES) $(HEADER_FILES)
+-OBJECTS:=$(C_FILES:%.c=%.bc)
++OBJECTS:=$(C_FILES:%.c=%.o)
+
+-all: dist/libshine.js
++all: dist/libshine_node.js dist/libshine_browser.js
+
+-dist/libshine.js: $(SOURCES) $(OBJECTS) src/pre.js src/post.js
+- $(EMCC) $(LINKFLAGS) --pre-js src/pre.js --post-js src/post.js $(OBJECTS) -o $@
++src/post-node.js: src/libshine_class.js src/libshine_node_wrapper.js
++ rm -f src/post-node.js
++ cat src/libshine_class.js src/libshine_node_wrapper.js > src/post-node.js
+
+-%.bc: %.c
++dist/libshine_node.js: $(SOURCES) $(OBJECTS) src/post-node.js
++ $(EMCC) $(LINKFLAGS) --post-js src/post-node.js $(OBJECTS) -o dist/libshine_node.js
++
++dist/libshine_browser_stubs.js: $(SOURCES) $(OBJECTS)
++ $(EMCC) $(WEB_LINKFLAGS) $(OBJECTS) -o dist/libshine_browser_stubs.mjs
++ mv dist/libshine_browser_stubs.mjs dist/libshine_browser_stubs.js
++
++dist/libshine_browser.js: src/libshine_class.js src/libshine_browser_wrapper.js dist/libshine_browser_stubs.js
++ cat src/libshine_class.js src/libshine_browser_wrapper.js > dist/libshine_browser.js
++
++%.o: %.c
+ $(EMCC) $(CFLAGS) -I../src/lib -c $< -o $@
+
+ clean:
+- rm -f *.bc ../src/lib/*.bc
++ rm -rf *.o ../src/lib/*.o dist/libshine*js
+diff --git a/js/README.md b/js/README.md
+index 49ca3f6..d521d4b 100644
+--- a/js/README.md
++++ b/js/README.md
+@@ -1,112 +1,156 @@
+ Shine encoder library for Javascript
+ ====================================
+
+-This directory contains a build of shine for Javascript using
+-[kripken/emscripten](https://github.com/kripken/emscripten) and
+-located in `dist/libshine.js`
++This package contains a build of the [shine](https://github.com/toots/shine) fixed-point
++mp3 encoder compiled for Javascript and wasm using [emscripten-core/emscripten](https://github.com/emscripten-core/emscripten).
++
++Install
++-------
++
++Using `npm`:
++
++```shell
++npm install @toots/shine.js
++```
++
++Using `yarn`:
++
++```shell
++yarn add @toots/shine.js
++```
++
++Using `pnpm`:
++
++```shell
++pnpm install @toots/shine.js
++```
++
++In a HTML page:
++
++When using `webpack`, the package should point to the correct
++`libshine_browser.js` file automatically.
++
++When using directly as a script, you can load the `libshine_node.js`
++file as:
++
++```html
++<script src="libshine_node.js"></script>
++```
++
++See: [test/browser](https://github.com/toots/shine/tree/main/js/test/browser) for an example.
+
+ How to use?
+ -----------
+
+ The encoding API should be quite straight forward:
+
+-```
+-shine = new Shine({
+- samplerate: 44100,
+- bitrate: 128,
+- channels: 2,
+- mode: Shine.STEREO
+-});
++```js
++import { Shine, StereoModel } from "@toots/shine.js";
++
++const exec = async () => {
++ await Shine.initialized;
++
++ shine = new Shine({
++ samplerate: 44100,
++ bitrate: 128,
++ channels: 2,
++ stereoModel: StereoModel.STEREO
++ });
+
+-// All the magic happens here
+-while (..) {
+- // data here is an array of channels.
+- // Channels must have the same number of samples
+- // and both be either Int16Array or Float32Array.
+- encoded = shine.encode(data);
++ // All the magic happens here
++ while (..) {
++ // data here is an array of channels.
++ // Channels must have the same number of samples
++ // and both be either Int16Array or Float32Array.
++ encoded = shine.encode(data);
++ ...
++ }
++
++ // Close and get remaining data.
++ flushed = shine.close();
++
+ ...
+ }
+
+-// Close and get remaining data.
+-flushed = shine.close();
+-...
++exec();
+ ```
+
+ How fast is it?
+ ---------------
+
+-You can run the test suite located in `test/`. As of now (26/07/2014), only firefox
+-and seems to show performances decent enough for real-time encoding while Google Chrome
+-can encode between 1X and 2X.
++You can run the test suite located in `test/`. Encoding rate above `1X` means that
++the browser should be suitable for real-time encoding.
++
++Results, as of December 30, 2022:
+
+-Chrome:
++Chrome (`108.0.5359.124`):
+ ```
+ Executing encoding test
+ Got WAV file.
+ Encoding..
+ Done encoding.
+ File duration: 5.57 seconds
+-Encoding time: 5.18 seconds
+-Encoding rate: 1.08X
++Encoding time: 0.08 seconds
++Encoding rate: 67.96X
+
+ Executing rounds test
+ Encoding 50 buffers of 4096 samples
+ Done encoding
+ Total duration: 4.64
+-Encoding time: 2.73
+-Encoding rate: 1.70X
++Encoding time: 0.03
++Encoding rate: 160.00X
+ ```
+
+-Firefox:
++Firefox (`108.0.1`):
+ ```
+ Executing encoding test
+ Got WAV file.
+ Encoding..
+ Done encoding.
+ File duration: 5.57 seconds
+-Encoding time: 1.48 seconds
+-Encoding rate: 3.76X
++Encoding time: 0.06 seconds
++Encoding rate: 99.52X
+
+ Executing rounds test
+ Encoding 50 buffers of 4096 samples
+ Done encoding
+ Total duration: 4.64
+-Encoding time: 0.98
+-Encoding rate: 4.72X
++Encoding time: 0.03
++Encoding rate: 178.46X
+ ```
+
+-Safari:
++Safari (`16.2`):
+ ```
+ Executing encoding test
+ Got WAV file.
+ Encoding..
+ Done encoding.
+ File duration: 5.57 seconds
+-Encoding time: 11.77 seconds
+-Encoding rate: 0.47X
++Encoding time: 0.12 seconds
++Encoding rate: 46.44X
+
+ Executing rounds test
+ Encoding 50 buffers of 4096 samples
+ Done encoding
+ Total duration: 4.64
+-Encoding time: 6.93
+-Encoding rate: 0.67X
++Encoding time: 0.02
++Encoding rate: 210.91X
+ ```
+
+-NodeJS, v0.10.24:
++NodeJS (`v19.3.0`):
+ ```
+ Executing encoding test
+ Got WAV file.
+ Encoding..
+ Done encoding.
+ File duration: 5.57 seconds
+-Encoding time: 22.57 seconds
+-Encoding rate: 0.25X
++Encoding time: 0.06 seconds
++Encoding rate: 94.45X
+
+ Executing rounds test
+ Encoding 50 buffers of 4096 samples
+ Done encoding
+ Total duration: 4.64
+-Encoding time: 11.46
+-Encoding rate: 0.40X
++Encoding time: 0.03
++Encoding rate: 178.46X
+ ```
+diff --git a/js/dist/libshine.js b/js/dist/libshine.js
+deleted file mode 100644
+index c44f119..0000000
+--- a/js/dist/libshine.js
++++ /dev/null
+@@ -1,16 +0,0 @@
+-var Shine=(function(){var context={};return(function(){var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=console.log;if(!Module["printErr"])Module["printErr"]=console.warn;var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function shell_read(){throw"no read() available"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function shell_print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function shell_printErr(x){console.warn(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}if(!Module["quit"]){Module["quit"]=(function(status,toThrow){throw toThrow})}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var Runtime={setTempRet0:(function(value){tempRet0=value;return value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i<Runtime.functionPointers.length;i++){if(!Runtime.functionPointers[i]){Runtime.functionPointers[i]=func;return 2*(1+i)}}throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}),removeFunction:(function(index){Runtime.functionPointers[(index-2)/2]=null}),warnOnce:(function(text){if(!Runtime.warnOnce.shown)Runtime.warnOnce.shown={};if(!Runtime.warnOnce.shown[text]){Runtime.warnOnce.shown[text]=1;Module.printErr(text)}}),funcWrappers:{},getFuncWrapper:(function(func,sig){assert(sig);if(!Runtime.funcWrappers[sig]){Runtime.funcWrappers[sig]={}}var sigCache=Runtime.funcWrappers[sig];if(!sigCache[func]){if(sig.length===1){sigCache[func]=function dynCall_wrapper(){return Runtime.dynCall(sig,func)}}else if(sig.length===2){sigCache[func]=function dynCall_wrapper(arg){return Runtime.dynCall(sig,func,[arg])}}else{sigCache[func]=function dynCall_wrapper(){return Runtime.dynCall(sig,func,Array.prototype.slice.call(arguments))}}}return sigCache[func]}),getCompilerSetting:(function(name){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work"}),stackAlloc:(function(size){var ret=STACKTOP;STACKTOP=STACKTOP+size|0;STACKTOP=STACKTOP+15&-16;return ret}),staticAlloc:(function(size){var ret=STATICTOP;STATICTOP=STATICTOP+size|0;STATICTOP=STATICTOP+15&-16;return ret}),dynamicAlloc:(function(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=(ret+size+15|0)&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=Runtime.stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=Runtime.stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);if(returnType==="string")ret=Pointer_stringify(ret);if(stack!==0){if(opts&&opts.async){EmterpreterAsync.asyncFinalizers.push((function(){Runtime.stackRestore(stack)}));return}Runtime.stackRestore(stack)}return ret};var sourceRegex=/^function\s*[a-zA-Z$_0-9]*\s*\(([^)]*)\)\s*{\s*([^*]*?)[\s;]*(?:return\s*(.*?)[;\s]*)?}$/;function parseJSFunc(jsfunc){var parsed=jsfunc.toString().match(sourceRegex).slice(1);return{arguments:parsed[0],body:parsed[1],returnValue:parsed[2]}}var JSsource=null;function ensureJSsource(){if(!JSsource){JSsource={};for(var fun in JSfuncs){if(JSfuncs.hasOwnProperty(fun)){JSsource[fun]=parseJSFunc(JSfuncs[fun])}}}}cwrap=function cwrap(ident,returnType,argTypes){argTypes=argTypes||[];var cfunc=getCFunc(ident);var numericArgs=argTypes.every((function(type){return type==="number"}));var numericRet=returnType!=="string";if(numericRet&&numericArgs){return cfunc}var argNames=argTypes.map((function(x,i){return"$"+i}));var funcstr="(function("+argNames.join(",")+") {";var nargs=argTypes.length;if(!numericArgs){ensureJSsource();funcstr+="var stack = "+JSsource["stackSave"].body+";";for(var i=0;i<nargs;i++){var arg=argNames[i],type=argTypes[i];if(type==="number")continue;var convertCode=JSsource[type+"ToC"];funcstr+="var "+convertCode.arguments+" = "+arg+";";funcstr+=convertCode.body+";";funcstr+=arg+"=("+convertCode.returnValue+");"}}var cfuncname=parseJSFunc((function(){return cfunc})).returnValue;funcstr+="var ret = "+cfuncname+"("+argNames.join(",")+");";if(!numericRet){var strgfy=parseJSFunc((function(){return Pointer_stringify})).returnValue;funcstr+="ret = "+strgfy+"(ret);"}if(!numericArgs){ensureJSsource();funcstr+=JSsource["stackRestore"].body.replace("()","(stack)")+";"}funcstr+="return ret})";return eval(funcstr)}}))();Module["ccall"]=ccall;Module["cwrap"]=cwrap;function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr<stop;ptr+=4){HEAP32[ptr>>2]=0}stop=ret+size;while(ptr<stop){HEAP8[ptr++>>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i<size){var curr=slab[i];if(typeof curr==="function"){curr=Runtime.getFunctionIndex(curr)}type=singleType||types[i];if(type===0){i++;continue}if(type=="i64")type="i32";setValue(ret+i,curr,type);if(previousType!==type){typeSize=Runtime.getNativeTypeSize(type);previousType=type}i+=typeSize}return ret}Module["allocate"]=allocate;function getMemory(size){if(!staticSealed)return Runtime.staticAlloc(size);if(!runtimeInitialized)return Runtime.dynamicAlloc(size);return _malloc(size)}Module["getMemory"]=getMemory;function Pointer_stringify(ptr,length){if(length===0||!ptr)return"";var hasUtf=0;var t;var i=0;while(1){t=HEAPU8[ptr+i>>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){var __cxa_demangle_func=Module["___cxa_demangle"]||Module["__cxa_demangle"];if(__cxa_demangle_func){try{var s=func.substr(1);var len=lengthBytesUTF8(s)+1;var buf=_malloc(len);stringToUTF8(s,buf,len);var status=_malloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}return func}Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}Module["stackTrace"]=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)Module.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{{buffer=new ArrayBuffer(TOTAL_MEMORY)}}updateGlobalBufferViews();function getTotalMemory(){return TOTAL_MEMORY}HEAP32[0]=1668509029;HEAP16[1]=25459;if(HEAPU8[2]!==115||HEAPU8[3]!==99)throw"Runtime error: expected the system to be little-endian!";Module["HEAP"]=HEAP;Module["buffer"]=buffer;Module["HEAP8"]=HEAP8;Module["HEAP16"]=HEAP16;Module["HEAP32"]=HEAP32;Module["HEAPU8"]=HEAPU8;Module["HEAPU16"]=HEAPU16;Module["HEAPU32"]=HEAPU32;Module["HEAPF32"]=HEAPF32;Module["HEAPF64"]=HEAPF64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var lastChar,end;if(dontAddNull){end=buffer+lengthBytesUTF8(string);lastChar=HEAP8[end]}stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end]=lastChar}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];if(!Math["trunc"])Math["trunc"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math["trunc"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var ASM_CONSTS=[];STATIC_BASE=Runtime.GLOBAL_BASE;STATICTOP=STATIC_BASE+10560;__ATINIT__.push();allocate([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,104,18,0,0,108,29,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,112,18,0,0,112,29,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,130,18,0,0,121,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,148,18,0,0,130,29,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,180,18,0,0,146,29,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,212,18,0,0,162,29,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,28,19,0,0,198,29,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,100,19,0,0,234,29,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,172,19,0,0,14,30,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,44,20,0,0,78,30,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,172,20,0,0,142,30,0,0,16,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,44,21,0,0,206,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,44,23,0,0,206,31,0,0,16,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,2,0,0,0,3,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,3,0,0,0,7,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,4,0,0,0,15,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,6,0,0,0,63,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,8,0,0,0,255,0,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,10,0,0,0,255,3,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,13,0,0,0,255,31,0,0,44,25,0,0,206,32,0,0,16,0,0,0,16,0,0,0,4,0,0,0,15,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,5,0,0,0,31,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,6,0,0,0,63,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,7,0,0,0,127,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,8,0,0,0,255,0,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,9,0,0,0,255,1,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,11,0,0,0,255,7,0,0,44,27,0,0,206,33,0,0,16,0,0,0,16,0,0,0,13,0,0,0,255,31,0,0,44,27,0,0,206,33,0,0,1,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,44,29,0,0,206,34,0,0,1,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,76,29,0,0,222,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,5,0,0,0,4,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,7,0,0,0,6,0,0,0,7,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,6,0,0,0,11,0,0,0,16,0,0,0,21,0,0,0,1,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,2,0,0,0,3,0,0,0,68,172,0,0,128,187,0,0,0,125,0,0,34,86,0,0,192,93,0,0,128,62,0,0,17,43,0,0,224,46,0,0,64,31,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,8,0,0,0,255,255,255,255,8,0,0,0,32,0,0,0,16,0,0,0,255,255,255,255,16,0,0,0,40,0,0,0,24,0,0,0,255,255,255,255,24,0,0,0,48,0,0,0,32,0,0,0,255,255,255,255,32,0,0,0,56,0,0,0,40,0,0,0,255,255,255,255,40,0,0,0,64,0,0,0,48,0,0,0,255,255,255,255,48,0,0,0,80,0,0,0,56,0,0,0,255,255,255,255,56,0,0,0,96,0,0,0,64,0,0,0,255,255,255,255,64,0,0,0,112,0,0,0,255,255,255,255,255,255,255,255,80,0,0,0,128,0,0,0,255,255,255,255,255,255,255,255,96,0,0,0,160,0,0,0,255,255,255,255,255,255,255,255,112,0,0,0,192,0,0,0,255,255,255,255,255,255,255,255,128,0,0,0,224,0,0,0,255,255,255,255,255,255,255,255,144,0,0,0,0,1,0,0,255,255,255,255,255,255,255,255,160,0,0,0,64,1,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,4,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,52,0,0,0,62,0,0,0,74,0,0,0,90,0,0,0,110,0,0,0,134,0,0,0,162,0,0,0,196,0,0,0,238,0,0,0,32,1,0,0,86,1,0,0,162,1,0,0,64,2,0,0,0,0,0,0,4,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,42,0,0,0,50,0,0,0,60,0,0,0,72,0,0,0,88,0,0,0,106,0,0,0,128,0,0,0,156,0,0,0,190,0,0,0,230,0,0,0,20,1,0,0,74,1,0,0,128,1,0,0,64,2,0,0,0,0,0,0,4,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,82,0,0,0,102,0,0,0,126,0,0,0,156,0,0,0,194,0,0,0,240,0,0,0,40,1,0,0,108,1,0,0,192,1,0,0,38,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,28,1,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,114,0,0,0,136,0,0,0,162,0,0,0,194,0,0,0,232,0,0,0,22,1,0,0,74,1,0,0,138,1,0,0,208,1,0,0,28,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,45,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,248,0,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,28,1,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,6,0,0,0,12,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,36,0,0,0,44,0,0,0,54,0,0,0,66,0,0,0,80,0,0,0,96,0,0,0,116,0,0,0,140,0,0,0,168,0,0,0,200,0,0,0,238,0,0,0,28,1,0,0,80,1,0,0,140,1,0,0,208,1,0,0,10,2,0,0,64,2,0,0,0,0,0,0,12,0,0,0,24,0,0,0,36,0,0,0,48,0,0,0,60,0,0,0,72,0,0,0,88,0,0,0,108,0,0,0,132,0,0,0,160,0,0,0,192,0,0,0,232,0,0,0,24,1,0,0,80,1,0,0,144,1,0,0,220,1,0,0,54,2,0,0,56,2,0,0,58,2,0,0,60,2,0,0,62,2,0,0,64,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,157,247,255,255,157,247,255,255,157,247,255,255,157,247,255,255,157,247,255,255,157,247,255,255,58,239,255,255,58,239,255,255,58,239,255,255,58,239,255,255,214,230,255,255,214,230,255,255,214,230,255,255,115,222,255,255,115,222,255,255,15,214,255,255,15,214,255,255,172,205,255,255,72,197,255,255,229,188,255,255,229,188,255,255,129,180,255,255,30,172,255,255,186,163,255,255,87,155,255,255,144,138,255,255,44,130,255,255,101,113,255,255,2,105,255,255,59,88,255,255,215,79,255,255,16,63,255,255,73,46,255,255,31,21,255,255,88,4,255,255,145,243,254,255,103,218,254,255,60,193,254,255,18,168,254,255,75,151,254,255,32,126,254,255,146,92,254,255,104,67,254,255,61,42,254,255,175,8,254,255,133,239,253,255,91,214,253,255,205,180,253,255,162,155,253,255,20,122,253,255,134,88,253,255,92,63,253,255,49,38,253,255,163,4,253,255,221,243,252,255,178,218,252,255,136,193,252,255,163,87,3,0,106,104,3,0,49,121,3,0,148,129,3,0,248,137,3,0,91,146,3,0,91,146,3,0,248,137,3,0,148,129,3,0,205,112,3,0,6,96,3,0,120,62,3,0,234,28,3,0,249,242,2,0,164,192,2,0,79,142,2,0,51,75,2,0,180,255,1,0,209,171,1,0,139,79,1,0,126,226,0,0,112,117,0,0,157,247,255,255,101,113,255,255,202,226,254,255,104,67,254,255,162,155,253,255,121,235,252,255,236,50,252,255,153,105,251,255,226,151,250,255,199,189,249,255,230,210,248,255,4,232,247,255,92,236,246,255,80,232,245,255,68,228,244,255,212,215,243,255,1,195,242,255,203,165,241,255,49,128,240,255,250,98,239,255,96,61,238,255,198,23,237,255,45,242,235,255,147,204,234,255,92,175,233,255,137,154,232,255,182,133,231,255,71,121,230,255,59,117,229,255,246,129,228,255,120,159,227,255,93,197,226,255,109,4,226,255,68,84,225,255,69,189,224,255,113,63,224,255,199,218,223,255,171,151,223,255,186,109,223,255,86,101,223,255,129,126,223,255,157,193,223,255,86,209,31,0,187,66,31,0,203,129,30,0,233,150,29,0,179,121,28,0,39,42,27,0,171,176,25,0,118,252,23,0,235,21,22,0,13,253,19,0,117,169,17,0,236,43,15,0,72,107,12,0,235,111,9,0,156,74,6,0,50,226,2,0,215,79,255,255,195,130,251,255,247,122,247,255,57,73,243,255,38,229,238,255,190,78,234,255,101,142,229,255,27,164,224,255,66,152,219,255,120,98,214,255,132,19,209,255,2,163,203,255,85,25,198,255,69,135,192,255,10,220,186,255,207,48,181,255,49,125,175,255,147,201,169,255,188,38,164,255,72,140,158,255,255,10,153,255,224,162,147,255,179,100,142,255,19,72,137,255,44,102,132,255,254,190,127,255,135,82,123,255,144,49,119,255,124,100,115,255,174,243,111,255,39,223,108,255,16,64,106,255,163,5,104,255,11,73,102,255,170,18,101,255,129,98,100,255,86,73,100,255,42,199,100,255,97,228,101,255,93,169,103,255,130,30,106,255,52,76,109,255,115,50,113,255,5,226,117,255,135,82,123,255,93,140,129,255,78,160,136,255,245,133,144,255,73,186,102,0,9,24,93,0,17,164,82,0,56,69,71,0,226,3,59,0,13,224,45,0,86,209,31,0,133,232,16,0,210,20,1,0,6,103,240,255,187,214,222,255,85,108,204,255,213,39,185,255,1,26,165,255,118,58,144,255,151,145,122,255,200,39,100,255,109,5,77,255,232,50,53,255,58,176,28,255,142,150,3,255,227,229,233,254,156,166,207,254,130,233,180,254,90,191,153,254,37,40,126,254,169,52,98,254,18,254,69,254,251,123,41,254,243,207,12,254,92,2,240,253,255,35,211,253,63,61,182,253,226,94,153,253,19,162,124,253,209,6,96,253,172,174,67,253,163,153,39,253,67,233,11,253,141,157,240,252,171,207,213,252,1,136,187,252,86,215,161,252,212,214,136,252,223,142,112,252,218,7,89,252,239,90,66,252,130,144,44,252,247,176,23,252,120,213,3,252,105,6,241,251,44,76,223,251,38,175,206,251,29,64,191,251,117,7,177,251,145,13,164,251,214,90,152,251,165,247,141,251,0,228,132,251,174,48,125,251,173,221,118,251,255,234,113,251,7,97,110,251,197,63,108,251,200,120,148,4,59,192,147,4,249,158,145,4,1,21,142,4,83,34,137,4,82,207,130,4,0,28,123,4,91,8,114,4,42,165,103,4,111,242,91,4,139,248,78,4,227,191,64,4,218,80,49,4,212,179,32,4,151,249,14,4,136,42,252,3,9,79,232,3,126,111,211,3,17,165,189,3,38,248,166,3,33,113,143,3,44,41,119,3,170,40,94,3,255,119,68,3,85,48,42,3,115,98,15,3,189,22,244,2,93,102,216,2,84,81,188,2,47,249,159,2,237,93,131,2,30,161,102,2,193,194,73,2,1,220,44,2,164,253,15,2,13,48,243,1,5,132,214,1,238,1,186,1,87,203,157,1,219,215,129,1,166,64,102,1,126,22,75,1,100,89,48,1,29,26,22,1,114,105,252,0,198,79,227,0,24,205,202,0,147,250,178,0,56,216,155,0,105,110,133,0,138,197,111,0,255,229,90,0,43,216,70,0,171,147,51,0,69,41,33,0,250,152,15,0,46,235,254,255,123,23,239,255,170,46,224,255,243,31,210,255,30,252,196,255,200,186,184,255,239,91,173,255,247,231,162,255,73,186,102,0,11,122,111,0,178,95,119,0,163,115,126,0,121,173,132,0,251,29,138,0,141,205,142,0,204,179,146,0,126,225,149,0,163,86,152,0,159,27,154,0,214,56,155,0,170,182,155,0,127,157,155,0,86,237,154,0,245,182,153,0,93,250,151,0,240,191,149,0,217,32,147,0,82,12,144,0,132,155,140,0,112,206,136,0,121,173,132,0,2,65,128,0,212,153,123,0,237,183,118,0,77,155,113,0,32,93,108,0,1,245,102,0,184,115,97,0,68,217,91,0,109,54,86,0,207,130,80,0,49,207,74,0,246,35,69,0,187,120,63,0,171,230,57,0,254,92,52,0,124,236,46,0,136,157,41,0,190,103,36,0,229,91,31,0,155,113,26,0,66,177,21,0,218,26,17,0,199,182,12,0,9,133,8,0,61,125,4,0,41,176,0,0,206,29,253,255,100,181,249,255,21,144,246,255,184,148,243,255,20,212,240,255,139,86,238,255,243,2,236,255,21,234,233,255,138,3,232,255,85,79,230,255,217,213,228,255,77,134,227,255,23,105,226,255,53,126,225,255,69,189,224,255,86,209,31,0,99,62,32,0,127,129,32,0,170,154,32,0,70,146,32,0,85,104,32,0,57,37,32,0,143,192,31,0,187,66,31,0,188,171,30,0,147,251,29,0,163,58,29,0,136,96,28,0,10,126,27,0,197,138,26,0,185,134,25,0,74,122,24,0,119,101,23,0,164,80,22,0,109,51,21,0,211,13,20,0,58,232,18,0,160,194,17,0,6,157,16,0,207,127,15,0,53,90,14,0,255,60,13,0,44,40,12,0,188,27,11,0,176,23,10,0,164,19,9,0,252,23,8,0,26,45,7,0,57,66,6,0,30,104,5,0,103,150,4,0,20,205,3,0,135,20,3,0,94,100,2,0,152,188,1,0,54,29,1,0,155,142,0,0,99,8,0,0,144,138,255,255,130,29,255,255,117,176,254,255,47,84,254,255,76,0,254,255,205,180,253,255,177,113,253,255,92,63,253,255,7,13,253,255,22,227,252,255,136,193,252,255,250,159,252,255,51,143,252,255,108,126,252,255,8,118,252,255,165,109,252,255,165,109,252,255,8,118,252,255,108,126,252,255,207,134,252,255,150,151,252,255,163,87,3,0,120,62,3,0,78,37,3,0,35,12,3,0,93,251,2,0,207,217,2,0,164,192,2,0,122,167,2,0,236,133,2,0,94,100,2,0,51,75,2,0,165,41,2,0,123,16,2,0,81,247,1,0,195,213,1,0,152,188,1,0,110,163,1,0,224,129,1,0,181,104,1,0,238,87,1,0,196,62,1,0,153,37,1,0,111,12,1,0,168,251,0,0,225,234,0,0,183,209,0,0,240,192,0,0,41,176,0,0,197,167,0,0,254,150,0,0,155,142,0,0,212,125,0,0,112,117,0,0,169,100,0,0,70,92,0,0,226,83,0,0,127,75,0,0,27,67,0,0,27,67,0,0,184,58,0,0,84,50,0,0,241,41,0,0,241,41,0,0,141,33,0,0,141,33,0,0,42,25,0,0,42,25,0,0,42,25,0,0,198,16,0,0,198,16,0,0,198,16,0,0,198,16,0,0,99,8,0,0,99,8,0,0,99,8,0,0,99,8,0,0,99,8,0,0,99,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,52,37,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,17,0,0,1,0,1,0,1,0,0,0,1,0,2,0,1,0,3,0,1,0,1,0,3,0,2,0,0,0,3,0,2,0,1,0,1,0,1,0,1,0,3,0,2,0,0,0,1,0,2,0,6,0,5,0,3,0,1,0,4,0,4,0,7,0,5,0,7,0,1,0,6,0,1,0,1,0,0,0,7,0,3,0,5,0,1,0,6,0,2,0,3,0,2,0,5,0,4,0,4,0,1,0,3,0,3,0,2,0,0,0,1,0,2,0,10,0,19,0,16,0,10,0,3,0,3,0,7,0,10,0,5,0,3,0,11,0,4,0,13,0,17,0,8,0,4,0,12,0,11,0,18,0,15,0,11,0,2,0,7,0,6,0,9,0,14,0,3,0,1,0,6,0,4,0,5,0,3,0,2,0,0,0,3,0,4,0,6,0,18,0,12,0,5,0,5,0,1,0,2,0,16,0,9,0,3,0,7,0,3,0,5,0,14,0,7,0,3,0,19,0,17,0,15,0,13,0,10,0,4,0,13,0,5,0,8,0,11,0,5,0,1,0,12,0,4,0,4,0,1,0,1,0,0,0,7,0,5,0,9,0,14,0,15,0,7,0,6,0,4,0,5,0,5,0,6,0,7,0,7,0,6,0,8,0,8,0,8,0,5,0,15,0,6,0,9,0,10,0,5,0,1,0,11,0,7,0,9,0,6,0,4,0,1,0,14,0,4,0,6,0,2,0,6,0,0,0,1,0,2,0,10,0,23,0,35,0,30,0,12,0,17,0,3,0,3,0,8,0,12,0,18,0,21,0,12,0,7,0,11,0,9,0,15,0,21,0,32,0,40,0,19,0,6,0,14,0,13,0,22,0,34,0,46,0,23,0,18,0,7,0,20,0,19,0,33,0,47,0,27,0,22,0,9,0,3,0,31,0,22,0,41,0,26,0,21,0,20,0,5,0,3,0,14,0,13,0,10,0,11,0,16,0,6,0,5,0,1,0,9,0,8,0,7,0,8,0,4,0,4,0,2,0,0,0,3,0,4,0,10,0,24,0,34,0,33,0,21,0,15,0,5,0,3,0,4,0,10,0,32,0,17,0,11,0,10,0,11,0,7,0,13,0,18,0,30,0,31,0,20,0,5,0,25,0,11,0,19,0,59,0,27,0,18,0,12,0,5,0,35,0,33,0,31,0,58,0,30,0,16,0,7,0,5,0,28,0,26,0,32,0,19,0,17,0,15,0,8,0,14,0,14,0,12,0,9,0,13,0,14,0,9,0,4,0,1,0,11,0,4,0,6,0,6,0,6,0,3,0,2,0,0,0,9,0,6,0,16,0,33,0,41,0,39,0,38,0,26,0,7,0,5,0,6,0,9,0,23,0,16,0,26,0,11,0,17,0,7,0,11,0,14,0,21,0,30,0,10,0,7,0,17,0,10,0,15,0,12,0,18,0,28,0,14,0,5,0,32,0,13,0,22,0,19,0,18,0,16,0,9,0,5,0,40,0,17,0,31,0,29,0,17,0,13,0,4,0,2,0,27,0,12,0,11,0,15,0,10,0,7,0,4,0,1,0,27,0,12,0,8,0,12,0,6,0,3,0,1,0,0,0,1,0,5,0,14,0,21,0,34,0,51,0,46,0,71,0,42,0,52,0,68,0,52,0,67,0,44,0,43,0,19,0,3,0,4,0,12,0,19,0,31,0,26,0,44,0,33,0,31,0,24,0,32,0,24,0,31,0,35,0,22,0,14,0,15,0,13,0,23,0,36,0,59,0,49,0,77,0,65,0,29,0,40,0,30,0,40,0,27,0,33,0,42,0,16,0,22,0,20,0,37,0,61,0,56,0,79,0,73,0,64,0,43,0,76,0,56,0,37,0,26,0,31,0,25,0,14,0,35,0,16,0,60,0,57,0,97,0,75,0,114,0,91,0,54,0,73,0,55,0,41,0,48,0,53,0,23,0,24,0,58,0,27,0,50,0,96,0,76,0,70,0,93,0,84,0,77,0,58,0,79,0,29,0,74,0,49,0,41,0,17,0,47,0,45,0,78,0,74,0,115,0,94,0,90,0,79,0,69,0,83,0,71,0,50,0,59,0,38,0,36,0,15,0,72,0,34,0,56,0,95,0,92,0,85,0,91,0,90,0,86,0,73,0,77,0,65,0,51,0,44,0,43,0,42,0,43,0,20,0,30,0,44,0,55,0,78,0,72,0,87,0,78,0,61,0,46,0,54,0,37,0,30,0,20,0,16,0,53,0,25,0,41,0,37,0,44,0,59,0,54,0,81,0,66,0,76,0,57,0,54,0,37,0,18,0,39,0,11,0,35,0,33,0,31,0,57,0,42,0,82,0,72,0,80,0,47,0,58,0,55,0,21,0,22,0,26,0,38,0,22,0,53,0,25,0,23,0,38,0,70,0,60,0,51,0,36,0,55,0,26,0,34,0,23,0,27,0,14,0,9,0,7,0,34,0,32,0,28,0,39,0,49,0,75,0,30,0,52,0,48,0,40,0,52,0,28,0,18,0,17,0,9,0,5,0,45,0,21,0,34,0,64,0,56,0,50,0,49,0,45,0,31,0,19,0,12,0,15,0,10,0,7,0,6,0,3,0,48,0,23,0,20,0,39,0,36,0,35,0,53,0,21,0,16,0,23,0,13,0,10,0,6,0,1,0,4,0,2,0,16,0,15,0,17,0,27,0,25,0,20,0,29,0,11,0,17,0,12,0,16,0,8,0,1,0,1,0,0,0,1,0,7,0,12,0,18,0,53,0,47,0,76,0,124,0,108,0,89,0,123,0,108,0,119,0,107,0,81,0,122,0,63,0,13,0,5,0,16,0,27,0,46,0,36,0,61,0,51,0,42,0,70,0,52,0,83,0,65,0,41,0,59,0,36,0,19,0,17,0,15,0,24,0,41,0,34,0,59,0,48,0,40,0,64,0,50,0,78,0,62,0,80,0,56,0,33,0,29,0,28,0,25,0,43,0,39,0,63,0,55,0,93,0,76,0,59,0,93,0,72,0,54,0,75,0,50,0,29,0,52,0,22,0,42,0,40,0,67,0,57,0,95,0,79,0,72,0,57,0,89,0,69,0,49,0,66,0,46,0,27,0,77,0,37,0,35,0,66,0,58,0,52,0,91,0,74,0,62,0,48,0,79,0,63,0,90,0,62,0,40,0,38,0,125,0,32,0,60,0,56,0,50,0,92,0,78,0,65,0,55,0,87,0,71,0,51,0,73,0,51,0,70,0,30,0,109,0,53,0,49,0,94,0,88,0,75,0,66,0,122,0,91,0,73,0,56,0,42,0,64,0,44,0,21,0,25,0,90,0,43,0,41,0,77,0,73,0,63,0,56,0,92,0,77,0,66,0,47,0,67,0,48,0,53,0,36,0,20,0,71,0,34,0,67,0,60,0,58,0,49,0,88,0,76,0,67,0,106,0,71,0,54,0,38,0,39,0,23,0,15,0,109,0,53,0,51,0,47,0,90,0,82,0,58,0,57,0,48,0,72,0,57,0,41,0,23,0,27,0,62,0,9,0,86,0,42,0,40,0,37,0,70,0,64,0,52,0,43,0,70,0,55,0,42,0,25,0,29,0,18,0,11,0,11,0,118,0,68,0,30,0,55,0,50,0,46,0,74,0,65,0,49,0,39,0,24,0,16,0,22,0,13,0,14,0,7,0,91,0,44,0,39,0,38,0,34,0,63,0,52,0,45,0,31,0,52,0,28,0,19,0,14,0,8,0,9,0,3,0,123,0,60,0,58,0,53,0,47,0,43,0,32,0,22,0,37,0,24,0,17,0,12,0,15,0,10,0,2,0,1,0,71,0,37,0,34,0,30,0,28,0,20,0,17,0,26,0,21,0,16,0,10,0,6,0,8,0,6,0,2,0,0,0,1,0,5,0,14,0,44,0,74,0,63,0,110,0,93,0,172,0,149,0,138,0,242,0,225,0,195,0,120,1,17,0,3,0,4,0,12,0,20,0,35,0,62,0,53,0,47,0,83,0,75,0,68,0,119,0,201,0,107,0,207,0,9,0,15,0,13,0,23,0,38,0,67,0,58,0,103,0,90,0,161,0,72,0,127,0,117,0,110,0,209,0,206,0,16,0,45,0,21,0,39,0,69,0,64,0,114,0,99,0,87,0,158,0,140,0,252,0,212,0,199,0,131,1,109,1,26,0,75,0,36,0,68,0,65,0,115,0,101,0,179,0,164,0,155,0,8,1,246,0,226,0,139,1,126,1,106,1,9,0,66,0,30,0,59,0,56,0,102,0,185,0,173,0,9,1,142,0,253,0,232,0,144,1,132,1,122,1,189,1,16,0,111,0,54,0,52,0,100,0,184,0,178,0,160,0,133,0,1,1,244,0,228,0,217,0,129,1,110,1,203,2,10,0,98,0,48,0,91,0,88,0,165,0,157,0,148,0,5,1,248,0,151,1,141,1,116,1,124,1,121,3,116,3,8,0,85,0,84,0,81,0,159,0,156,0,143,0,4,1,249,0,171,1,145,1,136,1,127,1,215,2,201,2,196,2,7,0,154,0,76,0,73,0,141,0,131,0,0,1,245,0,170,1,150,1,138,1,128,1,223,2,103,1,198,2,96,1,11,0,139,0,129,0,67,0,125,0,247,0,233,0,229,0,219,0,137,1,231,2,225,2,208,2,117,3,114,3,183,1,4,0,243,0,120,0,118,0,115,0,227,0,223,0,140,1,234,2,230,2,224,2,209,2,200,2,194,2,223,0,180,1,6,0,202,0,224,0,222,0,218,0,216,0,133,1,130,1,125,1,108,1,120,3,187,1,195,2,184,1,181,1,192,6,4,0,235,2,211,0,210,0,208,0,114,1,123,1,222,2,211,2,202,2,199,6,115,3,109,3,108,3,131,13,97,3,2,0,121,1,113,1,102,0,187,0,214,2,210,2,102,1,199,2,197,2,98,3,198,6,103,3,130,13,102,3,178,1,0,0,12,0,10,0,7,0,11,0,10,0,17,0,11,0,9,0,13,0,12,0,10,0,7,0,5,0,3,0,1,0,3,0,15,0,13,0,46,0,80,0,146,0,6,1,248,0,178,1,170,1,157,2,141,2,137,2,109,2,5,2,8,4,88,0,14,0,12,0,21,0,38,0,71,0,130,0,122,0,216,0,209,0,198,0,71,1,89,1,63,1,41,1,23,1,42,0,47,0,22,0,41,0,74,0,68,0,128,0,120,0,221,0,207,0,194,0,182,0,84,1,59,1,39,1,29,2,18,0,81,0,39,0,75,0,70,0,134,0,125,0,116,0,220,0,204,0,190,0,178,0,69,1,55,1,37,1,15,1,16,0,147,0,72,0,69,0,135,0,127,0,118,0,112,0,210,0,200,0,188,0,96,1,67,1,50,1,29,1,28,2,14,0,7,1,66,0,129,0,126,0,119,0,114,0,214,0,202,0,192,0,180,0,85,1,61,1,45,1,25,1,6,1,12,0,249,0,123,0,121,0,117,0,113,0,215,0,206,0,195,0,185,0,91,1,74,1,52,1,35,1,16,1,8,2,10,0,179,1,115,0,111,0,109,0,211,0,203,0,196,0,187,0,97,1,76,1,57,1,42,1,27,1,19,2,125,1,17,0,171,1,212,0,208,0,205,0,201,0,193,0,186,0,177,0,169,0,64,1,47,1,30,1,12,1,2,2,121,1,16,0,79,1,199,0,197,0,191,0,189,0,181,0,174,0,77,1,65,1,49,1,33,1,19,1,9,2,123,1,115,1,11,0,156,2,184,0,183,0,179,0,175,0,88,1,75,1,58,1,48,1,34,1,21,1,18,2,127,1,117,1,110,1,10,0,140,2,90,1,171,0,168,0,164,0,62,1,53,1,43,1,31,1,20,1,7,1,1,2,119,1,112,1,106,1,6,0,136,2,66,1,60,1,56,1,51,1,46,1,36,1,28,1,13,1,5,1,0,2,120,1,114,1,108,1,103,1,4,0,108,2,44,1,40,1,38,1,32,1,26,1,17,1,10,1,3,2,124,1,118,1,113,1,109,1,105,1,101,1,2,0,9,4,24,1,22,1,18,1,11,1,8,1,3,1,126,1,122,1,116,1,111,1,107,1,104,1,102,1,100,1,0,0,43,0,20,0,19,0,17,0,15,0,13,0,11,0,9,0,7,0,6,0,4,0,7,0,5,0,3,0,1,0,3,0,1,0,5,0,4,0,5,0,6,0,5,0,4,0,4,0,7,0,3,0,6,0,0,0,7,0,2,0,3,0,1,0,15,0,14,0,13,0,12,0,11,0,10,0,9,0,8,0,7,0,6,0,5,0,4,0,3,0,2,0,1,0,0,0,1,3,2,3,1,3,6,3,3,5,5,5,6,2,2,6,3,2,5,5,5,6,1,3,6,7,3,3,6,7,6,6,7,8,7,6,7,8,3,3,5,7,3,2,4,5,4,4,5,6,6,5,6,7,1,3,6,8,8,9,3,4,6,7,7,8,6,5,7,8,8,9,7,7,8,9,9,9,7,7,8,9,9,10,8,8,9,10,10,10,2,3,6,8,8,9,3,2,4,8,8,8,6,4,6,8,8,9,8,8,8,9,9,10,8,7,8,9,10,10,9,8,9,9,11,11,3,3,5,6,8,9,3,3,4,5,6,8,4,4,5,6,7,8,6,5,6,7,7,8,7,6,7,7,8,9,8,7,8,8,9,9,1,3,6,8,9,9,9,10,3,4,6,7,8,9,8,8,6,6,7,8,9,10,9,9,7,7,8,9,10,10,9,10,8,8,9,10,10,10,10,10,9,9,10,10,11,11,10,11,8,8,9,10,10,10,11,11,9,8,9,10,10,11,11,11,2,3,5,7,8,9,8,9,3,3,4,6,8,8,7,8,5,5,6,7,8,9,8,8,7,6,7,9,8,10,8,9,8,8,8,9,9,10,9,10,8,8,9,10,10,11,10,11,8,7,7,8,9,10,10,10,8,7,8,9,10,10,10,10,4,3,5,7,8,9,9,9,3,3,4,5,7,7,8,8,5,4,5,6,7,8,7,8,6,5,6,6,7,8,8,8,7,6,7,7,8,8,8,9,8,7,8,8,8,9,8,9,8,7,7,8,8,9,9,10,9,8,8,9,9,9,9,10,1,4,6,7,8,9,9,10,9,10,11,11,12,12,13,13,3,4,6,7,8,8,9,9,9,9,10,10,11,12,12,12,6,6,7,8,9,9,10,10,9,10,10,11,11,12,13,13,7,7,8,9,9,10,10,10,10,11,11,11,11,12,13,13,8,7,9,9,10,10,11,11,10,11,11,12,12,13,13,14,9,8,9,10,10,10,11,11,11,11,12,11,13,13,14,14,9,9,10,10,11,11,11,11,11,12,12,12,13,13,14,14,10,9,10,11,11,11,12,12,12,12,13,13,13,14,16,16,9,8,9,10,10,11,11,12,12,12,12,13,13,14,15,15,10,9,10,10,11,11,11,13,12,13,13,14,14,14,16,15,10,10,10,11,11,12,12,13,12,13,14,13,14,15,16,17,11,10,10,11,12,12,12,12,13,13,13,14,15,15,15,16,11,11,11,12,12,13,12,13,14,14,15,15,15,16,16,16,12,11,12,13,13,13,14,14,14,14,14,15,16,15,16,16,13,12,12,13,13,13,15,14,14,17,15,15,15,17,16,16,12,12,13,14,14,14,15,14,15,15,16,16,19,18,19,16,3,4,5,7,7,8,9,9,9,10,10,11,11,11,12,13,4,3,5,6,7,7,8,8,8,9,9,10,10,10,11,11,5,5,5,6,7,7,8,8,8,9,9,10,10,11,11,11,6,6,6,7,7,8,8,9,9,9,10,10,10,11,11,11,7,6,7,7,8,8,9,9,9,9,10,10,10,11,11,11,8,7,7,8,8,8,9,9,9,9,10,10,11,11,11,12,9,7,8,8,8,9,9,9,9,10,10,10,11,11,12,12,9,8,8,9,9,9,9,10,10,10,10,10,11,11,11,12,9,8,8,9,9,9,9,10,10,10,10,11,11,12,12,12,9,8,9,9,9,9,10,10,10,11,11,11,11,12,12,12,10,9,9,9,10,10,10,10,10,11,11,11,11,12,13,12,10,9,9,9,10,10,10,10,11,11,11,11,12,12,12,13,11,10,9,10,10,10,11,11,11,11,11,11,12,12,13,13,11,10,10,10,10,11,11,11,11,12,12,12,12,12,13,13,12,11,11,11,11,11,11,11,12,12,12,12,13,13,12,13,12,11,11,11,11,11,11,12,12,12,12,12,13,13,13,13,1,4,6,8,9,9,10,10,11,11,11,12,12,12,13,9,3,4,6,7,8,9,9,9,10,10,10,11,12,11,12,8,6,6,7,8,9,9,10,10,11,10,11,11,11,12,12,9,8,7,8,9,9,10,10,10,11,11,12,12,12,13,13,10,9,8,9,9,10,10,11,11,11,12,12,12,13,13,13,9,9,8,9,9,10,11,11,12,11,12,12,13,13,13,14,10,10,9,9,10,11,11,11,11,12,12,12,12,13,13,14,10,10,9,10,10,11,11,11,12,12,13,13,13,13,15,15,10,10,10,10,11,11,11,12,12,13,13,13,13,14,14,14,10,11,10,10,11,11,12,12,13,13,13,13,14,13,14,13,11,11,11,10,11,12,12,12,12,13,14,14,14,15,15,14,10,12,11,11,11,12,12,13,14,14,14,14,14,14,13,14,11,12,12,12,12,12,13,13,13,13,15,14,14,14,14,16,11,14,12,12,12,13,13,14,14,14,16,15,15,15,17,15,11,13,13,11,12,14,14,13,14,14,15,16,15,17,15,14,11,9,8,8,9,9,10,10,10,11,11,11,11,11,11,11,8,4,4,6,7,8,9,9,10,10,11,11,11,11,11,12,9,4,4,5,6,7,8,8,9,9,9,10,10,10,10,10,8,6,5,6,7,7,8,8,9,9,9,9,10,10,10,11,7,7,6,7,7,8,8,8,9,9,9,9,10,10,10,10,7,8,7,7,8,8,8,8,9,9,9,10,10,10,10,11,7,9,7,8,8,8,8,9,9,9,9,10,10,10,10,10,7,9,8,8,8,8,9,9,9,9,10,10,10,10,10,11,7,10,8,8,8,9,9,9,9,10,10,10,10,10,11,11,8,10,9,9,9,9,9,9,9,9,10,10,10,10,11,11,8,10,9,9,9,9,9,9,10,10,10,10,10,11,11,11,8,11,9,9,9,9,10,10,10,10,10,10,11,11,11,11,8,11,10,9,9,9,10,10,10,10,10,10,11,11,11,11,8,11,10,10,10,10,10,10,10,10,10,11,11,11,11,11,8,11,10,10,10,10,10,10,10,11,11,11,11,11,11,11,8,12,10,10,10,10,10,10,11,11,11,11,11,11,11,11,8,8,7,7,7,7,7,7,7,7,7,7,8,8,8,8,4,1,4,4,5,4,6,5,6,4,5,5,6,5,6,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;Module["_i64Add"]=_i64Add;function _llvm_exp2_f32(x){return Math.pow(2,x)}function _llvm_exp2_f64(){return _llvm_exp2_f32.apply(null,arguments)}Module["_memset"]=_memset;Module["_bitshift64Lshr"]=_bitshift64Lshr;function _abort(){Module["abort"]()}function ___lock(){}function ___unlock(){}var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___muldsi3"]=___muldsi3;Module["___muldi3"]=___muldi3;function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}Module["_sbrk"]=_sbrk;function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;Module["_llvm_bswap_i32"]=_llvm_bswap_i32;function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffer){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module["print"]:Module["printErr"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j<len;j++){___syscall146.printChar(stream,HEAPU8[ptr+j])}ret+=len}return ret}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}__ATEXIT__.push((function(){var fflush=Module["_fflush"];if(fflush)fflush(0);var printChar=___syscall146.printChar;if(!printChar)return;var buffers=___syscall146.buffers;if(buffers[1].length)printChar(1,10);if(buffers[2].length)printChar(2,10)}));DYNAMICTOP_PTR=allocate(1,"i32",ALLOC_STATIC);STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=Runtime.alignMemory(STACK_MAX);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;staticSealed=true;function invoke_ii(index,a1){try{return Module["dynCall_ii"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_iiii(index,a1,a2,a3){try{return Module["dynCall_iiii"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}Module.asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,"Infinity":Infinity};Module.asmLibraryArg={"abort":abort,"assert":assert,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"invoke_ii":invoke_ii,"invoke_iiii":invoke_iiii,"_llvm_exp2_f64":_llvm_exp2_f64,"___lock":___lock,"_llvm_exp2_f32":_llvm_exp2_f32,"_abort":_abort,"___setErrNo":___setErrNo,"___syscall6":___syscall6,"___syscall140":___syscall140,"_emscripten_memcpy_big":_emscripten_memcpy_big,"___syscall54":___syscall54,"___unlock":___unlock,"___syscall146":___syscall146,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX};// EMSCRIPTEN_START_ASM
+-var asm=(function(global,env,buffer) {
+-"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.DYNAMICTOP_PTR|0;var j=env.tempDoublePtr|0;var k=env.ABORT|0;var l=env.STACKTOP|0;var m=env.STACK_MAX|0;var n=0;var o=0;var p=0;var q=0;var r=global.NaN,s=global.Infinity;var t=0,u=0,v=0,w=0,x=0.0;var y=0;var z=global.Math.floor;var A=global.Math.abs;var B=global.Math.sqrt;var C=global.Math.pow;var D=global.Math.cos;var E=global.Math.sin;var F=global.Math.tan;var G=global.Math.acos;var H=global.Math.asin;var I=global.Math.atan;var J=global.Math.atan2;var K=global.Math.exp;var L=global.Math.log;var M=global.Math.ceil;var N=global.Math.imul;var O=global.Math.min;var P=global.Math.max;var Q=global.Math.clz32;var R=env.abort;var S=env.assert;var T=env.enlargeMemory;var U=env.getTotalMemory;var V=env.abortOnCannotGrowMemory;var W=env.invoke_ii;var X=env.invoke_iiii;var Y=env._llvm_exp2_f64;var Z=env.___lock;var _=env._llvm_exp2_f32;var $=env._abort;var aa=env.___setErrNo;var ba=env.___syscall6;var ca=env.___syscall140;var da=env._emscripten_memcpy_big;var ea=env.___syscall54;var fa=env.___unlock;var ga=env.___syscall146;var ha=0.0;
+-// EMSCRIPTEN_START_FUNCS
+-function ka(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function la(){return l|0}function ma(a){a=a|0;l=a}function na(a,b){a=a|0;b=b|0;l=a;m=b}function oa(a,b){a=a|0;b=b|0;if(!n){n=a;o=b}}function pa(a){a=a|0;y=a}function qa(){return y|0}function ra(a,b){a=a|0;b=b|0;c[a>>2]=gb(b)|0;c[a+4>>2]=b;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=32;return}function sa(a){a=a|0;a=c[a>>2]|0;if(!a)return;hb(a);return}function ta(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=a+16|0;i=c[k>>2]|0;if(i>>>0>d>>>0){d=i-d|0;c[k>>2]=d;k=a+12|0;c[k>>2]=c[k>>2]|b<<d;return}j=a+8|0;e=c[j>>2]|0;g=a+4|0;h=c[g>>2]|0;f=c[a>>2]|0;if((e+4|0)>>>0<h>>>0)g=i;else{f=jb(f,((h|0)/2|0)+h|0)|0;c[a>>2]=f;e=c[g>>2]|0;c[g>>2]=((e|0)/2|0)+e;g=c[k>>2]|0;e=c[j>>2]|0}i=d-g|0;d=a+12|0;c[f+e>>2]=ub(b>>>i|c[d>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+4;j=32-i|0;c[k>>2]=j;c[d>>2]=(i|0)==0?0:b<<j;return}function ua(a){a=a|0;return (c[a+8>>2]<<3)+32-(c[a+16>>2]|0)|0}function va(a){a=a|0;var b=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;C=l;l=l+416|0;B=C;if((c[a>>2]|0)>0){j=a+16|0;g=0;b=c[j>>2]|0;do{if((b|0)>0){f=0;do{b=0;do{if((c[a+25264+(g*4608|0)+(f*2304|0)+(b<<2)>>2]|0)<0?(h=a+2224+(g*4608|0)+(f*2304|0)+(b<<2)|0,i=c[h>>2]|0,(i|0)>0):0)c[h>>2]=0-i;b=b+1|0}while((b|0)!=576);f=f+1|0;b=c[j>>2]|0}while((f|0)<(b|0))}g=g+1|0}while((g|0)<(c[a>>2]|0))}j=a+116|0;tb(B|0,j|0,408)|0;z=a+96|0;ta(z,2047,11);i=a+8|0;ta(z,c[i>>2]|0,2);ta(z,c[a+12>>2]|0,2);ta(z,(c[a+76>>2]|0)==0&1,1);ta(z,c[a+68>>2]|0,4);A=a+72|0;ta(z,(c[A>>2]|0)%3|0,2);ta(z,c[a+32>>2]|0,1);ta(z,c[a+80>>2]|0,1);ta(z,c[a+20>>2]|0,2);ta(z,c[a+84>>2]|0,2);ta(z,c[a+88>>2]|0,1);ta(z,c[a+92>>2]|0,1);ta(z,c[a+28>>2]|0,2);do if((c[i>>2]|0)==3){ta(z,0,9);b=c[B>>2]|0;if((c[a>>2]|0)==2){ta(z,b,3);break}else{ta(z,b,5);break}}else{ta(z,0,8);b=c[B>>2]|0;if((c[a>>2]|0)==2){ta(z,b,2);break}else{ta(z,b,1);break}}while(0);if((c[i>>2]|0)==3?(c[a>>2]|0)>0:0){b=0;do{ta(z,c[B+8+(b<<4)>>2]|0,1);ta(z,c[B+8+(b<<4)+4>>2]|0,1);ta(z,c[B+8+(b<<4)+8>>2]|0,1);ta(z,c[B+8+(b<<4)+12>>2]|0,1);b=b+1|0}while((b|0)<(c[a>>2]|0))}y=a+16|0;b=c[y>>2]|0;if((b|0)>0){h=0;g=c[a>>2]|0;do{if((g|0)>0){f=0;do{ta(z,c[B+40+(h*184|0)+(f*92|0)>>2]|0,12);ta(z,c[B+40+(h*184|0)+(f*92|0)+4>>2]|0,9);ta(z,c[B+40+(h*184|0)+(f*92|0)+12>>2]|0,8);b=c[B+40+(h*184|0)+(f*92|0)+16>>2]|0;if((c[i>>2]|0)==3)ta(z,b,4);else ta(z,b,9);ta(z,0,1);ta(z,c[B+40+(h*184|0)+(f*92|0)+20>>2]|0,5);ta(z,c[B+40+(h*184|0)+(f*92|0)+24>>2]|0,5);ta(z,c[B+40+(h*184|0)+(f*92|0)+28>>2]|0,5);ta(z,c[B+40+(h*184|0)+(f*92|0)+32>>2]|0,4);ta(z,c[B+40+(h*184|0)+(f*92|0)+36>>2]|0,3);if((c[i>>2]|0)==3)ta(z,c[B+40+(h*184|0)+(f*92|0)+40>>2]|0,1);ta(z,c[B+40+(h*184|0)+(f*92|0)+44>>2]|0,1);ta(z,c[B+40+(h*184|0)+(f*92|0)+48>>2]|0,1);f=f+1|0;g=c[a>>2]|0}while((f|0)<(g|0));b=c[y>>2]|0}h=h+1|0}while((h|0)<(b|0))}tb(B|0,j|0,408)|0;if((b|0)<=0){l=C;return}x=0;f=c[a>>2]|0;do{if((f|0)>0){w=(x|0)==0;v=0;do{f=c[B+40+(x*184|0)+(v*92|0)+16>>2]|0;b=c[1044+(f<<2)>>2]|0;f=c[1108+(f<<2)>>2]|0;if(!w?(c[B+8+(v<<4)>>2]|0)!=0:0)t=39;else{ta(z,c[a+1208+(x*176|0)+(v*88|0)>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+4>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+8>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+12>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+16>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+20>>2]|0,b);if(w)t=40;else t=39}if((t|0)==39)if(!(c[B+8+(v<<4)+4>>2]|0))t=40;else t=41;if((t|0)==40){ta(z,c[a+1208+(x*176|0)+(v*88|0)+24>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+28>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+32>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+36>>2]|0,b);ta(z,c[a+1208+(x*176|0)+(v*88|0)+40>>2]|0,b);if(w)t=42;else t=41}if((t|0)==41)if(!(c[B+8+(v<<4)+8>>2]|0))t=42;else t=43;if((t|0)==42){ta(z,c[a+1208+(x*176|0)+(v*88|0)+44>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+48>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+52>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+56>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+60>>2]|0,f);if(w)t=44;else t=43}if((t|0)==43?(t=0,(c[B+8+(v<<4)+12>>2]|0)==0):0)t=44;if((t|0)==44){t=0;ta(z,c[a+1208+(x*176|0)+(v*88|0)+64>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+68>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+72>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+76>>2]|0,f);ta(z,c[a+1208+(x*176|0)+(v*88|0)+80>>2]|0,f)}q=c[A>>2]|0;u=ua(z)|0;b=c[B+40+(x*184|0)+(v*92|0)+4>>2]<<1;s=c[B+40+(x*184|0)+(v*92|0)+32>>2]|0;r=c[1464+(q*92|0)+(s+1<<2)>>2]|0;s=c[1464+(q*92|0)+(s+2+(c[B+40+(x*184|0)+(v*92|0)+36>>2]|0)<<2)>>2]|0;if((b|0)>0){q=0;do{g=c[B+40+(x*184|0)+(v*92|0)+20+(((q|0)>=(r|0)&1)+((q|0)>=(s|0)&1)<<2)>>2]|0;do if(g|0){h=c[a+2224+(v*4608|0)+(x*2304|0)+(q<<2)>>2]|0;k=c[a+2224+(v*4608|0)+(x*2304|0)+((q|1)<<2)>>2]|0;i=(h|0)>0;h=i?h:0-h|0;i=(i^1)&1;o=(k|0)>0;k=o?k:0-k|0;o=(o^1)&1;f=c[8+(g*24|0)+4>>2]|0;if((g|0)<=15){p=(N(f,h)|0)+k|0;j=e[(c[8+(g*24|0)+16>>2]|0)+(p<<1)>>1]|0;n=(h|0)==0;j=n?j:j<<1|i;m=(k|0)==0;ta(z,m?j:j<<1|o,((m^1)&1)+((n^1)&1)+(d[(c[8+(g*24|0)+20>>2]|0)+p>>0]|0)|0);break}m=c[8+(g*24|0)+8>>2]|0;E=(h|0)>14;F=E?15:h;D=(k|0)>14;j=D?15:k;n=(N(F,f)|0)+j|0;p=e[(c[8+(g*24|0)+16>>2]|0)+(n<<1)>>1]|0;n=d[(c[8+(g*24|0)+20>>2]|0)+n>>0]|0;f=E?h+-15|0:0;g=(F|0)==0;f=g?f:f<<1|i;g=(E?m:0)+((g^1)&1)|0;if(!D){if(j)t=51}else{g=g+m|0;f=f<<m|k+2147483633;t=51}if((t|0)==51){t=0;g=g+1|0;f=f<<1|o}ta(z,p,n);ta(z,f,g)}while(0);q=q+2|0}while((q|0)<(b|0))}f=(c[B+40+(x*184|0)+(v*92|0)+48>>2]|0)+32|0;h=(c[B+40+(x*184|0)+(v*92|0)+8>>2]<<2)+b|0;if((b|0)<(h|0)){g=c[8+(f*24|0)+16>>2]|0;f=c[8+(f*24|0)+20>>2]|0;do{E=c[a+2224+(v*4608|0)+(x*2304|0)+(b<<2)>>2]|0;D=c[a+2224+(v*4608|0)+(x*2304|0)+((b|1)<<2)>>2]|0;t=c[a+2224+(v*4608|0)+(x*2304|0)+(b+2<<2)>>2]|0;F=c[a+2224+(v*4608|0)+(x*2304|0)+(b+3<<2)>>2]|0;p=(E|0)>0;E=p?E:0-E|0;q=(D|0)>0;D=q?D:0-D|0;r=(t|0)>0;t=r?t:0-t|0;s=(F|0)>0;F=s?F:0-F|0;o=(D<<1)+E+(t<<2)+(F<<3)|0;ta(z,e[g+(o<<1)>>1]|0,d[f+o>>0]|0);E=(E|0)==0;p=((p|E)^1)&1;D=(D|0)==0;q=D?p:p<<1|(q^1)&1;t=(t|0)==0;r=t?q:q<<1|(r^1)&1;F=(F|0)==0;ta(z,F?r:r<<1|(s^1)&1,((t^1)&1)+(D?(E^1)&1:E?1:2)+((F^1)&1)|0);b=b+4|0}while((b|0)<(h|0))}b=ua(z)|0;b=(c[B+40+(x*184|0)+(v*92|0)>>2]|0)-(c[B+40+(x*184|0)+(v*92|0)+52>>2]|0)+(u-b)|0;if(b|0){f=(b|0)%32|0;if((b+31|0)>>>0>=63){b=(b|0)/32|0;do{b=b+-1|0;ta(z,-1,32)}while((b|0)!=0)}if(f|0)ta(z,(1<<f)+-1|0,f)}v=v+1|0;f=c[a>>2]|0}while((v|0)<(f|0));b=c[y>>2]|0}x=x+1|0}while((x|0)<(b|0));l=C;return}function wa(a,b,e,f,g,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,O=0,P=0;J=e+72|0;if((b|0)<0)c[J>>2]=(c[J>>2]|0)+-1;v=i+39100|0;w=i+34488|0;x=e+8|0;z=e+4|0;A=e+48|0;C=e+32|0;D=e+36|0;E=e+20|0;F=e+24|0;G=e+28|0;H=e+60|0;I=e+64|0;r=e+68|0;s=i+72|0;t=c[199]|0;u=c[205]|0;do{while(1){f=c[J>>2]|0;c[J>>2]=f+1;f=f+128|0;l=c[i+40480+(f<<2)>>2]|0;q=c[v>>2]|0;m=((l|0)<0)<<31>>31;q=rb(q|0,((q|0)<0)<<31>>31|0,l|0,m|0)|0;nb(q|0,y|0,-2147483648,0)|0;if((y|0)>165140)continue;k=i+39456+(f<<3)|0;j=c[w>>2]|0;g=0;e=0;do{f=c[j+(e<<2)>>2]|0;f=(f|0)>-1?f:0-f|0;f=rb(f|0,((f|0)<0)<<31>>31|0,l|0,m|0)|0;nb(f|0,y|0,-2147483648,0)|0;f=y;if((f|0)<1e4)f=c[i+40992+(f<<2)>>2]|0;else{K=+h[k>>3]*+(c[i+36796+(e<<2)>>2]|0)*4.656612875e-10;f=~~+B(+(+B(+K)*K))}c[a+(e<<2)>>2]=f;g=(g|0)<(f|0)?f:g;e=e+1|0}while((e|0)!=576);if((g|0)<=8192){g=576;break}}while(1){if((g|0)<=1){n=13;break}if(c[a+(g+-1<<2)>>2]|0){n=16;break}f=g+-2|0;if(!(c[a+(f<<2)>>2]|0))g=f;else{n=16;break}}do if((n|0)==13){c[x>>2]=0;n=23}else if((n|0)==16){c[x>>2]=0;if((g|0)>3){j=0;while(1){if((c[a+(g+-1<<2)>>2]|0)>=2){n=24;break}if((c[a+(g+-2<<2)>>2]|0)>=2){n=24;break}if((c[a+(g+-3<<2)>>2]|0)>=2){n=24;break}f=g+-4|0;e=j+1|0;if((c[a+(f<<2)>>2]|0)>=2){n=24;break}c[x>>2]=e;if((f|0)>3){g=f;j=e}else{n=18;break}}if((n|0)==18){n=0;q=f>>1;c[z>>2]=q;g=f;f=q}else if((n|0)==24){n=0;f=g>>>1;c[z>>2]=f;if(!j){k=0;j=0;break}else e=j}j=0;l=g;m=0;k=0;while(1){o=c[a+(l<<2)>>2]|0;L=c[a+((l|1)<<2)>>2]|0;M=c[a+(l+2<<2)>>2]|0;p=c[a+(l+3<<2)>>2]|0;q=(L<<1)+o+(M<<2)+(p<<3)|0;o=(o|0)!=0;p=((M|0)!=0&1)+((L|0)==0?o&1:o?2:1)+((p|0)!=0&1)|0;j=(d[t+q>>0]|0)+j+p|0;k=p+k+(d[u+q>>0]|0)|0;m=m+1|0;if((m|0)==(e|0))break;else l=l+4|0}}else n=23}while(0);if((n|0)==23){f=g>>1;c[z>>2]=f;k=0;j=0}M=(j|0)<(k|0);q=M?j:k;c[A>>2]=(M^1)&1;if(!f){c[C>>2]=0;c[D>>2]=0;j=c[H>>2]|0}else{j=c[s>>2]|0;e=0;while(1)if((c[1464+(j*92|0)+(e<<2)>>2]|0)<(g|0))e=e+1|0;else break;f=c[824+(e<<3)>>2]|0;while(1){k=1464+(j*92|0)+(f+1<<2)|0;l=c[k>>2]|0;if((f|0)!=0&(l|0)>(g|0))f=f+-1|0;else break}c[C>>2]=f;c[H>>2]=l;f=c[824+(e<<3)+4>>2]|0;while(1){e=c[k+(f+1<<2)>>2]|0;if((f|0)!=0&(e|0)>(g|0))f=f+-1|0;else break}c[D>>2]=f;c[I>>2]=e;c[r>>2]=g;j=l}c[E>>2]=0;c[F>>2]=0;c[G>>2]=0;if(!j)k=0;else{k=xa(a,0,j)|0;c[E>>2]=k}e=c[I>>2]|0;n=e>>>0>j>>>0;if(n){o=xa(a,j,e)|0;c[F>>2]=o}else o=0;if(g>>>0>e>>>0){p=xa(a,e,g)|0;c[G>>2]=p}else p=0;do if(k){m=c[8+(k*24|0)+4>>2]|0;l=c[8+(k*24|0)+8>>2]|0;f=(j|0)!=0;if(k>>>0>15){if(!f){f=0;break}k=c[8+(k*24|0)+20>>2]|0;f=0;g=0;do{L=c[a+(g<<2)>>2]|0;M=c[a+((g|1)<<2)>>2]|0;P=(L|0)>14;L=P?15:L;O=(M|0)>14;M=O?15:M;f=(P?l:0)+f+(O?l:0)+(d[k+((N(L,m)|0)+M)>>0]|0)+((L|0)!=0&1)+((M|0)!=0&1)|0;g=g+2|0}while(g>>>0<j>>>0)}else{if(!f){f=0;break}k=c[8+(k*24|0)+20>>2]|0;g=0;f=0;do{O=c[a+(g<<2)>>2]|0;P=c[a+((g|1)<<2)>>2]|0;f=((O|0)!=0&1)+f+((P|0)!=0&1)+(d[k+((N(O,m)|0)+P)>>0]|0)|0;g=g+2|0}while(g>>>0<j>>>0)}}else f=0;while(0);if(o){m=c[8+(o*24|0)+4>>2]|0;l=c[8+(o*24|0)+8>>2]|0;if(o>>>0>15)if(n){k=c[8+(o*24|0)+20>>2]|0;g=0;do{O=c[a+(j<<2)>>2]|0;P=c[a+(j+1<<2)>>2]|0;L=(O|0)>14;O=L?15:O;M=(P|0)>14;P=M?15:P;g=(L?l:0)+g+(M?l:0)+(d[k+((N(O,m)|0)+P)>>0]|0)+((O|0)!=0&1)+((P|0)!=0&1)|0;j=j+2|0}while(j>>>0<e>>>0)}else g=0;else if(n){k=c[8+(o*24|0)+20>>2]|0;g=0;do{O=c[a+(j<<2)>>2]|0;P=c[a+(j+1<<2)>>2]|0;g=((O|0)!=0&1)+g+((P|0)!=0&1)+(d[k+((N(O,m)|0)+P)>>0]|0)|0;j=j+2|0}while(j>>>0<e>>>0)}else g=0;f=g+f|0}if(p){l=c[r>>2]|0;m=c[8+(p*24|0)+4>>2]|0;k=c[8+(p*24|0)+8>>2]|0;g=e>>>0<l>>>0;if(p>>>0>15)if(g){j=c[8+(p*24|0)+20>>2]|0;g=0;do{O=c[a+(e<<2)>>2]|0;P=c[a+(e+1<<2)>>2]|0;L=(O|0)>14;O=L?15:O;M=(P|0)>14;P=M?15:P;g=(L?k:0)+g+(M?k:0)+(d[j+((N(O,m)|0)+P)>>0]|0)+((O|0)!=0&1)+((P|0)!=0&1)|0;e=e+2|0}while(e>>>0<l>>>0)}else g=0;else if(g){j=c[8+(p*24|0)+20>>2]|0;g=0;do{O=c[a+(e<<2)>>2]|0;P=c[a+(e+1<<2)>>2]|0;g=((O|0)!=0&1)+g+((P|0)!=0&1)+(d[j+((N(O,m)|0)+P)>>0]|0)|0;e=e+2|0}while(e>>>0<l>>>0)}else g=0;f=g+f|0}f=f+q|0}while((f|0)>(b|0));return f|0}function xa(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(b>>>0<e>>>0){f=b;g=0}else{e=0;return e|0}do{m=c[a+(f<<2)>>2]|0;g=(g|0)<(m|0)?m:g;f=f+1|0}while((f|0)!=(e|0));if(!g){e=0;return e|0}if((g|0)>=15){f=g+-15|0;if((c[95]|0)>>>0<f>>>0)if((c[101]|0)>>>0<f>>>0)if((c[107]|0)>>>0<f>>>0)if((c[113]|0)>>>0<f>>>0)if((c[119]|0)>>>0<f>>>0)if((c[125]|0)>>>0<f>>>0)if((c[131]|0)>>>0<f>>>0)if((c[137]|0)>>>0<f>>>0)m=(c[143]|0)>>>0<f>>>0?0:23;else m=22;else m=21;else m=20;else m=19;else m=18;else m=17;else m=16;else m=15;if((c[149]|0)>>>0<f>>>0)if((c[155]|0)>>>0<f>>>0)if((c[161]|0)>>>0<f>>>0)if((c[167]|0)>>>0<f>>>0)if((c[173]|0)>>>0<f>>>0)if((c[179]|0)>>>0<f>>>0)if((c[185]|0)>>>0<f>>>0)l=(c[191]|0)>>>0<f>>>0?0:31;else l=30;else l=29;else l=28;else l=27;else l=26;else l=25;else l=24;if(m){i=c[8+(m*24|0)+4>>2]|0;h=c[8+(m*24|0)+8>>2]|0;j=c[8+(m*24|0)+20>>2]|0;if(m>>>0>15){f=0;g=b;do{n=c[a+(g<<2)>>2]|0;k=c[a+(g+1<<2)>>2]|0;p=(n|0)>14;n=p?15:n;o=(k|0)>14;k=o?15:k;f=(p?h:0)+f+(o?h:0)+(d[j+((N(n,i)|0)+k)>>0]|0)+((n|0)!=0&1)+((k|0)!=0&1)|0;g=g+2|0}while(g>>>0<e>>>0);k=f}else{g=b;f=0;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;f=((o|0)!=0&1)+f+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;g=g+2|0}while(g>>>0<e>>>0);k=f}}else k=0;if(!l){p=0;p=(p|0)<(k|0);p=p?l:m;return p|0}i=c[8+(l*24|0)+4>>2]|0;h=c[8+(l*24|0)+8>>2]|0;j=c[8+(l*24|0)+20>>2]|0;if(l>>>0>15){f=0;g=b;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;b=(o|0)>14;o=b?15:o;n=(p|0)>14;p=n?15:p;f=(b?h:0)+f+(n?h:0)+(d[j+((N(o,i)|0)+p)>>0]|0)+((o|0)!=0&1)+((p|0)!=0&1)|0;g=g+2|0}while(g>>>0<e>>>0);p=(f|0)<(k|0);p=p?l:m;return p|0}else{g=b;f=0;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;f=((o|0)!=0&1)+f+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;g=g+2|0}while(g>>>0<e>>>0);p=(f|0)<(k|0);p=p?l:m;return p|0}}else k=14;while(1){l=k+-1|0;if(!k){f=0;h=44;break}if((c[8+(l*24|0)>>2]|0)>>>0>g>>>0)break;else k=l}if((h|0)==44)return f|0;if(!l){p=0;return p|0}i=c[8+(l*24|0)+4>>2]|0;h=c[8+(l*24|0)+8>>2]|0;j=c[8+(l*24|0)+20>>2]|0;if(l>>>0>15){f=0;g=b;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;m=(o|0)>14;o=m?15:o;n=(p|0)>14;p=n?15:p;f=(m?h:0)+f+(n?h:0)+(d[j+((N(o,i)|0)+p)>>0]|0)+((o|0)!=0&1)+((p|0)!=0&1)|0;g=g+2|0}while(g>>>0<e>>>0);j=f}else{g=b;f=0;do{o=c[a+(g<<2)>>2]|0;p=c[a+(g+1<<2)>>2]|0;f=((o|0)!=0&1)+f+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;g=g+2|0}while(g>>>0<e>>>0);j=f}switch(k|0){case 3:{h=c[21]|0;i=c[25]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[i+((N(o,h)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(j|0)?l:3;return p|0}case 6:{h=c[39]|0;i=c[43]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[i+((N(o,h)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(j|0)?l:6;return p|0}case 8:{g=c[51]|0;h=c[55]|0;f=b;i=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;i=((o|0)!=0&1)+i+((p|0)!=0&1)+(d[h+((N(o,g)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);h=(i|0)>(j|0);k=h?l:8;h=h?j:i;i=c[57]|0;j=c[61]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);return ((g|0)>(h|0)?k:9)|0}case 11:{g=c[69]|0;h=c[73]|0;f=b;i=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;i=((o|0)!=0&1)+i+((p|0)!=0&1)+(d[h+((N(o,g)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);h=(i|0)>(j|0);k=h?l:11;h=h?j:i;i=c[75]|0;j=c[79]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[j+((N(o,i)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(h|0)?k:12;return p|0}case 14:{h=c[93]|0;i=c[97]|0;f=b;g=0;do{o=c[a+(f<<2)>>2]|0;p=c[a+(f+1<<2)>>2]|0;g=((o|0)!=0&1)+g+((p|0)!=0&1)+(d[i+((N(o,h)|0)+p)>>0]|0)|0;f=f+2|0}while(f>>>0<e>>>0);p=(g|0)>(j|0)?l:15;return p|0}default:{p=l;return p|0}}return 0}function ya(a,b,e,f,g,i){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,O=0,P=0,Q=0.0,R=0,S=0,T=0,U=0;K=i+39100|0;L=i+34488|0;M=i+156+(f*184|0)+(g*92|0)+8|0;O=i+156+(f*184|0)+(g*92|0)+4|0;u=i+156+(f*184|0)+(g*92|0)+48|0;v=i+156+(f*184|0)+(g*92|0)+32|0;w=i+156+(f*184|0)+(g*92|0)+36|0;x=i+156+(f*184|0)+(g*92|0)+20|0;z=i+156+(f*184|0)+(g*92|0)+24|0;A=i+156+(f*184|0)+(g*92|0)+28|0;C=i+156+(f*184|0)+(g*92|0)+60|0;D=i+156+(f*184|0)+(g*92|0)+64|0;E=i+156+(f*184|0)+(g*92|0)+68|0;F=i+72|0;G=c[199]|0;H=c[205]|0;t=120;P=-120;do{I=(t|0)/2|0;J=I+P|0;b=J+127|0;n=c[i+40480+(b<<2)>>2]|0;s=c[K>>2]|0;o=((n|0)<0)<<31>>31;s=rb(s|0,((s|0)<0)<<31>>31|0,n|0,o|0)|0;nb(s|0,y|0,-2147483648,0)|0;if((y|0)<=165140){m=i+39456+(b<<3)|0;l=c[L>>2]|0;j=0;k=0;do{b=c[l+(k<<2)>>2]|0;b=(b|0)>-1?b:0-b|0;b=rb(b|0,((b|0)<0)<<31>>31|0,n|0,o|0)|0;nb(b|0,y|0,-2147483648,0)|0;b=y;if((b|0)<1e4)b=c[i+40992+(b<<2)>>2]|0;else{Q=+h[m>>3]*+(c[i+36796+(k<<2)>>2]|0)*4.656612875e-10;b=~~+B(+(+B(+Q)*Q))}c[e+(k<<2)>>2]=b;j=(j|0)<(b|0)?b:j;k=k+1|0}while((k|0)!=576);if((j|0)<=8192){j=576;while(1){if((j|0)<=1){n=10;break}if(c[e+(j+-1<<2)>>2]|0){n=13;break}b=j+-2|0;if(!(c[e+(b<<2)>>2]|0))j=b;else{n=13;break}}do if((n|0)==10){c[M>>2]=0;n=20}else if((n|0)==13){c[M>>2]=0;if((j|0)>3){l=0;while(1){if((c[e+(j+-1<<2)>>2]|0)>=2){n=21;break}if((c[e+(j+-2<<2)>>2]|0)>=2){n=21;break}if((c[e+(j+-3<<2)>>2]|0)>=2){n=21;break}b=j+-4|0;k=l+1|0;if((c[e+(b<<2)>>2]|0)>=2){n=21;break}c[M>>2]=k;if((b|0)>3){j=b;l=k}else{n=15;break}}if((n|0)==15){s=b>>1;c[O>>2]=s;j=b;b=s}else if((n|0)==21){b=j>>>1;c[O>>2]=b;if(!l){c[u>>2]=1;b=0;n=27;break}else k=l}l=0;n=j;o=0;m=0;while(1){q=c[e+(n<<2)>>2]|0;p=c[e+((n|1)<<2)>>2]|0;R=c[e+(n+2<<2)>>2]|0;r=c[e+(n+3<<2)>>2]|0;s=(p<<1)+q+(R<<2)+(r<<3)|0;q=(q|0)!=0;r=((R|0)!=0&1)+((p|0)==0?q&1:q?2:1)+((r|0)!=0&1)|0;l=(d[G+s>>0]|0)+l+r|0;m=r+m+(d[H+s>>0]|0)|0;o=o+1|0;if((o|0)==(k|0)){k=b;n=25;break}else n=n+4|0}}else n=20}while(0);if((n|0)==20){k=j>>1;c[O>>2]=k;m=0;l=0;n=25}if((n|0)==25){n=0;R=(l|0)<(m|0);b=R?l:m;c[u>>2]=(R^1)&1;if(!k){c[v>>2]=0;c[w>>2]=0;s=b;l=c[C>>2]|0}else n=27}if((n|0)==27){m=c[F>>2]|0;l=0;while(1)if((c[1464+(m*92|0)+(l<<2)>>2]|0)<(j|0))l=l+1|0;else break;k=c[824+(l<<3)>>2]|0;while(1){n=1464+(m*92|0)+(k+1<<2)|0;o=c[n>>2]|0;if((k|0)!=0&(o|0)>(j|0))k=k+-1|0;else break}c[v>>2]=k;c[C>>2]=o;k=c[824+(l<<3)+4>>2]|0;while(1){l=c[n+(k+1<<2)>>2]|0;if((k|0)!=0&(l|0)>(j|0))k=k+-1|0;else break}c[w>>2]=k;c[D>>2]=l;c[E>>2]=j;s=b;l=o}c[x>>2]=0;c[z>>2]=0;c[A>>2]=0;if(!l)m=0;else{m=xa(e,0,l)|0;c[x>>2]=m}k=c[D>>2]|0;p=k>>>0>l>>>0;if(p){q=xa(e,l,k)|0;c[z>>2]=q}else q=0;if(j>>>0>k>>>0){r=xa(e,k,j)|0;c[A>>2]=r}else r=0;do if(m){o=c[8+(m*24|0)+4>>2]|0;n=c[8+(m*24|0)+8>>2]|0;b=(l|0)!=0;if(m>>>0>15){if(!b){b=0;break}m=c[8+(m*24|0)+20>>2]|0;b=0;j=0;do{S=c[e+(j<<2)>>2]|0;R=c[e+((j|1)<<2)>>2]|0;U=(S|0)>14;S=U?15:S;T=(R|0)>14;R=T?15:R;b=(U?n:0)+b+(T?n:0)+(d[m+((N(S,o)|0)+R)>>0]|0)+((S|0)!=0&1)+((R|0)!=0&1)|0;j=j+2|0}while(j>>>0<l>>>0)}else{if(!b){b=0;break}m=c[8+(m*24|0)+20>>2]|0;j=0;b=0;do{T=c[e+(j<<2)>>2]|0;U=c[e+((j|1)<<2)>>2]|0;b=((T|0)!=0&1)+b+((U|0)!=0&1)+(d[m+((N(T,o)|0)+U)>>0]|0)|0;j=j+2|0}while(j>>>0<l>>>0)}}else b=0;while(0);if(q){o=c[8+(q*24|0)+4>>2]|0;n=c[8+(q*24|0)+8>>2]|0;if(q>>>0>15)if(p){m=c[8+(q*24|0)+20>>2]|0;j=0;do{T=c[e+(l<<2)>>2]|0;U=c[e+(l+1<<2)>>2]|0;R=(T|0)>14;T=R?15:T;S=(U|0)>14;U=S?15:U;j=(R?n:0)+j+(S?n:0)+(d[m+((N(T,o)|0)+U)>>0]|0)+((T|0)!=0&1)+((U|0)!=0&1)|0;l=l+2|0}while(l>>>0<k>>>0)}else j=0;else if(p){m=c[8+(q*24|0)+20>>2]|0;j=0;do{T=c[e+(l<<2)>>2]|0;U=c[e+(l+1<<2)>>2]|0;j=((T|0)!=0&1)+j+((U|0)!=0&1)+(d[m+((N(T,o)|0)+U)>>0]|0)|0;l=l+2|0}while(l>>>0<k>>>0)}else j=0;b=j+b|0}if(r){n=c[E>>2]|0;o=c[8+(r*24|0)+4>>2]|0;m=c[8+(r*24|0)+8>>2]|0;j=k>>>0<n>>>0;if(r>>>0>15)if(j){l=c[8+(r*24|0)+20>>2]|0;j=0;do{T=c[e+(k<<2)>>2]|0;U=c[e+(k+1<<2)>>2]|0;R=(T|0)>14;T=R?15:T;S=(U|0)>14;U=S?15:U;j=(R?m:0)+j+(S?m:0)+(d[l+((N(T,o)|0)+U)>>0]|0)+((T|0)!=0&1)+((U|0)!=0&1)|0;k=k+2|0}while(k>>>0<n>>>0)}else j=0;else if(j){l=c[8+(r*24|0)+20>>2]|0;j=0;do{T=c[e+(k<<2)>>2]|0;U=c[e+(k+1<<2)>>2]|0;j=((T|0)!=0&1)+j+((U|0)!=0&1)+(d[l+((N(T,o)|0)+U)>>0]|0)|0;k=k+2|0}while(k>>>0<n>>>0)}else j=0;b=j+b|0}b=b+s|0}else b=1e5}else b=1e5;U=(b|0)<(a|0);P=U?P:J;t=U?I:t-I|0}while((t|0)>1);l=i+156+(f*184|0)+(g*92|0)|0;c[i+156+(f*184|0)+(g*92|0)+72>>2]=P;b=c[i+156+(f*184|0)+(g*92|0)+16>>2]|0;k=c[1044+(b<<2)>>2]|0;b=c[1108+(b<<2)>>2]|0;if(f){j=b*5|0;b=((c[i+124+(g<<4)+4>>2]|0)==0?k*5|0:0)+((c[i+124+(g<<4)>>2]|0)==0?k*6|0:0)+((c[i+124+(g<<4)+8>>2]|0)==0?j:0)|0;if(c[i+124+(g<<4)+12>>2]|0){U=b;T=i+156+(f*184|0)+(g*92|0)+52|0;c[T>>2]=U;U=a-U|0;U=wa(e,U,l,0,0,i)|0;T=c[T>>2]|0;U=T+U|0;c[l>>2]=U;return U|0}}else{j=b*5|0;b=j+(k*11|0)|0}U=b+j|0;T=i+156+(f*184|0)+(g*92|0)+52|0;c[T>>2]=U;U=a-U|0;U=wa(e,U,l,0,0,i)|0;T=c[T>>2]|0;U=T+U|0;c[l>>2]=U;return U|0}function za(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=l;l=l+672|0;t=F;b=c[a>>2]|0;if(!b){Pa(a);l=F;return}z=a+16|0;A=a+34488|0;B=a+39100|0;C=a+8|0;D=a+72|0;E=a+39452|0;u=a+39448|0;v=a+39104|0;w=a+39108|0;x=b*23|0;d=c[z>>2]|0;s=0;while(1){r=x+(N(s,-23)|0)|0;b=b+-1|0;if((d|0)>0){q=a+((b<<4)+124)|0;p=0;while(1){o=a+140+(r+(p*46|0)<<2)|0;c[A>>2]=a+25264+(b*4608|0)+(p*2304|0);d=576;e=0;a:while(1){c[B>>2]=e;while(1){f=d+-1|0;if(!d)break a;n=c[(c[A>>2]|0)+(f<<2)>>2]|0;e=((n|0)<0)<<31>>31;e=rb(n|0,e|0,n|0,e|0)|0;e=nb(e|0,y|0,1073741824,0)|0;e=pb(e|0,y|0,31)|0;c[a+34492+(f<<2)>>2]=e;e=c[(c[A>>2]|0)+(f<<2)>>2]|0;e=(e|0)>-1?e:0-e|0;c[a+36796+(f<<2)>>2]=e;if((e|0)>(c[B>>2]|0)){d=f;continue a}else d=f}}m=a+2224+(b*4608|0)+(p*2304|0)|0;n=a+156+(p*184|0)+(b*92|0)|0;c[a+156+(p*184|0)+(b*92|0)+56>>2]=21;ob(t+(p*336|0)+(b*168|0)|0,0,168)|0;b:do if((c[C>>2]|0)==3){k=c[D>>2]|0;c[a+39448+(p<<2)>>2]=c[B>>2];d=0;e=575;while(1){d=(c[a+34492+(e<<2)>>2]>>10)+d|0;if(!e)break;else e=e+-1|0}if(!d)d=0;else d=~~(+L(+(+(d|0)*4.768371584e-07))/.69314718);c[a+39104+(p<<2)>>2]=d;i=20;j=c[1464+(k*92|0)+84>>2]|0;while(1){f=j;j=c[1464+(k*92|0)+(i<<2)>>2]|0;if((j|0)<(f|0)){d=0;e=j;do{d=(c[a+34492+(e<<2)>>2]>>10)+d|0;e=e+1|0}while((e|0)!=(f|0));if(d)d=~~(+L(+(+(d|0)*4.768371584e-07))/.69314718);else d=0}else d=0;c[a+39112+(p*84|0)+(i<<2)>>2]=d;g=+h[t+(p*336|0)+(b*168|0)+(i<<3)>>3];if(g!=0.0)d=~~(+L(+g)/.69314718);else d=0;c[a+39280+(p*84|0)+(i<<2)>>2]=d;if(!i)break;else i=i+-1|0}if((p|0)==1){j=(c[u>>2]|0)!=0;e=c[E>>2]|0?3:2;i=(c[v>>2]|0)-(c[w>>2]|0)|0;i=(((i|0)>-1?i:0-i|0)|0)<10;d=0;f=20;while(1){k=(c[a+39112+(f<<2)>>2]|0)-(c[a+39196+(f<<2)>>2]|0)|0;d=((k|0)>-1?k:0-k|0)+d|0;if(!f)break;else f=f+-1|0}if(((j&1)+e+(i&1)+((d|0)<100&1)|0)==6){d=0;e=0}else{c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;break}do{while(1){k=a+124+(b<<4)+(d<<2)|0;c[k>>2]=0;d=d+1|0;j=e;e=c[1008+(d<<2)>>2]|0;if((j|0)<(e|0)){f=0;i=0;do{G=(c[a+39112+(j<<2)>>2]|0)-(c[a+39196+(j<<2)>>2]|0)|0;f=((G|0)>-1?G:0-G|0)+f|0;G=(c[a+39280+(j<<2)>>2]|0)-(c[a+39364+(j<<2)>>2]|0)|0;i=((G|0)>-1?G:0-G|0)+i|0;j=j+1|0}while((j|0)!=(e|0))}else{i=0;f=0}if((f|0)<10&(i|0)<10)break;c[k>>2]=0;if((d|0)>=4)break b}c[k>>2]=1}while((d|0)<4)}}while(0);d=Na(a+2192+(b<<4)+(p<<3)|0,a)|0;e=a+1208+(p*176|0)+(b*88|0)|0;f=e+88|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));ob(a+1560+(p*312|0)+(b*156|0)|0,0,156)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[n>>2]=0;c[a+156+(p*184|0)+(b*92|0)+4>>2]=0;c[a+156+(p*184|0)+(b*92|0)+8>>2]=0;e=a+156+(p*184|0)+(b*92|0)+16|0;f=e+40|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));if(c[B>>2]|0)c[n>>2]=ya(d,0,m,p,b,a)|0;Oa(n,a);c[a+156+(p*184|0)+(b*92|0)+12>>2]=(c[a+156+(p*184|0)+(b*92|0)+72>>2]|0)+210;p=p+1|0;d=c[z>>2]|0;if((p|0)>=(d|0))break}}if(!b)break;else s=s+1|0}Pa(a);l=F;return}function Aa(a){a=a|0;var b=0,d=0,e=0.0;b=128;d=127;while(1){e=+Y(+(+(128-b|0)*.25));h[a+39456+(d<<3)>>3]=e;e=e*2.0;c[a+40480+(d<<2)>>2]=e>2147483647.0?2147483647:~~(e+.5);if(!d){b=9999;break}else{b=d;d=d+-1|0}}while(1){e=+(b|0);c[a+40992+(b<<2)>>2]=~~(+B(+(e*+B(+e)))+-.0946+.5);if(!b)break;else b=b+-1|0}return}function Ba(a){a=a|0;var b=0,d=0.0,e=0;b=17;while(1){d=+(b<<1|1|0);e=35;while(1){c[a+80992+(b*144|0)+(e<<2)>>2]=~~(+E(+((+(e|0)+.5)*.087266462599717))*+D(+(d*(+((e<<1)+19|0)*.043633231299858195)))*2147483647.0);if(!e)break;else e=e+-1|0}if(!b)break;else b=b+-1|0}return}function Ca(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;s=l;l=l+144|0;p=s;d=c[a>>2]|0;if(!d){l=s;return}q=a+16|0;r=p+140|0;do{d=d+-1|0;e=c[q>>2]|0;if((e|0)>0){o=a+2184+(d<<2)|0;n=0;do{m=a+25264+(d*4608|0)+(n*2304|0)|0;k=n;n=n+1|0;e=0;do{Ea(o,a+11440+(d*6912|0)+(n*2304|0)+(e<<7)|0,d,a,b);j=e|1;Ea(o,a+11440+(d*6912|0)+(n*2304|0)+(j<<7)|0,d,a,b);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+4|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+12|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+20|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+28|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+36|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+44|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+52|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+60|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+68|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+76|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+84|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+92|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+100|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+108|0;c[i>>2]=0-(c[i>>2]|0);i=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+116|0;c[i>>2]=0-(c[i>>2]|0);j=a+11440+(d*6912|0)+(n*2304|0)+(j<<7)+124|0;c[j>>2]=0-(c[j>>2]|0);e=e+2|0}while((e|0)<18);j=0;while(1){e=18;f=17;while(1){c[p+(f<<2)>>2]=c[a+11440+(d*6912|0)+(k*2304|0)+(f<<7)+(j<<2)>>2];c[p+(e+17<<2)>>2]=c[a+11440+(d*6912|0)+(n*2304|0)+(f<<7)+(j<<2)>>2];if(!f)break;else{e=f;f=f+-1|0}}g=c[r>>2]|0;h=((g|0)<0)<<31>>31;i=17;while(1){e=c[a+80992+(i*144|0)+140>>2]|0;rb(e|0,((e|0)<0)<<31>>31|0,g|0,h|0)|0;e=35;f=y;do{v=e+-1|0;t=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,t|0,((t|0)<0)<<31>>31|0)|0;t=y+f|0;v=e+-2|0;u=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;t=t+y|0;u=e+-3|0;v=c[p+(u<<2)>>2]|0;u=c[a+80992+(i*144|0)+(u<<2)>>2]|0;rb(u|0,((u|0)<0)<<31>>31|0,v|0,((v|0)<0)<<31>>31|0)|0;t=t+y|0;v=e+-4|0;u=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;t=t+y|0;u=e+-5|0;v=c[p+(u<<2)>>2]|0;u=c[a+80992+(i*144|0)+(u<<2)>>2]|0;rb(u|0,((u|0)<0)<<31>>31|0,v|0,((v|0)<0)<<31>>31|0)|0;t=t+y|0;v=e+-6|0;u=c[p+(v<<2)>>2]|0;v=c[a+80992+(i*144|0)+(v<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;t=t+y|0;e=e+-7|0;u=c[p+(e<<2)>>2]|0;v=c[a+80992+(i*144|0)+(e<<2)>>2]|0;rb(v|0,((v|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;f=t+y|0}while((e|0)!=0);c[m+(j*72|0)+(i<<2)>>2]=f;if(!i)break;else i=i+-1|0}if(!j){j=1;continue}v=m+(j*72|0)|0;e=c[v>>2]|0;u=((e|0)<0)<<31>>31;w=rb(e|0,u|0,1841452035,0)|0;i=y;t=j+-1|0;h=m+(t*72|0)+68|0;g=c[h>>2]|0;f=((g|0)<0)<<31>>31;x=rb(g|0,f|0,1104871221,0)|0;i=nb(x|0,y|0,w|0,i|0)|0;i=pb(i|0,y|0,31)|0;u=rb(e|0,u|0,-1104871221,-1)|0;e=y;f=rb(g|0,f|0,1841452035,0)|0;e=nb(f|0,y|0,u|0,e|0)|0;e=pb(e|0,y|0,31)|0;c[h>>2]=e;c[v>>2]=i;v=m+(j*72|0)+4|0;i=c[v>>2]|0;h=((i|0)<0)<<31>>31;e=rb(i|0,h|0,1893526520,0)|0;u=y;f=m+(t*72|0)+64|0;g=c[f>>2]|0;w=((g|0)<0)<<31>>31;x=rb(g|0,w|0,1013036688,0)|0;u=nb(x|0,y|0,e|0,u|0)|0;u=pb(u|0,y|0,31)|0;h=rb(i|0,h|0,-1013036688,-1)|0;i=y;w=rb(g|0,w|0,1893526520,0)|0;i=nb(w|0,y|0,h|0,i|0)|0;i=pb(i|0,y|0,31)|0;c[f>>2]=i;c[v>>2]=u;v=m+(j*72|0)+8|0;u=c[v>>2]|0;f=((u|0)<0)<<31>>31;i=rb(u|0,f|0,2039311994,0)|0;h=y;w=m+(t*72|0)+60|0;g=c[w>>2]|0;e=((g|0)<0)<<31>>31;x=rb(g|0,e|0,672972958,0)|0;h=nb(x|0,y|0,i|0,h|0)|0;h=pb(h|0,y|0,31)|0;f=rb(u|0,f|0,-672972958,-1)|0;u=y;e=rb(g|0,e|0,2039311994,0)|0;u=nb(e|0,y|0,f|0,u|0)|0;u=pb(u|0,y|0,31)|0;c[w>>2]=u;c[v>>2]=h;v=m+(j*72|0)+12|0;h=c[v>>2]|0;w=((h|0)<0)<<31>>31;u=rb(h|0,w|0,2111652007,0)|0;f=y;e=m+(t*72|0)+56|0;g=c[e>>2]|0;i=((g|0)<0)<<31>>31;x=rb(g|0,i|0,390655621,0)|0;f=nb(x|0,y|0,u|0,f|0)|0;f=pb(f|0,y|0,31)|0;w=rb(h|0,w|0,-390655621,-1)|0;h=y;i=rb(g|0,i|0,2111652007,0)|0;h=nb(i|0,y|0,w|0,h|0)|0;h=pb(h|0,y|0,31)|0;c[e>>2]=h;c[v>>2]=f;v=m+(j*72|0)+16|0;f=c[v>>2]|0;e=((f|0)<0)<<31>>31;h=rb(f|0,e|0,2137858230,0)|0;w=y;i=m+(t*72|0)+52|0;g=c[i>>2]|0;u=((g|0)<0)<<31>>31;x=rb(g|0,u|0,203096531,0)|0;w=nb(x|0,y|0,h|0,w|0)|0;w=pb(w|0,y|0,31)|0;e=rb(f|0,e|0,-203096531,-1)|0;f=y;u=rb(g|0,u|0,2137858230,0)|0;f=nb(u|0,y|0,e|0,f|0)|0;f=pb(f|0,y|0,31)|0;c[i>>2]=f;c[v>>2]=w;v=m+(j*72|0)+20|0;w=c[v>>2]|0;i=((w|0)<0)<<31>>31;f=rb(w|0,i|0,2145680959,0)|0;e=y;u=m+(t*72|0)+48|0;g=c[u>>2]|0;h=((g|0)<0)<<31>>31;x=rb(g|0,h|0,87972919,0)|0;e=nb(x|0,y|0,f|0,e|0)|0;e=pb(e|0,y|0,31)|0;i=rb(w|0,i|0,-87972919,-1)|0;w=y;h=rb(g|0,h|0,2145680959,0)|0;w=nb(h|0,y|0,i|0,w|0)|0;w=pb(w|0,y|0,31)|0;c[u>>2]=w;c[v>>2]=e;v=m+(j*72|0)+24|0;e=c[v>>2]|0;u=((e|0)<0)<<31>>31;w=rb(e|0,u|0,2147267170,0)|0;i=y;h=m+(t*72|0)+44|0;g=c[h>>2]|0;f=((g|0)<0)<<31>>31;x=rb(g|0,f|0,30491193,0)|0;i=nb(x|0,y|0,w|0,i|0)|0;i=pb(i|0,y|0,31)|0;u=rb(e|0,u|0,-30491193,-1)|0;e=y;f=rb(g|0,f|0,2147267170,0)|0;e=nb(f|0,y|0,u|0,e|0)|0;e=pb(e|0,y|0,31)|0;c[h>>2]=e;c[v>>2]=i;v=m+(j*72|0)+28|0;i=c[v>>2]|0;h=((i|0)<0)<<31>>31;e=rb(i|0,h|0,2147468947,0)|0;u=y;t=m+(t*72|0)+40|0;f=c[t>>2]|0;g=((f|0)<0)<<31>>31;w=rb(f|0,g|0,7945635,0)|0;u=nb(w|0,y|0,e|0,u|0)|0;u=pb(u|0,y|0,31)|0;h=rb(i|0,h|0,-7945635,-1)|0;i=y;g=rb(f|0,g|0,2147468947,0)|0;i=nb(g|0,y|0,h|0,i|0)|0;i=pb(i|0,y|0,31)|0;c[t>>2]=i;c[v>>2]=u;j=j+1|0;if((j|0)==32)break}e=c[q>>2]|0}while((n|0)<(e|0))}tb(a+11440+(d*6912|0)|0,a+11440+(d*6912|0)+(e*2304|0)|0,2304)|0}while((d|0)!=0);l=s;return}function Da(a){a=a|0;var b=0,d=0.0,e=0,f=0,g=0,i=0,j=0;j=l;l=l+16|0;e=j;c[a+83588>>2]=0;c[a+83584>>2]=0;ob(a+91784|0,0,4096)|0;g=31;while(1){i=g<<1|1;b=64;f=63;while(1){d=+D(+(+(N(17-b|0,i)|0)*.049087385212))*1.0e9;h[e>>3]=d;if(!(d>=0.0))+bb(d+-.5,e);else+bb(d+.5,e);c[a+83592+(g<<8)+(f<<2)>>2]=~~(+h[e>>3]*2.147483647);if(!f)break;else{b=f;f=f+-1|0}}if(!g)break;else g=g+-1|0}l=j;return}function Ea(a,b,d,f,g){a=a|0;b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+256|0;o=p;j=c[a>>2]|0;n=f+83584+(d<<2)|0;k=g<<5;h=j;i=31;m=c[n>>2]|0;while(1){c[f+91784+(d<<11)+(i+m<<2)>>2]=(e[h>>1]|0)<<16;m=c[n>>2]|0;if(!i)break;else{h=h+(g<<1)|0;i=i+-1|0}}c[a>>2]=j+(k<<1);h=64;a=63;while(1){j=a+m|0;k=c[f+91784+(d<<11)+((j&511)<<2)>>2]|0;g=c[2292+(a<<2)>>2]|0;rb(g|0,((g|0)<0)<<31>>31|0,k|0,((k|0)<0)<<31>>31|0)|0;k=y;g=c[f+91784+(d<<11)+((j+64&511)<<2)>>2]|0;i=c[2292+(h+63<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=y+k|0;g=c[f+91784+(d<<11)+((j+128&511)<<2)>>2]|0;i=c[2292+(h+127<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+192&511)<<2)>>2]|0;i=c[2292+(h+191<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+256&511)<<2)>>2]|0;i=c[2292+(h+255<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+320&511)<<2)>>2]|0;i=c[2292+(h+319<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;g=c[f+91784+(d<<11)+((j+384&511)<<2)>>2]|0;i=c[2292+(h+383<<2)>>2]|0;rb(i|0,((i|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;k=k+y|0;j=c[f+91784+(d<<11)+((j+448&511)<<2)>>2]|0;g=c[2292+(h+447<<2)>>2]|0;rb(g|0,((g|0)<0)<<31>>31|0,j|0,((j|0)<0)<<31>>31|0)|0;c[o+(a<<2)>>2]=k+y;if(!a)break;else{h=a;a=a+-1|0}}c[n>>2]=m+480&511;i=c[o+252>>2]|0;g=((i|0)<0)<<31>>31;j=31;while(1){h=c[f+83592+(j<<8)+252>>2]|0;rb(i|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;h=y;a=63;do{m=a+-1|0;n=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;n=y+h|0;m=a+-2|0;d=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;n=n+y|0;d=a+-3|0;m=c[f+83592+(j<<8)+(d<<2)>>2]|0;d=c[o+(d<<2)>>2]|0;rb(d|0,((d|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;n=n+y|0;m=a+-4|0;d=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;n=n+y|0;d=a+-5|0;m=c[f+83592+(j<<8)+(d<<2)>>2]|0;d=c[o+(d<<2)>>2]|0;rb(d|0,((d|0)<0)<<31>>31|0,m|0,((m|0)<0)<<31>>31|0)|0;n=n+y|0;m=a+-6|0;d=c[f+83592+(j<<8)+(m<<2)>>2]|0;m=c[o+(m<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;n=n+y|0;a=a+-7|0;d=c[f+83592+(j<<8)+(a<<2)>>2]|0;m=c[o+(a<<2)>>2]|0;rb(m|0,((m|0)<0)<<31>>31|0,d|0,((d|0)<0)<<31>>31|0)|0;h=n+y|0}while((a|0)!=0);c[b+(j<<2)>>2]=h;if(!j)break;else j=j+-1|0}l=p;return}function Fa(a){a=a|0;c[a+4>>2]=128;c[a+8>>2]=0;c[a+12>>2]=0;c[a+16>>2]=1;return}function Ga(a,b){a=a|0;b=b|0;if((c[1208+(b<<2)>>2]|0)==(a|0)){b=0;return b|0}if((c[1224+(b<<2)>>2]|0)==(a|0)){b=1;return b|0}if((c[1240+(b<<2)>>2]|0)==(a|0)){b=2;return b|0}if((c[1256+(b<<2)>>2]|0)==(a|0)){b=3;return b|0}if((c[1272+(b<<2)>>2]|0)==(a|0)){b=4;return b|0}if((c[1288+(b<<2)>>2]|0)==(a|0)){b=5;return b|0}if((c[1304+(b<<2)>>2]|0)==(a|0)){b=6;return b|0}if((c[1320+(b<<2)>>2]|0)==(a|0)){b=7;return b|0}if((c[1336+(b<<2)>>2]|0)==(a|0)){b=8;return b|0}if((c[1352+(b<<2)>>2]|0)==(a|0)){b=9;return b|0}if((c[1368+(b<<2)>>2]|0)==(a|0)){b=10;return b|0}if((c[1384+(b<<2)>>2]|0)==(a|0)){b=11;return b|0}if((c[1400+(b<<2)>>2]|0)==(a|0)){b=12;return b|0}if((c[1416+(b<<2)>>2]|0)==(a|0)){b=13;return b|0}if((c[1432+(b<<2)>>2]|0)==(a|0)){b=14;return b|0}else return ((c[1448+(b<<2)>>2]|0)==(a|0)?15:-1)|0;return 0}function Ha(a,b){a=a|0;b=b|0;if((c[293]|0)!=(a|0))if((c[294]|0)!=(a|0))if((c[295]|0)!=(a|0))if((c[296]|0)!=(a|0))if((c[297]|0)!=(a|0))if((c[298]|0)!=(a|0))if((c[299]|0)!=(a|0))if((c[300]|0)!=(a|0))if((c[301]|0)==(a|0))a=8;else{b=-1;return b|0}else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;a=a>>>0<3?3:a>>>0<6?2:0;b=(Ga(b,a)|0)<0;b=b?-1:a;return b|0}function Ia(a){a=a|0;return (c[a+16>>2]|0)*576|0}function Ja(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0.0;e=a+4|0;b=c[e>>2]|0;i=a+12|0;d=c[i>>2]|0;j=c[293]|0;if((j|0)!=(b|0))if((c[294]|0)!=(b|0))if((c[295]|0)!=(b|0))if((c[296]|0)!=(b|0))if((c[297]|0)!=(b|0))if((c[298]|0)!=(b|0))if((c[299]|0)!=(b|0))if((c[300]|0)!=(b|0))if((c[301]|0)==(b|0))b=8;else{j=0;return j|0}else b=7;else b=6;else b=5;else b=4;else b=3;else b=2;else b=1;else b=0;if((Ga(d,b>>>0<3?3:b>>>0<6?2:0)|0)<0){j=0;return j|0}g=ib(1,95880)|0;if(!g){j=g;return j|0}Da(g);Ba(g);Aa(g);c[g>>2]=c[a>>2];f=c[e>>2]|0;c[g+4>>2]=f;d=g+8|0;c[g+20>>2]=c[a+8>>2];e=c[i>>2]|0;c[g+24>>2]=e;c[g+28>>2]=c[a+16>>2];c[g+88>>2]=c[a+20>>2];c[g+92>>2]=c[a+24>>2];c[g+34484>>2]=0;c[g+34480>>2]=0;c[g+12>>2]=1;c[g+76>>2]=0;c[g+80>>2]=0;c[g+84>>2]=0;c[g+40>>2]=8;if((j|0)!=(f|0))if((c[294]|0)!=(f|0))if((c[295]|0)!=(f|0))if((c[296]|0)!=(f|0))if((c[297]|0)!=(f|0))if((c[298]|0)!=(f|0))if((c[299]|0)!=(f|0))if((c[300]|0)==(f|0))b=7;else b=(c[301]|0)==(f|0)?8:-1;else b=6;else b=5;else b=4;else b=3;else b=2;else b=1;else b=0;c[g+72>>2]=b;j=(b|0)<3?3:(b|0)<6?2:0;c[d>>2]=j;c[g+68>>2]=Ga(e,j)|0;j=c[1028+(j<<2)>>2]|0;b=g+16|0;c[b>>2]=j;k=+(j|0)*576.0/+(f|0)*(+(e|0)*1.0e3*.125);j=~~k;c[g+64>>2]=j;k=k-+(j|0);h[g+48>>3]=k;h[g+56>>3]=-k;if(k==0.0)c[g+32>>2]=0;ra(g+96|0,4096);ob(g+116|0,0,408)|0;j=(c[g>>2]|0)==1;c[g+524>>2]=(c[b>>2]|0)==2?(j?168:288):j?104:168;j=g;return j|0}function Ka(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,i=0.0;c[a+2184>>2]=c[b>>2];if((c[a>>2]|0)==2)c[a+2188>>2]=c[b+4>>2];e=+h[a+48>>3];if(e!=0.0){f=a+56|0;i=+h[f>>3];g=i<=e+-1.0;b=g&1;c[a+32>>2]=b;h[f>>3]=i+(+(g&1)-e)}else b=c[a+32>>2]|0;g=(c[a+64>>2]|0)+b<<3;c[a+36>>2]=g;c[a+528>>2]=(g-(c[a+524>>2]|0)|0)/(c[a+16>>2]|0)|0;Ca(a,1);za(a);va(a);g=a+104|0;c[d>>2]=c[g>>2];c[g>>2]=0;return c[a+96>>2]|0}function La(a,b){a=a|0;b=b|0;var d=0;d=a+104|0;c[b>>2]=c[d>>2];c[d>>2]=0;return c[a+96>>2]|0}function Ma(a){a=a|0;sa(a+96|0);hb(a);return}function Na(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=(c[b+528>>2]|0)/(c[b>>2]|0)|0;e=(d|0)<4095?d:4095;f=c[b+34484>>2]|0;if(!f){f=e;return f|0}a=~~(+h[a>>3]*3.1-+(d|0));d=c[b+34480>>2]|0;if((a|0)>100){b=(d*6|0)/10|0;a=(b|0)<(a|0)?b:a}else a=0;f=d-((f<<3|0)/10|0)|0;f=((f|0)>(a|0)?f:a)+e|0;f=(f|0)<4095?f:4095;return f|0}function Oa(a,b){a=a|0;b=b|0;var d=0;d=b+34480|0;c[d>>2]=((c[b+528>>2]|0)/(c[b>>2]|0)|0)-(c[a>>2]|0)+(c[d>>2]|0);return}function Pa(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;f=c[a>>2]|0;if((f|0)==2?c[a+528>>2]&1|0:0){h=a+34480|0;c[h>>2]=(c[h>>2]|0)+1}h=a+34480|0;e=c[h>>2]|0;b=e-(c[a+34484>>2]|0)|0;b=(b|0)>0?b:0;e=e-b|0;g=(e|0)%8|0;b=g+b|0;c[h>>2]=e-g;if(!b)return;d=a+156|0;e=(c[d>>2]|0)+b|0;if(e>>>0<4095){c[d>>2]=e;return}h=a+16|0;d=c[h>>2]|0;if((d|0)>0){g=0;e=f;do{if((e|0)>0){f=0;d=e;while(1){if(!b){b=0;e=d;break}e=a+156+(g*184|0)+(f*92|0)|0;i=c[e>>2]|0;d=4095-i|0;d=(d|0)<(b|0)?d:b;c[e>>2]=d+i;b=b-d|0;f=f+1|0;d=c[a>>2]|0;if((f|0)>=(d|0)){e=d;break}}d=c[h>>2]|0}g=g+1|0}while((g|0)<(d|0))}c[a+120>>2]=b;return}function Qa(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+32|0;g=f;c[g>>2]=a;c[g+4>>2]=b;b=g+8|0;Fa(b);c[b>>2]=d;c[g+12>>2]=e;e=Ja(g)|0;l=f;return e|0}function Ra(){return 8944}function Sa(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;d=b;c[d>>2]=Za(c[a+60>>2]|0)|0;a=Va(ba(6,d|0)|0)|0;l=b;return a|0}function Ta(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;n=l;l=l+48|0;k=n+16|0;g=n;f=n+32|0;i=a+28|0;e=c[i>>2]|0;c[f>>2]=e;j=a+20|0;e=(c[j>>2]|0)-e|0;c[f+4>>2]=e;c[f+8>>2]=b;c[f+12>>2]=d;e=e+d|0;h=a+60|0;c[g>>2]=c[h>>2];c[g+4>>2]=f;c[g+8>>2]=2;g=Va(ga(146,g|0)|0)|0;a:do if((e|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;e=e-g|0;p=c[f+4>>2]|0;o=g>>>0>p>>>0;f=o?f+8|0:f;b=(o<<31>>31)+b|0;p=g-(o?p:0)|0;c[f>>2]=(c[f>>2]|0)+p;o=f+4|0;c[o>>2]=(c[o>>2]|0)-p;c[k>>2]=c[h>>2];c[k+4>>2]=f;c[k+8>>2]=b;g=Va(ga(146,k|0)|0)|0;if((e|0)==(g|0)){m=3;break a}}c[a+16>>2]=0;c[i>>2]=0;c[j>>2]=0;c[a>>2]=c[a>>2]|32;if((b|0)==2)d=0;else d=d-(c[f+4>>2]|0)|0}else m=3;while(0);if((m|0)==3){p=c[a+44>>2]|0;c[a+16>>2]=p+(c[a+48>>2]|0);c[i>>2]=p;c[j>>2]=p}l=n;return d|0}function Ua(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=l;l=l+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((Va(ca(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;l=f;return a|0}function Va(a){a=a|0;if(a>>>0>4294963200){c[(Wa()|0)>>2]=0-a;a=-1}return a|0}function Wa(){return (Xa()|0)+64|0}function Xa(){return Ya()|0}function Ya(){return 4340}function Za(a){a=a|0;return a|0}function _a(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=l;l=l+32|0;f=g;c[b+36>>2]=3;if((c[b>>2]&64|0)==0?(c[f>>2]=c[b+60>>2],c[f+4>>2]=21523,c[f+8>>2]=g+16,ea(54,f|0)|0):0)a[b+75>>0]=-1;f=Ta(b,d,e)|0;l=g;return f|0}function $a(a){a=a|0;return 0}function ab(a){a=a|0;return}function bb(a,b){a=+a;b=b|0;var d=0,e=0,f=0,g=0,i=0.0;h[j>>3]=a;f=c[j>>2]|0;g=c[j+4>>2]|0;d=pb(f|0,g|0,52)|0;d=d&2047;e=d+-1023|0;if((e|0)>51){h[b>>3]=a;c[j>>2]=0;c[j+4>>2]=g&-2147483648;return +((f|0)==0&(g&1048575|0)==0|(e|0)!=1024?+h[j>>3]:a)}do if(d>>>0>=1023){d=pb(-1,1048575,e|0)|0;e=y;if((d&f|0)==0&(e&g|0)==0){h[b>>3]=a;c[j>>2]=0;c[j+4>>2]=g&-2147483648;a=+h[j>>3];break}else{d=f&~d;f=g&~e;c[j>>2]=d;c[j+4>>2]=f;i=+h[j>>3];g=b;c[g>>2]=d;c[g+4>>2]=f;a=a-i;break}}else{f=b;c[f>>2]=0;c[f+4>>2]=g&-2147483648}while(0);return +a}function cb(){Z(9008);return 9016}function db(){fa(9008);return}function eb(a){a=a|0;var b=0,d=0;do if(a){if((c[a+76>>2]|0)<=-1){b=fb(a)|0;break}d=($a(a)|0)==0;b=fb(a)|0;if(!d)ab(a)}else{if(!(c[1177]|0))b=0;else b=eb(c[1177]|0)|0;a=c[(cb()|0)>>2]|0;if(a)do{if((c[a+76>>2]|0)>-1)d=$a(a)|0;else d=0;if((c[a+20>>2]|0)>>>0>(c[a+28>>2]|0)>>>0)b=fb(a)|0|b;if(d|0)ab(a);a=c[a+56>>2]|0}while((a|0)!=0);db()}while(0);return b|0}function fb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+20|0;h=a+28|0;if((c[b>>2]|0)>>>0>(c[h>>2]|0)>>>0?(ja[c[a+36>>2]&3](a,0,0)|0,(c[b>>2]|0)==0):0)a=-1;else{d=a+4|0;e=c[d>>2]|0;f=a+8|0;g=c[f>>2]|0;if(e>>>0<g>>>0)ja[c[a+40>>2]&3](a,e-g|0,1)|0;c[a+16>>2]=0;c[h>>2]=0;c[b>>2]=0;c[f>>2]=0;c[d>>2]=0;a=0}return a|0}function gb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=l;l=l+16|0;o=K;do if(a>>>0<245){p=a>>>0<11?16:a+11&-8;a=p>>>3;t=c[2255]|0;d=t>>>a;if(d&3|0){a=(d&1^1)+a|0;d=9060+(a<<1<<2)|0;e=d+8|0;f=c[e>>2]|0;g=f+8|0;h=c[g>>2]|0;do if((d|0)!=(h|0)){if(h>>>0<(c[2259]|0)>>>0)$();b=h+12|0;if((c[b>>2]|0)==(f|0)){c[b>>2]=d;c[e>>2]=h;break}else $()}else c[2255]=t&~(1<<a);while(0);J=a<<3;c[f+4>>2]=J|3;J=f+J+4|0;c[J>>2]=c[J>>2]|1;J=g;l=K;return J|0}s=c[2257]|0;if(p>>>0>s>>>0){if(d|0){i=2<<a;a=d<<a&(i|0-i);a=(a&0-a)+-1|0;i=a>>>12&16;a=a>>>i;e=a>>>5&8;a=a>>>e;g=a>>>2&4;a=a>>>g;d=a>>>1&2;a=a>>>d;b=a>>>1&1;b=(e|i|g|d|b)+(a>>>b)|0;a=9060+(b<<1<<2)|0;d=a+8|0;g=c[d>>2]|0;i=g+8|0;e=c[i>>2]|0;do if((a|0)!=(e|0)){if(e>>>0<(c[2259]|0)>>>0)$();f=e+12|0;if((c[f>>2]|0)==(g|0)){c[f>>2]=a;c[d>>2]=e;j=t;break}else $()}else{j=t&~(1<<b);c[2255]=j}while(0);h=(b<<3)-p|0;c[g+4>>2]=p|3;e=g+p|0;c[e+4>>2]=h|1;c[e+h>>2]=h;if(s|0){f=c[2260]|0;b=s>>>3;d=9060+(b<<1<<2)|0;b=1<<b;if(j&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{k=a;m=b}}else{c[2255]=j|b;k=d;m=d+8|0}c[m>>2]=f;c[k+12>>2]=f;c[f+8>>2]=k;c[f+12>>2]=d}c[2257]=h;c[2260]=e;J=i;l=K;return J|0}k=c[2256]|0;if(k){a=(k&0-k)+-1|0;I=a>>>12&16;a=a>>>I;H=a>>>5&8;a=a>>>H;J=a>>>2&4;a=a>>>J;d=a>>>1&2;a=a>>>d;b=a>>>1&1;b=c[9324+((H|I|J|d|b)+(a>>>b)<<2)>>2]|0;a=(c[b+4>>2]&-8)-p|0;d=c[b+16+(((c[b+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){j=b;h=a}else{do{I=(c[d+4>>2]&-8)-p|0;J=I>>>0<a>>>0;a=J?I:a;b=J?d:b;d=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0}while((d|0)!=0);j=b;h=a}f=c[2259]|0;if(j>>>0<f>>>0)$();i=j+p|0;if(j>>>0>=i>>>0)$();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){n=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0<f>>>0)$();else{c[a>>2]=0;n=b;break}}else{e=c[j+8>>2]|0;if(e>>>0<f>>>0)$();b=e+12|0;if((c[b>>2]|0)!=(j|0))$();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;n=d;break}else $()}while(0);a:do if(g|0){b=c[j+28>>2]|0;a=9324+(b<<2)|0;do if((j|0)==(c[a>>2]|0)){c[a>>2]=n;if(!n){c[2256]=k&~(1<<b);break a}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=n;if(!n)break a;else break}else $();while(0);a=c[2259]|0;if(n>>>0<a>>>0)$();c[n+24>>2]=g;b=c[j+16>>2]|0;do if(b|0)if(b>>>0<a>>>0)$();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);b=c[j+20>>2]|0;if(b|0)if(b>>>0<(c[2259]|0)>>>0)$();else{c[n+20>>2]=b;c[b+24>>2]=n;break}}while(0);if(h>>>0<16){J=h+p|0;c[j+4>>2]=J|3;J=j+J+4|0;c[J>>2]=c[J>>2]|1}else{c[j+4>>2]=p|3;c[i+4>>2]=h|1;c[i+h>>2]=h;if(s|0){e=c[2260]|0;b=s>>>3;d=9060+(b<<1<<2)|0;b=1<<b;if(t&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{q=a;r=b}}else{c[2255]=t|b;q=d;r=d+8|0}c[r>>2]=e;c[q+12>>2]=e;c[e+8>>2]=q;c[e+12>>2]=d}c[2257]=h;c[2260]=i}J=j+8|0;l=K;return J|0}}}else if(a>>>0<=4294967231){a=a+11|0;p=a&-8;k=c[2256]|0;if(k){e=0-p|0;a=a>>>8;if(a)if(p>>>0>16777215)i=31;else{r=(a+1048320|0)>>>16&8;C=a<<r;q=(C+520192|0)>>>16&4;C=C<<q;i=(C+245760|0)>>>16&2;i=14-(q|r|i)+(C<<i>>>15)|0;i=p>>>(i+7|0)&1|i<<1}else i=0;d=c[9324+(i<<2)>>2]|0;b:do if(!d){d=0;a=0;C=81}else{a=0;h=p<<((i|0)==31?0:25-(i>>>1)|0);g=0;while(1){f=(c[d+4>>2]&-8)-p|0;if(f>>>0<e>>>0)if(!f){a=d;e=0;f=d;C=85;break b}else{a=d;e=f}f=c[d+20>>2]|0;d=c[d+16+(h>>>31<<2)>>2]|0;g=(f|0)==0|(f|0)==(d|0)?g:f;f=(d|0)==0;if(f){d=g;C=81;break}else h=h<<((f^1)&1)}}while(0);if((C|0)==81){if((d|0)==0&(a|0)==0){a=2<<i;a=k&(a|0-a);if(!a)break;r=(a&0-a)+-1|0;m=r>>>12&16;r=r>>>m;j=r>>>5&8;r=r>>>j;n=r>>>2&4;r=r>>>n;q=r>>>1&2;r=r>>>q;d=r>>>1&1;a=0;d=c[9324+((j|m|n|q|d)+(r>>>d)<<2)>>2]|0}if(!d){j=a;i=e}else{f=d;C=85}}if((C|0)==85)while(1){C=0;d=(c[f+4>>2]&-8)-p|0;r=d>>>0<e>>>0;d=r?d:e;a=r?f:a;f=c[f+16+(((c[f+16>>2]|0)==0&1)<<2)>>2]|0;if(!f){j=a;i=d;break}else{e=d;C=85}}if((j|0)!=0?i>>>0<((c[2257]|0)-p|0)>>>0:0){f=c[2259]|0;if(j>>>0<f>>>0)$();h=j+p|0;if(j>>>0>=h>>>0)$();g=c[j+24>>2]|0;d=c[j+12>>2]|0;do if((d|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){s=0;break}}while(1){d=b+20|0;e=c[d>>2]|0;if(e|0){b=e;a=d;continue}d=b+16|0;e=c[d>>2]|0;if(!e)break;else{b=e;a=d}}if(a>>>0<f>>>0)$();else{c[a>>2]=0;s=b;break}}else{e=c[j+8>>2]|0;if(e>>>0<f>>>0)$();b=e+12|0;if((c[b>>2]|0)!=(j|0))$();a=d+8|0;if((c[a>>2]|0)==(j|0)){c[b>>2]=d;c[a>>2]=e;s=d;break}else $()}while(0);c:do if(g){b=c[j+28>>2]|0;a=9324+(b<<2)|0;do if((j|0)==(c[a>>2]|0)){c[a>>2]=s;if(!s){t=k&~(1<<b);c[2256]=t;break c}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(j|0)&1)<<2)>>2]=s;if(!s){t=k;break c}else break}else $();while(0);a=c[2259]|0;if(s>>>0<a>>>0)$();c[s+24>>2]=g;b=c[j+16>>2]|0;do if(b|0)if(b>>>0<a>>>0)$();else{c[s+16>>2]=b;c[b+24>>2]=s;break}while(0);b=c[j+20>>2]|0;if(b)if(b>>>0<(c[2259]|0)>>>0)$();else{c[s+20>>2]=b;c[b+24>>2]=s;t=k;break}else t=k}else t=k;while(0);do if(i>>>0>=16){c[j+4>>2]=p|3;c[h+4>>2]=i|1;c[h+i>>2]=i;b=i>>>3;if(i>>>0<256){d=9060+(b<<1<<2)|0;a=c[2255]|0;b=1<<b;if(a&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{x=a;y=b}}else{c[2255]=a|b;x=d;y=d+8|0}c[y>>2]=h;c[x+12>>2]=h;c[h+8>>2]=x;c[h+12>>2]=d;break}b=i>>>8;if(b)if(i>>>0>16777215)b=31;else{I=(b+1048320|0)>>>16&8;J=b<<I;H=(J+520192|0)>>>16&4;J=J<<H;b=(J+245760|0)>>>16&2;b=14-(H|I|b)+(J<<b>>>15)|0;b=i>>>(b+7|0)&1|b<<1}else b=0;d=9324+(b<<2)|0;c[h+28>>2]=b;a=h+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<<b;if(!(t&a)){c[2256]=t|a;c[d>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}a=i<<((b|0)==31?0:25-(b>>>1)|0);e=c[d>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(i|0)){C=139;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=136;break}else{a=a<<1;e=b}}if((C|0)==136)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=h;c[h+24>>2]=e;c[h+12>>2]=h;c[h+8>>2]=h;break}else if((C|0)==139){b=e+8|0;a=c[b>>2]|0;J=c[2259]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=h;c[b>>2]=h;c[h+8>>2]=a;c[h+12>>2]=e;c[h+24>>2]=0;break}else $()}}else{J=i+p|0;c[j+4>>2]=J|3;J=j+J+4|0;c[J>>2]=c[J>>2]|1}while(0);J=j+8|0;l=K;return J|0}}}else p=-1;while(0);d=c[2257]|0;if(d>>>0>=p>>>0){b=d-p|0;a=c[2260]|0;if(b>>>0>15){J=a+p|0;c[2260]=J;c[2257]=b;c[J+4>>2]=b|1;c[J+b>>2]=b;c[a+4>>2]=p|3}else{c[2257]=0;c[2260]=0;c[a+4>>2]=d|3;J=a+d+4|0;c[J>>2]=c[J>>2]|1}J=a+8|0;l=K;return J|0}h=c[2258]|0;if(h>>>0>p>>>0){H=h-p|0;c[2258]=H;J=c[2261]|0;I=J+p|0;c[2261]=I;c[I+4>>2]=H|1;c[J+4>>2]=p|3;J=J+8|0;l=K;return J|0}if(!(c[2373]|0)){c[2375]=4096;c[2374]=4096;c[2376]=-1;c[2377]=-1;c[2378]=0;c[2366]=0;a=o&-16^1431655768;c[o>>2]=a;c[2373]=a;a=4096}else a=c[2375]|0;i=p+48|0;j=p+47|0;g=a+j|0;f=0-a|0;k=g&f;if(k>>>0<=p>>>0){J=0;l=K;return J|0}a=c[2365]|0;if(a|0?(x=c[2363]|0,y=x+k|0,y>>>0<=x>>>0|y>>>0>a>>>0):0){J=0;l=K;return J|0}d:do if(!(c[2366]&4)){d=c[2261]|0;e:do if(d){e=9468;while(1){a=c[e>>2]|0;if(a>>>0<=d>>>0?(w=e+4|0,(a+(c[w>>2]|0)|0)>>>0>d>>>0):0)break;a=c[e+8>>2]|0;if(!a){C=163;break e}else e=a}b=g-h&f;if(b>>>0<2147483647){a=sb(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[w>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;C=180;break d}}else{e=a;C=171}}else b=0}else C=163;while(0);do if((C|0)==163){d=sb(0)|0;if((d|0)!=(-1|0)?(b=d,u=c[2374]|0,v=u+-1|0,b=((v&b|0)==0?0:(v+b&0-u)-b|0)+k|0,u=c[2363]|0,v=b+u|0,b>>>0>p>>>0&b>>>0<2147483647):0){y=c[2365]|0;if(y|0?v>>>0<=u>>>0|v>>>0>y>>>0:0){b=0;break}a=sb(b|0)|0;if((a|0)==(d|0)){h=b;g=d;C=180;break d}else{e=a;C=171}}else b=0}while(0);do if((C|0)==171){d=0-b|0;if(!(i>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=b;g=e;C=180;break d}a=c[2375]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;C=180;break d}if((sb(a|0)|0)==(-1|0)){sb(d|0)|0;b=0;break}else{h=a+b|0;g=e;C=180;break d}}while(0);c[2366]=c[2366]|4;C=178}else{b=0;C=178}while(0);if(((C|0)==178?k>>>0<2147483647:0)?(B=sb(k|0)|0,y=sb(0)|0,z=y-B|0,A=z>>>0>(p+40|0)>>>0,!((B|0)==(-1|0)|A^1|B>>>0<y>>>0&((B|0)!=(-1|0)&(y|0)!=(-1|0))^1)):0){h=A?z:b;g=B;C=180}if((C|0)==180){b=(c[2363]|0)+h|0;c[2363]=b;if(b>>>0>(c[2364]|0)>>>0)c[2364]=b;k=c[2261]|0;do if(k){b=9468;while(1){a=c[b>>2]|0;d=b+4|0;e=c[d>>2]|0;if((g|0)==(a+e|0)){C=190;break}f=c[b+8>>2]|0;if(!f)break;else b=f}if(((C|0)==190?(c[b+12>>2]&8|0)==0:0)?k>>>0<g>>>0&k>>>0>=a>>>0:0){c[d>>2]=e+h;J=k+8|0;J=(J&7|0)==0?0:0-J&7;I=k+J|0;J=(c[2258]|0)+(h-J)|0;c[2261]=I;c[2258]=J;c[I+4>>2]=J|1;c[I+J+4>>2]=40;c[2262]=c[2377];break}b=c[2259]|0;if(g>>>0<b>>>0){c[2259]=g;i=g}else i=b;d=g+h|0;b=9468;while(1){if((c[b>>2]|0)==(d|0)){C=198;break}a=c[b+8>>2]|0;if(!a)break;else b=a}if((C|0)==198?(c[b+12>>2]&8|0)==0:0){c[b>>2]=g;n=b+4|0;c[n>>2]=(c[n>>2]|0)+h;n=g+8|0;n=g+((n&7|0)==0?0:0-n&7)|0;b=d+8|0;b=d+((b&7|0)==0?0:0-b&7)|0;m=n+p|0;j=b-n-p|0;c[n+4>>2]=p|3;do if((b|0)!=(k|0)){if((b|0)==(c[2260]|0)){J=(c[2257]|0)+j|0;c[2257]=J;c[2260]=m;c[m+4>>2]=J|1;c[m+J>>2]=J;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;f=a>>>3;f:do if(a>>>0>=256){g=c[b+24>>2]|0;e=c[b+12>>2]|0;do if((e|0)==(b|0)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){H=0;break}else d=e}while(1){e=a+20|0;f=c[e>>2]|0;if(f|0){a=f;d=e;continue}e=a+16|0;f=c[e>>2]|0;if(!f)break;else{a=f;d=e}}if(d>>>0<i>>>0)$();else{c[d>>2]=0;H=a;break}}else{f=c[b+8>>2]|0;if(f>>>0<i>>>0)$();a=f+12|0;if((c[a>>2]|0)!=(b|0))$();d=e+8|0;if((c[d>>2]|0)==(b|0)){c[a>>2]=e;c[d>>2]=f;H=e;break}else $()}while(0);if(!g)break;a=c[b+28>>2]|0;d=9324+(a<<2)|0;do if((b|0)!=(c[d>>2]|0))if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=H;if(!H)break f;else break}else $();else{c[d>>2]=H;if(H|0)break;c[2256]=c[2256]&~(1<<a);break f}while(0);e=c[2259]|0;if(H>>>0<e>>>0)$();c[H+24>>2]=g;a=b+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0<e>>>0)$();else{c[H+16>>2]=d;c[d+24>>2]=H;break}while(0);a=c[a+4>>2]|0;if(!a)break;if(a>>>0<(c[2259]|0)>>>0)$();else{c[H+20>>2]=a;c[a+24>>2]=H;break}}else{d=c[b+8>>2]|0;e=c[b+12>>2]|0;a=9060+(f<<1<<2)|0;do if((d|0)!=(a|0)){if(d>>>0<i>>>0)$();if((c[d+12>>2]|0)==(b|0))break;$()}while(0);if((e|0)==(d|0)){c[2255]=c[2255]&~(1<<f);break}do if((e|0)==(a|0))E=e+8|0;else{if(e>>>0<i>>>0)$();a=e+8|0;if((c[a>>2]|0)==(b|0)){E=a;break}$()}while(0);c[d+12>>2]=e;c[E>>2]=d}while(0);b=b+h|0;f=h+j|0}else f=j;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[m+4>>2]=f|1;c[m+f>>2]=f;b=f>>>3;if(f>>>0<256){d=9060+(b<<1<<2)|0;a=c[2255]|0;b=1<<b;do if(!(a&b)){c[2255]=a|b;I=d;J=d+8|0}else{b=d+8|0;a=c[b>>2]|0;if(a>>>0>=(c[2259]|0)>>>0){I=a;J=b;break}$()}while(0);c[J>>2]=m;c[I+12>>2]=m;c[m+8>>2]=I;c[m+12>>2]=d;break}b=f>>>8;do if(!b)b=0;else{if(f>>>0>16777215){b=31;break}I=(b+1048320|0)>>>16&8;J=b<<I;H=(J+520192|0)>>>16&4;J=J<<H;b=(J+245760|0)>>>16&2;b=14-(H|I|b)+(J<<b>>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=9324+(b<<2)|0;c[m+28>>2]=b;a=m+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[2256]|0;d=1<<b;if(!(a&d)){c[2256]=a|d;c[e>>2]=m;c[m+24>>2]=e;c[m+12>>2]=m;c[m+8>>2]=m;break}a=f<<((b|0)==31?0:25-(b>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){C=265;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=262;break}else{a=a<<1;e=b}}if((C|0)==262)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=m;c[m+24>>2]=e;c[m+12>>2]=m;c[m+8>>2]=m;break}else if((C|0)==265){b=e+8|0;a=c[b>>2]|0;J=c[2259]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=m;c[b>>2]=m;c[m+8>>2]=a;c[m+12>>2]=e;c[m+24>>2]=0;break}else $()}}else{J=(c[2258]|0)+j|0;c[2258]=J;c[2261]=m;c[m+4>>2]=J|1}while(0);J=n+8|0;l=K;return J|0}b=9468;while(1){a=c[b>>2]|0;if(a>>>0<=k>>>0?(D=a+(c[b+4>>2]|0)|0,D>>>0>k>>>0):0)break;b=c[b+8>>2]|0}f=D+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=k+16|0;a=a>>>0<f>>>0?k:a;b=a+8|0;d=g+8|0;d=(d&7|0)==0?0:0-d&7;J=g+d|0;d=h+-40-d|0;c[2261]=J;c[2258]=d;c[J+4>>2]=d|1;c[J+d+4>>2]=40;c[2262]=c[2377];d=a+4|0;c[d>>2]=27;c[b>>2]=c[2367];c[b+4>>2]=c[2368];c[b+8>>2]=c[2369];c[b+12>>2]=c[2370];c[2367]=g;c[2368]=h;c[2370]=0;c[2369]=b;b=a+24|0;do{J=b;b=b+4|0;c[b>>2]=7}while((J+8|0)>>>0<D>>>0);if((a|0)!=(k|0)){g=a-k|0;c[d>>2]=c[d>>2]&-2;c[k+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=9060+(b<<1<<2)|0;a=c[2255]|0;b=1<<b;if(a&b){b=d+8|0;a=c[b>>2]|0;if(a>>>0<(c[2259]|0)>>>0)$();else{F=a;G=b}}else{c[2255]=a|b;F=d;G=d+8|0}c[G>>2]=k;c[F+12>>2]=k;c[k+8>>2]=F;c[k+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)d=31;else{I=(b+1048320|0)>>>16&8;J=b<<I;H=(J+520192|0)>>>16&4;J=J<<H;d=(J+245760|0)>>>16&2;d=14-(H|I|d)+(J<<d>>>15)|0;d=g>>>(d+7|0)&1|d<<1}else d=0;e=9324+(d<<2)|0;c[k+28>>2]=d;c[k+20>>2]=0;c[f>>2]=0;b=c[2256]|0;a=1<<d;if(!(b&a)){c[2256]=b|a;c[e>>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}a=g<<((d|0)==31?0:25-(d>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(g|0)){C=292;break}d=e+16+(a>>>31<<2)|0;b=c[d>>2]|0;if(!b){C=289;break}else{a=a<<1;e=b}}if((C|0)==289)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((C|0)==292){b=e+8|0;a=c[b>>2]|0;J=c[2259]|0;if(a>>>0>=J>>>0&e>>>0>=J>>>0){c[a+12>>2]=k;c[b>>2]=k;c[k+8>>2]=a;c[k+12>>2]=e;c[k+24>>2]=0;break}else $()}}}else{J=c[2259]|0;if((J|0)==0|g>>>0<J>>>0)c[2259]=g;c[2367]=g;c[2368]=h;c[2370]=0;c[2264]=c[2373];c[2263]=-1;b=0;do{J=9060+(b<<1<<2)|0;c[J+12>>2]=J;c[J+8>>2]=J;b=b+1|0}while((b|0)!=32);J=g+8|0;J=(J&7|0)==0?0:0-J&7;I=g+J|0;J=h+-40-J|0;c[2261]=I;c[2258]=J;c[I+4>>2]=J|1;c[I+J+4>>2]=40;c[2262]=c[2377]}while(0);b=c[2258]|0;if(b>>>0>p>>>0){H=b-p|0;c[2258]=H;J=c[2261]|0;I=J+p|0;c[2261]=I;c[I+4>>2]=H|1;c[J+4>>2]=p|3;J=J+8|0;l=K;return J|0}}c[(Wa()|0)>>2]=12;J=0;l=K;return J|0}function hb(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if(!a)return;d=a+-8|0;h=c[2259]|0;if(d>>>0<h>>>0)$();a=c[a+-4>>2]|0;b=a&3;if((b|0)==1)$();e=a&-8;o=d+e|0;a:do if(!(a&1)){a=c[d>>2]|0;if(!b)return;k=d+(0-a)|0;j=a+e|0;if(k>>>0<h>>>0)$();if((k|0)==(c[2260]|0)){a=o+4|0;b=c[a>>2]|0;if((b&3|0)!=3){r=k;f=j;m=k;break}c[2257]=j;c[a>>2]=b&-2;c[k+4>>2]=j|1;c[k+j>>2]=j;return}e=a>>>3;if(a>>>0<256){b=c[k+8>>2]|0;d=c[k+12>>2]|0;a=9060+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0<h>>>0)$();if((c[b+12>>2]|0)!=(k|0))$()}if((d|0)==(b|0)){c[2255]=c[2255]&~(1<<e);r=k;f=j;m=k;break}if((d|0)!=(a|0)){if(d>>>0<h>>>0)$();a=d+8|0;if((c[a>>2]|0)==(k|0))g=a;else $()}else g=d+8|0;c[b+12>>2]=d;c[g>>2]=b;r=k;f=j;m=k;break}g=c[k+24>>2]|0;d=c[k+12>>2]|0;do if((d|0)==(k|0)){d=k+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){i=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<h>>>0)$();else{c[b>>2]=0;i=a;break}}else{e=c[k+8>>2]|0;if(e>>>0<h>>>0)$();a=e+12|0;if((c[a>>2]|0)!=(k|0))$();b=d+8|0;if((c[b>>2]|0)==(k|0)){c[a>>2]=d;c[b>>2]=e;i=d;break}else $()}while(0);if(g){a=c[k+28>>2]|0;b=9324+(a<<2)|0;do if((k|0)==(c[b>>2]|0)){c[b>>2]=i;if(!i){c[2256]=c[2256]&~(1<<a);r=k;f=j;m=k;break a}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(k|0)&1)<<2)>>2]=i;if(!i){r=k;f=j;m=k;break a}else break}else $();while(0);d=c[2259]|0;if(i>>>0<d>>>0)$();c[i+24>>2]=g;a=k+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0<d>>>0)$();else{c[i+16>>2]=b;c[b+24>>2]=i;break}while(0);a=c[a+4>>2]|0;if(a)if(a>>>0<(c[2259]|0)>>>0)$();else{c[i+20>>2]=a;c[a+24>>2]=i;r=k;f=j;m=k;break}else{r=k;f=j;m=k}}else{r=k;f=j;m=k}}else{r=d;f=e;m=d}while(0);if(m>>>0>=o>>>0)$();a=o+4|0;b=c[a>>2]|0;if(!(b&1))$();if(!(b&2)){a=c[2260]|0;if((o|0)==(c[2261]|0)){q=(c[2258]|0)+f|0;c[2258]=q;c[2261]=r;c[r+4>>2]=q|1;if((r|0)!=(a|0))return;c[2260]=0;c[2257]=0;return}if((o|0)==(a|0)){q=(c[2257]|0)+f|0;c[2257]=q;c[2260]=m;c[r+4>>2]=q|1;c[m+q>>2]=q;return}f=(b&-8)+f|0;e=b>>>3;b:do if(b>>>0>=256){g=c[o+24>>2]|0;a=c[o+12>>2]|0;do if((a|0)==(o|0)){d=o+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){n=0;break}else b=d}while(1){d=a+20|0;e=c[d>>2]|0;if(e|0){a=e;b=d;continue}d=a+16|0;e=c[d>>2]|0;if(!e)break;else{a=e;b=d}}if(b>>>0<(c[2259]|0)>>>0)$();else{c[b>>2]=0;n=a;break}}else{b=c[o+8>>2]|0;if(b>>>0<(c[2259]|0)>>>0)$();d=b+12|0;if((c[d>>2]|0)!=(o|0))$();e=a+8|0;if((c[e>>2]|0)==(o|0)){c[d>>2]=a;c[e>>2]=b;n=a;break}else $()}while(0);if(g|0){a=c[o+28>>2]|0;b=9324+(a<<2)|0;do if((o|0)==(c[b>>2]|0)){c[b>>2]=n;if(!n){c[2256]=c[2256]&~(1<<a);break b}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(o|0)&1)<<2)>>2]=n;if(!n)break b;else break}else $();while(0);d=c[2259]|0;if(n>>>0<d>>>0)$();c[n+24>>2]=g;a=o+16|0;b=c[a>>2]|0;do if(b|0)if(b>>>0<d>>>0)$();else{c[n+16>>2]=b;c[b+24>>2]=n;break}while(0);a=c[a+4>>2]|0;if(a|0)if(a>>>0<(c[2259]|0)>>>0)$();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}else{b=c[o+8>>2]|0;d=c[o+12>>2]|0;a=9060+(e<<1<<2)|0;if((b|0)!=(a|0)){if(b>>>0<(c[2259]|0)>>>0)$();if((c[b+12>>2]|0)!=(o|0))$()}if((d|0)==(b|0)){c[2255]=c[2255]&~(1<<e);break}if((d|0)!=(a|0)){if(d>>>0<(c[2259]|0)>>>0)$();a=d+8|0;if((c[a>>2]|0)==(o|0))l=a;else $()}else l=d+8|0;c[b+12>>2]=d;c[l>>2]=b}while(0);c[r+4>>2]=f|1;c[m+f>>2]=f;if((r|0)==(c[2260]|0)){c[2257]=f;return}}else{c[a>>2]=b&-2;c[r+4>>2]=f|1;c[m+f>>2]=f}a=f>>>3;if(f>>>0<256){d=9060+(a<<1<<2)|0;b=c[2255]|0;a=1<<a;if(b&a){a=d+8|0;b=c[a>>2]|0;if(b>>>0<(c[2259]|0)>>>0)$();else{p=b;q=a}}else{c[2255]=b|a;p=d;q=d+8|0}c[q>>2]=r;c[p+12>>2]=r;c[r+8>>2]=p;c[r+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{p=(a+1048320|0)>>>16&8;q=a<<p;o=(q+520192|0)>>>16&4;q=q<<o;a=(q+245760|0)>>>16&2;a=14-(o|p|a)+(q<<a>>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=9324+(a<<2)|0;c[r+28>>2]=a;c[r+20>>2]=0;c[r+16>>2]=0;b=c[2256]|0;d=1<<a;do if(b&d){b=f<<((a|0)==31?0:25-(a>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){a=124;break}d=e+16+(b>>>31<<2)|0;a=c[d>>2]|0;if(!a){a=121;break}else{b=b<<1;e=a}}if((a|0)==121)if(d>>>0<(c[2259]|0)>>>0)$();else{c[d>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;break}else if((a|0)==124){a=e+8|0;b=c[a>>2]|0;q=c[2259]|0;if(b>>>0>=q>>>0&e>>>0>=q>>>0){c[b+12>>2]=r;c[a>>2]=r;c[r+8>>2]=b;c[r+12>>2]=e;c[r+24>>2]=0;break}else $()}}else{c[2256]=b|d;c[e>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r}while(0);r=(c[2263]|0)+-1|0;c[2263]=r;if(!r)a=9476;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[2263]=-1;return}function ib(a,b){a=a|0;b=b|0;var d=0;if(a){d=N(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=gb(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;ob(a|0,0,d|0)|0;return a|0}function jb(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=gb(b)|0;return b|0}if(b>>>0>4294967231){c[(Wa()|0)>>2]=12;b=0;return b|0}d=kb(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=gb(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;tb(d|0,a|0,(e>>>0<b>>>0?e:b)|0)|0;hb(a);b=d;return b|0}function kb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=a+4|0;n=c[o>>2]|0;d=n&-8;k=a+d|0;i=c[2259]|0;e=n&3;if(!((e|0)!=1&a>>>0>=i>>>0&a>>>0<k>>>0))$();f=c[k+4>>2]|0;if(!(f&1))$();if(!e){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[2375]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;m=a+b|0;c[o>>2]=n&1|b|2;c[m+4>>2]=d|3;o=m+d+4|0;c[o>>2]=c[o>>2]|1;lb(m,d);return a|0}if((k|0)==(c[2261]|0)){m=(c[2258]|0)+d|0;d=m-b|0;e=a+b|0;if(m>>>0<=b>>>0){a=0;return a|0}c[o>>2]=n&1|b|2;c[e+4>>2]=d|1;c[2261]=e;c[2258]=d;return a|0}if((k|0)==(c[2260]|0)){f=(c[2257]|0)+d|0;if(f>>>0<b>>>0){a=0;return a|0}d=f-b|0;e=n&1;if(d>>>0>15){n=a+b|0;m=n+d|0;c[o>>2]=e|b|2;c[n+4>>2]=d|1;c[m>>2]=d;e=m+4|0;c[e>>2]=c[e>>2]&-2;e=n}else{c[o>>2]=e|f|2;e=a+f+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[2257]=d;c[2260]=e;return a|0}if(f&2|0){a=0;return a|0}l=(f&-8)+d|0;if(l>>>0<b>>>0){a=0;return a|0}m=l-b|0;g=f>>>3;a:do if(f>>>0>=256){h=c[k+24>>2]|0;f=c[k+12>>2]|0;do if((f|0)==(k|0)){f=k+16|0;e=f+4|0;d=c[e>>2]|0;if(!d){d=c[f>>2]|0;if(!d){j=0;break}else e=f}while(1){f=d+20|0;g=c[f>>2]|0;if(g|0){d=g;e=f;continue}f=d+16|0;g=c[f>>2]|0;if(!g)break;else{d=g;e=f}}if(e>>>0<i>>>0)$();else{c[e>>2]=0;j=d;break}}else{g=c[k+8>>2]|0;if(g>>>0<i>>>0)$();d=g+12|0;if((c[d>>2]|0)!=(k|0))$();e=f+8|0;if((c[e>>2]|0)==(k|0)){c[d>>2]=f;c[e>>2]=g;j=f;break}else $()}while(0);if(h|0){d=c[k+28>>2]|0;e=9324+(d<<2)|0;do if((k|0)==(c[e>>2]|0)){c[e>>2]=j;if(!j){c[2256]=c[2256]&~(1<<d);break a}}else if(h>>>0>=(c[2259]|0)>>>0){c[h+16+(((c[h+16>>2]|0)!=(k|0)&1)<<2)>>2]=j;if(!j)break a;else break}else $();while(0);f=c[2259]|0;if(j>>>0<f>>>0)$();c[j+24>>2]=h;d=k+16|0;e=c[d>>2]|0;do if(e|0)if(e>>>0<f>>>0)$();else{c[j+16>>2]=e;c[e+24>>2]=j;break}while(0);d=c[d+4>>2]|0;if(d|0)if(d>>>0<(c[2259]|0)>>>0)$();else{c[j+20>>2]=d;c[d+24>>2]=j;break}}}else{e=c[k+8>>2]|0;f=c[k+12>>2]|0;d=9060+(g<<1<<2)|0;if((e|0)!=(d|0)){if(e>>>0<i>>>0)$();if((c[e+12>>2]|0)!=(k|0))$()}if((f|0)==(e|0)){c[2255]=c[2255]&~(1<<g);break}if((f|0)!=(d|0)){if(f>>>0<i>>>0)$();d=f+8|0;if((c[d>>2]|0)==(k|0))h=d;else $()}else h=f+8|0;c[e+12>>2]=f;c[h>>2]=e}while(0);d=n&1;if(m>>>0<16){c[o>>2]=l|d|2;o=a+l+4|0;c[o>>2]=c[o>>2]|1;return a|0}else{n=a+b|0;c[o>>2]=d|b|2;c[n+4>>2]=m|3;o=n+m+4|0;c[o>>2]=c[o>>2]|1;lb(n,m);return a|0}return 0}function lb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=a+b|0;d=c[a+4>>2]|0;a:do if(!(d&1)){g=c[a>>2]|0;if(!(d&3))return;l=a+(0-g)|0;k=g+b|0;i=c[2259]|0;if(l>>>0<i>>>0)$();if((l|0)==(c[2260]|0)){a=o+4|0;d=c[a>>2]|0;if((d&3|0)!=3){r=l;f=k;break}c[2257]=k;c[a>>2]=d&-2;c[l+4>>2]=k|1;c[l+k>>2]=k;return}e=g>>>3;if(g>>>0<256){d=c[l+8>>2]|0;b=c[l+12>>2]|0;a=9060+(e<<1<<2)|0;if((d|0)!=(a|0)){if(d>>>0<i>>>0)$();if((c[d+12>>2]|0)!=(l|0))$()}if((b|0)==(d|0)){c[2255]=c[2255]&~(1<<e);r=l;f=k;break}if((b|0)!=(a|0)){if(b>>>0<i>>>0)$();a=b+8|0;if((c[a>>2]|0)==(l|0))h=a;else $()}else h=b+8|0;c[d+12>>2]=b;c[h>>2]=d;r=l;f=k;break}g=c[l+24>>2]|0;b=c[l+12>>2]|0;do if((b|0)==(l|0)){b=l+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){j=0;break}else d=b}while(1){b=a+20|0;e=c[b>>2]|0;if(e|0){a=e;d=b;continue}b=a+16|0;e=c[b>>2]|0;if(!e)break;else{a=e;d=b}}if(d>>>0<i>>>0)$();else{c[d>>2]=0;j=a;break}}else{e=c[l+8>>2]|0;if(e>>>0<i>>>0)$();a=e+12|0;if((c[a>>2]|0)!=(l|0))$();d=b+8|0;if((c[d>>2]|0)==(l|0)){c[a>>2]=b;c[d>>2]=e;j=b;break}else $()}while(0);if(g){a=c[l+28>>2]|0;d=9324+(a<<2)|0;do if((l|0)==(c[d>>2]|0)){c[d>>2]=j;if(!j){c[2256]=c[2256]&~(1<<a);r=l;f=k;break a}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(l|0)&1)<<2)>>2]=j;if(!j){r=l;f=k;break a}else break}else $();while(0);b=c[2259]|0;if(j>>>0<b>>>0)$();c[j+24>>2]=g;a=l+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0<b>>>0)$();else{c[j+16>>2]=d;c[d+24>>2]=j;break}while(0);a=c[a+4>>2]|0;if(a)if(a>>>0<(c[2259]|0)>>>0)$();else{c[j+20>>2]=a;c[a+24>>2]=j;r=l;f=k;break}else{r=l;f=k}}else{r=l;f=k}}else{r=a;f=b}while(0);h=c[2259]|0;if(o>>>0<h>>>0)$();a=o+4|0;d=c[a>>2]|0;if(!(d&2)){a=c[2260]|0;if((o|0)==(c[2261]|0)){q=(c[2258]|0)+f|0;c[2258]=q;c[2261]=r;c[r+4>>2]=q|1;if((r|0)!=(a|0))return;c[2260]=0;c[2257]=0;return}if((o|0)==(a|0)){q=(c[2257]|0)+f|0;c[2257]=q;c[2260]=r;c[r+4>>2]=q|1;c[r+q>>2]=q;return}f=(d&-8)+f|0;e=d>>>3;b:do if(d>>>0>=256){g=c[o+24>>2]|0;b=c[o+12>>2]|0;do if((b|0)==(o|0)){b=o+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){n=0;break}else d=b}while(1){b=a+20|0;e=c[b>>2]|0;if(e|0){a=e;d=b;continue}b=a+16|0;e=c[b>>2]|0;if(!e)break;else{a=e;d=b}}if(d>>>0<h>>>0)$();else{c[d>>2]=0;n=a;break}}else{e=c[o+8>>2]|0;if(e>>>0<h>>>0)$();a=e+12|0;if((c[a>>2]|0)!=(o|0))$();d=b+8|0;if((c[d>>2]|0)==(o|0)){c[a>>2]=b;c[d>>2]=e;n=b;break}else $()}while(0);if(g|0){a=c[o+28>>2]|0;d=9324+(a<<2)|0;do if((o|0)==(c[d>>2]|0)){c[d>>2]=n;if(!n){c[2256]=c[2256]&~(1<<a);break b}}else if(g>>>0>=(c[2259]|0)>>>0){c[g+16+(((c[g+16>>2]|0)!=(o|0)&1)<<2)>>2]=n;if(!n)break b;else break}else $();while(0);b=c[2259]|0;if(n>>>0<b>>>0)$();c[n+24>>2]=g;a=o+16|0;d=c[a>>2]|0;do if(d|0)if(d>>>0<b>>>0)$();else{c[n+16>>2]=d;c[d+24>>2]=n;break}while(0);a=c[a+4>>2]|0;if(a|0)if(a>>>0<(c[2259]|0)>>>0)$();else{c[n+20>>2]=a;c[a+24>>2]=n;break}}}else{d=c[o+8>>2]|0;b=c[o+12>>2]|0;a=9060+(e<<1<<2)|0;if((d|0)!=(a|0)){if(d>>>0<h>>>0)$();if((c[d+12>>2]|0)!=(o|0))$()}if((b|0)==(d|0)){c[2255]=c[2255]&~(1<<e);break}if((b|0)!=(a|0)){if(b>>>0<h>>>0)$();a=b+8|0;if((c[a>>2]|0)==(o|0))m=a;else $()}else m=b+8|0;c[d+12>>2]=b;c[m>>2]=d}while(0);c[r+4>>2]=f|1;c[r+f>>2]=f;if((r|0)==(c[2260]|0)){c[2257]=f;return}}else{c[a>>2]=d&-2;c[r+4>>2]=f|1;c[r+f>>2]=f}a=f>>>3;if(f>>>0<256){b=9060+(a<<1<<2)|0;d=c[2255]|0;a=1<<a;if(d&a){a=b+8|0;d=c[a>>2]|0;if(d>>>0<(c[2259]|0)>>>0)$();else{p=d;q=a}}else{c[2255]=d|a;p=b;q=b+8|0}c[q>>2]=r;c[p+12>>2]=r;c[r+8>>2]=p;c[r+12>>2]=b;return}a=f>>>8;if(a)if(f>>>0>16777215)a=31;else{p=(a+1048320|0)>>>16&8;q=a<<p;o=(q+520192|0)>>>16&4;q=q<<o;a=(q+245760|0)>>>16&2;a=14-(o|p|a)+(q<<a>>>15)|0;a=f>>>(a+7|0)&1|a<<1}else a=0;e=9324+(a<<2)|0;c[r+28>>2]=a;c[r+20>>2]=0;c[r+16>>2]=0;d=c[2256]|0;b=1<<a;if(!(d&b)){c[2256]=d|b;c[e>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;return}d=f<<((a|0)==31?0:25-(a>>>1)|0);e=c[e>>2]|0;while(1){if((c[e+4>>2]&-8|0)==(f|0)){a=121;break}b=e+16+(d>>>31<<2)|0;a=c[b>>2]|0;if(!a){a=118;break}else{d=d<<1;e=a}}if((a|0)==118){if(b>>>0<(c[2259]|0)>>>0)$();c[b>>2]=r;c[r+24>>2]=e;c[r+12>>2]=r;c[r+8>>2]=r;return}else if((a|0)==121){a=e+8|0;d=c[a>>2]|0;q=c[2259]|0;if(!(d>>>0>=q>>>0&e>>>0>=q>>>0))$();c[d+12>>2]=r;c[a>>2]=r;c[r+8>>2]=d;c[r+12>>2]=e;c[r+24>>2]=0;return}}function mb(){}function nb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (y=b+d+(c>>>0<a>>>0|0)>>>0,c|0)|0}function ob(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;g=f-64|0;i=d|d<<8|d<<16|d<<24;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function pb(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}y=0;return b>>>c-32|0}function qb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=N(e,f)|0;d=a>>>16;a=(c>>>16)+(N(e,d)|0)|0;e=b>>>16;b=N(e,f)|0;return (y=(a>>>16)+(N(e,d)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|c&65535|0)|0}function rb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=qb(e,f)|0;a=y;return (y=(N(b,f)|0)+(N(d,e)|0)+a|a&0,c|0|0)|0}function sb(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){V()|0;aa(12);return -1}c[i>>2]=a;if((a|0)>(U()|0)?(T()|0)==0:0){c[i>>2]=b;aa(12);return -1}return b|0}function tb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return da(b|0,d|0,e|0)|0;h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function ub(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function vb(a,b){a=a|0;b=b|0;return ia[a&1](b|0)|0}function wb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ja[a&3](b|0,c|0,d|0)|0}function xb(a){a=a|0;R(0);return 0}function yb(a,b,c){a=a|0;b=b|0;c=c|0;R(1);return 0}
+-
+-// EMSCRIPTEN_END_FUNCS
+-var ia=[xb,Sa];var ja=[yb,_a,Ua,Ta];return{_llvm_bswap_i32:ub,_shine_check_config:Ha,_shine_flush:La,setThrew:oa,_bitshift64Lshr:pb,_shine_samples_per_pass:Ia,_fflush:eb,_shine_js_init:Qa,_memset:ob,_sbrk:sb,_memcpy:tb,___errno_location:Wa,_shine_encode_buffer:Ka,_shine_close:Ma,stackAlloc:ka,getTempRet0:qa,___muldi3:rb,setTempRet0:pa,_i64Add:nb,_emscripten_get_global_libc:Ra,stackSave:la,___muldsi3:qb,_free:hb,runPostSets:mb,establishStackSpace:na,stackRestore:ma,_malloc:gb,stackAlloc:ka,stackSave:la,stackRestore:ma,establishStackSpace:na,setThrew:oa,setTempRet0:pa,getTempRet0:qa,dynCall_ii:vb,dynCall_iiii:wb}})
+-
+-
+-// EMSCRIPTEN_END_ASM
+-(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _shine_check_config=Module["_shine_check_config"]=asm["_shine_check_config"];var _shine_flush=Module["_shine_flush"]=asm["_shine_flush"];var setThrew=Module["setThrew"]=asm["setThrew"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _shine_samples_per_pass=Module["_shine_samples_per_pass"]=asm["_shine_samples_per_pass"];var _fflush=Module["_fflush"]=asm["_fflush"];var _shine_js_init=Module["_shine_js_init"]=asm["_shine_js_init"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var _shine_encode_buffer=Module["_shine_encode_buffer"]=asm["_shine_encode_buffer"];var _shine_close=Module["_shine_close"]=asm["_shine_close"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=asm["_emscripten_get_global_libc"];var stackSave=Module["stackSave"]=asm["stackSave"];var ___muldsi3=Module["___muldsi3"]=asm["___muldsi3"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var _malloc=Module["_malloc"]=asm["_malloc"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];Runtime.stackAlloc=Module["stackAlloc"];Runtime.stackSave=Module["stackSave"];Runtime.stackRestore=Module["stackRestore"];Runtime.establishStackSpace=Module["establishStackSpace"];Runtime.setTempRet0=Module["setTempRet0"];Runtime.getTempRet0=Module["getTempRet0"];Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i<argc-1;i=i+1){argv.push(allocate(intArrayFromString(args[i]),"i8",ALLOC_NORMAL));pad()}argv.push(0);argv=allocate(argv,"i32",ALLOC_NORMAL);try{var ret=Module["_main"](argc,argv,0);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="SimulateInfiniteLoop"){Module["noExitRuntime"]=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}Module.printErr("exception thrown: "+toLog);Module["quit"](1,e)}}finally{calledMain=true}};function run(args){args=args||Module["arguments"];if(preloadStartTime===null)preloadStartTime=Date.now();if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run();var isNode=typeof process==="object"&&typeof require==="function";var int16Len=Module.HEAP16.BYTES_PER_ELEMENT;var ptrLen=Module.HEAP32.BYTES_PER_ELEMENT;function Shine(args){if(_shine_check_config(args.samplerate,args.bitrate)<0)throw"Invalid configuration";var mode;if(!args.mode){if(args.channels===1){mode=Shine.MONO}else{mode=Shine.JOINT_STEREO}}else{mode=args.mode}this._handle=_shine_js_init(args.channels,args.samplerate,mode,args.bitrate);this._channels=args.channels;this._samples_per_pass=_shine_samples_per_pass(this._handle);this._buffer=_malloc(this._channels*ptrLen);this._pcm=new Array(this._channels);this._rem=new Array(this._channels);this._written=_malloc(int16Len);var _tmp,chan;for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array;_tmp=_malloc(this._samples_per_pass*int16Len);setValue(this._buffer+chan*ptrLen,_tmp,"*");this._pcm[chan]=Module.HEAP16.subarray(_tmp/int16Len,_tmp/int16Len+this._samples_per_pass)}return this}Shine.STEREO=0;Shine.JOINT_STEREO=1;Shine.DUAL_CHANNEL=2;Shine.MONO=3;Shine.prototype._encodePass=(function(data){if(!this._handle)throw"Closed";var chan;for(chan=0;chan<this._channels;chan++)this._pcm[chan].set(data[chan]);var _buf=_shine_encode_buffer(this._handle,this._buffer,this._written);var written=getValue(this._written,"i16");return Module.HEAPU8.subarray(_buf,_buf+written)});function concat(ctr,a,b){if(typeof b==="undefined"){return a}var ret=new ctr(a.length+b.length);ret.set(a);ret.subarray(a.length).set(b);return ret}function clip(x){return x>1?1:x<-1?-1:x}function convertFloat32(buf){var ret=new Array(buf.length);var samples=buf[0].length;var chan,i;for(chan=0;chan<buf.length;chan++){ret[chan]=new Int16Array(samples);for(i=0;i<samples;i++){ret[chan][i]=parseInt(clip(buf[chan][i])*32767)}}return ret}Shine.prototype.encode=(function(data){if(data.length!=this._channels)throw"Invalid data";var encoded=new Uint8Array;var tmp=new Array(this._channels);if(data[0]instanceof Float32Array){data=convertFloat32(data)}var chan;for(chan=0;chan<this._channels;chan++){tmp[chan]=new Float32Array;this._rem[chan]=concat(Int16Array,this._rem[chan],data[chan])}var i,enc;for(i=0;i<this._rem[0].length;i+=this._samples_per_pass){for(chan=0;chan<this._channels;chan++){tmp[chan]=this._rem[chan].subarray(i,i+this._samples_per_pass)}if(tmp[0].length<this._samples_per_pass){break}else{enc=this._encodePass(tmp);if(enc.length>0){encoded=concat(Uint8Array,encoded,enc)}}}if(tmp[0].length<this._samples_per_pass){this._rem=tmp}else{for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array}}return encoded});Shine.prototype.close=(function(){if(!this._handle){throw"Closed"}var _buf=_shine_flush(this._handle,this._written);var written=getValue(this._written,"i16");var encoded=new Uint8Array(written);encoded.set(Module.HEAPU8.subarray(_buf,_buf+written));_free(this._written);_shine_close(this._handle);this._handle=null;var chan;for(chan=0;chan<this._channels;chan++){_free(getValue(this._buffer+chan*ptrLen,"*"))}_free(this._buffer);return encoded});if(isNode){module.exports=Shine}return Shine}).call(context)})()
+-
+-
+-
+-
+diff --git a/js/dist/libshine_browser.js b/js/dist/libshine_browser.js
+new file mode 100644
+index 0000000..5e8cd74
+--- /dev/null
++++ b/js/dist/libshine_browser.js
+@@ -0,0 +1,183 @@
++// libshine function wrappers
++
++var StereoMode = {
++ '0': 'STEREO',
++ '1': 'JOINT_STEREO',
++ '2': 'DUAL_CHANNEL',
++ '3': 'MONO',
++ STEREO: 0,
++ JOINT_STEREO: 1,
++ DUAL_CHANNEL: 2,
++ MONO: 3
++};
++
++var ShineModule;
++var int16Len;
++var ptrLen;
++
++function shineInit() {
++ int16Len = ShineModule._shine_js_int16_len();
++ ptrLen = ShineModule._shine_js_ptr_len();
++};
++
++function Shine(args) {
++ if (ShineModule._shine_check_config(args.samplerate, args.bitrate) < 0)
++ throw "Invalid configuration";
++
++ var stereoMode;
++ if (!args.stereoMode) {
++ if (args.channels === 1) {
++ stereoMode = Shine.MONO;
++ } else {
++ stereoMode = Shine.JOINT_STEREO;
++ }
++ } else {
++ stereoMode = args.stereoMode;
++ }
++
++ this._handle = ShineModule._shine_js_init(args.channels, args.samplerate, stereoMode, args.bitrate);
++
++ this._channels = args.channels;
++ this._samples_per_pass = ShineModule._shine_samples_per_pass(this._handle);
++
++ this._buffer = ShineModule._malloc(this._channels * ptrLen);
++ this._pcm = new Array(this._channels);
++ this._rem = new Array(this._channels);
++ this._written = ShineModule._malloc(int16Len);
++
++ var _tmp, chan;
++ for (chan=0; chan<this._channels; chan++) {
++ this._rem[chan] = new Int16Array;
++ _tmp = ShineModule._malloc(this._samples_per_pass * int16Len);
++ ShineModule.setValue(this._buffer + chan*ptrLen, _tmp, "*")
++ this._pcm[chan] = ShineModule.HEAP16.subarray(_tmp/int16Len, _tmp/int16Len+this._samples_per_pass)
++ }
++
++ return this;
++};
++
++Shine.checkConfig = function (samplerate, bitrate) {
++ return ShineModule._shine_check_config(samplerate, bitrate) >= 0;
++};
++
++Shine.prototype._encodePass = function (data) {
++ if (!this._handle)
++ throw "Closed";
++
++ var chan;
++ for (chan=0;chan<this._channels;chan++)
++ this._pcm[chan].set(data[chan]);
++
++ var _buf = ShineModule._shine_encode_buffer(this._handle, this._buffer, this._written);
++
++ var written = ShineModule.getValue(this._written, "i16");
++
++ return ShineModule.HEAPU8.subarray(_buf, _buf+written);
++};
++
++function concat(ctr, a, b) {
++ if (typeof b === "undefined") {
++ return a;
++ }
++ var ret = new ctr(a.length+b.length);
++ ret.set(a);
++ ret.subarray(a.length).set(b);
++ return ret;
++}
++
++function clip(x) {
++ return (x > 1 ? 1 : (x < -1 ? -1 : x));
++}
++
++function convertFloat32(buf) {
++ var ret = new Array(buf.length);
++ var samples = buf[0].length;
++ var chan, i;
++
++ for (chan=0;chan<buf.length;chan++) {
++ ret[chan] = new Int16Array(samples);
++ for (i=0;i<samples;i++) {
++ ret[chan][i] = parseInt(clip(buf[chan][i]) * 32767);
++ }
++ }
++ return ret;
++}
++
++Shine.prototype.encode = function (data) {
++ if (data.length != this._channels)
++ throw "Invalid data";
++
++ var encoded = new Uint8Array;
++ var tmp = new Array(this._channels);
++
++ if (data[0] instanceof Float32Array) {
++ data = convertFloat32(data);
++ }
++
++ var chan;
++ for (chan=0;chan<this._channels; chan++) {
++ tmp[chan] = new Float32Array;
++ this._rem[chan] = concat(Int16Array, this._rem[chan], data[chan]);
++ }
++
++ var i, enc;
++ for (i=0;i<this._rem[0].length;i+=this._samples_per_pass) {
++ for (chan=0; chan<this._channels; chan++) {
++ tmp[chan] = this._rem[chan].subarray(i, i+this._samples_per_pass);
++ }
++
++ if (tmp[0].length < this._samples_per_pass) {
++ break;
++ } else {
++ enc = this._encodePass(tmp);
++ if (enc.length > 0) {
++ encoded = concat(Uint8Array, encoded, enc);
++ }
++ }
++ }
++
++ if (tmp[0].length < this._samples_per_pass) {
++ this._rem = tmp;
++ } else {
++ for (chan=0; chan<this._channels; chan++) {
++ this._rem[chan] = new Int16Array;
++ }
++ }
++
++ return encoded;
++};
++
++Shine.prototype.close = function () {
++ if (!this._handle) {
++ throw "Closed";
++ }
++
++ var _buf = ShineModule._shine_flush(this._handle, this._written);
++
++ var written = ShineModule.getValue(this._written, "i16");
++ var encoded = new Uint8Array(written);
++
++ encoded.set(ShineModule.HEAPU8.subarray(_buf, _buf + written));
++
++ ShineModule._free(this._written);
++ ShineModule._shine_close(this._handle);
++ this._handle = null;
++
++ var chan;
++ for (chan=0; chan<this._channels; chan++) {
++ ShineModule._free(ShineModule.getValue(this._buffer + chan*ptrLen, "*"));
++ }
++ ShineModule._free(this._buffer);
++
++ return encoded;
++};
++var createModule = require("./libshine_browser_stubs").default;
++
++Shine.initialized = (createModule()).then(function (Module) {
++ ShineModule = Module;
++ shineInit();
++});
++
++module.exports.Shine = Shine;
++
++module.exports.StereoMode = StereoMode;
+diff --git a/js/dist/libshine_browser_stubs.js b/js/dist/libshine_browser_stubs.js
+new file mode 100644
+index 0000000..23863a3
+--- /dev/null
++++ b/js/dist/libshine_browser_stubs.js
+@@ -0,0 +1,16 @@
++
++var createModule = (() => {
++ var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
++
++ return (
++function(createModule) {
++ createModule = createModule || {};
++
++var Module=typeof createModule!="undefined"?createModule:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,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/LECIAMoAtCyAmsiBiAGQR91IgZzIAZraiADKAL4sQIiBiADKALMsgJrIgggCEEfdSIIcyAIa2ogAygC9LECIAMoAsiyAiIIayIKIApBH3UiCnMgCmtqIAMoAvCxAiADKALEsgIiCmsiByAHQR91IgdzIAdraiADKALssQIgAygCwLICayIHIAdBH3UiB3MgB2tqIAMoAuixAiIHIAMoAryyAmsiCyALQR91IgtzIAtramogAygC4LECIAMoArSyAiILayIOIA5BH3UiDnMgDmtqIAMoAtyxAiADKAKwsgIiDmsiEiASQR91IhJzIBJraiADKALYsQIiEiADKAKssgJrIhMgE0EfdSITcyATa2pqaiADKALMsQIgAygCoLICIhNrIhQgFEEfdSIUcyAUa2ogAygCyLECIhQgAygCnLICayIWIBZBH3UiFnMgFmtqQeQASWpBBkcEQCAMQgA3AnwgDEIANwKEAQwBCyAMQQA2AnwgDCAAIAFqIAMoAtyxAiAOayIAIABBH3UiAHMgAGtqIBIgAygCrLICayIAIABBH3UiAHMgAGtqIAMoAsyxAiATayIAIABBH3UiAHMgAGtqIBQgAygCnLICayIAIABBH3UiAHMgAGtqQQpJIAMoAoCzAiADKALUswJrIgAgAEEfdSIAcyAAayADKAKEswIgAygC2LMCayIAIABBH3UiAHMgAGtqIAMoAvyyAiADKALQswJrIgAgAEEfdSIAcyAAa2ogAygC+LICIAMoAsyzAmsiACAAQR91IgBzIABraiADKAL0sgIgAygCyLMCayIAIABBH3UiAHMgAGtqIAMoAvCyAiADKALEswJrIgAgAEEfdSIAcyAAa2pBCklxNgJ8IAxBADYCgAEgDCADKALwsQIgCmsiACAAQR91IgBzIABrIARqIAMoAuyxAiADKALAsgJrIgAgAEEfdSIAcyAAa2ogByADKAK8sgJrIgAgAEEfdSIAcyAAa2ogAygC4LECIAtrIgAgAEEfdSIAcyAAa2pBCkkgAygClLMCIAMoAuizAmsiACAAQR91IgBzIABrIAMoApizAiADKALsswJrIgAgAEEfdSIAcyAAa2ogAygCkLMCIAMoAuSzAmsiACAAQR91IgBzIABraiADKAKMswIgAygC4LMCayIAIABBH3UiAHMgAGtqIAMoAoizAiADKALcswJrIgAgAEEfdSIAcyAAa2pBCklxNgKAASAMQQA2AoQBIAwgAygCgLICIAMoAtSyAmsiACAAQR91IgBzIABrIAMoAoSyAiAFayIAIABBH3UiAHMgAGtqIAMoAvyxAiADKALQsgJrIgAgAEEfdSIAcyAAa2ogBiADKALMsgJrIgAgAEEfdSIAcyAAa2ogAygC9LECIAhrIgAgAEEfdSIAcyAAa2pBCkkgAygCqLMCIAMoAvyzAmsiACAAQR91IgBzIABrIAMoAqyzAiADKAKAtAJrIgAgAEEfdSIAcyAAa2ogAygCpLMCIAMoAvizAmsiACAAQR91IgBzIABraiADKAKgswIgAygC9LMCayIAIABBH3UiAHMgAGtqIAMoApyzAiADKALwswJrIgAgAEEfdSIAcyAAa2pBCklxNgKEASAMQQA2AogBIAwgAygClLICIAMoAuiyAmsiACAAQR91IgBzIABrIAMoApiyAiADKALssgJrIgAgAEEfdSIAcyAAa2ogAygCkLICIAMoAuSyAmsiACAAQR91IgBzIABraiADKAKMsgIgAygC4LICayIAIABBH3UiAHMgAGtqIAMoAoiyAiADKALcsgJrIgAgAEEfdSIAcyAAa2pBCkkgAygCvLMCIAMoApC0AmsiACAAQR91IgBzIABrIAMoAsCzAiADKAKUtAJrIgAgAEEfdSIAcyAAa2ogAygCuLMCIAMoAoy0AmsiACAAQR91IgBzIABraiADKAK0swIgAygCiLQCayIAIABBH3UiAHMgAGtqIAMoArCzAiADKAKEtAJrIgAgAEEfdSIAcyAAa2pBCklxNgKIAQtB/x8gAygCkAQgAygCAG0iBCAEQf8fThshACADKAK0jQIiBQRAQQAhAUH/HyAAISMgAygCsI0CIgYgBUEDdEF2bWoiBSEiAn8gDCANQQN0akGQEWorAwBEzczMzMzMCECiIAS3oSJImUQAAAAAAADgQWMEQCBIqgwBC0GAgICAeAsiBEHlAE4EQCAGQQZsQQptIgEgBCABIARIGyEBCyAjICIgASABIAVIG2oiACAAQf8fThshAAsgGSANQbABbGogEEHYAGxqQdgAEAcgAyANQbgCbGogEEGcAWxqQZgMakGcARAHIAlCADcCCCAJQgA3AgAgEUIANwKsASARQQA2AqQBIBFCADcCnAEgEUIA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BQAHAAEABgABAAEAAAABAwYHAwMGBwYGBwgHBgcIBwADAAUAAQAGAAIAAwACAAUABAAEAAEAAwADAAIAAAADAwUHAwIEBQQEBQYGBQYHAQACAAoAEwAQAAoAAwADAAcACgAFAAMACwAEAA0AEQAIAAQADAALABIADwALAAIABwAGAAkADgADAAEABgAEAAUAAwACAEGACgskAQMGCAgJAwQGBwcIBgUHCAgJBwcICQkJBwcICQkKCAgJCgoKAEGwCgtFAwAEAAYAEgAMAAUABQABAAIAEAAJAAMABwADAAUADgAHAAMAEwARAA8ADQAKAAQADQAFAAgACwAFAAEADAAEAAQAAQABAEGACwskAgMGCAgJAwIECAgIBgQGCAgJCAgICQkKCAcICQoKCQgJCQsLAEGwCwtFBwAFAAkADgAPAAcABgAEAAUABQAGAAcABwAGAAgACAAIAAUADwAGAAkACgAFAAEACwAHAAkABgAEAAEADgAEAAYAAgAGAEGADAskAwMFBggJAwMEBQYIBAQFBgcIBgUGBwcIBwYHBwgJCAcICAkJAEGwDAugHQEAAgAKABcAIwAeAAwAEQADAAMACAAMABIAFQAMAAcACwAJAA8AFQAgACgAEwAGAA4ADQAWACIALgAXABIABwAUABMAIQAvABsAFgAJAAMAHwAWACkAGgAVABQABQADAA4ADQAKAAsAEAAGAAUAAQAJAAgABwAIAAQABAACAAAAAQMGCAkJCQoDBAYHCAkICAYGBwgJCgkJBwcICQoKCQoICAkKCgoKCgkJCgoLCwoLCAgJCgoKCwsJCAkKCgsLCwMABAAKABgAIgAhABUADwAFAAMABAAKACAAEQALAAoACwAHAA0AEgAeAB8AFAAFABkACwATADsAGwASAAwABQAjACEAHwA6AB4AEAAHAAUAHAAaACAAEwARAA8ACAAOAA4ADAAJAA0ADgAJAAQAAQALAAQABgAGAAYAAwACAAAAAgMFBwgJCAkDAwQGCAgHCAUFBgcICQgIBwYHCQgKCAkICAgJCQoJCggICQoKCwoLCAcHCAkKCgoIBwgJCgoKCgkABgAQACEAKQAnACYAGgAHAAUABgAJABcAEAAaAAsAEQAHAAsADgAVAB4ACgAHABEACgAPAAwAEgAcAA4ABQAgAA0AFgATABIAEAAJAAUAKAARAB8AHQARAA0ABAACABsADAALAA8ACgAHAAQAAQAbAAwACAAMAAYAAwABAAAABAMFBwgJCQkDAwQFBwcICAUEBQYHCAcIBgUGBgcICAgHBgcHCAgICQgHCAgICQgJCAcHCAgJCQoJCAgJCQkJCgEABQAOABUAIgAzAC4ARwAqADQARAA0AEMALAArABMAAwAEAAwAEwAfABoALAAhAB8AGAAgABgAHwAjABYADgAPAA0AFwAkADsAMQBNAEEAHQAoAB4AKAAbACEAKgAQABYAFAAlAD0AOABPAEkAQAArAEwAOAAlABoAHwAZAA4AIwAQADwAOQBhAEsAcgBbADYASQA3ACkAMAA1ABcAGAA6ABsAMgBgAEwARgBdAFQATQA6AE8AHQBKADEAKQARAC8ALQBOAEoAcwBeAFoATwBFAFMARwAyADsAJgAkAA8ASAAiADgAXwBcAFUAWwBaAFYASQBNAEEAMwAsACsAKgArABQAHgAsADcATgBIAFcATgA9AC4ANgAlAB4AFAAQADUAGQApACUALAA7ADYAUQBCAEwAOQA2ACUAEgAnAAsAIwAhAB8AOQAqAFIASABQAC8AOgA3ABUAFgAaACYAFgA1ABkAFwAmAEYAPAAzACQANwAaACIAFwAbAA4ACQAHACIAIAAcACcAMQBLAB4ANAAwACgANAAcABIAEQAJAAUALQAVACIAQAA4ADIAMQAtAB8AEwAMAA8ACgAHAAYAAwAwABcAFAAnACQAIwA1ABUAEAAXAA0ACgAGAAEABAACABAADwARABsAGQAUAB0ACwARAAwAEAAIAAEAAQAAAAEAAQQGBwgJCQoJCgsLDAwNDQMEBgcICAkJCQkKCgsMDAwGBgcICQkKCgkKCgsLDA0NBwcICQkKCgoKCwsLCwwNDQgHCQkKCgsLCgsLDAwNDQ4JCAkKCgoLCwsLDAsNDQ4OCQkKCgsLCwsLDAwMDQ0ODgoJCgsLCwwMDAwNDQ0OEBAJCAkKCgsLDAwMDA0NDg8PCgkKCgsLCw0MDQ0ODg4QDwoKCgsLDAwNDA0ODQ4PEBELCgoLDAwMDA0NDQ4PDw8QCwsLDAwNDA0ODg8PDxAQEAwLDA0NDQ4ODg4ODxAPEBANDAwNDQ0PDg4RDw8PERAQDAwNDg4ODw4PDxAQExITEAcADAASADUALwBMAHwAbABZAHsAbAB3AGsAUQB6AD8ADQAFABAAGwAuACQAPQAzACoARgA0AFMAQQApADsAJAATABEADwAYACkAIgA7ADAAKABAADIATgA+AFAAOAAhAB0AHAAZACsAJwA/ADcAXQBMADsAXQBIADYASwAyAB0ANAAWACoAKABDADkAXwBPAEgAOQBZAEUAMQBCAC4AGwBNACUAIwBCADoANABbAEoAPgAwAE8APwBaAD4AKAAmAH0AIAA8ADgAMgBcAE4AQQA3AFcARwAzAEkAMwBGAB4AbQA1ADEAXgBYAEsAQgB6AFsASQA4ACoAQAAsABUAGQBaACsAKQBNAEkAPwA4AFwATQBCAC8AQwAwADUAJAAUAEcAIgBDADwAOgAxAFgATABDAGoARwA2ACYAJwAXAA8AbQA1ADMALwBaAFIAOgA5ADAASAA5ACkAFwAbAD4ACQBWACoAKAAlAEYAQAA0ACsARgA3ACoAGQAdABIACwALAHYARAAeADcAMgAuAEoAQQAxACcAGAAQABYADQAOAAcAWwAsACcAJgAiAD8ANAAtAB8ANAAcABMADgAIAAkAAwB7ADwAOgA1AC8AKwAgABYAJQAYABEADAAPAAoAAgABAEcAJQAiAB4AHAAUABEAGgAVABAACgAGAAgABgACAAAAAwQFBwcICQkJCgoLCwsMDQQDBQYHBwgICAkJCgoKCwsFBQUGBwcICAgJCQoKCwsLBgYGBwcICAkJCQoKCgsLCwcGBwcICAkJCQkKCgoLCwsIBwcICAgJCQkJCgoLCwsMCQcICAgJCQkJCgoKCwsMDAkICAkJCQkKCgoKCgsLCwwJCAgJCQkJCgoKCgsLDAwMCQgJCQkJCgoKCwsLCwwMDAoJCQkKCgoKCgsLCwsMDQwKCQkJCgoKCgsLCwsMDAwNCwoJCgoKCwsLCwsLDAwNDQsKCgoKCwsLCwwMDAwMDQ0MCwsLCwsLCwwMDAwNDQwNDAsLCwsLCwwMDAwMDQ0NDQEABQAOACwASgA/AG4AXQCsAJUAigDyAOEAwwB4AREAAwAEAAwAFAAjAD4ANQAvAFMASwBEAHcAyQBrAM8ACQAPAA0AFwAmAEMAOgBnAFoAoQBIAH8AdQBuANEAzgAQAC0AFQAnAEUAQAByAGMAVwCeAIwA/ADUAMcAgwFtARoASwAkAEQAQQBzAGUAswCkAJsACAH2AOIAiwF+AWoBCQBCAB4AOwA4AGYAuQCtAAkBjgD9AOgAkAGEAXoBvQEQAG8ANgA0AGQAuACyAKAAhQABAfQA5ADZAIEBbgHLAgoAYgAwAFsAWAClAJ0AlAAFAfgAlwGNAXQBfAF5A3QDCABVAFQAUQCfAJwAjwAEAfkAqwGRAYgBfwHXAskCxAIHAJoATABJAI0AgwAAAfUAqgGWAYoBgAHfAmcBxgJgAQsAiwCBAEMAfQD3AOkA5QDbAIkB5wLhAtACdQNyA7cBBADzAHgAdgBzAOMA3wCMAeoC5gLgAtECyALCAt8AtAEGAMoA4ADeANoA2ACFAYIBfQFsAXgDuwHDArgBtQHABgQA6wLTANIA0AByAXsB3gLTAsoCxwZzA20DbAODDWEDAgB5AXEBZgC7ANYC0gJmAccCxQJiA8YGZwOCDWYDsgEAAAwACgAHAAsACgARAAsACQANAAwACgAHAAUAAwABAAMAAQQGCAkJCgoLCwsMDAwNCQMEBgcICQkJCgoKCwwLDAgGBgcICQkKCgsKCwsLDAwJCAcICQkKCgoLCwwMDA0NCgkICQkKCgsLCwwMDA0NDQkJCAkJCgsLDAsMDA0NDQ4KCgkJCgsLCwsMDAwMDQ0OCgoJCgoLCwsMDA0NDQ0PDwoKCgoLCwsMDA0NDQ0ODg4KCwoKCwsMDA0NDQ0ODQ4NCwsLCgsMDAwMDQ4ODg8PDgoMCwsLDAwNDg4ODg4ODQ4LDAwMDAwNDQ0NDw4ODg4QCw4MDAwNDQ4ODhAPDw8RDwsNDQsMDg4NDg4PEA8RDw4LCQgICQkKCgoLCwsLCwsLCA8ADQAuAFAAkgAGAfgAsgGqAZ0CjQKJAm0CBQIIBFgADgAMABUAJgBHAIIAegDYANEAxgBHAVkBPwEpARcBKgAvABYAKQBKAEQAgAB4AN0AzwDCALYAVAE7AScBHQISAFEAJwBLAEYAhgB9AHQA3ADMAL4AsgBFATcBJQEPARAAkwBIAEUAhwB/AHYAcADSAMgAvABgAUMBMgEdARwCDgAHAUIAgQB+AHcAcgDWAMoAwAC0AFUBPQEtARkBBgEMAPkAewB5AHUAcQDXAM4AwwC5AFsBSgE0ASMBEAEIAgoAswFzAG8AbQDTAMsAxAC7AGEBTAE5ASoBGwETAn0BEQCrAdQA0ADNAMkAwQC6ALEAqQBAAS8BHgEMAQICeQEQAE8BxwDFAL8AvQC1AK4ATQFBATEBIQETAQkCewFzAQsAnAK4ALcAswCvAFgBSwE6ATABIgEVARICfwF1AW4BCgCMAloBqwCoAKQAPgE1ASsBHwEUAQcBAQJ3AXABagEGAIgCQgE8ATgBMwEuASQBHAENAQUBAAJ4AXIBbAFnAQQAbAIsASgBJgEgARoBEQEKAQMCfAF2AXEBbQFpAWUBAgAJBBgBFgESAQsBCAEDAX4BegF0AW8BawFoAWYBZAEAACsAFAATABEADwANAAsACQAHAAYABAAHAAUAAwABAAMABAQGBwgJCQoKCwsLCwsMCQQEBQYHCAgJCQkKCgoKCggGBQYHBwgICQkJCQoKCgsHBwYHBwgICAkJCQkKCgoKBwgHBwgICAgJCQkKCgoKCwcJBwgICAgJCQkJCgoKCgoHCQgICAgJCQkJCgoKCgoLBwoICAgJCQkJCgoKCgoLCwgKCQkJCQkJCQkKCgoKCwsICgkJCQkJCQoKCgoKCwsLCAsJCQkJCgoKCgoKCwsLCwgLCgkJCQoKCgoKCgsLCwsICwoKCgoKCgoKCgsLCwsLCAsKCgoKCgoKCwsLCwsLCwgMCgoKCgoKCwsLCwsLCwsICAcHBwcHBwcHBwcICAgIBAEABQAEAAUABgAFAAQABAAHAAMABgAAAAcAAgADAAEAAQQEBQQGBQYEBQUGBQYGBg8ADgANAAwACwAKAAkACAAHAAYABQAEAAMAAgABAAAABAQEBAQEBAQEBAQEBAQEBABB6CkLBQIAAAACAEH5KQsMBAAACAQAAAMAAAADAEGQKgsNEAQAACIEAAADAAAAAwBBqCoLBjAEAABCBABByCoLBQQAAAAEAEHYKgsNUAQAAHAEAAAEAAAABABB8CoLDYAEAACgBAAABgAAAAYAQYgrCw2wBAAAAAUAAAYAAAAGAEGgKwsNMAUAAIAFAAAGAAAABgBBuCsLDbAFAAAABgAACAAAAAgAQdArCw0wBgAAsAYAAAgAAAAIAEHoKwsN8AYAAHAHAAAIAAAACABBgCwLDbAHAAAwCAAAEAAAABAAQZgsCwZwCAAAcAoAQbgsCwUQAAAAEABByCwLjQNwCwAAcA0AABAAAAAQAAAAAQAAAAEAAABwDgAAcBAAABAAAAAQAAAAAgAAAAMAAABwDgAAcBAAABAAAAAQAAAAAwAAAAcAAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwDgAAcBAAABAAAAAQAAAABgAAAD8AAABwDgAAcBAAABAAAAAQAAAACAAAAP8AAABwDgAAcBAAABAAAAAQAAAACgAAAP8DAABwDgAAcBAAABAAAAAQAAAADQAAAP8fAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwEQAAcBMAABAAAAAQAAAABQAAAB8AAABwEQAAcBMAABAAAAAQAAAABgAAAD8AAABwEQAAcBMAABAAAAAQAAAABwAAAH8AAABwEQAAcBMAABAAAAAQAAAACAAAAP8AAABwEQAAcBMAABAAAAAQAAAACQAAAP8BAABwEQAAcBMAABAAAAAQAAAACwAAAP8HAABwEQAAcBMAABAAAAAQAAAADQAAAP8fAABwEQAAcBMAAAEAAAAQAEHgLwsNcBQAAJAUAAABAAAAEABB+C8LBqAUAADAFABBrDALiQEBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAMAAAAEAAAABAAAAAUAAAAEAAAABQAAAAQAAAAGAAAABQAAAAYAAAAFAAAABgAAAAUAAAAHAAAABgAAAAcAAAAGAAAABwBBwDELDQEAAAD/////AQAAAAIAQeAxC5IBAwAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAMAAAADAAAAAwAAAAQAAAAEAAAAAAAAAAEAAAACAAAAAwAAAAAAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAACAAAAAwAAAESsAACAuwAAAH0AACJWAADAXQAAgD4AABErAADgLgAAQB8AQYAzC7oI/////////////////////wgAAAD/////CAAAACAAAAAQAAAA/////xAAAAAoAAAAGAAAAP////8YAAAAMAAAACAAAAD/////IAAAADgAAAAoAAAA/////ygAAABAAAAAMAAAAP////8wAAAAUAAAADgAAAD/////OAAAAGAAAABAAAAA/////0AAAABwAAAA//////////9QAAAAgAAAAP//////////YAAAAKAAAAD//////////3AAAADAAAAA//////////+AAAAA4AAAAP//////////kAAAAAABAAD//////////6AAAABAAQAA/////////////////////wAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAeAAAAJAAAACwAAAA0AAAAPgAAAEoAAABaAAAAbgAAAIYAAACiAAAAxAAAAO4AAAAgAQAAVgEAAKIBAABAAgAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAB4AAAAkAAAAKgAAADIAAAA8AAAASAAAAFgAAABqAAAAgAAAAJwAAAC+AAAA5gAAABQBAABKAQAAgAEAAEACAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABSAAAAZgAAAH4AAACcAAAAwgAAAPAAAAAoAQAAbAEAAMABAAAmAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAcgAAAIgAAACiAAAAwgAAAOgAAAAWAQAASgEAAIoBAADQAQAAHAIAAEACAAAAAAAABgAAAAwAAAASAAAAGAAAAB4AAAAkAAAALAAAAC0AAABCAAAAUAAAAGAAAAB0AAAAjAAAAKgAAADIAAAA7gAAAPgAAABQAQAAjAEAANABAAAKAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAdAAAAIwAAACoAAAAyAAAAO4AAAAcAQAAUAEAAIwBAADQAQAACgIAAEACAAAAAAAADAAAABgAAAAkAAAAMAAAADwAAABIAAAAWAAAAGwAAACEAAAAoAAAAMAAAADoAAAAGAEAAFABAACQAQAA3AEAADYCAAA4AgAAOgIAADwCAAA+AgAAQAIAQdw7C8oPnff//533//+d9///nff//533//+d9///Ou///zrv//86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";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["c"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["o"];addOnInit(Module["asm"]["d"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);readyPromiseReject(e)}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort("invalid type for getValue: "+type)}return null}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort("invalid type for setValue: "+type)}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ASSERTIONS=false;var decodeBase64=typeof atob=="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output};function intArrayFromBase64(s){try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}var asmLibraryArg={"b":_emscripten_memcpy_big,"a":_emscripten_resize_heap};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["d"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["e"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["f"]).apply(null,arguments)};var _shine_check_config=Module["_shine_check_config"]=function(){return(_shine_check_config=Module["_shine_check_config"]=Module["asm"]["g"]).apply(null,arguments)};var _shine_samples_per_pass=Module["_shine_samples_per_pass"]=function(){return(_shine_samples_per_pass=Module["_shine_samples_per_pass"]=Module["asm"]["h"]).apply(null,arguments)};var _shine_encode_buffer=Module["_shine_encode_buffer"]=function(){return(_shine_encode_buffer=Module["_shine_encode_buffer"]=Module["asm"]["i"]).apply(null,arguments)};var _shine_flush=Module["_shine_flush"]=function(){return(_shine_flush=Module["_shine_flush"]=Module["asm"]["j"]).apply(null,arguments)};var _shine_close=Module["_shine_close"]=function(){return(_shine_close=Module["_shine_close"]=Module["asm"]["k"]).apply(null,arguments)};var _shine_js_int16_len=Module["_shine_js_int16_len"]=function(){return(_shine_js_int16_len=Module["_shine_js_int16_len"]=Module["asm"]["l"]).apply(null,arguments)};var _shine_js_ptr_len=Module["_shine_js_ptr_len"]=function(){return(_shine_js_ptr_len=Module["_shine_js_ptr_len"]=Module["asm"]["m"]).apply(null,arguments)};var _shine_js_init=Module["_shine_js_init"]=function(){return(_shine_js_init=Module["_shine_js_init"]=Module["asm"]["n"]).apply(null,arguments)};Module["setValue"]=setValue;Module["getValue"]=getValue;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();
++
++
++ return createModule.ready
++}
++);
++})();
++export default createModule;
+\ No newline at end of file
+diff --git a/js/dist/libshine_node.js b/js/dist/libshine_node.js
+new file mode 100644
+index 0000000..02d7990
+--- /dev/null
++++ b/js/dist/libshine_node.js
+@@ -0,0 +1 @@
++var Module=typeof Module!="undefined"?Module:{};var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;function logExceptionOnExit(e){if(e instanceof ExitStatus)return;let toLog=e;err("exiting due to exception: "+toLog)}if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{var ret=tryParseAsDataURI(filename);if(ret){return binary?ret:ret.toString()}filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror)=>{var ret=tryParseAsDataURI(filename);if(ret){onload(ret)}filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",function(reason){throw reason});quit_=(status,toThrow)=>{if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}logExceptionOnExit(toThrow);process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=title=>document.title=title}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function keepRuntimeAlive(){return noExitRuntime}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="data:application/octet-stream;base64,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/LECIAMoAtCyAmsiBiAGQR91IgZzIAZraiADKAL4sQIiBiADKALMsgJrIgggCEEfdSIIcyAIa2ogAygC9LECIAMoAsiyAiIIayIKIApBH3UiCnMgCmtqIAMoAvCxAiADKALEsgIiCmsiByAHQR91IgdzIAdraiADKALssQIgAygCwLICayIHIAdBH3UiB3MgB2tqIAMoAuixAiIHIAMoAryyAmsiCyALQR91IgtzIAtramogAygC4LECIAMoArSyAiILayIOIA5BH3UiDnMgDmtqIAMoAtyxAiADKAKwsgIiDmsiEiASQR91IhJzIBJraiADKALYsQIiEiADKAKssgJrIhMgE0EfdSITcyATa2pqaiADKALMsQIgAygCoLICIhNrIhQgFEEfdSIUcyAUa2ogAygCyLECIhQgAygCnLICayIWIBZBH3UiFnMgFmtqQeQASWpBBkcEQCAMQgA3AnwgDEIANwKEAQwBCyAMQQA2AnwgDCAAIAFqIAMoAtyxAiAOayIAIABBH3UiAHMgAGtqIBIgAygCrLICayIAIABBH3UiAHMgAGtqIAMoAsyxAiATayIAIABBH3UiAHMgAGtqIBQgAygCnLICayIAIABBH3UiAHMgAGtqQQpJIAMoAoCzAiADKALUswJrIgAgAEEfdSIAcyAAayADKAKEswIgAygC2LMCayIAIABBH3UiAHMgAGtqIAMoAvyyAiADKALQswJrIgAgAEEfdSIAcyAAa2ogAygC+LICIAMoAsyzAmsiACAAQR91IgBzIABraiADKAL0sgIgAygCyLMCayIAIABBH3UiAHMgAGtqIAMoAvCyAiADKALEswJrIgAgAEEfdSIAcyAAa2pBCklxNgJ8IAxBADYCgAEgDCADKALwsQIgCmsiACAAQR91IgBzIABrIARqIAMoAuyxAiADKALAsgJrIgAgAEEfdSIAcyAAa2ogByADKAK8sgJrIgAgAEEfdSIAcyAAa2ogAygC4LECIAtrIgAgAEEfdSIAcyAAa2pBCkkgAygClLMCIAMoAuizAmsiACAAQR91IgBzIABrIAMoApizAiADKALsswJrIgAgAEEfdSIAcyAAa2ogAygCkLMCIAMoAuSzAmsiACAAQR91IgBzIABraiADKAKMswIgAygC4LMCayIAIABBH3UiAHMgAGtqIAMoAoizAiADKALcswJrIgAgAEEfdSIAcyAAa2pBCklxNgKAASAMQQA2AoQBIAwgAygCgLICIAMoAtSyAmsiACAAQR91IgBzIABrIAMoAoSyAiAFayIAIABBH3UiAHMgAGtqIAMoAvyxAiADKALQsgJrIgAgAEEfdSIAcyAAa2ogBiADKALMsgJrIgAgAEEfdSIAcyAAa2ogAygC9LECIAhrIgAgAEEfdSIAcyAAa2pBCkkgAygCqLMCIAMoAvyzAmsiACAAQR91IgBzIABrIAMoAqyzAiADKAKAtAJrIgAgAEEfdSIAcyAAa2ogAygCpLMCIAMoAvizAmsiACAAQR91IgBzIABraiADKAKgswIgAygC9LMCayIAIABBH3UiAHMgAGtqIAMoApyzAiADKALwswJrIgAgAEEfdSIAcyAAa2pBCklxNgKEASAMQQA2AogBIAwgAygClLICIAMoAuiyAmsiACAAQR91IgBzIABrIAMoApiyAiADKALssgJrIgAgAEEfdSIAcyAAa2ogAygCkLICIAMoAuSyAmsiACAAQR91IgBzIABraiADKAKMsgIgAygC4LICayIAIABBH3UiAHMgAGtqIAMoAoiyAiADKALcsgJrIgAgAEEfdSIAcyAAa2pBCkkgAygCvLMCIAMoApC0AmsiACAAQR91IgBzIABrIAMoAsCzAiADKAKUtAJrIgAgAEEfdSIAcyAAa2ogAygCuLMCIAMoAoy0AmsiACAAQR91IgBzIABraiADKAK0swIgAygCiLQCayIAIABBH3UiAHMgAGtqIAMoArCzAiADKAKEtAJrIgAgAEEfdSIAcyAAa2pBCklxNgKIAQtB/x8gAygCkAQgAygCAG0iBCAEQf8fThshACADKAK0jQIiBQRAQQAhAUH/HyAAISMgAygCsI0CIgYgBUEDdEF2bWoiBSEiAn8gDCANQQN0akGQEWorAwBEzczMzMzMCECiIAS3oSJImUQAAAAAAADgQWMEQCBIqgwBC0GAgICAeAsiBEHlAE4EQCAGQQZsQQptIgEgBCABIARIGyEBCyAjICIgASABIAVIG2oiACAAQf8fThshAAsgGSANQbABbGogEEHYAGxqQdgAEAcgAyANQbgCbGogEEGcAWxqQZgMakGcARAHIAlCADcCCCAJQgA3AgAgEUIANwKsASARQQA2AqQBIBFCADcCnAEgEUIA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BQAHAAEABgABAAEAAAABAwYHAwMGBwYGBwgHBgcIBwADAAUAAQAGAAIAAwACAAUABAAEAAEAAwADAAIAAAADAwUHAwIEBQQEBQYGBQYHAQACAAoAEwAQAAoAAwADAAcACgAFAAMACwAEAA0AEQAIAAQADAALABIADwALAAIABwAGAAkADgADAAEABgAEAAUAAwACAEGACgskAQMGCAgJAwQGBwcIBgUHCAgJBwcICQkJBwcICQkKCAgJCgoKAEGwCgtFAwAEAAYAEgAMAAUABQABAAIAEAAJAAMABwADAAUADgAHAAMAEwARAA8ADQAKAAQADQAFAAgACwAFAAEADAAEAAQAAQABAEGACwskAgMGCAgJAwIECAgIBgQGCAgJCAgICQkKCAcICQoKCQgJCQsLAEGwCwtFBwAFAAkADgAPAAcABgAEAAUABQAGAAcABwAGAAgACAAIAAUADwAGAAkACgAFAAEACwAHAAkABgAEAAEADgAEAAYAAgAGAEGADAskAwMFBggJAwMEBQYIBAQFBgcIBgUGBwcIBwYHBwgJCAcICAkJAEGwDAugHQEAAgAKABcAIwAeAAwAEQADAAMACAAMABIAFQAMAAcACwAJAA8AFQAgACgAEwAGAA4ADQAWACIALgAXABIABwAUABMAIQAvABsAFgAJAAMAHwAWACkAGgAVABQABQADAA4ADQAKAAsAEAAGAAUAAQAJAAgABwAIAAQABAACAAAAAQMGCAkJCQoDBAYHCAkICAYGBwgJCgkJBwcICQoKCQoICAkKCgoKCgkJCgoLCwoLCAgJCgoKCwsJCAkKCgsLCwMABAAKABgAIgAhABUADwAFAAMABAAKACAAEQALAAoACwAHAA0AEgAeAB8AFAAFABkACwATADsAGwASAAwABQAjACEAHwA6AB4AEAAHAAUAHAAaACAAEwARAA8ACAAOAA4ADAAJAA0ADgAJAAQAAQALAAQABgAGAAYAAwACAAAAAgMFBwgJCAkDAwQGCAgHCAUFBgcICQgIBwYHCQgKCAkICAgJCQoJCggICQoKCwoLCAcHCAkKCgoIBwgJCgoKCgkABgAQACEAKQAnACYAGgAHAAUABgAJABcAEAAaAAsAEQAHAAsADgAVAB4ACgAHABEACgAPAAwAEgAcAA4ABQAgAA0AFgATABIAEAAJAAUAKAARAB8AHQARAA0ABAACABsADAALAA8ACgAHAAQAAQAbAAwACAAMAAYAAwABAAAABAMFBwgJCQkDAwQFBwcICAUEBQYHCAcIBgUGBgcICAgHBgcHCAgICQgHCAgICQgJCAcHCAgJCQoJCAgJCQkJCgEABQAOABUAIgAzAC4ARwAqADQARAA0AEMALAArABMAAwAEAAwAEwAfABoALAAhAB8AGAAgABgAHwAjABYADgAPAA0AFwAkADsAMQBNAEEAHQAoAB4AKAAbACEAKgAQABYAFAAlAD0AOABPAEkAQAArAEwAOAAlABoAHwAZAA4AIwAQADwAOQBhAEsAcgBbADYASQA3ACkAMAA1ABcAGAA6ABsAMgBgAEwARgBdAFQATQA6AE8AHQBKADEAKQARAC8ALQBOAEoAcwBeAFoATwBFAFMARwAyADsAJgAkAA8ASAAiADgAXwBcAFUAWwBaAFYASQBNAEEAMwAsACsAKgArABQAHgAsADcATgBIAFcATgA9AC4ANgAlAB4AFAAQADUAGQApACUALAA7ADYAUQBCAEwAOQA2ACUAEgAnAAsAIwAhAB8AOQAqAFIASABQAC8AOgA3ABUAFgAaACYAFgA1ABkAFwAmAEYAPAAzACQANwAaACIAFwAbAA4ACQAHACIAIAAcACcAMQBLAB4ANAAwACgANAAcABIAEQAJAAUALQAVACIAQAA4ADIAMQAtAB8AEwAMAA8ACgAHAAYAAwAwABcAFAAnACQAIwA1ABUAEAAXAA0ACgAGAAEABAACABAADwARABsAGQAUAB0ACwARAAwAEAAIAAEAAQAAAAEAAQQGBwgJCQoJCgsLDAwNDQMEBgcICAkJCQkKCgsMDAwGBgcICQkKCgkKCgsLDA0NBwcICQkKCgoKCwsLCwwNDQgHCQkKCgsLCgsLDAwNDQ4JCAkKCgoLCwsLDAsNDQ4OCQkKCgsLCwsLDAwMDQ0ODgoJCgsLCwwMDAwNDQ0OEBAJCAkKCgsLDAwMDA0NDg8PCgkKCgsLCw0MDQ0ODg4QDwoKCgsLDAwNDA0ODQ4PEBELCgoLDAwMDA0NDQ4PDw8QCwsLDAwNDA0ODg8PDxAQEAwLDA0NDQ4ODg4ODxAPEBANDAwNDQ0PDg4RDw8PERAQDAwNDg4ODw4PDxAQExITEAcADAASADUALwBMAHwAbABZAHsAbAB3AGsAUQB6AD8ADQAFABAAGwAuACQAPQAzACoARgA0AFMAQQApADsAJAATABEADwAYACkAIgA7ADAAKABAADIATgA+AFAAOAAhAB0AHAAZACsAJwA/ADcAXQBMADsAXQBIADYASwAyAB0ANAAWACoAKABDADkAXwBPAEgAOQBZAEUAMQBCAC4AGwBNACUAIwBCADoANABbAEoAPgAwAE8APwBaAD4AKAAmAH0AIAA8ADgAMgBcAE4AQQA3AFcARwAzAEkAMwBGAB4AbQA1ADEAXgBYAEsAQgB6AFsASQA4ACoAQAAsABUAGQBaACsAKQBNAEkAPwA4AFwATQBCAC8AQwAwADUAJAAUAEcAIgBDADwAOgAxAFgATABDAGoARwA2ACYAJwAXAA8AbQA1ADMALwBaAFIAOgA5ADAASAA5ACkAFwAbAD4ACQBWACoAKAAlAEYAQAA0ACsARgA3ACoAGQAdABIACwALAHYARAAeADcAMgAuAEoAQQAxACcAGAAQABYADQAOAAcAWwAsACcAJgAiAD8ANAAtAB8ANAAcABMADgAIAAkAAwB7ADwAOgA1AC8AKwAgABYAJQAYABEADAAPAAoAAgABAEcAJQAiAB4AHAAUABEAGgAVABAACgAGAAgABgACAAAAAwQFBwcICQkJCgoLCwsMDQQDBQYHBwgICAkJCgoKCwsFBQUGBwcICAgJCQoKCwsLBgYGBwcICAkJCQoKCgsLCwcGBwcICAkJCQkKCgoLCwsIBwcICAgJCQkJCgoLCwsMCQcICAgJCQkJCgoKCwsMDAkICAkJCQkKCgoKCgsLCwwJCAgJCQkJCgoKCgsLDAwMCQgJCQkJCgoKCwsLCwwMDAoJCQkKCgoKCgsLCwsMDQwKCQkJCgoKCgsLCwsMDAwNCwoJCgoKCwsLCwsLDAwNDQsKCgoKCwsLCwwMDAwMDQ0MCwsLCwsLCwwMDAwNDQwNDAsLCwsLCwwMDAwMDQ0NDQEABQAOACwASgA/AG4AXQCsAJUAigDyAOEAwwB4AREAAwAEAAwAFAAjAD4ANQAvAFMASwBEAHcAyQBrAM8ACQAPAA0AFwAmAEMAOgBnAFoAoQBIAH8AdQBuANEAzgAQAC0AFQAnAEUAQAByAGMAVwCeAIwA/ADUAMcAgwFtARoASwAkAEQAQQBzAGUAswCkAJsACAH2AOIAiwF+AWoBCQBCAB4AOwA4AGYAuQCtAAkBjgD9AOgAkAGEAXoBvQEQAG8ANgA0AGQAuACyAKAAhQABAfQA5ADZAIEBbgHLAgoAYgAwAFsAWAClAJ0AlAAFAfgAlwGNAXQBfAF5A3QDCABVAFQAUQCfAJwAjwAEAfkAqwGRAYgBfwHXAskCxAIHAJoATABJAI0AgwAAAfUAqgGWAYoBgAHfAmcBxgJgAQsAiwCBAEMAfQD3AOkA5QDbAIkB5wLhAtACdQNyA7cBBADzAHgAdgBzAOMA3wCMAeoC5gLgAtECyALCAt8AtAEGAMoA4ADeANoA2ACFAYIBfQFsAXgDuwHDArgBtQHABgQA6wLTANIA0AByAXsB3gLTAsoCxwZzA20DbAODDWEDAgB5AXEBZgC7ANYC0gJmAccCxQJiA8YGZwOCDWYDsgEAAAwACgAHAAsACgARAAsACQANAAwACgAHAAUAAwABAAMAAQQGCAkJCgoLCwsMDAwNCQMEBgcICQkJCgoKCwwLDAgGBgcICQkKCgsKCwsLDAwJCAcICQkKCgoLCwwMDA0NCgkICQkKCgsLCwwMDA0NDQkJCAkJCgsLDAsMDA0NDQ4KCgkJCgsLCwsMDAwMDQ0OCgoJCgoLCwsMDA0NDQ0PDwoKCgoLCwsMDA0NDQ0ODg4KCwoKCwsMDA0NDQ0ODQ4NCwsLCgsMDAwMDQ4ODg8PDgoMCwsLDAwNDg4ODg4ODQ4LDAwMDAwNDQ0NDw4ODg4QCw4MDAwNDQ4ODhAPDw8RDwsNDQsMDg4NDg4PEA8RDw4LCQgICQkKCgoLCwsLCwsLCA8ADQAuAFAAkgAGAfgAsgGqAZ0CjQKJAm0CBQIIBFgADgAMABUAJgBHAIIAegDYANEAxgBHAVkBPwEpARcBKgAvABYAKQBKAEQAgAB4AN0AzwDCALYAVAE7AScBHQISAFEAJwBLAEYAhgB9AHQA3ADMAL4AsgBFATcBJQEPARAAkwBIAEUAhwB/AHYAcADSAMgAvABgAUMBMgEdARwCDgAHAUIAgQB+AHcAcgDWAMoAwAC0AFUBPQEtARkBBgEMAPkAewB5AHUAcQDXAM4AwwC5AFsBSgE0ASMBEAEIAgoAswFzAG8AbQDTAMsAxAC7AGEBTAE5ASoBGwETAn0BEQCrAdQA0ADNAMkAwQC6ALEAqQBAAS8BHgEMAQICeQEQAE8BxwDFAL8AvQC1AK4ATQFBATEBIQETAQkCewFzAQsAnAK4ALcAswCvAFgBSwE6ATABIgEVARICfwF1AW4BCgCMAloBqwCoAKQAPgE1ASsBHwEUAQcBAQJ3AXABagEGAIgCQgE8ATgBMwEuASQBHAENAQUBAAJ4AXIBbAFnAQQAbAIsASgBJgEgARoBEQEKAQMCfAF2AXEBbQFpAWUBAgAJBBgBFgESAQsBCAEDAX4BegF0AW8BawFoAWYBZAEAACsAFAATABEADwANAAsACQAHAAYABAAHAAUAAwABAAMABAQGBwgJCQoKCwsLCwsMCQQEBQYHCAgJCQkKCgoKCggGBQYHBwgICQkJCQoKCgsHBwYHBwgICAkJCQkKCgoKBwgHBwgICAgJCQkKCgoKCwcJBwgICAgJCQkJCgoKCgoHCQgICAgJCQkJCgoKCgoLBwoICAgJCQkJCgoKCgoLCwgKCQkJCQkJCQkKCgoKCwsICgkJCQkJCQoKCgoKCwsLCAsJCQkJCgoKCgoKCwsLCwgLCgkJCQoKCgoKCgsLCwsICwoKCgoKCgoKCgsLCwsLCAsKCgoKCgoKCwsLCwsLCwgMCgoKCgoKCwsLCwsLCwsICAcHBwcHBwcHBwcICAgIBAEABQAEAAUABgAFAAQABAAHAAMABgAAAAcAAgADAAEAAQQEBQQGBQYEBQUGBQYGBg8ADgANAAwACwAKAAkACAAHAAYABQAEAAMAAgABAAAABAQEBAQEBAQEBAQEBAQEBABB6CkLBQIAAAACAEH5KQsMBAAACAQAAAMAAAADAEGQKgsNEAQAACIEAAADAAAAAwBBqCoLBjAEAABCBABByCoLBQQAAAAEAEHYKgsNUAQAAHAEAAAEAAAABABB8CoLDYAEAACgBAAABgAAAAYAQYgrCw2wBAAAAAUAAAYAAAAGAEGgKwsNMAUAAIAFAAAGAAAABgBBuCsLDbAFAAAABgAACAAAAAgAQdArCw0wBgAAsAYAAAgAAAAIAEHoKwsN8AYAAHAHAAAIAAAACABBgCwLDbAHAAAwCAAAEAAAABAAQZgsCwZwCAAAcAoAQbgsCwUQAAAAEABByCwLjQNwCwAAcA0AABAAAAAQAAAAAQAAAAEAAABwDgAAcBAAABAAAAAQAAAAAgAAAAMAAABwDgAAcBAAABAAAAAQAAAAAwAAAAcAAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwDgAAcBAAABAAAAAQAAAABgAAAD8AAABwDgAAcBAAABAAAAAQAAAACAAAAP8AAABwDgAAcBAAABAAAAAQAAAACgAAAP8DAABwDgAAcBAAABAAAAAQAAAADQAAAP8fAABwDgAAcBAAABAAAAAQAAAABAAAAA8AAABwEQAAcBMAABAAAAAQAAAABQAAAB8AAABwEQAAcBMAABAAAAAQAAAABgAAAD8AAABwEQAAcBMAABAAAAAQAAAABwAAAH8AAABwEQAAcBMAABAAAAAQAAAACAAAAP8AAABwEQAAcBMAABAAAAAQAAAACQAAAP8BAABwEQAAcBMAABAAAAAQAAAACwAAAP8HAABwEQAAcBMAABAAAAAQAAAADQAAAP8fAABwEQAAcBMAAAEAAAAQAEHgLwsNcBQAAJAUAAABAAAAEABB+C8LBqAUAADAFABBrDALiQEBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAACAAAAAgAAAAIAAAACAAAAAwAAAAIAAAADAAAAAwAAAAQAAAADAAAABAAAAAMAAAAEAAAABAAAAAUAAAAEAAAABQAAAAQAAAAGAAAABQAAAAYAAAAFAAAABgAAAAUAAAAHAAAABgAAAAcAAAAGAAAABwBBwDELDQEAAAD/////AQAAAAIAQeAxC5IBAwAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAMAAAADAAAAAwAAAAQAAAAEAAAAAAAAAAEAAAACAAAAAwAAAAAAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAABAAAAAgAAAAMAAAACAAAAAwAAAESsAACAuwAAAH0AACJWAADAXQAAgD4AABErAADgLgAAQB8AQYAzC7oI/////////////////////wgAAAD/////CAAAACAAAAAQAAAA/////xAAAAAoAAAAGAAAAP////8YAAAAMAAAACAAAAD/////IAAAADgAAAAoAAAA/////ygAAABAAAAAMAAAAP////8wAAAAUAAAADgAAAD/////OAAAAGAAAABAAAAA/////0AAAABwAAAA//////////9QAAAAgAAAAP//////////YAAAAKAAAAD//////////3AAAADAAAAA//////////+AAAAA4AAAAP//////////kAAAAAABAAD//////////6AAAABAAQAA/////////////////////wAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAeAAAAJAAAACwAAAA0AAAAPgAAAEoAAABaAAAAbgAAAIYAAACiAAAAxAAAAO4AAAAgAQAAVgEAAKIBAABAAgAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAAB4AAAAkAAAAKgAAADIAAAA8AAAASAAAAFgAAABqAAAAgAAAAJwAAAC+AAAA5gAAABQBAABKAQAAgAEAAEACAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABSAAAAZgAAAH4AAACcAAAAwgAAAPAAAAAoAQAAbAEAAMABAAAmAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAcgAAAIgAAACiAAAAwgAAAOgAAAAWAQAASgEAAIoBAADQAQAAHAIAAEACAAAAAAAABgAAAAwAAAASAAAAGAAAAB4AAAAkAAAALAAAAC0AAABCAAAAUAAAAGAAAAB0AAAAjAAAAKgAAADIAAAA7gAAAPgAAABQAQAAjAEAANABAAAKAgAAQAIAAAAAAAAGAAAADAAAABIAAAAYAAAAHgAAACQAAAAsAAAANgAAAEIAAABQAAAAYAAAAHQAAACMAAAAqAAAAMgAAADuAAAAHAEAAFABAACMAQAA0AEAAAoCAABAAgAAAAAAAAYAAAAMAAAAEgAAABgAAAAeAAAAJAAAACwAAAA2AAAAQgAAAFAAAABgAAAAdAAAAIwAAACoAAAAyAAAAO4AAAAcAQAAUAEAAIwBAADQAQAACgIAAEACAAAAAAAADAAAABgAAAAkAAAAMAAAADwAAABIAAAAWAAAAGwAAACEAAAAoAAAAMAAAADoAAAAGAEAAFABAACQAQAA3AEAADYCAAA4AgAAOgIAADwCAAA+AgAAQAIAQdw7C8oPnff//533//+d9///nff//533//+d9///Ou///zrv//86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";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["c"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["o"];addOnInit(Module["asm"]["d"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){callbacks.shift()(Module)}}function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort("invalid type for getValue: "+type)}return null}function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort("invalid type for setValue: "+type)}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ASSERTIONS=false;var decodeBase64=typeof atob=="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output};function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE=="boolean"&&ENVIRONMENT_IS_NODE){var buf=Buffer.from(s,"base64");return new Uint8Array(buf["buffer"],buf["byteOffset"],buf["byteLength"])}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}var asmLibraryArg={"b":_emscripten_memcpy_big,"a":_emscripten_resize_heap};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["d"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["e"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["f"]).apply(null,arguments)};var _shine_check_config=Module["_shine_check_config"]=function(){return(_shine_check_config=Module["_shine_check_config"]=Module["asm"]["g"]).apply(null,arguments)};var _shine_samples_per_pass=Module["_shine_samples_per_pass"]=function(){return(_shine_samples_per_pass=Module["_shine_samples_per_pass"]=Module["asm"]["h"]).apply(null,arguments)};var _shine_encode_buffer=Module["_shine_encode_buffer"]=function(){return(_shine_encode_buffer=Module["_shine_encode_buffer"]=Module["asm"]["i"]).apply(null,arguments)};var _shine_flush=Module["_shine_flush"]=function(){return(_shine_flush=Module["_shine_flush"]=Module["asm"]["j"]).apply(null,arguments)};var _shine_close=Module["_shine_close"]=function(){return(_shine_close=Module["_shine_close"]=Module["asm"]["k"]).apply(null,arguments)};var _shine_js_int16_len=Module["_shine_js_int16_len"]=function(){return(_shine_js_int16_len=Module["_shine_js_int16_len"]=Module["asm"]["l"]).apply(null,arguments)};var _shine_js_ptr_len=Module["_shine_js_ptr_len"]=function(){return(_shine_js_ptr_len=Module["_shine_js_ptr_len"]=Module["asm"]["m"]).apply(null,arguments)};var _shine_js_init=Module["_shine_js_init"]=function(){return(_shine_js_init=Module["_shine_js_init"]=Module["asm"]["n"]).apply(null,arguments)};Module["setValue"]=setValue;Module["getValue"]=getValue;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run();var ShineModule;var int16Len;var ptrLen;function shineInit(){int16Len=ShineModule._shine_js_int16_len();ptrLen=ShineModule._shine_js_ptr_len()}function Shine(args){if(ShineModule._shine_check_config(args.samplerate,args.bitrate)<0)throw"Invalid configuration";var stereoMode;if(!args.stereoMode){if(args.channels===1){stereoMode=Shine.MONO}else{stereoMode=Shine.JOINT_STEREO}}else{stereoMode=args.stereoMode}this._handle=ShineModule._shine_js_init(args.channels,args.samplerate,stereoMode,args.bitrate);this._channels=args.channels;this._samples_per_pass=ShineModule._shine_samples_per_pass(this._handle);this._buffer=ShineModule._malloc(this._channels*ptrLen);this._pcm=new Array(this._channels);this._rem=new Array(this._channels);this._written=ShineModule._malloc(int16Len);var _tmp,chan;for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array;_tmp=ShineModule._malloc(this._samples_per_pass*int16Len);ShineModule.setValue(this._buffer+chan*ptrLen,_tmp,"*");this._pcm[chan]=ShineModule.HEAP16.subarray(_tmp/int16Len,_tmp/int16Len+this._samples_per_pass)}return this}Shine.checkConfig=function(samplerate,bitrate){return ShineModule._shine_check_config(samplerate,bitrate)>=0};Shine.prototype._encodePass=function(data){if(!this._handle)throw"Closed";var chan;for(chan=0;chan<this._channels;chan++)this._pcm[chan].set(data[chan]);var _buf=ShineModule._shine_encode_buffer(this._handle,this._buffer,this._written);var written=ShineModule.getValue(this._written,"i16");return ShineModule.HEAPU8.subarray(_buf,_buf+written)};function concat(ctr,a,b){if(typeof b==="undefined"){return a}var ret=new ctr(a.length+b.length);ret.set(a);ret.subarray(a.length).set(b);return ret}function clip(x){return x>1?1:x<-1?-1:x}function convertFloat32(buf){var ret=new Array(buf.length);var samples=buf[0].length;var chan,i;for(chan=0;chan<buf.length;chan++){ret[chan]=new Int16Array(samples);for(i=0;i<samples;i++){ret[chan][i]=parseInt(clip(buf[chan][i])*32767)}}return ret}Shine.prototype.encode=function(data){if(data.length!=this._channels)throw"Invalid data";var encoded=new Uint8Array;var tmp=new Array(this._channels);if(data[0]instanceof Float32Array){data=convertFloat32(data)}var chan;for(chan=0;chan<this._channels;chan++){tmp[chan]=new Float32Array;this._rem[chan]=concat(Int16Array,this._rem[chan],data[chan])}var i,enc;for(i=0;i<this._rem[0].length;i+=this._samples_per_pass){for(chan=0;chan<this._channels;chan++){tmp[chan]=this._rem[chan].subarray(i,i+this._samples_per_pass)}if(tmp[0].length<this._samples_per_pass){break}else{enc=this._encodePass(tmp);if(enc.length>0){encoded=concat(Uint8Array,encoded,enc)}}}if(tmp[0].length<this._samples_per_pass){this._rem=tmp}else{for(chan=0;chan<this._channels;chan++){this._rem[chan]=new Int16Array}}return encoded};Shine.prototype.close=function(){if(!this._handle){throw"Closed"}var _buf=ShineModule._shine_flush(this._handle,this._written);var written=ShineModule.getValue(this._written,"i16");var encoded=new Uint8Array(written);encoded.set(ShineModule.HEAPU8.subarray(_buf,_buf+written));ShineModule._free(this._written);ShineModule._shine_close(this._handle);this._handle=null;var chan;for(chan=0;chan<this._channels;chan++){ShineModule._free(ShineModule.getValue(this._buffer+chan*ptrLen,"*"))}ShineModule._free(this._buffer);return encoded};Shine.initialized=new Promise(function(resolve){Module["onRuntimeInitialized"]=function(){ShineModule=Module;shineInit();resolve()}});Module["Shine"]=Shine;Module["StereoMode"]={0:"STEREO",1:"JOINT_STEREO",2:"DUAL_CHANNEL",3:"MONO",STEREO:0,JOINT_STEREO:1,DUAL_CHANNEL:2,MONO:3};
+diff --git a/js/libshine.d.ts b/js/libshine.d.ts
+new file mode 100644
+index 0000000..8f00edc
+--- /dev/null
++++ b/js/libshine.d.ts
+@@ -0,0 +1,19 @@
++export type Data = Int16Array | Float32Array;
++export declare enum StereoMode {
++ STEREO = 0,
++ JOINT_STEREO = 1,
++ DUAL_CHANNEL = 2,
++ MONO = 3
++}
++export class Shine {
++ static initialized: Promise<void>;
++ static checkConfig(samplerate: number, bitrate: number): boolean;
++ constructor(args: {
++ samplerate: number;
++ bitrate: number;
++ channels: number;
++ stereoMode?: StereoMode;
++ });
++ encode(data: Data[]): Uint8Array;
++ close(): Uint8Array;
++}
+diff --git a/js/package-lock.json b/js/package-lock.json
+new file mode 100644
+index 0000000..38b374d
+--- /dev/null
++++ b/js/package-lock.json
+@@ -0,0 +1,18 @@
++{
++ "name": "@toots/shine.js",
++ "version": "1.0.1",
++ "lockfileVersion": 3,
++ "requires": true,
++ "packages": {
++ "": {
++ "name": "@toots/shine.js",
++ "version": "1.0.1",
++ "license": "LGPL-2.0-only"
++ },
++ "stubs": {
++ "version": "1.0.0",
++ "extraneous": true,
++ "license": "ISC"
++ }
++ }
++}
+diff --git a/js/package.json b/js/package.json
+new file mode 100644
+index 0000000..0c83619
+--- /dev/null
++++ b/js/package.json
+@@ -0,0 +1,24 @@
++{
++ "name": "@toots/shine.js",
++ "version": "1.0.3",
++ "description": "Shine fixed-point mp3 encoder",
++ "main": "dist/libshine_node.js",
++ "browser": "dist/libshine_browser.js",
++ "types": "libshine.d.ts",
++ "repository": {
++ "type": "git",
++ "url": "git+https://github.com/toots/shine.git"
++ },
++ "keywords": [
++ "mp3",
++ "encoder",
++ "wasm",
++ "fixed-point"
++ ],
++ "author": "Romain Beauxis <toots@rastageeks.org>",
++ "license": "LGPL-2.0-only",
++ "bugs": {
++ "url": "https://github.com/toots/shine/issues"
++ },
++ "homepage": "https://github.com/toots/shine#readme"
++}
+diff --git a/js/src/libshine_browser_wrapper.js b/js/src/libshine_browser_wrapper.js
+new file mode 100644
+index 0000000..f0ef04e
+--- /dev/null
++++ b/js/src/libshine_browser_wrapper.js
+@@ -0,0 +1,10 @@
++var createModule = require("./libshine_browser_stubs").default;
++
++Shine.initialized = (createModule()).then(function (Module) {
++ ShineModule = Module;
++ shineInit();
++});
++
++module.exports.Shine = Shine;
++
++module.exports.StereoMode = StereoMode;
+diff --git a/js/src/post.js b/js/src/libshine_class.js
+similarity index 57%
+rename from js/src/post.js
+rename to js/src/libshine_class.js
+index f6a07e6..5d88d9e 100644
+--- a/js/src/post.js
++++ b/js/src/libshine_class.js
+@@ -1,50 +1,64 @@
+ // libshine function wrappers
+
+-var isNode = typeof process === "object" && typeof require === "function";
++var StereoMode = {
++ '0': 'STEREO',
++ '1': 'JOINT_STEREO',
++ '2': 'DUAL_CHANNEL',
++ '3': 'MONO',
++ STEREO: 0,
++ JOINT_STEREO: 1,
++ DUAL_CHANNEL: 2,
++ MONO: 3
++};
++
++var ShineModule;
++var int16Len;
++var ptrLen;
+
+-var int16Len = Module.HEAP16.BYTES_PER_ELEMENT;
+-var ptrLen = Module.HEAP32.BYTES_PER_ELEMENT;
++function shineInit() {
++ int16Len = ShineModule._shine_js_int16_len();
++ ptrLen = ShineModule._shine_js_ptr_len();
++};
+
+ function Shine(args) {
+- if (_shine_check_config(args.samplerate, args.bitrate) < 0)
++ if (ShineModule._shine_check_config(args.samplerate, args.bitrate) < 0)
+ throw "Invalid configuration";
+
+- var mode;
+- if (!args.mode) {
++ var stereoMode;
++ if (!args.stereoMode) {
+ if (args.channels === 1) {
+- mode = Shine.MONO;
++ stereoMode = Shine.MONO;
+ } else {
+- mode = Shine.JOINT_STEREO;
++ stereoMode = Shine.JOINT_STEREO;
+ }
+ } else {
+- mode = args.mode;
++ stereoMode = args.stereoMode;
+ }
+
+- this._handle = _shine_js_init(args.channels, args.samplerate, mode, args.bitrate);
++ this._handle = ShineModule._shine_js_init(args.channels, args.samplerate, stereoMode, args.bitrate);
+
+ this._channels = args.channels;
+- this._samples_per_pass = _shine_samples_per_pass(this._handle);
++ this._samples_per_pass = ShineModule._shine_samples_per_pass(this._handle);
+
+- this._buffer = _malloc(this._channels * ptrLen);
++ this._buffer = ShineModule._malloc(this._channels * ptrLen);
+ this._pcm = new Array(this._channels);
+ this._rem = new Array(this._channels);
+- this._written = _malloc(int16Len);
++ this._written = ShineModule._malloc(int16Len);
+
+ var _tmp, chan;
+ for (chan=0; chan<this._channels; chan++) {
+ this._rem[chan] = new Int16Array;
+- _tmp = _malloc(this._samples_per_pass * int16Len);
+- setValue(this._buffer + chan*ptrLen, _tmp, "*")
+- this._pcm[chan] = Module.HEAP16.subarray(_tmp/int16Len, _tmp/int16Len+this._samples_per_pass)
++ _tmp = ShineModule._malloc(this._samples_per_pass * int16Len);
++ ShineModule.setValue(this._buffer + chan*ptrLen, _tmp, "*")
++ this._pcm[chan] = ShineModule.HEAP16.subarray(_tmp/int16Len, _tmp/int16Len+this._samples_per_pass)
+ }
+
+ return this;
+ };
+
+-Shine.STEREO = 0;
+-Shine.JOINT_STEREO = 1;
+-Shine.DUAL_CHANNEL = 2;
+-Shine.MONO = 3;
++Shine.checkConfig = function (samplerate, bitrate) {
++ return ShineModule._shine_check_config(samplerate, bitrate) >= 0;
++};
+
+ Shine.prototype._encodePass = function (data) {
+ if (!this._handle)
+@@ -54,11 +68,11 @@ Shine.prototype._encodePass = function (data) {
+ for (chan=0;chan<this._channels;chan++)
+ this._pcm[chan].set(data[chan]);
+
+- var _buf = _shine_encode_buffer(this._handle, this._buffer, this._written);
++ var _buf = ShineModule._shine_encode_buffer(this._handle, this._buffer, this._written);
+
+- var written = getValue(this._written, "i16");
++ var written = ShineModule.getValue(this._written, "i16");
+
+- return Module.HEAPU8.subarray(_buf, _buf+written);
++ return ShineModule.HEAPU8.subarray(_buf, _buf+written);
+ };
+
+ function concat(ctr, a, b) {
+@@ -138,30 +152,22 @@ Shine.prototype.close = function () {
+ throw "Closed";
+ }
+
+- var _buf = _shine_flush(this._handle, this._written);
++ var _buf = ShineModule._shine_flush(this._handle, this._written);
+
+- var written = getValue(this._written, "i16");
++ var written = ShineModule.getValue(this._written, "i16");
+ var encoded = new Uint8Array(written);
+
+- encoded.set(Module.HEAPU8.subarray(_buf, _buf + written));
++ encoded.set(ShineModule.HEAPU8.subarray(_buf, _buf + written));
+
+- _free(this._written);
+- _shine_close(this._handle);
++ ShineModule._free(this._written);
++ ShineModule._shine_close(this._handle);
+ this._handle = null;
+
+ var chan;
+ for (chan=0; chan<this._channels; chan++) {
+- _free(getValue(this._buffer + chan*ptrLen, "*"));
++ ShineModule._free(ShineModule.getValue(this._buffer + chan*ptrLen, "*"));
+ }
+- _free(this._buffer);
++ ShineModule._free(this._buffer);
+
+ return encoded;
+ };
+-
+-if (isNode) {
+- module.exports = Shine;
+-}
+-
+-return Shine;
+-
+-}).call(context)})();
+diff --git a/js/src/libshine_node_wrapper.js b/js/src/libshine_node_wrapper.js
+new file mode 100644
+index 0000000..aaaf28c
+--- /dev/null
++++ b/js/src/libshine_node_wrapper.js
+@@ -0,0 +1,10 @@
++Shine.initialized = new Promise(function (resolve) {
++ Module['onRuntimeInitialized'] = function () {
++ ShineModule = Module;
++ shineInit();
++ resolve();
++ }
++})
++
++Module["Shine"] = Shine;
++Module["StereoMode"] = StereoMode;
+diff --git a/js/src/pre.js b/js/src/pre.js
+deleted file mode 100644
+index 8078b87..0000000
+--- a/js/src/pre.js
++++ /dev/null
+@@ -1,9 +0,0 @@
+-// libshine.js - port of libshine to JavaScript using emscripten
+-// by Romain Beauxis <toots@rastageeks.org> from code by
+-// Andreas Krennmair <ak@synflood.at>
+-
+-
+-var Shine = (function() {
+- var Module;
+- var context = {};
+- return (function() {
+diff --git a/js/src/wrapper.c b/js/src/wrapper.c
+index 506570d..375b35c 100644
+--- a/js/src/wrapper.c
++++ b/js/src/wrapper.c
+@@ -1,7 +1,16 @@
++#include "layer3.h"
++#include "types.h"
+ #include <stdlib.h>
+ #include <string.h>
+-#include "types.h"
+-#include "layer3.h"
++#include <stdint.h>
++
++size_t shine_js_int16_len() {
++ return sizeof(int16_t);
++}
++
++size_t shine_js_ptr_len() {
++ return sizeof(void*);
++}
+
+ shine_t shine_js_init(int channels, int samplerate, int mode, int bitr) {
+ shine_config_t config;
+@@ -13,4 +22,4 @@ shine_t shine_js_init(int channels, int samplerate, int mode, int bitr) {
+ config.mpeg.bitr = bitr;
+
+ return shine_initialise(&config);
+-}
++}
+diff --git a/js/test/browser/Makefile b/js/test/browser/Makefile
+index b3eedc8..befc1ce 100644
+--- a/js/test/browser/Makefile
++++ b/js/test/browser/Makefile
+@@ -1,2 +1,2 @@
+ all:
+- python -m SimpleHTTPServer
++ python -m http.server
+diff --git a/js/test/browser/encode.js b/js/test/browser/encode.js
+index 65e009d..af17116 100644
+--- a/js/test/browser/encode.js
++++ b/js/test/browser/encode.js
+@@ -4,24 +4,22 @@ function runEncodeTest(log, callback) {
+ var samplerate = 44100;
+ var channels = 2;
+ var bitrate = 128;
+- var mode = Shine.STEREO;
+
+ var shine = new Shine({
+ samplerate: samplerate,
+ channels: channels,
+ bitrate: bitrate,
+- mode: mode
+ });
+
+- var started = new Date;
++ var started = new Date();
+ var duration = 0.0;
+ var encoded = [];
+
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", "encode.wav", true);
+ xhr.responseType = "arraybuffer";
+- xhr.onload = function() {
+- var samples = xhr.response.byteLength / (2*channels);
++ xhr.onload = function () {
++ var samples = xhr.response.byteLength / (2 * channels);
+ var data = new Int16Array(xhr.response);
+ var buf = convertInterleavedBuffer(data, channels, samples);
+ duration += parseFloat(samples) / samplerate;
+@@ -33,12 +31,12 @@ function runEncodeTest(log, callback) {
+ xhr.addEventListener("load", function () {
+ encoded.push(shine.close());
+
+- var ended = new Date
+- var encodingTime = (ended.getTime() - started.getTime())/1000
++ var ended = new Date();
++ var encodingTime = (ended.getTime() - started.getTime()) / 1000;
+ log("Done encoding.");
+ log("File duration: " + duration.toFixed(2) + " seconds");
+ log("Encoding time: " + encodingTime.toFixed(2) + " seconds");
+- log("Encoding rate: " + (duration/encodingTime).toFixed(2) + "X");
++ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X");
+ callback(new Blob(encoded));
+ });
+
+@@ -48,10 +46,10 @@ function runEncodeTest(log, callback) {
+ function convertInterleavedBuffer(buf, channels, samples) {
+ var chan, i;
+ ret = new Array(channels);
+- for (chan=0; chan<channels; chan++) {
++ for (chan = 0; chan < channels; chan++) {
+ ret[chan] = new Int16Array(samples);
+- for (i=0; i<samples; i++) {
+- ret[chan][i] = buf[i*channels + chan];
++ for (i = 0; i < samples; i++) {
++ ret[chan][i] = buf[i * channels + chan];
+ }
+ }
+ return ret;
+diff --git a/js/test/browser/index.html b/js/test/browser/index.html
+index b3a4ee3..6496e46 100644
+--- a/js/test/browser/index.html
++++ b/js/test/browser/index.html
+@@ -1,4 +1,4 @@
+-<script src="libshine.js"></script>
++<script src="libshine_node.js"></script>
+ <script src="encode.js"></script>
+ <script src="rounds.js"></script>
+ <script>
+@@ -7,20 +7,21 @@
+ el.innerHTML = el.innerHTML + "<br>" + msg;
+ };
+
+- var load = function() {
+- runEncodeTest(log, function (blob) {
+- if (typeof window.URL !== "undefined") {
+- var link = document.getElementById("download-link");
+- link.href = URL.createObjectURL(blob);
+- link.download = "encoded.mp3";
+- }
++ function onLoad() {
++ Shine.initialized.then(function () {
++ runEncodeTest(log, function (blob) {
++ if (typeof window.URL !== "undefined") {
++ var link = document.getElementById("download-link");
++ link.href = URL.createObjectURL(blob);
++ link.download = "encoded.mp3";
++ }
+
+- log("");
+- runRoundsTest(Shine, log);
++ log("");
++ runRoundsTest(Shine, log);
++ });
+ });
+ };
+-
+- window.addEventListener("load", load, false);
++ window.addEventListener("load", onLoad, false);
+ </script>
+ <a href="#" id="download-link">Download encoded file</a>
+ <div id="output"></div>
+diff --git a/js/test/browser/libshine.js b/js/test/browser/libshine.js
+deleted file mode 120000
+index fb57470..0000000
+--- a/js/test/browser/libshine.js
++++ /dev/null
+@@ -1 +0,0 @@
+-../../dist/libshine.js
+\ No newline at end of file
+diff --git a/js/test/browser/libshine_node.js b/js/test/browser/libshine_node.js
+new file mode 120000
+index 0000000..07f07a4
+--- /dev/null
++++ b/js/test/browser/libshine_node.js
+@@ -0,0 +1 @@
++../../dist/libshine_node.js
+\ No newline at end of file
+diff --git a/js/test/lib/rounds.js b/js/test/lib/rounds.js
+index f76410a..1b388b5 100644
+--- a/js/test/lib/rounds.js
++++ b/js/test/lib/rounds.js
+@@ -1,39 +1,35 @@
+ var channels = 2; // test.wav is stereo
+ var samplerate = 44100; // ditto
+
+-var runRoundsTest = function(Shine, log) {
++var runRoundsTest = function (Shine, log) {
+ log("Executing rounds test");
+
+ var nPasses = 50;
+ var frameSize = 4096;
+ var data = new Array(channels);
+ var chan;
+- for (chan=0; chan<channels; chan++)
+- data[chan] = new Int16Array(frameSize);
++ for (chan = 0; chan < channels; chan++) data[chan] = new Int16Array(frameSize);
+
+ log("Encoding " + nPasses + " buffers of " + frameSize + " samples");
+- var started = new Date;
++ var started = new Date();
+
+ var shine = new Shine({
+ samplerate: samplerate,
+ bitrate: 128,
+ channels: channels,
+- model: Shine.STEREO
+ });
+
+ var i;
+- for (i=0; i < nPasses; i++)
+- shine.encode(data);
++ for (i = 0; i < nPasses; i++) shine.encode(data);
+ shine.close();
+
+- var ended = new Date;
+- var duration = (parseFloat(nPasses*frameSize) / parseFloat(samplerate)).toFixed(2);
+- var encodingTime = (ended.getTime() - started.getTime())/1000;
++ var ended = new Date();
++ var duration = (parseFloat(nPasses * frameSize) / parseFloat(samplerate)).toFixed(2);
++ var encodingTime = (ended.getTime() - started.getTime()) / 1000;
+ log("Done encoding");
+ log("Total duration: " + duration);
+ log("Encoding time: " + encodingTime.toFixed(2));
+- log("Encoding rate: " + (duration/encodingTime).toFixed(2) + "X");
++ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X");
+ };
+
+-if (typeof process === "object" && typeof require === "function")
+- module.exports = runRoundsTest;
++if (typeof process === "object" && typeof require === "function") module.exports = runRoundsTest;
+diff --git a/js/test/nextjs/.eslintrc.json b/js/test/nextjs/.eslintrc.json
+new file mode 100644
+index 0000000..bffb357
+--- /dev/null
++++ b/js/test/nextjs/.eslintrc.json
+@@ -0,0 +1,3 @@
++{
++ "extends": "next/core-web-vitals"
++}
+diff --git a/js/test/nextjs/.gitignore b/js/test/nextjs/.gitignore
+new file mode 100644
+index 0000000..c87c9b3
+--- /dev/null
++++ b/js/test/nextjs/.gitignore
+@@ -0,0 +1,36 @@
++# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
++
++# dependencies
++/node_modules
++/.pnp
++.pnp.js
++
++# testing
++/coverage
++
++# next.js
++/.next/
++/out/
++
++# production
++/build
++
++# misc
++.DS_Store
++*.pem
++
++# debug
++npm-debug.log*
++yarn-debug.log*
++yarn-error.log*
++.pnpm-debug.log*
++
++# local env files
++.env*.local
++
++# vercel
++.vercel
++
++# typescript
++*.tsbuildinfo
++next-env.d.ts
+diff --git a/js/test/nextjs/.prettierignore b/js/test/nextjs/.prettierignore
+new file mode 100644
+index 0000000..799a1ca
+--- /dev/null
++++ b/js/test/nextjs/.prettierignore
+@@ -0,0 +1,4 @@
++.next/
++out/
++public/audio
++__ENV.js
+diff --git a/js/test/nextjs/.prettierrc b/js/test/nextjs/.prettierrc
+new file mode 100644
+index 0000000..a36a92f
+--- /dev/null
++++ b/js/test/nextjs/.prettierrc
+@@ -0,0 +1,12 @@
++{
++ "singleQuote": false,
++ "quoteProps": "as-needed",
++ "arrowParens": "avoid",
++ "tabWidth": 2,
++ "trailingComma": "es5",
++ "semi": false,
++ "jsxSingleQuote": true,
++ "bracketSameLine": false,
++ "printWidth": 120,
++ "parser": "typescript"
++}
+diff --git a/js/test/nextjs/README.md b/js/test/nextjs/README.md
+new file mode 100644
+index 0000000..fb9bcc9
+--- /dev/null
++++ b/js/test/nextjs/README.md
+@@ -0,0 +1,36 @@
++This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
++
++## Getting Started
++
++First, run the development server:
++
++```bash
++npm run dev
++# or
++yarn dev
++```
++
++Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
++
++You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file.
++
++[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
++
++The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
++
++This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
++
++## Learn More
++
++To learn more about Next.js, take a look at the following resources:
++
++- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
++- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
++
++You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
++
++## Deploy on Vercel
++
++The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
++
++Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
+diff --git a/js/test/nextjs/lib/encode.ts b/js/test/nextjs/lib/encode.ts
+new file mode 100644
+index 0000000..6e1ef2d
+--- /dev/null
++++ b/js/test/nextjs/lib/encode.ts
+@@ -0,0 +1,59 @@
++import { Shine } from "@toots/shine.js"
++
++const convertInterleavedBuffer = (buf: Int16Array, channels: number, samples: number) => {
++ const ret = new Array(channels)
++ for (let chan = 0; chan < channels; chan++) {
++ ret[chan] = new Int16Array(samples)
++ for (let i = 0; i < samples; i++) {
++ ret[chan][i] = buf[i * channels + chan]
++ }
++ }
++ return ret
++}
++
++export const runEncodeTest = (log: (_: string) => void, callback: (_: Blob) => void) => {
++ log("Executing encoding test")
++
++ const samplerate = 44100
++ const channels = 2
++ const bitrate = 128
++ //const stereoMode = StereoMode.STEREO
++
++ const shine = new Shine({
++ samplerate: samplerate,
++ channels: channels,
++ bitrate: bitrate,
++ // stereoMode: stereoMode,
++ })
++
++ const started = new Date()
++ let duration = 0.0
++ const encoded: Uint8Array[] = []
++
++ const xhr = new XMLHttpRequest()
++ xhr.open("GET", "encode.wav", true)
++ xhr.responseType = "arraybuffer"
++ xhr.onload = () => {
++ const samples = xhr.response.byteLength / (2 * channels)
++ const data = new Int16Array(xhr.response)
++ const buf = convertInterleavedBuffer(data, channels, samples)
++ duration += samples / samplerate
++ encoded.push(shine.encode(buf))
++ }
++
++ log("Got WAV file.")
++ log("Encoding..")
++ xhr.addEventListener("load", () => {
++ encoded.push(shine.close())
++
++ const ended = new Date()
++ const encodingTime = (ended.getTime() - started.getTime()) / 1000
++ log("Done encoding.")
++ log("File duration: " + duration.toFixed(2) + " seconds")
++ log("Encoding time: " + encodingTime.toFixed(2) + " seconds")
++ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X")
++ callback(new Blob(encoded))
++ })
++
++ xhr.send()
++}
+diff --git a/js/test/nextjs/lib/encode.wav b/js/test/nextjs/lib/encode.wav
+new file mode 100644
+index 0000000..c8cd595
+Binary files /dev/null and b/js/test/nextjs/lib/encode.wav differ
+diff --git a/js/test/nextjs/lib/rounds.ts b/js/test/nextjs/lib/rounds.ts
+new file mode 100644
+index 0000000..fab9b7c
+--- /dev/null
++++ b/js/test/nextjs/lib/rounds.ts
+@@ -0,0 +1,34 @@
++import { Shine, StereoMode } from "@toots/shine.js"
++
++const channels = 2 // test.wav is stereo
++const samplerate = 44100 // ditto
++
++export const runRoundsTest = (log: (_: string) => void) => {
++ log("Executing rounds test")
++
++ const nPasses = 50
++ const frameSize = 4096
++ const data = new Array(channels)
++ for (let chan = 0; chan < channels; chan++) data[chan] = new Int16Array(frameSize)
++
++ log("Encoding " + nPasses + " buffers of " + frameSize + " samples")
++ const started = new Date()
++
++ const shine = new Shine({
++ samplerate: samplerate,
++ bitrate: 128,
++ channels: channels,
++ stereoMode: StereoMode.STEREO,
++ })
++
++ for (let i = 0; i < nPasses; i++) shine.encode(data)
++ shine.close()
++
++ const ended = new Date()
++ const duration = (nPasses * frameSize) / samplerate
++ const encodingTime = (ended.getTime() - started.getTime()) / 1000
++ log("Done encoding")
++ log("Total duration: " + duration.toFixed(2))
++ log("Encoding time: " + encodingTime.toFixed(2))
++ log("Encoding rate: " + (duration / encodingTime).toFixed(2) + "X")
++}
+diff --git a/js/test/nextjs/next.config.js b/js/test/nextjs/next.config.js
+new file mode 100644
+index 0000000..a843cbe
+--- /dev/null
++++ b/js/test/nextjs/next.config.js
+@@ -0,0 +1,6 @@
++/** @type {import('next').NextConfig} */
++const nextConfig = {
++ reactStrictMode: true,
++}
++
++module.exports = nextConfig
+diff --git a/js/test/nextjs/package-lock.json b/js/test/nextjs/package-lock.json
+new file mode 100644
+index 0000000..02208b0
+--- /dev/null
++++ b/js/test/nextjs/package-lock.json
+@@ -0,0 +1,3084 @@
++{
++ "name": "shine-nextjs-test-app",
++ "version": "0.1.0",
++ "lockfileVersion": 3,
++ "requires": true,
++ "packages": {
++ "": {
++ "name": "shine-nextjs-test-app",
++ "version": "0.1.0",
++ "dependencies": {
++ "@next/font": "13.1.1",
++ "@toots/shine.js": "file:../..",
++ "@types/node": "18.11.18",
++ "@types/react": "18.0.26",
++ "@types/react-dom": "18.0.10",
++ "eslint": "8.31.0",
++ "eslint-config-next": "13.1.1",
++ "next": "13.1.1",
++ "react": "18.2.0",
++ "react-dom": "18.2.0",
++ "typescript": "4.9.4"
++ },
++ "devDependencies": {
++ "prettier": "^2.8.1"
++ }
++ },
++ "node_modules/@babel/runtime": {
++ "version": "7.20.7",
++ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz",
++ "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==",
++ "dependencies": {
++ "regenerator-runtime": "^0.13.11"
++ },
++ "engines": {
++ "node": ">=6.9.0"
++ }
++ },
++ "node_modules/@babel/runtime-corejs3": {
++ "version": "7.20.7",
++ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.7.tgz",
++ "integrity": "sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg==",
++ "dependencies": {
++ "core-js-pure": "^3.25.1",
++ "regenerator-runtime": "^0.13.11"
++ },
++ "engines": {
++ "node": ">=6.9.0"
++ }
++ },
++ "node_modules/@eslint/eslintrc": {
++ "version": "1.4.1",
++ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
++ "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
++ "dependencies": {
++ "ajv": "^6.12.4",
++ "debug": "^4.3.2",
++ "espree": "^9.4.0",
++ "globals": "^13.19.0",
++ "ignore": "^5.2.0",
++ "import-fresh": "^3.2.1",
++ "js-yaml": "^4.1.0",
++ "minimatch": "^3.1.2",
++ "strip-json-comments": "^3.1.1"
++ },
++ "engines": {
++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
++ },
++ "funding": {
++ "url": "https://opencollective.com/eslint"
++ }
++ },
++ "node_modules/@humanwhocodes/config-array": {
++ "version": "0.11.8",
++ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
++ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
++ "dependencies": {
++ "@humanwhocodes/object-schema": "^1.2.1",
++ "debug": "^4.1.1",
++ "minimatch": "^3.0.5"
++ },
++ "engines": {
++ "node": ">=10.10.0"
++ }
++ },
++ "node_modules/@humanwhocodes/module-importer": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
++ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
++ "engines": {
++ "node": ">=12.22"
++ },
++ "funding": {
++ "type": "github",
++ "url": "https://github.com/sponsors/nzakas"
++ }
++ },
++ "node_modules/@humanwhocodes/object-schema": {
++ "version": "1.2.1",
++ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
++ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
++ },
++ "node_modules/@next/env": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.1.tgz",
++ "integrity": "sha512-vFMyXtPjSAiOXOywMojxfKIqE3VWN5RCAx+tT3AS3pcKjMLFTCJFUWsKv8hC+87Z1F4W3r68qTwDFZIFmd5Xkw=="
++ },
++ "node_modules/@next/eslint-plugin-next": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.1.tgz",
++ "integrity": "sha512-SBrOFS8PC3nQ5aeZmawJkjKkWjwK9RoxvBSv/86nZp0ubdoVQoko8r8htALd9ufp16NhacCdqhu9bzZLDWtALQ==",
++ "dependencies": {
++ "glob": "7.1.7"
++ }
++ },
++ "node_modules/@next/font": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.1.tgz",
++ "integrity": "sha512-amygRorS05hYK1/XQRZo5qBl7l2fpHnezeKU/cNveWU5QJg+sg8gMGkUXHtvesNKpiKIJshBRH1TzvO+2sKpvQ=="
++ },
++ "node_modules/@next/swc-android-arm-eabi": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.1.tgz",
++ "integrity": "sha512-qnFCx1kT3JTWhWve4VkeWuZiyjG0b5T6J2iWuin74lORCupdrNukxkq9Pm+Z7PsatxuwVJMhjUoYz7H4cWzx2A==",
++ "cpu": [
++ "arm"
++ ],
++ "optional": true,
++ "os": [
++ "android"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-android-arm64": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.1.tgz",
++ "integrity": "sha512-eCiZhTzjySubNqUnNkQCjU3Fh+ep3C6b5DCM5FKzsTH/3Gr/4Y7EiaPZKILbvnXmhWtKPIdcY6Zjx51t4VeTfA==",
++ "cpu": [
++ "arm64"
++ ],
++ "optional": true,
++ "os": [
++ "android"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-darwin-arm64": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.1.tgz",
++ "integrity": "sha512-9zRJSSIwER5tu9ADDkPw5rIZ+Np44HTXpYMr0rkM656IvssowPxmhK0rTreC1gpUCYwFsRbxarUJnJsTWiutPg==",
++ "cpu": [
++ "arm64"
++ ],
++ "optional": true,
++ "os": [
++ "darwin"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-darwin-x64": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.1.tgz",
++ "integrity": "sha512-qWr9qEn5nrnlhB0rtjSdR00RRZEtxg4EGvicIipqZWEyayPxhUu6NwKiG8wZiYZCLfJ5KWr66PGSNeDMGlNaiA==",
++ "cpu": [
++ "x64"
++ ],
++ "optional": true,
++ "os": [
++ "darwin"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-freebsd-x64": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.1.tgz",
++ "integrity": "sha512-UwP4w/NcQ7V/VJEj3tGVszgb4pyUCt3lzJfUhjDMUmQbzG9LDvgiZgAGMYH6L21MoyAATJQPDGiAMWAPKsmumA==",
++ "cpu": [
++ "x64"
++ ],
++ "optional": true,
++ "os": [
++ "freebsd"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-linux-arm-gnueabihf": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.1.tgz",
++ "integrity": "sha512-CnsxmKHco9sosBs1XcvCXP845Db+Wx1G0qouV5+Gr+HT/ZlDYEWKoHVDgnJXLVEQzq4FmHddBNGbXvgqM1Gfkg==",
++ "cpu": [
++ "arm"
++ ],
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-linux-arm64-gnu": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.1.tgz",
++ "integrity": "sha512-JfDq1eri5Dif+VDpTkONRd083780nsMCOKoFG87wA0sa4xL8LGcXIBAkUGIC1uVy9SMsr2scA9CySLD/i+Oqiw==",
++ "cpu": [
++ "arm64"
++ ],
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-linux-arm64-musl": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.1.tgz",
++ "integrity": "sha512-GA67ZbDq2AW0CY07zzGt07M5b5Yaq5qUpFIoW3UFfjOPgb0Sqf3DAW7GtFMK1sF4ROHsRDMGQ9rnT0VM2dVfKA==",
++ "cpu": [
++ "arm64"
++ ],
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-linux-x64-gnu": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.1.tgz",
++ "integrity": "sha512-nnjuBrbzvqaOJaV+XgT8/+lmXrSCOt1YYZn/irbDb2fR2QprL6Q7WJNgwsZNxiLSfLdv+2RJGGegBx9sLBEzGA==",
++ "cpu": [
++ "x64"
++ ],
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-linux-x64-musl": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.1.tgz",
++ "integrity": "sha512-CM9xnAQNIZ8zf/igbIT/i3xWbQZYaF397H+JroF5VMOCUleElaMdQLL5riJml8wUfPoN3dtfn2s4peSr3azz/g==",
++ "cpu": [
++ "x64"
++ ],
++ "optional": true,
++ "os": [
++ "linux"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-win32-arm64-msvc": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.1.tgz",
++ "integrity": "sha512-pzUHOGrbgfGgPlOMx9xk3QdPJoRPU+om84hqVoe6u+E0RdwOG0Ho/2UxCgDqmvpUrMab1Deltlt6RqcXFpnigQ==",
++ "cpu": [
++ "arm64"
++ ],
++ "optional": true,
++ "os": [
++ "win32"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-win32-ia32-msvc": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.1.tgz",
++ "integrity": "sha512-WeX8kVS46aobM9a7Xr/kEPcrTyiwJqQv/tbw6nhJ4fH9xNZ+cEcyPoQkwPo570dCOLz3Zo9S2q0E6lJ/EAUOBg==",
++ "cpu": [
++ "ia32"
++ ],
++ "optional": true,
++ "os": [
++ "win32"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@next/swc-win32-x64-msvc": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.1.tgz",
++ "integrity": "sha512-mVF0/3/5QAc5EGVnb8ll31nNvf3BWpPY4pBb84tk+BfQglWLqc5AC9q1Ht/YMWiEgs8ALNKEQ3GQnbY0bJF2Gg==",
++ "cpu": [
++ "x64"
++ ],
++ "optional": true,
++ "os": [
++ "win32"
++ ],
++ "engines": {
++ "node": ">= 10"
++ }
++ },
++ "node_modules/@nodelib/fs.scandir": {
++ "version": "2.1.5",
++ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
++ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
++ "dependencies": {
++ "@nodelib/fs.stat": "2.0.5",
++ "run-parallel": "^1.1.9"
++ },
++ "engines": {
++ "node": ">= 8"
++ }
++ },
++ "node_modules/@nodelib/fs.stat": {
++ "version": "2.0.5",
++ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
++ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
++ "engines": {
++ "node": ">= 8"
++ }
++ },
++ "node_modules/@nodelib/fs.walk": {
++ "version": "1.2.8",
++ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
++ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
++ "dependencies": {
++ "@nodelib/fs.scandir": "2.1.5",
++ "fastq": "^1.6.0"
++ },
++ "engines": {
++ "node": ">= 8"
++ }
++ },
++ "node_modules/@pkgr/utils": {
++ "version": "2.3.1",
++ "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz",
++ "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==",
++ "dependencies": {
++ "cross-spawn": "^7.0.3",
++ "is-glob": "^4.0.3",
++ "open": "^8.4.0",
++ "picocolors": "^1.0.0",
++ "tiny-glob": "^0.2.9",
++ "tslib": "^2.4.0"
++ },
++ "engines": {
++ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
++ },
++ "funding": {
++ "url": "https://opencollective.com/unts"
++ }
++ },
++ "node_modules/@rushstack/eslint-patch": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz",
++ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg=="
++ },
++ "node_modules/@swc/helpers": {
++ "version": "0.4.14",
++ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
++ "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
++ "dependencies": {
++ "tslib": "^2.4.0"
++ }
++ },
++ "node_modules/@toots/shine.js": {
++ "version": "1.0.1",
++ "resolved": "file:../..",
++ "license": "LGPL-2.0-only"
++ },
++ "node_modules/@types/json5": {
++ "version": "0.0.29",
++ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
++ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
++ },
++ "node_modules/@types/node": {
++ "version": "18.11.18",
++ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
++ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA=="
++ },
++ "node_modules/@types/prop-types": {
++ "version": "15.7.5",
++ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
++ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
++ },
++ "node_modules/@types/react": {
++ "version": "18.0.26",
++ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz",
++ "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==",
++ "dependencies": {
++ "@types/prop-types": "*",
++ "@types/scheduler": "*",
++ "csstype": "^3.0.2"
++ }
++ },
++ "node_modules/@types/react-dom": {
++ "version": "18.0.10",
++ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz",
++ "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==",
++ "dependencies": {
++ "@types/react": "*"
++ }
++ },
++ "node_modules/@types/scheduler": {
++ "version": "0.16.2",
++ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
++ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
++ },
++ "node_modules/@typescript-eslint/parser": {
++ "version": "5.47.1",
++ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.47.1.tgz",
++ "integrity": "sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw==",
++ "dependencies": {
++ "@typescript-eslint/scope-manager": "5.47.1",
++ "@typescript-eslint/types": "5.47.1",
++ "@typescript-eslint/typescript-estree": "5.47.1",
++ "debug": "^4.3.4"
++ },
++ "engines": {
++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/typescript-eslint"
++ },
++ "peerDependencies": {
++ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
++ },
++ "peerDependenciesMeta": {
++ "typescript": {
++ "optional": true
++ }
++ }
++ },
++ "node_modules/@typescript-eslint/scope-manager": {
++ "version": "5.47.1",
++ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.47.1.tgz",
++ "integrity": "sha512-9hsFDsgUwrdOoW1D97Ewog7DYSHaq4WKuNs0LHF9RiCmqB0Z+XRR4Pf7u7u9z/8CciHuJ6yxNws1XznI3ddjEw==",
++ "dependencies": {
++ "@typescript-eslint/types": "5.47.1",
++ "@typescript-eslint/visitor-keys": "5.47.1"
++ },
++ "engines": {
++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/typescript-eslint"
++ }
++ },
++ "node_modules/@typescript-eslint/types": {
++ "version": "5.47.1",
++ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.1.tgz",
++ "integrity": "sha512-CmALY9YWXEpwuu6377ybJBZdtSAnzXLSQcxLSqSQSbC7VfpMu/HLVdrnVJj7ycI138EHqocW02LPJErE35cE9A==",
++ "engines": {
++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/typescript-eslint"
++ }
++ },
++ "node_modules/@typescript-eslint/typescript-estree": {
++ "version": "5.47.1",
++ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.1.tgz",
++ "integrity": "sha512-4+ZhFSuISAvRi2xUszEj0xXbNTHceV9GbH9S8oAD2a/F9SW57aJNQVOCxG8GPfSWH/X4eOPdMEU2jYVuWKEpWA==",
++ "dependencies": {
++ "@typescript-eslint/types": "5.47.1",
++ "@typescript-eslint/visitor-keys": "5.47.1",
++ "debug": "^4.3.4",
++ "globby": "^11.1.0",
++ "is-glob": "^4.0.3",
++ "semver": "^7.3.7",
++ "tsutils": "^3.21.0"
++ },
++ "engines": {
++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/typescript-eslint"
++ },
++ "peerDependenciesMeta": {
++ "typescript": {
++ "optional": true
++ }
++ }
++ },
++ "node_modules/@typescript-eslint/visitor-keys": {
++ "version": "5.47.1",
++ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.1.tgz",
++ "integrity": "sha512-rF3pmut2JCCjh6BLRhNKdYjULMb1brvoaiWDlHfLNVgmnZ0sBVJrs3SyaKE1XoDDnJuAx/hDQryHYmPUuNq0ig==",
++ "dependencies": {
++ "@typescript-eslint/types": "5.47.1",
++ "eslint-visitor-keys": "^3.3.0"
++ },
++ "engines": {
++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
++ },
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/typescript-eslint"
++ }
++ },
++ "node_modules/acorn": {
++ "version": "8.8.1",
++ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
++ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
++ "bin": {
++ "acorn": "bin/acorn"
++ },
++ "engines": {
++ "node": ">=0.4.0"
++ }
++ },
++ "node_modules/acorn-jsx": {
++ "version": "5.3.2",
++ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
++ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
++ "peerDependencies": {
++ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
++ }
++ },
++ "node_modules/ajv": {
++ "version": "6.12.6",
++ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
++ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
++ "dependencies": {
++ "fast-deep-equal": "^3.1.1",
++ "fast-json-stable-stringify": "^2.0.0",
++ "json-schema-traverse": "^0.4.1",
++ "uri-js": "^4.2.2"
++ },
++ "funding": {
++ "type": "github",
++ "url": "https://github.com/sponsors/epoberezkin"
++ }
++ },
++ "node_modules/ansi-regex": {
++ "version": "5.0.1",
++ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
++ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/ansi-styles": {
++ "version": "4.3.0",
++ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
++ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
++ "dependencies": {
++ "color-convert": "^2.0.1"
++ },
++ "engines": {
++ "node": ">=8"
++ },
++ "funding": {
++ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
++ }
++ },
++ "node_modules/argparse": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
++ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
++ },
++ "node_modules/aria-query": {
++ "version": "4.2.2",
++ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz",
++ "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
++ "dependencies": {
++ "@babel/runtime": "^7.10.2",
++ "@babel/runtime-corejs3": "^7.10.2"
++ },
++ "engines": {
++ "node": ">=6.0"
++ }
++ },
++ "node_modules/array-includes": {
++ "version": "3.1.6",
++ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
++ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.4",
++ "es-abstract": "^1.20.4",
++ "get-intrinsic": "^1.1.3",
++ "is-string": "^1.0.7"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/array-union": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
++ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/array.prototype.flat": {
++ "version": "1.3.1",
++ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
++ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.4",
++ "es-abstract": "^1.20.4",
++ "es-shim-unscopables": "^1.0.0"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/array.prototype.flatmap": {
++ "version": "1.3.1",
++ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
++ "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.4",
++ "es-abstract": "^1.20.4",
++ "es-shim-unscopables": "^1.0.0"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/array.prototype.tosorted": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
++ "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.4",
++ "es-abstract": "^1.20.4",
++ "es-shim-unscopables": "^1.0.0",
++ "get-intrinsic": "^1.1.3"
++ }
++ },
++ "node_modules/ast-types-flow": {
++ "version": "0.0.7",
++ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
++ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag=="
++ },
++ "node_modules/axe-core": {
++ "version": "4.6.1",
++ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.1.tgz",
++ "integrity": "sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w==",
++ "engines": {
++ "node": ">=4"
++ }
++ },
++ "node_modules/axobject-query": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
++ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA=="
++ },
++ "node_modules/balanced-match": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
++ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
++ },
++ "node_modules/brace-expansion": {
++ "version": "1.1.11",
++ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
++ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
++ "dependencies": {
++ "balanced-match": "^1.0.0",
++ "concat-map": "0.0.1"
++ }
++ },
++ "node_modules/braces": {
++ "version": "3.0.2",
++ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
++ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
++ "dependencies": {
++ "fill-range": "^7.0.1"
++ },
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/call-bind": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
++ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
++ "dependencies": {
++ "function-bind": "^1.1.1",
++ "get-intrinsic": "^1.0.2"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/callsites": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
++ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
++ "engines": {
++ "node": ">=6"
++ }
++ },
++ "node_modules/caniuse-lite": {
++ "version": "1.0.30001441",
++ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz",
++ "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==",
++ "funding": [
++ {
++ "type": "opencollective",
++ "url": "https://opencollective.com/browserslist"
++ },
++ {
++ "type": "tidelift",
++ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
++ }
++ ]
++ },
++ "node_modules/chalk": {
++ "version": "4.1.2",
++ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
++ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
++ "dependencies": {
++ "ansi-styles": "^4.1.0",
++ "supports-color": "^7.1.0"
++ },
++ "engines": {
++ "node": ">=10"
++ },
++ "funding": {
++ "url": "https://github.com/chalk/chalk?sponsor=1"
++ }
++ },
++ "node_modules/client-only": {
++ "version": "0.0.1",
++ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
++ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
++ },
++ "node_modules/color-convert": {
++ "version": "2.0.1",
++ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
++ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
++ "dependencies": {
++ "color-name": "~1.1.4"
++ },
++ "engines": {
++ "node": ">=7.0.0"
++ }
++ },
++ "node_modules/color-name": {
++ "version": "1.1.4",
++ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
++ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
++ },
++ "node_modules/concat-map": {
++ "version": "0.0.1",
++ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
++ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
++ },
++ "node_modules/core-js-pure": {
++ "version": "3.27.1",
++ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.27.1.tgz",
++ "integrity": "sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==",
++ "hasInstallScript": true,
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/core-js"
++ }
++ },
++ "node_modules/cross-spawn": {
++ "version": "7.0.3",
++ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
++ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
++ "dependencies": {
++ "path-key": "^3.1.0",
++ "shebang-command": "^2.0.0",
++ "which": "^2.0.1"
++ },
++ "engines": {
++ "node": ">= 8"
++ }
++ },
++ "node_modules/csstype": {
++ "version": "3.1.1",
++ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
++ "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
++ },
++ "node_modules/damerau-levenshtein": {
++ "version": "1.0.8",
++ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
++ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
++ },
++ "node_modules/debug": {
++ "version": "4.3.4",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
++ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
++ "dependencies": {
++ "ms": "2.1.2"
++ },
++ "engines": {
++ "node": ">=6.0"
++ },
++ "peerDependenciesMeta": {
++ "supports-color": {
++ "optional": true
++ }
++ }
++ },
++ "node_modules/deep-is": {
++ "version": "0.1.4",
++ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
++ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
++ },
++ "node_modules/define-lazy-prop": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
++ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/define-properties": {
++ "version": "1.1.4",
++ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
++ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
++ "dependencies": {
++ "has-property-descriptors": "^1.0.0",
++ "object-keys": "^1.1.1"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/dir-glob": {
++ "version": "3.0.1",
++ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
++ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
++ "dependencies": {
++ "path-type": "^4.0.0"
++ },
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/doctrine": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
++ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
++ "dependencies": {
++ "esutils": "^2.0.2"
++ },
++ "engines": {
++ "node": ">=6.0.0"
++ }
++ },
++ "node_modules/emoji-regex": {
++ "version": "9.2.2",
++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
++ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
++ },
++ "node_modules/enhanced-resolve": {
++ "version": "5.12.0",
++ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
++ "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
++ "dependencies": {
++ "graceful-fs": "^4.2.4",
++ "tapable": "^2.2.0"
++ },
++ "engines": {
++ "node": ">=10.13.0"
++ }
++ },
++ "node_modules/es-abstract": {
++ "version": "1.20.5",
++ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz",
++ "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "es-to-primitive": "^1.2.1",
++ "function-bind": "^1.1.1",
++ "function.prototype.name": "^1.1.5",
++ "get-intrinsic": "^1.1.3",
++ "get-symbol-description": "^1.0.0",
++ "gopd": "^1.0.1",
++ "has": "^1.0.3",
++ "has-property-descriptors": "^1.0.0",
++ "has-symbols": "^1.0.3",
++ "internal-slot": "^1.0.3",
++ "is-callable": "^1.2.7",
++ "is-negative-zero": "^2.0.2",
++ "is-regex": "^1.1.4",
++ "is-shared-array-buffer": "^1.0.2",
++ "is-string": "^1.0.7",
++ "is-weakref": "^1.0.2",
++ "object-inspect": "^1.12.2",
++ "object-keys": "^1.1.1",
++ "object.assign": "^4.1.4",
++ "regexp.prototype.flags": "^1.4.3",
++ "safe-regex-test": "^1.0.0",
++ "string.prototype.trimend": "^1.0.6",
++ "string.prototype.trimstart": "^1.0.6",
++ "unbox-primitive": "^1.0.2"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/es-shim-unscopables": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
++ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
++ "dependencies": {
++ "has": "^1.0.3"
++ }
++ },
++ "node_modules/es-to-primitive": {
++ "version": "1.2.1",
++ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
++ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
++ "dependencies": {
++ "is-callable": "^1.1.4",
++ "is-date-object": "^1.0.1",
++ "is-symbol": "^1.0.2"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/escape-string-regexp": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
++ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
++ "engines": {
++ "node": ">=10"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/eslint": {
++ "version": "8.31.0",
++ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz",
++ "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==",
++ "dependencies": {
++ "@eslint/eslintrc": "^1.4.1",
++ "@humanwhocodes/config-array": "^0.11.8",
++ "@humanwhocodes/module-importer": "^1.0.1",
++ "@nodelib/fs.walk": "^1.2.8",
++ "ajv": "^6.10.0",
++ "chalk": "^4.0.0",
++ "cross-spawn": "^7.0.2",
++ "debug": "^4.3.2",
++ "doctrine": "^3.0.0",
++ "escape-string-regexp": "^4.0.0",
++ "eslint-scope": "^7.1.1",
++ "eslint-utils": "^3.0.0",
++ "eslint-visitor-keys": "^3.3.0",
++ "espree": "^9.4.0",
++ "esquery": "^1.4.0",
++ "esutils": "^2.0.2",
++ "fast-deep-equal": "^3.1.3",
++ "file-entry-cache": "^6.0.1",
++ "find-up": "^5.0.0",
++ "glob-parent": "^6.0.2",
++ "globals": "^13.19.0",
++ "grapheme-splitter": "^1.0.4",
++ "ignore": "^5.2.0",
++ "import-fresh": "^3.0.0",
++ "imurmurhash": "^0.1.4",
++ "is-glob": "^4.0.0",
++ "is-path-inside": "^3.0.3",
++ "js-sdsl": "^4.1.4",
++ "js-yaml": "^4.1.0",
++ "json-stable-stringify-without-jsonify": "^1.0.1",
++ "levn": "^0.4.1",
++ "lodash.merge": "^4.6.2",
++ "minimatch": "^3.1.2",
++ "natural-compare": "^1.4.0",
++ "optionator": "^0.9.1",
++ "regexpp": "^3.2.0",
++ "strip-ansi": "^6.0.1",
++ "strip-json-comments": "^3.1.0",
++ "text-table": "^0.2.0"
++ },
++ "bin": {
++ "eslint": "bin/eslint.js"
++ },
++ "engines": {
++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
++ },
++ "funding": {
++ "url": "https://opencollective.com/eslint"
++ }
++ },
++ "node_modules/eslint-config-next": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.1.1.tgz",
++ "integrity": "sha512-/5S2XGWlGaiqrRhzpn51ux5JUSLwx8PVK2keLi5xk7QmhfYB8PqE6R6SlVw6hgnf/VexvUXSrlNJ/su00NhtHQ==",
++ "dependencies": {
++ "@next/eslint-plugin-next": "13.1.1",
++ "@rushstack/eslint-patch": "^1.1.3",
++ "@typescript-eslint/parser": "^5.42.0",
++ "eslint-import-resolver-node": "^0.3.6",
++ "eslint-import-resolver-typescript": "^3.5.2",
++ "eslint-plugin-import": "^2.26.0",
++ "eslint-plugin-jsx-a11y": "^6.5.1",
++ "eslint-plugin-react": "^7.31.7",
++ "eslint-plugin-react-hooks": "^4.5.0"
++ },
++ "peerDependencies": {
++ "eslint": "^7.23.0 || ^8.0.0",
++ "typescript": ">=3.3.1"
++ },
++ "peerDependenciesMeta": {
++ "typescript": {
++ "optional": true
++ }
++ }
++ },
++ "node_modules/eslint-import-resolver-node": {
++ "version": "0.3.6",
++ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
++ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
++ "dependencies": {
++ "debug": "^3.2.7",
++ "resolve": "^1.20.0"
++ }
++ },
++ "node_modules/eslint-import-resolver-node/node_modules/debug": {
++ "version": "3.2.7",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
++ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
++ "dependencies": {
++ "ms": "^2.1.1"
++ }
++ },
++ "node_modules/eslint-import-resolver-typescript": {
++ "version": "3.5.2",
++ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.2.tgz",
++ "integrity": "sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==",
++ "dependencies": {
++ "debug": "^4.3.4",
++ "enhanced-resolve": "^5.10.0",
++ "get-tsconfig": "^4.2.0",
++ "globby": "^13.1.2",
++ "is-core-module": "^2.10.0",
++ "is-glob": "^4.0.3",
++ "synckit": "^0.8.4"
++ },
++ "engines": {
++ "node": "^14.18.0 || >=16.0.0"
++ },
++ "funding": {
++ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
++ },
++ "peerDependencies": {
++ "eslint": "*",
++ "eslint-plugin-import": "*"
++ }
++ },
++ "node_modules/eslint-import-resolver-typescript/node_modules/globby": {
++ "version": "13.1.3",
++ "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz",
++ "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==",
++ "dependencies": {
++ "dir-glob": "^3.0.1",
++ "fast-glob": "^3.2.11",
++ "ignore": "^5.2.0",
++ "merge2": "^1.4.1",
++ "slash": "^4.0.0"
++ },
++ "engines": {
++ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/eslint-import-resolver-typescript/node_modules/slash": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
++ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
++ "engines": {
++ "node": ">=12"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/eslint-module-utils": {
++ "version": "2.7.4",
++ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
++ "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
++ "dependencies": {
++ "debug": "^3.2.7"
++ },
++ "engines": {
++ "node": ">=4"
++ },
++ "peerDependenciesMeta": {
++ "eslint": {
++ "optional": true
++ }
++ }
++ },
++ "node_modules/eslint-module-utils/node_modules/debug": {
++ "version": "3.2.7",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
++ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
++ "dependencies": {
++ "ms": "^2.1.1"
++ }
++ },
++ "node_modules/eslint-plugin-import": {
++ "version": "2.26.0",
++ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
++ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
++ "dependencies": {
++ "array-includes": "^3.1.4",
++ "array.prototype.flat": "^1.2.5",
++ "debug": "^2.6.9",
++ "doctrine": "^2.1.0",
++ "eslint-import-resolver-node": "^0.3.6",
++ "eslint-module-utils": "^2.7.3",
++ "has": "^1.0.3",
++ "is-core-module": "^2.8.1",
++ "is-glob": "^4.0.3",
++ "minimatch": "^3.1.2",
++ "object.values": "^1.1.5",
++ "resolve": "^1.22.0",
++ "tsconfig-paths": "^3.14.1"
++ },
++ "engines": {
++ "node": ">=4"
++ },
++ "peerDependencies": {
++ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
++ }
++ },
++ "node_modules/eslint-plugin-import/node_modules/debug": {
++ "version": "2.6.9",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
++ "dependencies": {
++ "ms": "2.0.0"
++ }
++ },
++ "node_modules/eslint-plugin-import/node_modules/doctrine": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
++ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
++ "dependencies": {
++ "esutils": "^2.0.2"
++ },
++ "engines": {
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/eslint-plugin-import/node_modules/ms": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
++ },
++ "node_modules/eslint-plugin-jsx-a11y": {
++ "version": "6.6.1",
++ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz",
++ "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==",
++ "dependencies": {
++ "@babel/runtime": "^7.18.9",
++ "aria-query": "^4.2.2",
++ "array-includes": "^3.1.5",
++ "ast-types-flow": "^0.0.7",
++ "axe-core": "^4.4.3",
++ "axobject-query": "^2.2.0",
++ "damerau-levenshtein": "^1.0.8",
++ "emoji-regex": "^9.2.2",
++ "has": "^1.0.3",
++ "jsx-ast-utils": "^3.3.2",
++ "language-tags": "^1.0.5",
++ "minimatch": "^3.1.2",
++ "semver": "^6.3.0"
++ },
++ "engines": {
++ "node": ">=4.0"
++ },
++ "peerDependencies": {
++ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
++ }
++ },
++ "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": {
++ "version": "6.3.0",
++ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
++ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
++ "bin": {
++ "semver": "bin/semver.js"
++ }
++ },
++ "node_modules/eslint-plugin-react": {
++ "version": "7.31.11",
++ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz",
++ "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==",
++ "dependencies": {
++ "array-includes": "^3.1.6",
++ "array.prototype.flatmap": "^1.3.1",
++ "array.prototype.tosorted": "^1.1.1",
++ "doctrine": "^2.1.0",
++ "estraverse": "^5.3.0",
++ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
++ "minimatch": "^3.1.2",
++ "object.entries": "^1.1.6",
++ "object.fromentries": "^2.0.6",
++ "object.hasown": "^1.1.2",
++ "object.values": "^1.1.6",
++ "prop-types": "^15.8.1",
++ "resolve": "^2.0.0-next.3",
++ "semver": "^6.3.0",
++ "string.prototype.matchall": "^4.0.8"
++ },
++ "engines": {
++ "node": ">=4"
++ },
++ "peerDependencies": {
++ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
++ }
++ },
++ "node_modules/eslint-plugin-react-hooks": {
++ "version": "4.6.0",
++ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
++ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
++ "engines": {
++ "node": ">=10"
++ },
++ "peerDependencies": {
++ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
++ }
++ },
++ "node_modules/eslint-plugin-react/node_modules/doctrine": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
++ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
++ "dependencies": {
++ "esutils": "^2.0.2"
++ },
++ "engines": {
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/eslint-plugin-react/node_modules/resolve": {
++ "version": "2.0.0-next.4",
++ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
++ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
++ "dependencies": {
++ "is-core-module": "^2.9.0",
++ "path-parse": "^1.0.7",
++ "supports-preserve-symlinks-flag": "^1.0.0"
++ },
++ "bin": {
++ "resolve": "bin/resolve"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/eslint-plugin-react/node_modules/semver": {
++ "version": "6.3.0",
++ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
++ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
++ "bin": {
++ "semver": "bin/semver.js"
++ }
++ },
++ "node_modules/eslint-scope": {
++ "version": "7.1.1",
++ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
++ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
++ "dependencies": {
++ "esrecurse": "^4.3.0",
++ "estraverse": "^5.2.0"
++ },
++ "engines": {
++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
++ }
++ },
++ "node_modules/eslint-utils": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
++ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
++ "dependencies": {
++ "eslint-visitor-keys": "^2.0.0"
++ },
++ "engines": {
++ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/mysticatea"
++ },
++ "peerDependencies": {
++ "eslint": ">=5"
++ }
++ },
++ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
++ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
++ "engines": {
++ "node": ">=10"
++ }
++ },
++ "node_modules/eslint-visitor-keys": {
++ "version": "3.3.0",
++ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
++ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
++ "engines": {
++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
++ }
++ },
++ "node_modules/espree": {
++ "version": "9.4.1",
++ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
++ "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
++ "dependencies": {
++ "acorn": "^8.8.0",
++ "acorn-jsx": "^5.3.2",
++ "eslint-visitor-keys": "^3.3.0"
++ },
++ "engines": {
++ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
++ },
++ "funding": {
++ "url": "https://opencollective.com/eslint"
++ }
++ },
++ "node_modules/esquery": {
++ "version": "1.4.0",
++ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
++ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
++ "dependencies": {
++ "estraverse": "^5.1.0"
++ },
++ "engines": {
++ "node": ">=0.10"
++ }
++ },
++ "node_modules/esrecurse": {
++ "version": "4.3.0",
++ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
++ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
++ "dependencies": {
++ "estraverse": "^5.2.0"
++ },
++ "engines": {
++ "node": ">=4.0"
++ }
++ },
++ "node_modules/estraverse": {
++ "version": "5.3.0",
++ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
++ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
++ "engines": {
++ "node": ">=4.0"
++ }
++ },
++ "node_modules/esutils": {
++ "version": "2.0.3",
++ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
++ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
++ "engines": {
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/fast-deep-equal": {
++ "version": "3.1.3",
++ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
++ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
++ },
++ "node_modules/fast-glob": {
++ "version": "3.2.12",
++ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
++ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
++ "dependencies": {
++ "@nodelib/fs.stat": "^2.0.2",
++ "@nodelib/fs.walk": "^1.2.3",
++ "glob-parent": "^5.1.2",
++ "merge2": "^1.3.0",
++ "micromatch": "^4.0.4"
++ },
++ "engines": {
++ "node": ">=8.6.0"
++ }
++ },
++ "node_modules/fast-glob/node_modules/glob-parent": {
++ "version": "5.1.2",
++ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
++ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
++ "dependencies": {
++ "is-glob": "^4.0.1"
++ },
++ "engines": {
++ "node": ">= 6"
++ }
++ },
++ "node_modules/fast-json-stable-stringify": {
++ "version": "2.1.0",
++ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
++ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
++ },
++ "node_modules/fast-levenshtein": {
++ "version": "2.0.6",
++ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
++ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="
++ },
++ "node_modules/fastq": {
++ "version": "1.14.0",
++ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz",
++ "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==",
++ "dependencies": {
++ "reusify": "^1.0.4"
++ }
++ },
++ "node_modules/file-entry-cache": {
++ "version": "6.0.1",
++ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
++ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
++ "dependencies": {
++ "flat-cache": "^3.0.4"
++ },
++ "engines": {
++ "node": "^10.12.0 || >=12.0.0"
++ }
++ },
++ "node_modules/fill-range": {
++ "version": "7.0.1",
++ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
++ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
++ "dependencies": {
++ "to-regex-range": "^5.0.1"
++ },
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/find-up": {
++ "version": "5.0.0",
++ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
++ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
++ "dependencies": {
++ "locate-path": "^6.0.0",
++ "path-exists": "^4.0.0"
++ },
++ "engines": {
++ "node": ">=10"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/flat-cache": {
++ "version": "3.0.4",
++ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
++ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
++ "dependencies": {
++ "flatted": "^3.1.0",
++ "rimraf": "^3.0.2"
++ },
++ "engines": {
++ "node": "^10.12.0 || >=12.0.0"
++ }
++ },
++ "node_modules/flatted": {
++ "version": "3.2.7",
++ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
++ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
++ },
++ "node_modules/fs.realpath": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
++ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
++ },
++ "node_modules/function-bind": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
++ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
++ },
++ "node_modules/function.prototype.name": {
++ "version": "1.1.5",
++ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
++ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.3",
++ "es-abstract": "^1.19.0",
++ "functions-have-names": "^1.2.2"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/functions-have-names": {
++ "version": "1.2.3",
++ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
++ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/get-intrinsic": {
++ "version": "1.1.3",
++ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
++ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
++ "dependencies": {
++ "function-bind": "^1.1.1",
++ "has": "^1.0.3",
++ "has-symbols": "^1.0.3"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/get-symbol-description": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
++ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "get-intrinsic": "^1.1.1"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/get-tsconfig": {
++ "version": "4.2.0",
++ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.2.0.tgz",
++ "integrity": "sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==",
++ "funding": {
++ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
++ }
++ },
++ "node_modules/glob": {
++ "version": "7.1.7",
++ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
++ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
++ "dependencies": {
++ "fs.realpath": "^1.0.0",
++ "inflight": "^1.0.4",
++ "inherits": "2",
++ "minimatch": "^3.0.4",
++ "once": "^1.3.0",
++ "path-is-absolute": "^1.0.0"
++ },
++ "engines": {
++ "node": "*"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/isaacs"
++ }
++ },
++ "node_modules/glob-parent": {
++ "version": "6.0.2",
++ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
++ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
++ "dependencies": {
++ "is-glob": "^4.0.3"
++ },
++ "engines": {
++ "node": ">=10.13.0"
++ }
++ },
++ "node_modules/globals": {
++ "version": "13.19.0",
++ "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
++ "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
++ "dependencies": {
++ "type-fest": "^0.20.2"
++ },
++ "engines": {
++ "node": ">=8"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/globalyzer": {
++ "version": "0.1.0",
++ "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
++ "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q=="
++ },
++ "node_modules/globby": {
++ "version": "11.1.0",
++ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
++ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
++ "dependencies": {
++ "array-union": "^2.1.0",
++ "dir-glob": "^3.0.1",
++ "fast-glob": "^3.2.9",
++ "ignore": "^5.2.0",
++ "merge2": "^1.4.1",
++ "slash": "^3.0.0"
++ },
++ "engines": {
++ "node": ">=10"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/globrex": {
++ "version": "0.1.2",
++ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
++ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg=="
++ },
++ "node_modules/gopd": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
++ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
++ "dependencies": {
++ "get-intrinsic": "^1.1.3"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/graceful-fs": {
++ "version": "4.2.10",
++ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
++ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
++ },
++ "node_modules/grapheme-splitter": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
++ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
++ },
++ "node_modules/has": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
++ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
++ "dependencies": {
++ "function-bind": "^1.1.1"
++ },
++ "engines": {
++ "node": ">= 0.4.0"
++ }
++ },
++ "node_modules/has-bigints": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
++ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/has-flag": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
++ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/has-property-descriptors": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
++ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
++ "dependencies": {
++ "get-intrinsic": "^1.1.1"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/has-symbols": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
++ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/has-tostringtag": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
++ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
++ "dependencies": {
++ "has-symbols": "^1.0.2"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/ignore": {
++ "version": "5.2.4",
++ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
++ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
++ "engines": {
++ "node": ">= 4"
++ }
++ },
++ "node_modules/import-fresh": {
++ "version": "3.3.0",
++ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
++ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
++ "dependencies": {
++ "parent-module": "^1.0.0",
++ "resolve-from": "^4.0.0"
++ },
++ "engines": {
++ "node": ">=6"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/imurmurhash": {
++ "version": "0.1.4",
++ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
++ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
++ "engines": {
++ "node": ">=0.8.19"
++ }
++ },
++ "node_modules/inflight": {
++ "version": "1.0.6",
++ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
++ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
++ "dependencies": {
++ "once": "^1.3.0",
++ "wrappy": "1"
++ }
++ },
++ "node_modules/inherits": {
++ "version": "2.0.4",
++ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
++ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
++ },
++ "node_modules/internal-slot": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
++ "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
++ "dependencies": {
++ "get-intrinsic": "^1.1.3",
++ "has": "^1.0.3",
++ "side-channel": "^1.0.4"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ }
++ },
++ "node_modules/is-bigint": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
++ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
++ "dependencies": {
++ "has-bigints": "^1.0.1"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-boolean-object": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
++ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "has-tostringtag": "^1.0.0"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-callable": {
++ "version": "1.2.7",
++ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
++ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-core-module": {
++ "version": "2.11.0",
++ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
++ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
++ "dependencies": {
++ "has": "^1.0.3"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-date-object": {
++ "version": "1.0.5",
++ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
++ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
++ "dependencies": {
++ "has-tostringtag": "^1.0.0"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-docker": {
++ "version": "2.2.1",
++ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
++ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
++ "bin": {
++ "is-docker": "cli.js"
++ },
++ "engines": {
++ "node": ">=8"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/is-extglob": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
++ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
++ "engines": {
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/is-glob": {
++ "version": "4.0.3",
++ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
++ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
++ "dependencies": {
++ "is-extglob": "^2.1.1"
++ },
++ "engines": {
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/is-negative-zero": {
++ "version": "2.0.2",
++ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
++ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-number": {
++ "version": "7.0.0",
++ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
++ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
++ "engines": {
++ "node": ">=0.12.0"
++ }
++ },
++ "node_modules/is-number-object": {
++ "version": "1.0.7",
++ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
++ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
++ "dependencies": {
++ "has-tostringtag": "^1.0.0"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-path-inside": {
++ "version": "3.0.3",
++ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
++ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/is-regex": {
++ "version": "1.1.4",
++ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
++ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "has-tostringtag": "^1.0.0"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-shared-array-buffer": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
++ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
++ "dependencies": {
++ "call-bind": "^1.0.2"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-string": {
++ "version": "1.0.7",
++ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
++ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
++ "dependencies": {
++ "has-tostringtag": "^1.0.0"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-symbol": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
++ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
++ "dependencies": {
++ "has-symbols": "^1.0.2"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-weakref": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
++ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
++ "dependencies": {
++ "call-bind": "^1.0.2"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/is-wsl": {
++ "version": "2.2.0",
++ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
++ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
++ "dependencies": {
++ "is-docker": "^2.0.0"
++ },
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/isexe": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
++ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
++ },
++ "node_modules/js-sdsl": {
++ "version": "4.2.0",
++ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
++ "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==",
++ "funding": {
++ "type": "opencollective",
++ "url": "https://opencollective.com/js-sdsl"
++ }
++ },
++ "node_modules/js-tokens": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
++ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
++ },
++ "node_modules/js-yaml": {
++ "version": "4.1.0",
++ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
++ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
++ "dependencies": {
++ "argparse": "^2.0.1"
++ },
++ "bin": {
++ "js-yaml": "bin/js-yaml.js"
++ }
++ },
++ "node_modules/json-schema-traverse": {
++ "version": "0.4.1",
++ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
++ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
++ },
++ "node_modules/json-stable-stringify-without-jsonify": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
++ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
++ },
++ "node_modules/json5": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
++ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
++ "dependencies": {
++ "minimist": "^1.2.0"
++ },
++ "bin": {
++ "json5": "lib/cli.js"
++ }
++ },
++ "node_modules/jsx-ast-utils": {
++ "version": "3.3.3",
++ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
++ "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==",
++ "dependencies": {
++ "array-includes": "^3.1.5",
++ "object.assign": "^4.1.3"
++ },
++ "engines": {
++ "node": ">=4.0"
++ }
++ },
++ "node_modules/language-subtag-registry": {
++ "version": "0.3.22",
++ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
++ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w=="
++ },
++ "node_modules/language-tags": {
++ "version": "1.0.7",
++ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.7.tgz",
++ "integrity": "sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw==",
++ "dependencies": {
++ "language-subtag-registry": "^0.3.20"
++ }
++ },
++ "node_modules/levn": {
++ "version": "0.4.1",
++ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
++ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
++ "dependencies": {
++ "prelude-ls": "^1.2.1",
++ "type-check": "~0.4.0"
++ },
++ "engines": {
++ "node": ">= 0.8.0"
++ }
++ },
++ "node_modules/locate-path": {
++ "version": "6.0.0",
++ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
++ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
++ "dependencies": {
++ "p-locate": "^5.0.0"
++ },
++ "engines": {
++ "node": ">=10"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/lodash.merge": {
++ "version": "4.6.2",
++ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
++ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
++ },
++ "node_modules/loose-envify": {
++ "version": "1.4.0",
++ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
++ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
++ "dependencies": {
++ "js-tokens": "^3.0.0 || ^4.0.0"
++ },
++ "bin": {
++ "loose-envify": "cli.js"
++ }
++ },
++ "node_modules/lru-cache": {
++ "version": "6.0.0",
++ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
++ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
++ "dependencies": {
++ "yallist": "^4.0.0"
++ },
++ "engines": {
++ "node": ">=10"
++ }
++ },
++ "node_modules/merge2": {
++ "version": "1.4.1",
++ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
++ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
++ "engines": {
++ "node": ">= 8"
++ }
++ },
++ "node_modules/micromatch": {
++ "version": "4.0.5",
++ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
++ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
++ "dependencies": {
++ "braces": "^3.0.2",
++ "picomatch": "^2.3.1"
++ },
++ "engines": {
++ "node": ">=8.6"
++ }
++ },
++ "node_modules/minimatch": {
++ "version": "3.1.2",
++ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
++ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
++ "dependencies": {
++ "brace-expansion": "^1.1.7"
++ },
++ "engines": {
++ "node": "*"
++ }
++ },
++ "node_modules/minimist": {
++ "version": "1.2.7",
++ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
++ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/ms": {
++ "version": "2.1.2",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
++ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
++ },
++ "node_modules/nanoid": {
++ "version": "3.3.4",
++ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
++ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
++ "bin": {
++ "nanoid": "bin/nanoid.cjs"
++ },
++ "engines": {
++ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
++ }
++ },
++ "node_modules/natural-compare": {
++ "version": "1.4.0",
++ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
++ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
++ },
++ "node_modules/next": {
++ "version": "13.1.1",
++ "resolved": "https://registry.npmjs.org/next/-/next-13.1.1.tgz",
++ "integrity": "sha512-R5eBAaIa3X7LJeYvv1bMdGnAVF4fVToEjim7MkflceFPuANY3YyvFxXee/A+acrSYwYPvOvf7f6v/BM/48ea5w==",
++ "dependencies": {
++ "@next/env": "13.1.1",
++ "@swc/helpers": "0.4.14",
++ "caniuse-lite": "^1.0.30001406",
++ "postcss": "8.4.14",
++ "styled-jsx": "5.1.1"
++ },
++ "bin": {
++ "next": "dist/bin/next"
++ },
++ "engines": {
++ "node": ">=14.6.0"
++ },
++ "optionalDependencies": {
++ "@next/swc-android-arm-eabi": "13.1.1",
++ "@next/swc-android-arm64": "13.1.1",
++ "@next/swc-darwin-arm64": "13.1.1",
++ "@next/swc-darwin-x64": "13.1.1",
++ "@next/swc-freebsd-x64": "13.1.1",
++ "@next/swc-linux-arm-gnueabihf": "13.1.1",
++ "@next/swc-linux-arm64-gnu": "13.1.1",
++ "@next/swc-linux-arm64-musl": "13.1.1",
++ "@next/swc-linux-x64-gnu": "13.1.1",
++ "@next/swc-linux-x64-musl": "13.1.1",
++ "@next/swc-win32-arm64-msvc": "13.1.1",
++ "@next/swc-win32-ia32-msvc": "13.1.1",
++ "@next/swc-win32-x64-msvc": "13.1.1"
++ },
++ "peerDependencies": {
++ "fibers": ">= 3.1.0",
++ "node-sass": "^6.0.0 || ^7.0.0",
++ "react": "^18.2.0",
++ "react-dom": "^18.2.0",
++ "sass": "^1.3.0"
++ },
++ "peerDependenciesMeta": {
++ "fibers": {
++ "optional": true
++ },
++ "node-sass": {
++ "optional": true
++ },
++ "sass": {
++ "optional": true
++ }
++ }
++ },
++ "node_modules/object-assign": {
++ "version": "4.1.1",
++ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
++ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
++ "engines": {
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/object-inspect": {
++ "version": "1.12.2",
++ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
++ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/object-keys": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
++ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
++ "engines": {
++ "node": ">= 0.4"
++ }
++ },
++ "node_modules/object.assign": {
++ "version": "4.1.4",
++ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
++ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.4",
++ "has-symbols": "^1.0.3",
++ "object-keys": "^1.1.1"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/object.entries": {
++ "version": "1.1.6",
++ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
++ "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.4",
++ "es-abstract": "^1.20.4"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ }
++ },
++ "node_modules/object.fromentries": {
++ "version": "2.0.6",
++ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
++ "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.4",
++ "es-abstract": "^1.20.4"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/object.hasown": {
++ "version": "1.1.2",
++ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz",
++ "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==",
++ "dependencies": {
++ "define-properties": "^1.1.4",
++ "es-abstract": "^1.20.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/object.values": {
++ "version": "1.1.6",
++ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
++ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.4",
++ "es-abstract": "^1.20.4"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/once": {
++ "version": "1.4.0",
++ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
++ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
++ "dependencies": {
++ "wrappy": "1"
++ }
++ },
++ "node_modules/open": {
++ "version": "8.4.0",
++ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
++ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
++ "dependencies": {
++ "define-lazy-prop": "^2.0.0",
++ "is-docker": "^2.1.1",
++ "is-wsl": "^2.2.0"
++ },
++ "engines": {
++ "node": ">=12"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/optionator": {
++ "version": "0.9.1",
++ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
++ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
++ "dependencies": {
++ "deep-is": "^0.1.3",
++ "fast-levenshtein": "^2.0.6",
++ "levn": "^0.4.1",
++ "prelude-ls": "^1.2.1",
++ "type-check": "^0.4.0",
++ "word-wrap": "^1.2.3"
++ },
++ "engines": {
++ "node": ">= 0.8.0"
++ }
++ },
++ "node_modules/p-limit": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
++ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
++ "dependencies": {
++ "yocto-queue": "^0.1.0"
++ },
++ "engines": {
++ "node": ">=10"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/p-locate": {
++ "version": "5.0.0",
++ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
++ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
++ "dependencies": {
++ "p-limit": "^3.0.2"
++ },
++ "engines": {
++ "node": ">=10"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/parent-module": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
++ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
++ "dependencies": {
++ "callsites": "^3.0.0"
++ },
++ "engines": {
++ "node": ">=6"
++ }
++ },
++ "node_modules/path-exists": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
++ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/path-is-absolute": {
++ "version": "1.0.1",
++ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
++ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
++ "engines": {
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/path-key": {
++ "version": "3.1.1",
++ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
++ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/path-parse": {
++ "version": "1.0.7",
++ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
++ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
++ },
++ "node_modules/path-type": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
++ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/picocolors": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
++ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
++ },
++ "node_modules/picomatch": {
++ "version": "2.3.1",
++ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
++ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
++ "engines": {
++ "node": ">=8.6"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/jonschlinkert"
++ }
++ },
++ "node_modules/postcss": {
++ "version": "8.4.14",
++ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
++ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
++ "funding": [
++ {
++ "type": "opencollective",
++ "url": "https://opencollective.com/postcss/"
++ },
++ {
++ "type": "tidelift",
++ "url": "https://tidelift.com/funding/github/npm/postcss"
++ }
++ ],
++ "dependencies": {
++ "nanoid": "^3.3.4",
++ "picocolors": "^1.0.0",
++ "source-map-js": "^1.0.2"
++ },
++ "engines": {
++ "node": "^10 || ^12 || >=14"
++ }
++ },
++ "node_modules/prelude-ls": {
++ "version": "1.2.1",
++ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
++ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
++ "engines": {
++ "node": ">= 0.8.0"
++ }
++ },
++ "node_modules/prettier": {
++ "version": "2.8.1",
++ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz",
++ "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==",
++ "dev": true,
++ "bin": {
++ "prettier": "bin-prettier.js"
++ },
++ "engines": {
++ "node": ">=10.13.0"
++ },
++ "funding": {
++ "url": "https://github.com/prettier/prettier?sponsor=1"
++ }
++ },
++ "node_modules/prop-types": {
++ "version": "15.8.1",
++ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
++ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
++ "dependencies": {
++ "loose-envify": "^1.4.0",
++ "object-assign": "^4.1.1",
++ "react-is": "^16.13.1"
++ }
++ },
++ "node_modules/punycode": {
++ "version": "2.1.1",
++ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
++ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
++ "engines": {
++ "node": ">=6"
++ }
++ },
++ "node_modules/queue-microtask": {
++ "version": "1.2.3",
++ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
++ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
++ "funding": [
++ {
++ "type": "github",
++ "url": "https://github.com/sponsors/feross"
++ },
++ {
++ "type": "patreon",
++ "url": "https://www.patreon.com/feross"
++ },
++ {
++ "type": "consulting",
++ "url": "https://feross.org/support"
++ }
++ ]
++ },
++ "node_modules/react": {
++ "version": "18.2.0",
++ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
++ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
++ "dependencies": {
++ "loose-envify": "^1.1.0"
++ },
++ "engines": {
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/react-dom": {
++ "version": "18.2.0",
++ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
++ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
++ "dependencies": {
++ "loose-envify": "^1.1.0",
++ "scheduler": "^0.23.0"
++ },
++ "peerDependencies": {
++ "react": "^18.2.0"
++ }
++ },
++ "node_modules/react-is": {
++ "version": "16.13.1",
++ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
++ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
++ },
++ "node_modules/regenerator-runtime": {
++ "version": "0.13.11",
++ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
++ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
++ },
++ "node_modules/regexp.prototype.flags": {
++ "version": "1.4.3",
++ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
++ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.3",
++ "functions-have-names": "^1.2.2"
++ },
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/regexpp": {
++ "version": "3.2.0",
++ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
++ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
++ "engines": {
++ "node": ">=8"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/mysticatea"
++ }
++ },
++ "node_modules/resolve": {
++ "version": "1.22.1",
++ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
++ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
++ "dependencies": {
++ "is-core-module": "^2.9.0",
++ "path-parse": "^1.0.7",
++ "supports-preserve-symlinks-flag": "^1.0.0"
++ },
++ "bin": {
++ "resolve": "bin/resolve"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/resolve-from": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
++ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
++ "engines": {
++ "node": ">=4"
++ }
++ },
++ "node_modules/reusify": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
++ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
++ "engines": {
++ "iojs": ">=1.0.0",
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/rimraf": {
++ "version": "3.0.2",
++ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
++ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
++ "dependencies": {
++ "glob": "^7.1.3"
++ },
++ "bin": {
++ "rimraf": "bin.js"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/isaacs"
++ }
++ },
++ "node_modules/run-parallel": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
++ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
++ "funding": [
++ {
++ "type": "github",
++ "url": "https://github.com/sponsors/feross"
++ },
++ {
++ "type": "patreon",
++ "url": "https://www.patreon.com/feross"
++ },
++ {
++ "type": "consulting",
++ "url": "https://feross.org/support"
++ }
++ ],
++ "dependencies": {
++ "queue-microtask": "^1.2.2"
++ }
++ },
++ "node_modules/safe-regex-test": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
++ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "get-intrinsic": "^1.1.3",
++ "is-regex": "^1.1.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/scheduler": {
++ "version": "0.23.0",
++ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
++ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
++ "dependencies": {
++ "loose-envify": "^1.1.0"
++ }
++ },
++ "node_modules/semver": {
++ "version": "7.3.8",
++ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
++ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
++ "dependencies": {
++ "lru-cache": "^6.0.0"
++ },
++ "bin": {
++ "semver": "bin/semver.js"
++ },
++ "engines": {
++ "node": ">=10"
++ }
++ },
++ "node_modules/shebang-command": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
++ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
++ "dependencies": {
++ "shebang-regex": "^3.0.0"
++ },
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/shebang-regex": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
++ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/side-channel": {
++ "version": "1.0.4",
++ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
++ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
++ "dependencies": {
++ "call-bind": "^1.0.0",
++ "get-intrinsic": "^1.0.2",
++ "object-inspect": "^1.9.0"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/slash": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
++ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/source-map-js": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
++ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
++ "engines": {
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/string.prototype.matchall": {
++ "version": "4.0.8",
++ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
++ "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.4",
++ "es-abstract": "^1.20.4",
++ "get-intrinsic": "^1.1.3",
++ "has-symbols": "^1.0.3",
++ "internal-slot": "^1.0.3",
++ "regexp.prototype.flags": "^1.4.3",
++ "side-channel": "^1.0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/string.prototype.trimend": {
++ "version": "1.0.6",
++ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
++ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.4",
++ "es-abstract": "^1.20.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/string.prototype.trimstart": {
++ "version": "1.0.6",
++ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
++ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "define-properties": "^1.1.4",
++ "es-abstract": "^1.20.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/strip-ansi": {
++ "version": "6.0.1",
++ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
++ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
++ "dependencies": {
++ "ansi-regex": "^5.0.1"
++ },
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/strip-bom": {
++ "version": "3.0.0",
++ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
++ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
++ "engines": {
++ "node": ">=4"
++ }
++ },
++ "node_modules/strip-json-comments": {
++ "version": "3.1.1",
++ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
++ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
++ "engines": {
++ "node": ">=8"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/styled-jsx": {
++ "version": "5.1.1",
++ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
++ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
++ "dependencies": {
++ "client-only": "0.0.1"
++ },
++ "engines": {
++ "node": ">= 12.0.0"
++ },
++ "peerDependencies": {
++ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
++ },
++ "peerDependenciesMeta": {
++ "@babel/core": {
++ "optional": true
++ },
++ "babel-plugin-macros": {
++ "optional": true
++ }
++ }
++ },
++ "node_modules/supports-color": {
++ "version": "7.2.0",
++ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
++ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
++ "dependencies": {
++ "has-flag": "^4.0.0"
++ },
++ "engines": {
++ "node": ">=8"
++ }
++ },
++ "node_modules/supports-preserve-symlinks-flag": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
++ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
++ "engines": {
++ "node": ">= 0.4"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/synckit": {
++ "version": "0.8.4",
++ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.4.tgz",
++ "integrity": "sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==",
++ "dependencies": {
++ "@pkgr/utils": "^2.3.1",
++ "tslib": "^2.4.0"
++ },
++ "engines": {
++ "node": "^14.18.0 || >=16.0.0"
++ },
++ "funding": {
++ "url": "https://opencollective.com/unts"
++ }
++ },
++ "node_modules/tapable": {
++ "version": "2.2.1",
++ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
++ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
++ "engines": {
++ "node": ">=6"
++ }
++ },
++ "node_modules/text-table": {
++ "version": "0.2.0",
++ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
++ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
++ },
++ "node_modules/tiny-glob": {
++ "version": "0.2.9",
++ "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
++ "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==",
++ "dependencies": {
++ "globalyzer": "0.1.0",
++ "globrex": "^0.1.2"
++ }
++ },
++ "node_modules/to-regex-range": {
++ "version": "5.0.1",
++ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
++ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
++ "dependencies": {
++ "is-number": "^7.0.0"
++ },
++ "engines": {
++ "node": ">=8.0"
++ }
++ },
++ "node_modules/tsconfig-paths": {
++ "version": "3.14.1",
++ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
++ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
++ "dependencies": {
++ "@types/json5": "^0.0.29",
++ "json5": "^1.0.1",
++ "minimist": "^1.2.6",
++ "strip-bom": "^3.0.0"
++ }
++ },
++ "node_modules/tslib": {
++ "version": "2.4.1",
++ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
++ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
++ },
++ "node_modules/tsutils": {
++ "version": "3.21.0",
++ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
++ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
++ "dependencies": {
++ "tslib": "^1.8.1"
++ },
++ "engines": {
++ "node": ">= 6"
++ },
++ "peerDependencies": {
++ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
++ }
++ },
++ "node_modules/tsutils/node_modules/tslib": {
++ "version": "1.14.1",
++ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
++ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
++ },
++ "node_modules/type-check": {
++ "version": "0.4.0",
++ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
++ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
++ "dependencies": {
++ "prelude-ls": "^1.2.1"
++ },
++ "engines": {
++ "node": ">= 0.8.0"
++ }
++ },
++ "node_modules/type-fest": {
++ "version": "0.20.2",
++ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
++ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
++ "engines": {
++ "node": ">=10"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ },
++ "node_modules/typescript": {
++ "version": "4.9.4",
++ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
++ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
++ "bin": {
++ "tsc": "bin/tsc",
++ "tsserver": "bin/tsserver"
++ },
++ "engines": {
++ "node": ">=4.2.0"
++ }
++ },
++ "node_modules/unbox-primitive": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
++ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
++ "dependencies": {
++ "call-bind": "^1.0.2",
++ "has-bigints": "^1.0.2",
++ "has-symbols": "^1.0.3",
++ "which-boxed-primitive": "^1.0.2"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/uri-js": {
++ "version": "4.4.1",
++ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
++ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
++ "dependencies": {
++ "punycode": "^2.1.0"
++ }
++ },
++ "node_modules/which": {
++ "version": "2.0.2",
++ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
++ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
++ "dependencies": {
++ "isexe": "^2.0.0"
++ },
++ "bin": {
++ "node-which": "bin/node-which"
++ },
++ "engines": {
++ "node": ">= 8"
++ }
++ },
++ "node_modules/which-boxed-primitive": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
++ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
++ "dependencies": {
++ "is-bigint": "^1.0.1",
++ "is-boolean-object": "^1.1.0",
++ "is-number-object": "^1.0.4",
++ "is-string": "^1.0.5",
++ "is-symbol": "^1.0.3"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/ljharb"
++ }
++ },
++ "node_modules/word-wrap": {
++ "version": "1.2.3",
++ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
++ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
++ "engines": {
++ "node": ">=0.10.0"
++ }
++ },
++ "node_modules/wrappy": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
++ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
++ },
++ "node_modules/yallist": {
++ "version": "4.0.0",
++ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
++ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
++ },
++ "node_modules/yocto-queue": {
++ "version": "0.1.0",
++ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
++ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
++ "engines": {
++ "node": ">=10"
++ },
++ "funding": {
++ "url": "https://github.com/sponsors/sindresorhus"
++ }
++ }
++ }
++}
+diff --git a/js/test/nextjs/package.json b/js/test/nextjs/package.json
+new file mode 100644
+index 0000000..f57e111
+--- /dev/null
++++ b/js/test/nextjs/package.json
+@@ -0,0 +1,28 @@
++{
++ "name": "shine-nextjs-test-app",
++ "version": "0.1.0",
++ "private": true,
++ "scripts": {
++ "dev": "next dev",
++ "lint": "next lint --fix",
++ "build": "next build && next export && touch out/.nojekyll",
++ "format": "prettier '**/*.{ts,tsx,js,jsx}' --write",
++ "typecheck": "tsc --noEmit"
++ },
++ "dependencies": {
++ "@next/font": "13.1.1",
++ "@toots/shine.js": "file:../..",
++ "@types/node": "18.11.18",
++ "@types/react": "18.0.26",
++ "@types/react-dom": "18.0.10",
++ "eslint": "8.31.0",
++ "eslint-config-next": "13.1.1",
++ "next": "13.1.1",
++ "react": "18.2.0",
++ "react-dom": "18.2.0",
++ "typescript": "4.9.4"
++ },
++ "devDependencies": {
++ "prettier": "^2.8.1"
++ }
++}
+diff --git a/js/test/nextjs/pages/index.tsx b/js/test/nextjs/pages/index.tsx
+new file mode 100644
+index 0000000..4bf771a
+--- /dev/null
++++ b/js/test/nextjs/pages/index.tsx
+@@ -0,0 +1,50 @@
++import { Fragment, useEffect, useState, useCallback } from "react"
++import { runEncodeTest } from "@shine/lib/encode"
++import { runRoundsTest } from "@shine/lib/rounds"
++
++const logEntries: string[] = []
++let encoderStarted = false
++
++export default function Home() {
++ const [logs, setLogs] = useState(logEntries)
++ const [encodedBlobUrl, setEncodedBlobUrl] = useState<string | undefined>()
++
++ const log = useCallback(
++ (entry: string) => {
++ logEntries.push(entry)
++ setLogs(logEntries)
++ },
++ [setLogs]
++ )
++
++ useEffect(() => {
++ if (encoderStarted) return
++
++ runEncodeTest(log, blob => {
++ if (!encodedBlobUrl) setEncodedBlobUrl(URL.createObjectURL(blob))
++
++ log("")
++ runRoundsTest(log)
++ })
++
++ encoderStarted = true
++ }, [log, encodedBlobUrl, setEncodedBlobUrl])
++
++ return (
++ <>
++ {encodedBlobUrl && (
++ <a href={encodedBlobUrl} download='encoded.mp3'>
++ Download encoded file
++ </a>
++ )}
++ <div>
++ {logs.map(entry => (
++ <Fragment key={entry}>
++ {entry}
++ <br />
++ </Fragment>
++ ))}
++ </div>
++ </>
++ )
++}
+diff --git a/js/test/nextjs/pnpm-lock.yaml b/js/test/nextjs/pnpm-lock.yaml
+new file mode 100644
+index 0000000..562cc68
+--- /dev/null
++++ b/js/test/nextjs/pnpm-lock.yaml
+@@ -0,0 +1,2032 @@
++lockfileVersion: 5.4
++
++specifiers:
++ '@next/font': 13.1.1
++ '@toots/shine.js': file:../..
++ '@types/node': 18.11.18
++ '@types/react': 18.0.26
++ '@types/react-dom': 18.0.10
++ eslint: 8.31.0
++ eslint-config-next: 13.1.1
++ next: 13.1.1
++ prettier: ^2.8.1
++ react: 18.2.0
++ react-dom: 18.2.0
++ typescript: 4.9.4
++
++dependencies:
++ '@next/font': 13.1.1
++ '@toots/shine.js': file:../..
++ '@types/node': 18.11.18
++ '@types/react': 18.0.26
++ '@types/react-dom': 18.0.10
++ eslint: 8.31.0
++ eslint-config-next: 13.1.1_iukboom6ndih5an6iafl45j2fe
++ next: 13.1.1_biqbaboplfbrettd7655fr4n2y
++ react: 18.2.0
++ react-dom: 18.2.0_react@18.2.0
++ typescript: 4.9.4
++
++devDependencies:
++ prettier: 2.8.1
++
++packages:
++
++ /@babel/runtime-corejs3/7.20.7:
++ resolution: {integrity: sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg==}
++ engines: {node: '>=6.9.0'}
++ dependencies:
++ core-js-pure: 3.27.1
++ regenerator-runtime: 0.13.11
++ dev: false
++
++ /@babel/runtime/7.20.7:
++ resolution: {integrity: sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==}
++ engines: {node: '>=6.9.0'}
++ dependencies:
++ regenerator-runtime: 0.13.11
++ dev: false
++
++ /@eslint/eslintrc/1.4.1:
++ resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==}
++ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
++ dependencies:
++ ajv: 6.12.6
++ debug: 4.3.4
++ espree: 9.4.1
++ globals: 13.19.0
++ ignore: 5.2.4
++ import-fresh: 3.3.0
++ js-yaml: 4.1.0
++ minimatch: 3.1.2
++ strip-json-comments: 3.1.1
++ transitivePeerDependencies:
++ - supports-color
++ dev: false
++
++ /@humanwhocodes/config-array/0.11.8:
++ resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
++ engines: {node: '>=10.10.0'}
++ dependencies:
++ '@humanwhocodes/object-schema': 1.2.1
++ debug: 4.3.4
++ minimatch: 3.1.2
++ transitivePeerDependencies:
++ - supports-color
++ dev: false
++
++ /@humanwhocodes/module-importer/1.0.1:
++ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
++ engines: {node: '>=12.22'}
++ dev: false
++
++ /@humanwhocodes/object-schema/1.2.1:
++ resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
++ dev: false
++
++ /@next/env/13.1.1:
++ resolution: {integrity: sha512-vFMyXtPjSAiOXOywMojxfKIqE3VWN5RCAx+tT3AS3pcKjMLFTCJFUWsKv8hC+87Z1F4W3r68qTwDFZIFmd5Xkw==}
++ dev: false
++
++ /@next/eslint-plugin-next/13.1.1:
++ resolution: {integrity: sha512-SBrOFS8PC3nQ5aeZmawJkjKkWjwK9RoxvBSv/86nZp0ubdoVQoko8r8htALd9ufp16NhacCdqhu9bzZLDWtALQ==}
++ dependencies:
++ glob: 7.1.7
++ dev: false
++
++ /@next/font/13.1.1:
++ resolution: {integrity: sha512-amygRorS05hYK1/XQRZo5qBl7l2fpHnezeKU/cNveWU5QJg+sg8gMGkUXHtvesNKpiKIJshBRH1TzvO+2sKpvQ==}
++ dev: false
++
++ /@next/swc-android-arm-eabi/13.1.1:
++ resolution: {integrity: sha512-qnFCx1kT3JTWhWve4VkeWuZiyjG0b5T6J2iWuin74lORCupdrNukxkq9Pm+Z7PsatxuwVJMhjUoYz7H4cWzx2A==}
++ engines: {node: '>= 10'}
++ cpu: [arm]
++ os: [android]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-android-arm64/13.1.1:
++ resolution: {integrity: sha512-eCiZhTzjySubNqUnNkQCjU3Fh+ep3C6b5DCM5FKzsTH/3Gr/4Y7EiaPZKILbvnXmhWtKPIdcY6Zjx51t4VeTfA==}
++ engines: {node: '>= 10'}
++ cpu: [arm64]
++ os: [android]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-darwin-arm64/13.1.1:
++ resolution: {integrity: sha512-9zRJSSIwER5tu9ADDkPw5rIZ+Np44HTXpYMr0rkM656IvssowPxmhK0rTreC1gpUCYwFsRbxarUJnJsTWiutPg==}
++ engines: {node: '>= 10'}
++ cpu: [arm64]
++ os: [darwin]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-darwin-x64/13.1.1:
++ resolution: {integrity: sha512-qWr9qEn5nrnlhB0rtjSdR00RRZEtxg4EGvicIipqZWEyayPxhUu6NwKiG8wZiYZCLfJ5KWr66PGSNeDMGlNaiA==}
++ engines: {node: '>= 10'}
++ cpu: [x64]
++ os: [darwin]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-freebsd-x64/13.1.1:
++ resolution: {integrity: sha512-UwP4w/NcQ7V/VJEj3tGVszgb4pyUCt3lzJfUhjDMUmQbzG9LDvgiZgAGMYH6L21MoyAATJQPDGiAMWAPKsmumA==}
++ engines: {node: '>= 10'}
++ cpu: [x64]
++ os: [freebsd]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-linux-arm-gnueabihf/13.1.1:
++ resolution: {integrity: sha512-CnsxmKHco9sosBs1XcvCXP845Db+Wx1G0qouV5+Gr+HT/ZlDYEWKoHVDgnJXLVEQzq4FmHddBNGbXvgqM1Gfkg==}
++ engines: {node: '>= 10'}
++ cpu: [arm]
++ os: [linux]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-linux-arm64-gnu/13.1.1:
++ resolution: {integrity: sha512-JfDq1eri5Dif+VDpTkONRd083780nsMCOKoFG87wA0sa4xL8LGcXIBAkUGIC1uVy9SMsr2scA9CySLD/i+Oqiw==}
++ engines: {node: '>= 10'}
++ cpu: [arm64]
++ os: [linux]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-linux-arm64-musl/13.1.1:
++ resolution: {integrity: sha512-GA67ZbDq2AW0CY07zzGt07M5b5Yaq5qUpFIoW3UFfjOPgb0Sqf3DAW7GtFMK1sF4ROHsRDMGQ9rnT0VM2dVfKA==}
++ engines: {node: '>= 10'}
++ cpu: [arm64]
++ os: [linux]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-linux-x64-gnu/13.1.1:
++ resolution: {integrity: sha512-nnjuBrbzvqaOJaV+XgT8/+lmXrSCOt1YYZn/irbDb2fR2QprL6Q7WJNgwsZNxiLSfLdv+2RJGGegBx9sLBEzGA==}
++ engines: {node: '>= 10'}
++ cpu: [x64]
++ os: [linux]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-linux-x64-musl/13.1.1:
++ resolution: {integrity: sha512-CM9xnAQNIZ8zf/igbIT/i3xWbQZYaF397H+JroF5VMOCUleElaMdQLL5riJml8wUfPoN3dtfn2s4peSr3azz/g==}
++ engines: {node: '>= 10'}
++ cpu: [x64]
++ os: [linux]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-win32-arm64-msvc/13.1.1:
++ resolution: {integrity: sha512-pzUHOGrbgfGgPlOMx9xk3QdPJoRPU+om84hqVoe6u+E0RdwOG0Ho/2UxCgDqmvpUrMab1Deltlt6RqcXFpnigQ==}
++ engines: {node: '>= 10'}
++ cpu: [arm64]
++ os: [win32]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-win32-ia32-msvc/13.1.1:
++ resolution: {integrity: sha512-WeX8kVS46aobM9a7Xr/kEPcrTyiwJqQv/tbw6nhJ4fH9xNZ+cEcyPoQkwPo570dCOLz3Zo9S2q0E6lJ/EAUOBg==}
++ engines: {node: '>= 10'}
++ cpu: [ia32]
++ os: [win32]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@next/swc-win32-x64-msvc/13.1.1:
++ resolution: {integrity: sha512-mVF0/3/5QAc5EGVnb8ll31nNvf3BWpPY4pBb84tk+BfQglWLqc5AC9q1Ht/YMWiEgs8ALNKEQ3GQnbY0bJF2Gg==}
++ engines: {node: '>= 10'}
++ cpu: [x64]
++ os: [win32]
++ requiresBuild: true
++ dev: false
++ optional: true
++
++ /@nodelib/fs.scandir/2.1.5:
++ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
++ engines: {node: '>= 8'}
++ dependencies:
++ '@nodelib/fs.stat': 2.0.5
++ run-parallel: 1.2.0
++ dev: false
++
++ /@nodelib/fs.stat/2.0.5:
++ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
++ engines: {node: '>= 8'}
++ dev: false
++
++ /@nodelib/fs.walk/1.2.8:
++ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
++ engines: {node: '>= 8'}
++ dependencies:
++ '@nodelib/fs.scandir': 2.1.5
++ fastq: 1.14.0
++ dev: false
++
++ /@pkgr/utils/2.3.1:
++ resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==}
++ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
++ dependencies:
++ cross-spawn: 7.0.3
++ is-glob: 4.0.3
++ open: 8.4.0
++ picocolors: 1.0.0
++ tiny-glob: 0.2.9
++ tslib: 2.4.1
++ dev: false
++
++ /@rushstack/eslint-patch/1.2.0:
++ resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==}
++ dev: false
++
++ /@swc/helpers/0.4.14:
++ resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
++ dependencies:
++ tslib: 2.4.1
++ dev: false
++
++ /@types/json5/0.0.29:
++ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
++ dev: false
++
++ /@types/node/18.11.18:
++ resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
++ dev: false
++
++ /@types/prop-types/15.7.5:
++ resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
++ dev: false
++
++ /@types/react-dom/18.0.10:
++ resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==}
++ dependencies:
++ '@types/react': 18.0.26
++ dev: false
++
++ /@types/react/18.0.26:
++ resolution: {integrity: sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==}
++ dependencies:
++ '@types/prop-types': 15.7.5
++ '@types/scheduler': 0.16.2
++ csstype: 3.1.1
++ dev: false
++
++ /@types/scheduler/0.16.2:
++ resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
++ dev: false
++
++ /@typescript-eslint/parser/5.47.1_iukboom6ndih5an6iafl45j2fe:
++ resolution: {integrity: sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw==}
++ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
++ peerDependencies:
++ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
++ typescript: '*'
++ peerDependenciesMeta:
++ typescript:
++ optional: true
++ dependencies:
++ '@typescript-eslint/scope-manager': 5.47.1
++ '@typescript-eslint/types': 5.47.1
++ '@typescript-eslint/typescript-estree': 5.47.1_typescript@4.9.4
++ debug: 4.3.4
++ eslint: 8.31.0
++ typescript: 4.9.4
++ transitivePeerDependencies:
++ - supports-color
++ dev: false
++
++ /@typescript-eslint/scope-manager/5.47.1:
++ resolution: {integrity: sha512-9hsFDsgUwrdOoW1D97Ewog7DYSHaq4WKuNs0LHF9RiCmqB0Z+XRR4Pf7u7u9z/8CciHuJ6yxNws1XznI3ddjEw==}
++ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
++ dependencies:
++ '@typescript-eslint/types': 5.47.1
++ '@typescript-eslint/visitor-keys': 5.47.1
++ dev: false
++
++ /@typescript-eslint/types/5.47.1:
++ resolution: {integrity: sha512-CmALY9YWXEpwuu6377ybJBZdtSAnzXLSQcxLSqSQSbC7VfpMu/HLVdrnVJj7ycI138EHqocW02LPJErE35cE9A==}
++ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
++ dev: false
++
++ /@typescript-eslint/typescript-estree/5.47.1_typescript@4.9.4:
++ resolution: {integrity: sha512-4+ZhFSuISAvRi2xUszEj0xXbNTHceV9GbH9S8oAD2a/F9SW57aJNQVOCxG8GPfSWH/X4eOPdMEU2jYVuWKEpWA==}
++ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
++ peerDependencies:
++ typescript: '*'
++ peerDependenciesMeta:
++ typescript:
++ optional: true
++ dependencies:
++ '@typescript-eslint/types': 5.47.1
++ '@typescript-eslint/visitor-keys': 5.47.1
++ debug: 4.3.4
++ globby: 11.1.0
++ is-glob: 4.0.3
++ semver: 7.3.8
++ tsutils: 3.21.0_typescript@4.9.4
++ typescript: 4.9.4
++ transitivePeerDependencies:
++ - supports-color
++ dev: false
++
++ /@typescript-eslint/visitor-keys/5.47.1:
++ resolution: {integrity: sha512-rF3pmut2JCCjh6BLRhNKdYjULMb1brvoaiWDlHfLNVgmnZ0sBVJrs3SyaKE1XoDDnJuAx/hDQryHYmPUuNq0ig==}
++ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
++ dependencies:
++ '@typescript-eslint/types': 5.47.1
++ eslint-visitor-keys: 3.3.0
++ dev: false
++
++ /acorn-jsx/5.3.2_acorn@8.8.1:
++ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
++ peerDependencies:
++ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
++ dependencies:
++ acorn: 8.8.1
++ dev: false
++
++ /acorn/8.8.1:
++ resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
++ engines: {node: '>=0.4.0'}
++ hasBin: true
++ dev: false
++
++ /ajv/6.12.6:
++ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
++ dependencies:
++ fast-deep-equal: 3.1.3
++ fast-json-stable-stringify: 2.1.0
++ json-schema-traverse: 0.4.1
++ uri-js: 4.4.1
++ dev: false
++
++ /ansi-regex/5.0.1:
++ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /ansi-styles/4.3.0:
++ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
++ engines: {node: '>=8'}
++ dependencies:
++ color-convert: 2.0.1
++ dev: false
++
++ /argparse/2.0.1:
++ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
++ dev: false
++
++ /aria-query/4.2.2:
++ resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==}
++ engines: {node: '>=6.0'}
++ dependencies:
++ '@babel/runtime': 7.20.7
++ '@babel/runtime-corejs3': 7.20.7
++ dev: false
++
++ /array-includes/3.1.6:
++ resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ get-intrinsic: 1.1.3
++ is-string: 1.0.7
++ dev: false
++
++ /array-union/2.1.0:
++ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /array.prototype.flat/1.3.1:
++ resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ es-shim-unscopables: 1.0.0
++ dev: false
++
++ /array.prototype.flatmap/1.3.1:
++ resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ es-shim-unscopables: 1.0.0
++ dev: false
++
++ /array.prototype.tosorted/1.1.1:
++ resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ es-shim-unscopables: 1.0.0
++ get-intrinsic: 1.1.3
++ dev: false
++
++ /ast-types-flow/0.0.7:
++ resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
++ dev: false
++
++ /axe-core/4.6.1:
++ resolution: {integrity: sha512-lCZN5XRuOnpG4bpMq8v0khrWtUOn+i8lZSb6wHZH56ZfbIEv6XwJV84AAueh9/zi7qPVJ/E4yz6fmsiyOmXR4w==}
++ engines: {node: '>=4'}
++ dev: false
++
++ /axobject-query/2.2.0:
++ resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==}
++ dev: false
++
++ /balanced-match/1.0.2:
++ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
++ dev: false
++
++ /brace-expansion/1.1.11:
++ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
++ dependencies:
++ balanced-match: 1.0.2
++ concat-map: 0.0.1
++ dev: false
++
++ /braces/3.0.2:
++ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
++ engines: {node: '>=8'}
++ dependencies:
++ fill-range: 7.0.1
++ dev: false
++
++ /call-bind/1.0.2:
++ resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
++ dependencies:
++ function-bind: 1.1.1
++ get-intrinsic: 1.1.3
++ dev: false
++
++ /callsites/3.1.0:
++ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
++ engines: {node: '>=6'}
++ dev: false
++
++ /caniuse-lite/1.0.30001441:
++ resolution: {integrity: sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==}
++ dev: false
++
++ /chalk/4.1.2:
++ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
++ engines: {node: '>=10'}
++ dependencies:
++ ansi-styles: 4.3.0
++ supports-color: 7.2.0
++ dev: false
++
++ /client-only/0.0.1:
++ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
++ dev: false
++
++ /color-convert/2.0.1:
++ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
++ engines: {node: '>=7.0.0'}
++ dependencies:
++ color-name: 1.1.4
++ dev: false
++
++ /color-name/1.1.4:
++ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
++ dev: false
++
++ /concat-map/0.0.1:
++ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
++ dev: false
++
++ /core-js-pure/3.27.1:
++ resolution: {integrity: sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==}
++ requiresBuild: true
++ dev: false
++
++ /cross-spawn/7.0.3:
++ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
++ engines: {node: '>= 8'}
++ dependencies:
++ path-key: 3.1.1
++ shebang-command: 2.0.0
++ which: 2.0.2
++ dev: false
++
++ /csstype/3.1.1:
++ resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
++ dev: false
++
++ /damerau-levenshtein/1.0.8:
++ resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
++ dev: false
++
++ /debug/2.6.9:
++ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
++ peerDependencies:
++ supports-color: '*'
++ peerDependenciesMeta:
++ supports-color:
++ optional: true
++ dependencies:
++ ms: 2.0.0
++ dev: false
++
++ /debug/3.2.7:
++ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
++ peerDependencies:
++ supports-color: '*'
++ peerDependenciesMeta:
++ supports-color:
++ optional: true
++ dependencies:
++ ms: 2.1.3
++ dev: false
++
++ /debug/4.3.4:
++ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
++ engines: {node: '>=6.0'}
++ peerDependencies:
++ supports-color: '*'
++ peerDependenciesMeta:
++ supports-color:
++ optional: true
++ dependencies:
++ ms: 2.1.2
++ dev: false
++
++ /deep-is/0.1.4:
++ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
++ dev: false
++
++ /define-lazy-prop/2.0.0:
++ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /define-properties/1.1.4:
++ resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ has-property-descriptors: 1.0.0
++ object-keys: 1.1.1
++ dev: false
++
++ /dir-glob/3.0.1:
++ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
++ engines: {node: '>=8'}
++ dependencies:
++ path-type: 4.0.0
++ dev: false
++
++ /doctrine/2.1.0:
++ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
++ engines: {node: '>=0.10.0'}
++ dependencies:
++ esutils: 2.0.3
++ dev: false
++
++ /doctrine/3.0.0:
++ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
++ engines: {node: '>=6.0.0'}
++ dependencies:
++ esutils: 2.0.3
++ dev: false
++
++ /emoji-regex/9.2.2:
++ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
++ dev: false
++
++ /enhanced-resolve/5.12.0:
++ resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==}
++ engines: {node: '>=10.13.0'}
++ dependencies:
++ graceful-fs: 4.2.10
++ tapable: 2.2.1
++ dev: false
++
++ /es-abstract/1.20.5:
++ resolution: {integrity: sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ es-to-primitive: 1.2.1
++ function-bind: 1.1.1
++ function.prototype.name: 1.1.5
++ get-intrinsic: 1.1.3
++ get-symbol-description: 1.0.0
++ gopd: 1.0.1
++ has: 1.0.3
++ has-property-descriptors: 1.0.0
++ has-symbols: 1.0.3
++ internal-slot: 1.0.4
++ is-callable: 1.2.7
++ is-negative-zero: 2.0.2
++ is-regex: 1.1.4
++ is-shared-array-buffer: 1.0.2
++ is-string: 1.0.7
++ is-weakref: 1.0.2
++ object-inspect: 1.12.2
++ object-keys: 1.1.1
++ object.assign: 4.1.4
++ regexp.prototype.flags: 1.4.3
++ safe-regex-test: 1.0.0
++ string.prototype.trimend: 1.0.6
++ string.prototype.trimstart: 1.0.6
++ unbox-primitive: 1.0.2
++ dev: false
++
++ /es-shim-unscopables/1.0.0:
++ resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
++ dependencies:
++ has: 1.0.3
++ dev: false
++
++ /es-to-primitive/1.2.1:
++ resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ is-callable: 1.2.7
++ is-date-object: 1.0.5
++ is-symbol: 1.0.4
++ dev: false
++
++ /escape-string-regexp/4.0.0:
++ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
++ engines: {node: '>=10'}
++ dev: false
++
++ /eslint-config-next/13.1.1_iukboom6ndih5an6iafl45j2fe:
++ resolution: {integrity: sha512-/5S2XGWlGaiqrRhzpn51ux5JUSLwx8PVK2keLi5xk7QmhfYB8PqE6R6SlVw6hgnf/VexvUXSrlNJ/su00NhtHQ==}
++ peerDependencies:
++ eslint: ^7.23.0 || ^8.0.0
++ typescript: '>=3.3.1'
++ peerDependenciesMeta:
++ typescript:
++ optional: true
++ dependencies:
++ '@next/eslint-plugin-next': 13.1.1
++ '@rushstack/eslint-patch': 1.2.0
++ '@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe
++ eslint: 8.31.0
++ eslint-import-resolver-node: 0.3.6
++ eslint-import-resolver-typescript: 3.5.2_ol7jqilc3wemtdbq3nzhywgxq4
++ eslint-plugin-import: 2.26.0_bpx4furzt4ibermwbsj75osuwi
++ eslint-plugin-jsx-a11y: 6.6.1_eslint@8.31.0
++ eslint-plugin-react: 7.31.11_eslint@8.31.0
++ eslint-plugin-react-hooks: 4.6.0_eslint@8.31.0
++ typescript: 4.9.4
++ transitivePeerDependencies:
++ - eslint-import-resolver-webpack
++ - supports-color
++ dev: false
++
++ /eslint-import-resolver-node/0.3.6:
++ resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==}
++ dependencies:
++ debug: 3.2.7
++ resolve: 1.22.1
++ transitivePeerDependencies:
++ - supports-color
++ dev: false
++
++ /eslint-import-resolver-typescript/3.5.2_ol7jqilc3wemtdbq3nzhywgxq4:
++ resolution: {integrity: sha512-zX4ebnnyXiykjhcBvKIf5TNvt8K7yX6bllTRZ14MiurKPjDpCAZujlszTdB8pcNXhZcOf+god4s9SjQa5GnytQ==}
++ engines: {node: ^14.18.0 || >=16.0.0}
++ peerDependencies:
++ eslint: '*'
++ eslint-plugin-import: '*'
++ dependencies:
++ debug: 4.3.4
++ enhanced-resolve: 5.12.0
++ eslint: 8.31.0
++ eslint-plugin-import: 2.26.0_bpx4furzt4ibermwbsj75osuwi
++ get-tsconfig: 4.2.0
++ globby: 13.1.3
++ is-core-module: 2.11.0
++ is-glob: 4.0.3
++ synckit: 0.8.4
++ transitivePeerDependencies:
++ - supports-color
++ dev: false
++
++ /eslint-module-utils/2.7.4_of6uaipqaoaobv57tu2gvxhnhu:
++ resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==}
++ engines: {node: '>=4'}
++ peerDependencies:
++ '@typescript-eslint/parser': '*'
++ eslint: '*'
++ eslint-import-resolver-node: '*'
++ eslint-import-resolver-typescript: '*'
++ eslint-import-resolver-webpack: '*'
++ peerDependenciesMeta:
++ '@typescript-eslint/parser':
++ optional: true
++ eslint:
++ optional: true
++ eslint-import-resolver-node:
++ optional: true
++ eslint-import-resolver-typescript:
++ optional: true
++ eslint-import-resolver-webpack:
++ optional: true
++ dependencies:
++ '@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe
++ debug: 3.2.7
++ eslint: 8.31.0
++ eslint-import-resolver-node: 0.3.6
++ eslint-import-resolver-typescript: 3.5.2_ol7jqilc3wemtdbq3nzhywgxq4
++ transitivePeerDependencies:
++ - supports-color
++ dev: false
++
++ /eslint-plugin-import/2.26.0_bpx4furzt4ibermwbsj75osuwi:
++ resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==}
++ engines: {node: '>=4'}
++ peerDependencies:
++ '@typescript-eslint/parser': '*'
++ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
++ peerDependenciesMeta:
++ '@typescript-eslint/parser':
++ optional: true
++ dependencies:
++ '@typescript-eslint/parser': 5.47.1_iukboom6ndih5an6iafl45j2fe
++ array-includes: 3.1.6
++ array.prototype.flat: 1.3.1
++ debug: 2.6.9
++ doctrine: 2.1.0
++ eslint: 8.31.0
++ eslint-import-resolver-node: 0.3.6
++ eslint-module-utils: 2.7.4_of6uaipqaoaobv57tu2gvxhnhu
++ has: 1.0.3
++ is-core-module: 2.11.0
++ is-glob: 4.0.3
++ minimatch: 3.1.2
++ object.values: 1.1.6
++ resolve: 1.22.1
++ tsconfig-paths: 3.14.1
++ transitivePeerDependencies:
++ - eslint-import-resolver-typescript
++ - eslint-import-resolver-webpack
++ - supports-color
++ dev: false
++
++ /eslint-plugin-jsx-a11y/6.6.1_eslint@8.31.0:
++ resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==}
++ engines: {node: '>=4.0'}
++ peerDependencies:
++ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
++ dependencies:
++ '@babel/runtime': 7.20.7
++ aria-query: 4.2.2
++ array-includes: 3.1.6
++ ast-types-flow: 0.0.7
++ axe-core: 4.6.1
++ axobject-query: 2.2.0
++ damerau-levenshtein: 1.0.8
++ emoji-regex: 9.2.2
++ eslint: 8.31.0
++ has: 1.0.3
++ jsx-ast-utils: 3.3.3
++ language-tags: 1.0.7
++ minimatch: 3.1.2
++ semver: 6.3.0
++ dev: false
++
++ /eslint-plugin-react-hooks/4.6.0_eslint@8.31.0:
++ resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
++ engines: {node: '>=10'}
++ peerDependencies:
++ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
++ dependencies:
++ eslint: 8.31.0
++ dev: false
++
++ /eslint-plugin-react/7.31.11_eslint@8.31.0:
++ resolution: {integrity: sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==}
++ engines: {node: '>=4'}
++ peerDependencies:
++ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
++ dependencies:
++ array-includes: 3.1.6
++ array.prototype.flatmap: 1.3.1
++ array.prototype.tosorted: 1.1.1
++ doctrine: 2.1.0
++ eslint: 8.31.0
++ estraverse: 5.3.0
++ jsx-ast-utils: 3.3.3
++ minimatch: 3.1.2
++ object.entries: 1.1.6
++ object.fromentries: 2.0.6
++ object.hasown: 1.1.2
++ object.values: 1.1.6
++ prop-types: 15.8.1
++ resolve: 2.0.0-next.4
++ semver: 6.3.0
++ string.prototype.matchall: 4.0.8
++ dev: false
++
++ /eslint-scope/7.1.1:
++ resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
++ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
++ dependencies:
++ esrecurse: 4.3.0
++ estraverse: 5.3.0
++ dev: false
++
++ /eslint-utils/3.0.0_eslint@8.31.0:
++ resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
++ engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
++ peerDependencies:
++ eslint: '>=5'
++ dependencies:
++ eslint: 8.31.0
++ eslint-visitor-keys: 2.1.0
++ dev: false
++
++ /eslint-visitor-keys/2.1.0:
++ resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
++ engines: {node: '>=10'}
++ dev: false
++
++ /eslint-visitor-keys/3.3.0:
++ resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==}
++ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
++ dev: false
++
++ /eslint/8.31.0:
++ resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==}
++ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
++ hasBin: true
++ dependencies:
++ '@eslint/eslintrc': 1.4.1
++ '@humanwhocodes/config-array': 0.11.8
++ '@humanwhocodes/module-importer': 1.0.1
++ '@nodelib/fs.walk': 1.2.8
++ ajv: 6.12.6
++ chalk: 4.1.2
++ cross-spawn: 7.0.3
++ debug: 4.3.4
++ doctrine: 3.0.0
++ escape-string-regexp: 4.0.0
++ eslint-scope: 7.1.1
++ eslint-utils: 3.0.0_eslint@8.31.0
++ eslint-visitor-keys: 3.3.0
++ espree: 9.4.1
++ esquery: 1.4.0
++ esutils: 2.0.3
++ fast-deep-equal: 3.1.3
++ file-entry-cache: 6.0.1
++ find-up: 5.0.0
++ glob-parent: 6.0.2
++ globals: 13.19.0
++ grapheme-splitter: 1.0.4
++ ignore: 5.2.4
++ import-fresh: 3.3.0
++ imurmurhash: 0.1.4
++ is-glob: 4.0.3
++ is-path-inside: 3.0.3
++ js-sdsl: 4.2.0
++ js-yaml: 4.1.0
++ json-stable-stringify-without-jsonify: 1.0.1
++ levn: 0.4.1
++ lodash.merge: 4.6.2
++ minimatch: 3.1.2
++ natural-compare: 1.4.0
++ optionator: 0.9.1
++ regexpp: 3.2.0
++ strip-ansi: 6.0.1
++ strip-json-comments: 3.1.1
++ text-table: 0.2.0
++ transitivePeerDependencies:
++ - supports-color
++ dev: false
++
++ /espree/9.4.1:
++ resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==}
++ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
++ dependencies:
++ acorn: 8.8.1
++ acorn-jsx: 5.3.2_acorn@8.8.1
++ eslint-visitor-keys: 3.3.0
++ dev: false
++
++ /esquery/1.4.0:
++ resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==}
++ engines: {node: '>=0.10'}
++ dependencies:
++ estraverse: 5.3.0
++ dev: false
++
++ /esrecurse/4.3.0:
++ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
++ engines: {node: '>=4.0'}
++ dependencies:
++ estraverse: 5.3.0
++ dev: false
++
++ /estraverse/5.3.0:
++ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
++ engines: {node: '>=4.0'}
++ dev: false
++
++ /esutils/2.0.3:
++ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
++ engines: {node: '>=0.10.0'}
++ dev: false
++
++ /fast-deep-equal/3.1.3:
++ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
++ dev: false
++
++ /fast-glob/3.2.12:
++ resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
++ engines: {node: '>=8.6.0'}
++ dependencies:
++ '@nodelib/fs.stat': 2.0.5
++ '@nodelib/fs.walk': 1.2.8
++ glob-parent: 5.1.2
++ merge2: 1.4.1
++ micromatch: 4.0.5
++ dev: false
++
++ /fast-json-stable-stringify/2.1.0:
++ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
++ dev: false
++
++ /fast-levenshtein/2.0.6:
++ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
++ dev: false
++
++ /fastq/1.14.0:
++ resolution: {integrity: sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==}
++ dependencies:
++ reusify: 1.0.4
++ dev: false
++
++ /file-entry-cache/6.0.1:
++ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
++ engines: {node: ^10.12.0 || >=12.0.0}
++ dependencies:
++ flat-cache: 3.0.4
++ dev: false
++
++ /fill-range/7.0.1:
++ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
++ engines: {node: '>=8'}
++ dependencies:
++ to-regex-range: 5.0.1
++ dev: false
++
++ /find-up/5.0.0:
++ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
++ engines: {node: '>=10'}
++ dependencies:
++ locate-path: 6.0.0
++ path-exists: 4.0.0
++ dev: false
++
++ /flat-cache/3.0.4:
++ resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
++ engines: {node: ^10.12.0 || >=12.0.0}
++ dependencies:
++ flatted: 3.2.7
++ rimraf: 3.0.2
++ dev: false
++
++ /flatted/3.2.7:
++ resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
++ dev: false
++
++ /fs.realpath/1.0.0:
++ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
++ dev: false
++
++ /function-bind/1.1.1:
++ resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
++ dev: false
++
++ /function.prototype.name/1.1.5:
++ resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ functions-have-names: 1.2.3
++ dev: false
++
++ /functions-have-names/1.2.3:
++ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
++ dev: false
++
++ /get-intrinsic/1.1.3:
++ resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==}
++ dependencies:
++ function-bind: 1.1.1
++ has: 1.0.3
++ has-symbols: 1.0.3
++ dev: false
++
++ /get-symbol-description/1.0.0:
++ resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ get-intrinsic: 1.1.3
++ dev: false
++
++ /get-tsconfig/4.2.0:
++ resolution: {integrity: sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==}
++ dev: false
++
++ /glob-parent/5.1.2:
++ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
++ engines: {node: '>= 6'}
++ dependencies:
++ is-glob: 4.0.3
++ dev: false
++
++ /glob-parent/6.0.2:
++ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
++ engines: {node: '>=10.13.0'}
++ dependencies:
++ is-glob: 4.0.3
++ dev: false
++
++ /glob/7.1.7:
++ resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
++ dependencies:
++ fs.realpath: 1.0.0
++ inflight: 1.0.6
++ inherits: 2.0.4
++ minimatch: 3.1.2
++ once: 1.4.0
++ path-is-absolute: 1.0.1
++ dev: false
++
++ /glob/7.2.3:
++ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
++ dependencies:
++ fs.realpath: 1.0.0
++ inflight: 1.0.6
++ inherits: 2.0.4
++ minimatch: 3.1.2
++ once: 1.4.0
++ path-is-absolute: 1.0.1
++ dev: false
++
++ /globals/13.19.0:
++ resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==}
++ engines: {node: '>=8'}
++ dependencies:
++ type-fest: 0.20.2
++ dev: false
++
++ /globalyzer/0.1.0:
++ resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==}
++ dev: false
++
++ /globby/11.1.0:
++ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
++ engines: {node: '>=10'}
++ dependencies:
++ array-union: 2.1.0
++ dir-glob: 3.0.1
++ fast-glob: 3.2.12
++ ignore: 5.2.4
++ merge2: 1.4.1
++ slash: 3.0.0
++ dev: false
++
++ /globby/13.1.3:
++ resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==}
++ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
++ dependencies:
++ dir-glob: 3.0.1
++ fast-glob: 3.2.12
++ ignore: 5.2.4
++ merge2: 1.4.1
++ slash: 4.0.0
++ dev: false
++
++ /globrex/0.1.2:
++ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
++ dev: false
++
++ /gopd/1.0.1:
++ resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
++ dependencies:
++ get-intrinsic: 1.1.3
++ dev: false
++
++ /graceful-fs/4.2.10:
++ resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
++ dev: false
++
++ /grapheme-splitter/1.0.4:
++ resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
++ dev: false
++
++ /has-bigints/1.0.2:
++ resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
++ dev: false
++
++ /has-flag/4.0.0:
++ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /has-property-descriptors/1.0.0:
++ resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
++ dependencies:
++ get-intrinsic: 1.1.3
++ dev: false
++
++ /has-symbols/1.0.3:
++ resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
++ engines: {node: '>= 0.4'}
++ dev: false
++
++ /has-tostringtag/1.0.0:
++ resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ has-symbols: 1.0.3
++ dev: false
++
++ /has/1.0.3:
++ resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
++ engines: {node: '>= 0.4.0'}
++ dependencies:
++ function-bind: 1.1.1
++ dev: false
++
++ /ignore/5.2.4:
++ resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
++ engines: {node: '>= 4'}
++ dev: false
++
++ /import-fresh/3.3.0:
++ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
++ engines: {node: '>=6'}
++ dependencies:
++ parent-module: 1.0.1
++ resolve-from: 4.0.0
++ dev: false
++
++ /imurmurhash/0.1.4:
++ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
++ engines: {node: '>=0.8.19'}
++ dev: false
++
++ /inflight/1.0.6:
++ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
++ dependencies:
++ once: 1.4.0
++ wrappy: 1.0.2
++ dev: false
++
++ /inherits/2.0.4:
++ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
++ dev: false
++
++ /internal-slot/1.0.4:
++ resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ get-intrinsic: 1.1.3
++ has: 1.0.3
++ side-channel: 1.0.4
++ dev: false
++
++ /is-bigint/1.0.4:
++ resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
++ dependencies:
++ has-bigints: 1.0.2
++ dev: false
++
++ /is-boolean-object/1.1.2:
++ resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ has-tostringtag: 1.0.0
++ dev: false
++
++ /is-callable/1.2.7:
++ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
++ engines: {node: '>= 0.4'}
++ dev: false
++
++ /is-core-module/2.11.0:
++ resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
++ dependencies:
++ has: 1.0.3
++ dev: false
++
++ /is-date-object/1.0.5:
++ resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ has-tostringtag: 1.0.0
++ dev: false
++
++ /is-docker/2.2.1:
++ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
++ engines: {node: '>=8'}
++ hasBin: true
++ dev: false
++
++ /is-extglob/2.1.1:
++ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
++ engines: {node: '>=0.10.0'}
++ dev: false
++
++ /is-glob/4.0.3:
++ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
++ engines: {node: '>=0.10.0'}
++ dependencies:
++ is-extglob: 2.1.1
++ dev: false
++
++ /is-negative-zero/2.0.2:
++ resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
++ engines: {node: '>= 0.4'}
++ dev: false
++
++ /is-number-object/1.0.7:
++ resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ has-tostringtag: 1.0.0
++ dev: false
++
++ /is-number/7.0.0:
++ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
++ engines: {node: '>=0.12.0'}
++ dev: false
++
++ /is-path-inside/3.0.3:
++ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /is-regex/1.1.4:
++ resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ has-tostringtag: 1.0.0
++ dev: false
++
++ /is-shared-array-buffer/1.0.2:
++ resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
++ dependencies:
++ call-bind: 1.0.2
++ dev: false
++
++ /is-string/1.0.7:
++ resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ has-tostringtag: 1.0.0
++ dev: false
++
++ /is-symbol/1.0.4:
++ resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ has-symbols: 1.0.3
++ dev: false
++
++ /is-weakref/1.0.2:
++ resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
++ dependencies:
++ call-bind: 1.0.2
++ dev: false
++
++ /is-wsl/2.2.0:
++ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
++ engines: {node: '>=8'}
++ dependencies:
++ is-docker: 2.2.1
++ dev: false
++
++ /isexe/2.0.0:
++ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
++ dev: false
++
++ /js-sdsl/4.2.0:
++ resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==}
++ dev: false
++
++ /js-tokens/4.0.0:
++ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
++ dev: false
++
++ /js-yaml/4.1.0:
++ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
++ hasBin: true
++ dependencies:
++ argparse: 2.0.1
++ dev: false
++
++ /json-schema-traverse/0.4.1:
++ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
++ dev: false
++
++ /json-stable-stringify-without-jsonify/1.0.1:
++ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
++ dev: false
++
++ /json5/1.0.2:
++ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
++ hasBin: true
++ dependencies:
++ minimist: 1.2.7
++ dev: false
++
++ /jsx-ast-utils/3.3.3:
++ resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==}
++ engines: {node: '>=4.0'}
++ dependencies:
++ array-includes: 3.1.6
++ object.assign: 4.1.4
++ dev: false
++
++ /language-subtag-registry/0.3.22:
++ resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
++ dev: false
++
++ /language-tags/1.0.7:
++ resolution: {integrity: sha512-bSytju1/657hFjgUzPAPqszxH62ouE8nQFoFaVlIQfne4wO/wXC9A4+m8jYve7YBBvi59eq0SUpcshvG8h5Usw==}
++ dependencies:
++ language-subtag-registry: 0.3.22
++ dev: false
++
++ /levn/0.4.1:
++ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
++ engines: {node: '>= 0.8.0'}
++ dependencies:
++ prelude-ls: 1.2.1
++ type-check: 0.4.0
++ dev: false
++
++ /locate-path/6.0.0:
++ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
++ engines: {node: '>=10'}
++ dependencies:
++ p-locate: 5.0.0
++ dev: false
++
++ /lodash.merge/4.6.2:
++ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
++ dev: false
++
++ /loose-envify/1.4.0:
++ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
++ hasBin: true
++ dependencies:
++ js-tokens: 4.0.0
++ dev: false
++
++ /lru-cache/6.0.0:
++ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
++ engines: {node: '>=10'}
++ dependencies:
++ yallist: 4.0.0
++ dev: false
++
++ /merge2/1.4.1:
++ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
++ engines: {node: '>= 8'}
++ dev: false
++
++ /micromatch/4.0.5:
++ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
++ engines: {node: '>=8.6'}
++ dependencies:
++ braces: 3.0.2
++ picomatch: 2.3.1
++ dev: false
++
++ /minimatch/3.1.2:
++ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
++ dependencies:
++ brace-expansion: 1.1.11
++ dev: false
++
++ /minimist/1.2.7:
++ resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
++ dev: false
++
++ /ms/2.0.0:
++ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
++ dev: false
++
++ /ms/2.1.2:
++ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
++ dev: false
++
++ /ms/2.1.3:
++ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
++ dev: false
++
++ /nanoid/3.3.4:
++ resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
++ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
++ hasBin: true
++ dev: false
++
++ /natural-compare/1.4.0:
++ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
++ dev: false
++
++ /next/13.1.1_biqbaboplfbrettd7655fr4n2y:
++ resolution: {integrity: sha512-R5eBAaIa3X7LJeYvv1bMdGnAVF4fVToEjim7MkflceFPuANY3YyvFxXee/A+acrSYwYPvOvf7f6v/BM/48ea5w==}
++ engines: {node: '>=14.6.0'}
++ hasBin: true
++ peerDependencies:
++ fibers: '>= 3.1.0'
++ node-sass: ^6.0.0 || ^7.0.0
++ react: ^18.2.0
++ react-dom: ^18.2.0
++ sass: ^1.3.0
++ peerDependenciesMeta:
++ fibers:
++ optional: true
++ node-sass:
++ optional: true
++ sass:
++ optional: true
++ dependencies:
++ '@next/env': 13.1.1
++ '@swc/helpers': 0.4.14
++ caniuse-lite: 1.0.30001441
++ postcss: 8.4.14
++ react: 18.2.0
++ react-dom: 18.2.0_react@18.2.0
++ styled-jsx: 5.1.1_react@18.2.0
++ optionalDependencies:
++ '@next/swc-android-arm-eabi': 13.1.1
++ '@next/swc-android-arm64': 13.1.1
++ '@next/swc-darwin-arm64': 13.1.1
++ '@next/swc-darwin-x64': 13.1.1
++ '@next/swc-freebsd-x64': 13.1.1
++ '@next/swc-linux-arm-gnueabihf': 13.1.1
++ '@next/swc-linux-arm64-gnu': 13.1.1
++ '@next/swc-linux-arm64-musl': 13.1.1
++ '@next/swc-linux-x64-gnu': 13.1.1
++ '@next/swc-linux-x64-musl': 13.1.1
++ '@next/swc-win32-arm64-msvc': 13.1.1
++ '@next/swc-win32-ia32-msvc': 13.1.1
++ '@next/swc-win32-x64-msvc': 13.1.1
++ transitivePeerDependencies:
++ - '@babel/core'
++ - babel-plugin-macros
++ dev: false
++
++ /object-assign/4.1.1:
++ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
++ engines: {node: '>=0.10.0'}
++ dev: false
++
++ /object-inspect/1.12.2:
++ resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==}
++ dev: false
++
++ /object-keys/1.1.1:
++ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
++ engines: {node: '>= 0.4'}
++ dev: false
++
++ /object.assign/4.1.4:
++ resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ has-symbols: 1.0.3
++ object-keys: 1.1.1
++ dev: false
++
++ /object.entries/1.1.6:
++ resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ dev: false
++
++ /object.fromentries/2.0.6:
++ resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ dev: false
++
++ /object.hasown/1.1.2:
++ resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==}
++ dependencies:
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ dev: false
++
++ /object.values/1.1.6:
++ resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ dev: false
++
++ /once/1.4.0:
++ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
++ dependencies:
++ wrappy: 1.0.2
++ dev: false
++
++ /open/8.4.0:
++ resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==}
++ engines: {node: '>=12'}
++ dependencies:
++ define-lazy-prop: 2.0.0
++ is-docker: 2.2.1
++ is-wsl: 2.2.0
++ dev: false
++
++ /optionator/0.9.1:
++ resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
++ engines: {node: '>= 0.8.0'}
++ dependencies:
++ deep-is: 0.1.4
++ fast-levenshtein: 2.0.6
++ levn: 0.4.1
++ prelude-ls: 1.2.1
++ type-check: 0.4.0
++ word-wrap: 1.2.3
++ dev: false
++
++ /p-limit/3.1.0:
++ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
++ engines: {node: '>=10'}
++ dependencies:
++ yocto-queue: 0.1.0
++ dev: false
++
++ /p-locate/5.0.0:
++ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
++ engines: {node: '>=10'}
++ dependencies:
++ p-limit: 3.1.0
++ dev: false
++
++ /parent-module/1.0.1:
++ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
++ engines: {node: '>=6'}
++ dependencies:
++ callsites: 3.1.0
++ dev: false
++
++ /path-exists/4.0.0:
++ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /path-is-absolute/1.0.1:
++ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
++ engines: {node: '>=0.10.0'}
++ dev: false
++
++ /path-key/3.1.1:
++ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /path-parse/1.0.7:
++ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
++ dev: false
++
++ /path-type/4.0.0:
++ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /picocolors/1.0.0:
++ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
++ dev: false
++
++ /picomatch/2.3.1:
++ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
++ engines: {node: '>=8.6'}
++ dev: false
++
++ /postcss/8.4.14:
++ resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
++ engines: {node: ^10 || ^12 || >=14}
++ dependencies:
++ nanoid: 3.3.4
++ picocolors: 1.0.0
++ source-map-js: 1.0.2
++ dev: false
++
++ /prelude-ls/1.2.1:
++ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
++ engines: {node: '>= 0.8.0'}
++ dev: false
++
++ /prettier/2.8.1:
++ resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==}
++ engines: {node: '>=10.13.0'}
++ hasBin: true
++ dev: true
++
++ /prop-types/15.8.1:
++ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
++ dependencies:
++ loose-envify: 1.4.0
++ object-assign: 4.1.1
++ react-is: 16.13.1
++ dev: false
++
++ /punycode/2.1.1:
++ resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
++ engines: {node: '>=6'}
++ dev: false
++
++ /queue-microtask/1.2.3:
++ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
++ dev: false
++
++ /react-dom/18.2.0_react@18.2.0:
++ resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
++ peerDependencies:
++ react: ^18.2.0
++ dependencies:
++ loose-envify: 1.4.0
++ react: 18.2.0
++ scheduler: 0.23.0
++ dev: false
++
++ /react-is/16.13.1:
++ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
++ dev: false
++
++ /react/18.2.0:
++ resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
++ engines: {node: '>=0.10.0'}
++ dependencies:
++ loose-envify: 1.4.0
++ dev: false
++
++ /regenerator-runtime/0.13.11:
++ resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
++ dev: false
++
++ /regexp.prototype.flags/1.4.3:
++ resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==}
++ engines: {node: '>= 0.4'}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ functions-have-names: 1.2.3
++ dev: false
++
++ /regexpp/3.2.0:
++ resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /resolve-from/4.0.0:
++ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
++ engines: {node: '>=4'}
++ dev: false
++
++ /resolve/1.22.1:
++ resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
++ hasBin: true
++ dependencies:
++ is-core-module: 2.11.0
++ path-parse: 1.0.7
++ supports-preserve-symlinks-flag: 1.0.0
++ dev: false
++
++ /resolve/2.0.0-next.4:
++ resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
++ hasBin: true
++ dependencies:
++ is-core-module: 2.11.0
++ path-parse: 1.0.7
++ supports-preserve-symlinks-flag: 1.0.0
++ dev: false
++
++ /reusify/1.0.4:
++ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
++ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
++ dev: false
++
++ /rimraf/3.0.2:
++ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
++ hasBin: true
++ dependencies:
++ glob: 7.2.3
++ dev: false
++
++ /run-parallel/1.2.0:
++ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
++ dependencies:
++ queue-microtask: 1.2.3
++ dev: false
++
++ /safe-regex-test/1.0.0:
++ resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
++ dependencies:
++ call-bind: 1.0.2
++ get-intrinsic: 1.1.3
++ is-regex: 1.1.4
++ dev: false
++
++ /scheduler/0.23.0:
++ resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
++ dependencies:
++ loose-envify: 1.4.0
++ dev: false
++
++ /semver/6.3.0:
++ resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
++ hasBin: true
++ dev: false
++
++ /semver/7.3.8:
++ resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
++ engines: {node: '>=10'}
++ hasBin: true
++ dependencies:
++ lru-cache: 6.0.0
++ dev: false
++
++ /shebang-command/2.0.0:
++ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
++ engines: {node: '>=8'}
++ dependencies:
++ shebang-regex: 3.0.0
++ dev: false
++
++ /shebang-regex/3.0.0:
++ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /side-channel/1.0.4:
++ resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
++ dependencies:
++ call-bind: 1.0.2
++ get-intrinsic: 1.1.3
++ object-inspect: 1.12.2
++ dev: false
++
++ /slash/3.0.0:
++ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /slash/4.0.0:
++ resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
++ engines: {node: '>=12'}
++ dev: false
++
++ /source-map-js/1.0.2:
++ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
++ engines: {node: '>=0.10.0'}
++ dev: false
++
++ /string.prototype.matchall/4.0.8:
++ resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ get-intrinsic: 1.1.3
++ has-symbols: 1.0.3
++ internal-slot: 1.0.4
++ regexp.prototype.flags: 1.4.3
++ side-channel: 1.0.4
++ dev: false
++
++ /string.prototype.trimend/1.0.6:
++ resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ dev: false
++
++ /string.prototype.trimstart/1.0.6:
++ resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
++ dependencies:
++ call-bind: 1.0.2
++ define-properties: 1.1.4
++ es-abstract: 1.20.5
++ dev: false
++
++ /strip-ansi/6.0.1:
++ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
++ engines: {node: '>=8'}
++ dependencies:
++ ansi-regex: 5.0.1
++ dev: false
++
++ /strip-bom/3.0.0:
++ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
++ engines: {node: '>=4'}
++ dev: false
++
++ /strip-json-comments/3.1.1:
++ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
++ engines: {node: '>=8'}
++ dev: false
++
++ /styled-jsx/5.1.1_react@18.2.0:
++ resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
++ engines: {node: '>= 12.0.0'}
++ peerDependencies:
++ '@babel/core': '*'
++ babel-plugin-macros: '*'
++ react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
++ peerDependenciesMeta:
++ '@babel/core':
++ optional: true
++ babel-plugin-macros:
++ optional: true
++ dependencies:
++ client-only: 0.0.1
++ react: 18.2.0
++ dev: false
++
++ /supports-color/7.2.0:
++ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
++ engines: {node: '>=8'}
++ dependencies:
++ has-flag: 4.0.0
++ dev: false
++
++ /supports-preserve-symlinks-flag/1.0.0:
++ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
++ engines: {node: '>= 0.4'}
++ dev: false
++
++ /synckit/0.8.4:
++ resolution: {integrity: sha512-Dn2ZkzMdSX827QbowGbU/4yjWuvNaCoScLLoMo/yKbu+P4GBR6cRGKZH27k6a9bRzdqcyd1DE96pQtQ6uNkmyw==}
++ engines: {node: ^14.18.0 || >=16.0.0}
++ dependencies:
++ '@pkgr/utils': 2.3.1
++ tslib: 2.4.1
++ dev: false
++
++ /tapable/2.2.1:
++ resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
++ engines: {node: '>=6'}
++ dev: false
++
++ /text-table/0.2.0:
++ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
++ dev: false
++
++ /tiny-glob/0.2.9:
++ resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==}
++ dependencies:
++ globalyzer: 0.1.0
++ globrex: 0.1.2
++ dev: false
++
++ /to-regex-range/5.0.1:
++ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
++ engines: {node: '>=8.0'}
++ dependencies:
++ is-number: 7.0.0
++ dev: false
++
++ /tsconfig-paths/3.14.1:
++ resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==}
++ dependencies:
++ '@types/json5': 0.0.29
++ json5: 1.0.2
++ minimist: 1.2.7
++ strip-bom: 3.0.0
++ dev: false
++
++ /tslib/1.14.1:
++ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
++ dev: false
++
++ /tslib/2.4.1:
++ resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
++ dev: false
++
++ /tsutils/3.21.0_typescript@4.9.4:
++ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
++ engines: {node: '>= 6'}
++ peerDependencies:
++ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
++ dependencies:
++ tslib: 1.14.1
++ typescript: 4.9.4
++ dev: false
++
++ /type-check/0.4.0:
++ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
++ engines: {node: '>= 0.8.0'}
++ dependencies:
++ prelude-ls: 1.2.1
++ dev: false
++
++ /type-fest/0.20.2:
++ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
++ engines: {node: '>=10'}
++ dev: false
++
++ /typescript/4.9.4:
++ resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==}
++ engines: {node: '>=4.2.0'}
++ hasBin: true
++ dev: false
++
++ /unbox-primitive/1.0.2:
++ resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
++ dependencies:
++ call-bind: 1.0.2
++ has-bigints: 1.0.2
++ has-symbols: 1.0.3
++ which-boxed-primitive: 1.0.2
++ dev: false
++
++ /uri-js/4.4.1:
++ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
++ dependencies:
++ punycode: 2.1.1
++ dev: false
++
++ /which-boxed-primitive/1.0.2:
++ resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
++ dependencies:
++ is-bigint: 1.0.4
++ is-boolean-object: 1.1.2
++ is-number-object: 1.0.7
++ is-string: 1.0.7
++ is-symbol: 1.0.4
++ dev: false
++
++ /which/2.0.2:
++ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
++ engines: {node: '>= 8'}
++ hasBin: true
++ dependencies:
++ isexe: 2.0.0
++ dev: false
++
++ /word-wrap/1.2.3:
++ resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
++ engines: {node: '>=0.10.0'}
++ dev: false
++
++ /wrappy/1.0.2:
++ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
++ dev: false
++
++ /yallist/4.0.0:
++ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
++ dev: false
++
++ /yocto-queue/0.1.0:
++ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
++ engines: {node: '>=10'}
++ dev: false
++
++ file:../..:
++ resolution: {directory: ../.., type: directory}
++ name: '@toots/shine.js'
++ version: 1.0.1
++ dev: false
+diff --git a/js/test/nextjs/public/encode.wav b/js/test/nextjs/public/encode.wav
+new file mode 120000
+index 0000000..0f5f127
+--- /dev/null
++++ b/js/test/nextjs/public/encode.wav
+@@ -0,0 +1 @@
++../lib/encode.wav
+\ No newline at end of file
+diff --git a/js/test/nextjs/tsconfig.json b/js/test/nextjs/tsconfig.json
+new file mode 100644
+index 0000000..66151f2
+--- /dev/null
++++ b/js/test/nextjs/tsconfig.json
+@@ -0,0 +1,23 @@
++{
++ "compilerOptions": {
++ "target": "es5",
++ "lib": ["dom", "dom.iterable", "esnext"],
++ "allowJs": true,
++ "skipLibCheck": true,
++ "strict": true,
++ "forceConsistentCasingInFileNames": true,
++ "noEmit": true,
++ "esModuleInterop": true,
++ "module": "esnext",
++ "moduleResolution": "node",
++ "resolveJsonModule": true,
++ "isolatedModules": true,
++ "jsx": "preserve",
++ "incremental": true,
++ "paths": {
++ "@shine/*": ["./*"]
++ }
++ },
++ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
++ "exclude": ["node_modules"]
++}
+diff --git a/js/test/node/encode.coffee b/js/test/node/encode.coffee
+deleted file mode 100644
+index 3e1ba72..0000000
+--- a/js/test/node/encode.coffee
++++ /dev/null
+@@ -1,58 +0,0 @@
+-Shine = require "../../dist/libshine.js"
+-{Reader} = require "wav"
+-fs = require "fs"
+-
+-console.log ""
+-console.log "Executing encoding test"
+-
+-bitrate = 128
+-str = fs.createReadStream "../lib/encode.wav"
+-fd = fs.openSync "./encode.mp3", "w"
+-reader = new Reader
+-
+-str.pipe reader
+-
+-write = (encoded) ->
+- return unless encoded.length > 0
+- buf = new Buffer encoded
+- fs.writeSync fd, buf, 0, buf.length
+-
+-reader.on "format", (format) ->
+- console.log "Got WAV file."
+-
+- shine = new Shine
+- bitrate: bitrate
+- samplerate: format.sampleRate
+- channels: format.channels
+-
+- console.log "Encoding.."
+- started = new Date
+- duration = 0.0
+- samplerate = parseFloat format.sampleRate
+-
+- reader.on "data", (buf) ->
+- samples = buf.length/(2*format.channels)
+-
+- duration += parseFloat(samples) / samplerate
+-
+- write shine.encode(convertInterleavedBuffer(buf, format.channels, samples))
+-
+- reader.on "end", ->
+- write shine.close()
+-
+- ended = new Date
+- encodingTime = (ended.getTime() - started.getTime())/1000
+- console.log "Done encoding."
+- console.log "File duration: #{duration.toFixed(2)} seconds"
+- console.log "Encoding time: #{encodingTime.toFixed(2)} seconds"
+- console.log "Encoding rate: #{(duration/encodingTime).toFixed(2)}X"
+- process.exit 0
+-
+-convertInterleavedBuffer = (buf, channels, samples) ->
+- ret = new Array channels
+- for chan in [0..channels-1]
+- ret[chan] = new Int16Array samples
+- for i in [0..samples-1]
+- ret[chan][i] = buf.readInt16LE 2*(i*channels + chan)
+-
+- ret
+diff --git a/js/test/node/encode.ts b/js/test/node/encode.ts
+new file mode 100644
+index 0000000..cc971e1
+--- /dev/null
++++ b/js/test/node/encode.ts
+@@ -0,0 +1,73 @@
++import { Shine } from "@toots/shine.js";
++import { Reader } from "wav";
++import fs from "fs";
++
++const convertInterleavedBuffer = (buf, channels, samples) => {
++ const ret = new Array(channels);
++ for (let chan = 0; chan < channels; chan++) {
++ ret[chan] = new Int16Array(samples);
++ for (let i = 0; i < samples; i++) {
++ ret[chan][i] = buf.readInt16LE(2 * (i * channels + chan));
++ }
++ }
++
++ return ret;
++};
++
++const exec = async () => {
++ await Shine.initialized;
++
++ console.log("");
++ console.log("Executing encoding test");
++
++ const bitrate = 128;
++ const str = fs.createReadStream("../lib/encode.wav");
++ const fd = fs.openSync("./encode.mp3", "w");
++ const reader = new Reader();
++
++ str.pipe(reader);
++
++ const write = encoded => {
++ if (encoded.length <= 0) return;
++
++ const buf = Buffer.from(encoded);
++ fs.writeSync(fd, buf, 0, buf.length);
++ };
++
++ reader.on("format", format => {
++ console.log("Got WAV file.");
++
++ const shine = new Shine({
++ bitrate: bitrate,
++ samplerate: format.sampleRate,
++ channels: format.channels,
++ });
++
++ console.log("Encoding..");
++ const started = new Date();
++ let duration = 0.0;
++ const samplerate = format.sampleRate;
++
++ reader.on("data", buf => {
++ const samples = buf.length / (2 * format.channels);
++
++ duration += samples / samplerate;
++
++ write(shine.encode(convertInterleavedBuffer(buf, format.channels, samples)));
++ });
++
++ reader.on("end", () => {
++ write(shine.close());
++
++ const ended = new Date();
++ const encodingTime = (ended.getTime() - started.getTime()) / 1000;
++ console.log("Done encoding.");
++ console.log(`File duration: ${duration.toFixed(2)} seconds`);
++ console.log(`Encoding time: ${encodingTime.toFixed(2)} seconds`);
++ console.log(`Encoding rate: ${(duration / encodingTime).toFixed(2)}X`);
++ process.exit(0);
++ });
++ });
++};
++
++exec();
+diff --git a/js/test/node/package-lock.json b/js/test/node/package-lock.json
+index 0096742..752a7c7 100644
+--- a/js/test/node/package-lock.json
++++ b/js/test/node/package-lock.json
+@@ -1,49 +1,493 @@
+ {
+ "name": "shine-js-test",
+ "version": "0.0.1",
+- "lockfileVersion": 1,
++ "lockfileVersion": 2,
+ "requires": true,
++ "packages": {
++ "": {
++ "name": "shine-js-test",
++ "version": "0.0.1",
++ "dependencies": {
++ "@toots/shine.js": "file:../..",
++ "@types/node": "^18.11.18",
++ "ts-node": "^10.9.1",
++ "typescript": "^4.9.4",
++ "wav": "^1.0.2"
++ }
++ },
++ "../..": {
++ "name": "@toots/shine.js",
++ "version": "1.0.1",
++ "license": "LGPL-2.0-only"
++ },
++ "node_modules/@cspotcode/source-map-support": {
++ "version": "0.8.1",
++ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
++ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
++ "dependencies": {
++ "@jridgewell/trace-mapping": "0.3.9"
++ },
++ "engines": {
++ "node": ">=12"
++ }
++ },
++ "node_modules/@jridgewell/resolve-uri": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
++ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
++ "engines": {
++ "node": ">=6.0.0"
++ }
++ },
++ "node_modules/@jridgewell/sourcemap-codec": {
++ "version": "1.4.14",
++ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
++ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
++ },
++ "node_modules/@jridgewell/trace-mapping": {
++ "version": "0.3.9",
++ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
++ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
++ "dependencies": {
++ "@jridgewell/resolve-uri": "^3.0.3",
++ "@jridgewell/sourcemap-codec": "^1.4.10"
++ }
++ },
++ "node_modules/@toots/shine.js": {
++ "resolved": "../..",
++ "link": true
++ },
++ "node_modules/@tsconfig/node10": {
++ "version": "1.0.9",
++ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
++ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA=="
++ },
++ "node_modules/@tsconfig/node12": {
++ "version": "1.0.11",
++ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
++ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="
++ },
++ "node_modules/@tsconfig/node14": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
++ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="
++ },
++ "node_modules/@tsconfig/node16": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
++ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ=="
++ },
++ "node_modules/@types/node": {
++ "version": "18.11.18",
++ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
++ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA=="
++ },
++ "node_modules/acorn": {
++ "version": "8.8.1",
++ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
++ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
++ "bin": {
++ "acorn": "bin/acorn"
++ },
++ "engines": {
++ "node": ">=0.4.0"
++ }
++ },
++ "node_modules/acorn-walk": {
++ "version": "8.2.0",
++ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
++ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
++ "engines": {
++ "node": ">=0.4.0"
++ }
++ },
++ "node_modules/arg": {
++ "version": "4.1.3",
++ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
++ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
++ },
++ "node_modules/buffer-alloc": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
++ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
++ "dependencies": {
++ "buffer-alloc-unsafe": "^1.1.0",
++ "buffer-fill": "^1.0.0"
++ }
++ },
++ "node_modules/buffer-alloc-unsafe": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
++ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
++ },
++ "node_modules/buffer-fill": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
++ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
++ },
++ "node_modules/buffer-from": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
++ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
++ },
++ "node_modules/core-util-is": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
++ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
++ },
++ "node_modules/create-require": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
++ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
++ },
++ "node_modules/debug": {
++ "version": "2.6.9",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
++ "dependencies": {
++ "ms": "2.0.0"
++ }
++ },
++ "node_modules/diff": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
++ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
++ "engines": {
++ "node": ">=0.3.1"
++ }
++ },
++ "node_modules/inherits": {
++ "version": "2.0.3",
++ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
++ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
++ },
++ "node_modules/isarray": {
++ "version": "0.0.1",
++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
++ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
++ },
++ "node_modules/make-error": {
++ "version": "1.3.6",
++ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
++ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
++ },
++ "node_modules/ms": {
++ "version": "2.0.0",
++ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
++ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
++ },
++ "node_modules/readable-stream": {
++ "version": "1.1.14",
++ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
++ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
++ "dependencies": {
++ "core-util-is": "~1.0.0",
++ "inherits": "~2.0.1",
++ "isarray": "0.0.1",
++ "string_decoder": "~0.10.x"
++ }
++ },
++ "node_modules/stream-parser": {
++ "version": "0.3.1",
++ "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
++ "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=",
++ "dependencies": {
++ "debug": "2"
++ }
++ },
++ "node_modules/string_decoder": {
++ "version": "0.10.31",
++ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
++ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
++ },
++ "node_modules/ts-node": {
++ "version": "10.9.1",
++ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
++ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
++ "dependencies": {
++ "@cspotcode/source-map-support": "^0.8.0",
++ "@tsconfig/node10": "^1.0.7",
++ "@tsconfig/node12": "^1.0.7",
++ "@tsconfig/node14": "^1.0.0",
++ "@tsconfig/node16": "^1.0.2",
++ "acorn": "^8.4.1",
++ "acorn-walk": "^8.1.1",
++ "arg": "^4.1.0",
++ "create-require": "^1.1.0",
++ "diff": "^4.0.1",
++ "make-error": "^1.1.1",
++ "v8-compile-cache-lib": "^3.0.1",
++ "yn": "3.1.1"
++ },
++ "bin": {
++ "ts-node": "dist/bin.js",
++ "ts-node-cwd": "dist/bin-cwd.js",
++ "ts-node-esm": "dist/bin-esm.js",
++ "ts-node-script": "dist/bin-script.js",
++ "ts-node-transpile-only": "dist/bin-transpile.js",
++ "ts-script": "dist/bin-script-deprecated.js"
++ },
++ "peerDependencies": {
++ "@swc/core": ">=1.2.50",
++ "@swc/wasm": ">=1.2.50",
++ "@types/node": "*",
++ "typescript": ">=2.7"
++ },
++ "peerDependenciesMeta": {
++ "@swc/core": {
++ "optional": true
++ },
++ "@swc/wasm": {
++ "optional": true
++ }
++ }
++ },
++ "node_modules/typescript": {
++ "version": "4.9.4",
++ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
++ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
++ "bin": {
++ "tsc": "bin/tsc",
++ "tsserver": "bin/tsserver"
++ },
++ "engines": {
++ "node": ">=4.2.0"
++ }
++ },
++ "node_modules/v8-compile-cache-lib": {
++ "version": "3.0.1",
++ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
++ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
++ },
++ "node_modules/wav": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz",
++ "integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==",
++ "dependencies": {
++ "buffer-alloc": "^1.1.0",
++ "buffer-from": "^1.0.0",
++ "debug": "^2.2.0",
++ "readable-stream": "^1.1.14",
++ "stream-parser": "^0.3.1"
++ }
++ },
++ "node_modules/yn": {
++ "version": "3.1.1",
++ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
++ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
++ "engines": {
++ "node": ">=6"
++ }
++ }
++ },
+ "dependencies": {
+- "coffee-script": {
+- "version": "1.6.3",
+- "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.3.tgz",
+- "integrity": "sha1-Y1XTLPGwTN/2tITl5xF4Ky8MOb4="
++ "@cspotcode/source-map-support": {
++ "version": "0.8.1",
++ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
++ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
++ "requires": {
++ "@jridgewell/trace-mapping": "0.3.9"
++ }
++ },
++ "@jridgewell/resolve-uri": {
++ "version": "3.1.0",
++ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
++ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
++ },
++ "@jridgewell/sourcemap-codec": {
++ "version": "1.4.14",
++ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
++ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
++ },
++ "@jridgewell/trace-mapping": {
++ "version": "0.3.9",
++ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
++ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
++ "requires": {
++ "@jridgewell/resolve-uri": "^3.0.3",
++ "@jridgewell/sourcemap-codec": "^1.4.10"
++ }
++ },
++ "@toots/shine.js": {
++ "version": "file:../.."
++ },
++ "@tsconfig/node10": {
++ "version": "1.0.9",
++ "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
++ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA=="
++ },
++ "@tsconfig/node12": {
++ "version": "1.0.11",
++ "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
++ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="
++ },
++ "@tsconfig/node14": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
++ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="
++ },
++ "@tsconfig/node16": {
++ "version": "1.0.3",
++ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz",
++ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ=="
++ },
++ "@types/node": {
++ "version": "18.11.18",
++ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz",
++ "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA=="
++ },
++ "acorn": {
++ "version": "8.8.1",
++ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
++ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA=="
++ },
++ "acorn-walk": {
++ "version": "8.2.0",
++ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
++ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA=="
++ },
++ "arg": {
++ "version": "4.1.3",
++ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
++ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
++ },
++ "buffer-alloc": {
++ "version": "1.2.0",
++ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
++ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
++ "requires": {
++ "buffer-alloc-unsafe": "^1.1.0",
++ "buffer-fill": "^1.0.0"
++ }
++ },
++ "buffer-alloc-unsafe": {
++ "version": "1.1.0",
++ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
++ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
++ },
++ "buffer-fill": {
++ "version": "1.0.0",
++ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
++ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
++ },
++ "buffer-from": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
++ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
++ },
++ "core-util-is": {
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
++ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
++ },
++ "create-require": {
++ "version": "1.1.1",
++ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
++ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
+ },
+ "debug": {
+- "version": "2.6.8",
+- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
++ "version": "2.6.9",
++ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
++ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
++ "diff": {
++ "version": "4.0.2",
++ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
++ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="
++ },
++ "inherits": {
++ "version": "2.0.3",
++ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
++ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
++ },
++ "isarray": {
++ "version": "0.0.1",
++ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
++ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
++ },
++ "make-error": {
++ "version": "1.3.6",
++ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
++ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
++ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "readable-stream": {
+- "version": "0.0.4",
+- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz",
+- "integrity": "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40="
++ "version": "1.1.14",
++ "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
++ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
++ "requires": {
++ "core-util-is": "~1.0.0",
++ "inherits": "~2.0.1",
++ "isarray": "0.0.1",
++ "string_decoder": "~0.10.x"
++ }
+ },
+ "stream-parser": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz",
+ "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=",
+ "requires": {
+- "debug": "2.6.8"
++ "debug": "2"
+ }
+ },
++ "string_decoder": {
++ "version": "0.10.31",
++ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
++ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
++ },
++ "ts-node": {
++ "version": "10.9.1",
++ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
++ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
++ "requires": {
++ "@cspotcode/source-map-support": "^0.8.0",
++ "@tsconfig/node10": "^1.0.7",
++ "@tsconfig/node12": "^1.0.7",
++ "@tsconfig/node14": "^1.0.0",
++ "@tsconfig/node16": "^1.0.2",
++ "acorn": "^8.4.1",
++ "acorn-walk": "^8.1.1",
++ "arg": "^4.1.0",
++ "create-require": "^1.1.0",
++ "diff": "^4.0.1",
++ "make-error": "^1.1.1",
++ "v8-compile-cache-lib": "^3.0.1",
++ "yn": "3.1.1"
++ }
++ },
++ "typescript": {
++ "version": "4.9.4",
++ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
++ "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg=="
++ },
++ "v8-compile-cache-lib": {
++ "version": "3.0.1",
++ "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
++ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
++ },
+ "wav": {
+- "version": "0.1.0",
+- "resolved": "https://registry.npmjs.org/wav/-/wav-0.1.0.tgz",
+- "integrity": "sha1-5wTSp2nqIz858tZ5Xout1l9YsAk=",
++ "version": "1.0.2",
++ "resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz",
++ "integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==",
+ "requires": {
+- "debug": "2.6.8",
+- "readable-stream": "0.0.4",
+- "stream-parser": "0.3.1"
++ "buffer-alloc": "^1.1.0",
++ "buffer-from": "^1.0.0",
++ "debug": "^2.2.0",
++ "readable-stream": "^1.1.14",
++ "stream-parser": "^0.3.1"
+ }
++ },
++ "yn": {
++ "version": "3.1.1",
++ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
++ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="
+ }
+ }
+ }
+diff --git a/js/test/node/package.json b/js/test/node/package.json
+index 5160dab..650299c 100644
+--- a/js/test/node/package.json
++++ b/js/test/node/package.json
+@@ -2,26 +2,16 @@
+ "name": "shine-js-test",
+ "description": "Test encoder for libshine.js",
+ "version": "0.0.1",
+- "homepage": "https://github.com/savonet/shine",
+ "author": "Romain Beauxis <toots@rastageeks.org",
+- "repository": {
+- "type": "git",
+- "url": "git://github.com/savonet/shine"
+- },
+- "bugs": {
+- "mail": "toots@rastageeks.org",
+- "url": "http://github.com/savonet/shine/issues"
+- },
+- "main": "test.coffee",
+ "scripts": {
+- "test": "coffee ./encode.coffee && coffee ./rounds.coffee"
+- },
+- "engine": {
+- "node": ">= 0.10.7",
+- "npm": "1"
++ "test": "ts-node ./encode.ts && ts-node ./rounds.ts"
+ },
+ "dependencies": {
+- "coffee-script": "1.6.3",
+- "wav": "0.1.0"
++ "@toots/shine.js": "file:../..",
++ "@types/node": "^18.11.18",
++ "@types/wav": "^1.0.1",
++ "ts-node": "^10.9.1",
++ "typescript": "^4.9.4",
++ "wav": "^1.0.2"
+ }
+ }
+diff --git a/js/test/node/pnpm-lock.yaml b/js/test/node/pnpm-lock.yaml
+new file mode 100644
+index 0000000..58a8b69
+--- /dev/null
++++ b/js/test/node/pnpm-lock.yaml
+@@ -0,0 +1,227 @@
++lockfileVersion: 5.4
++
++specifiers:
++ '@toots/shine.js': file:../..
++ '@types/node': ^18.11.18
++ '@types/wav': ^1.0.1
++ ts-node: ^10.9.1
++ typescript: ^4.9.4
++ wav: ^1.0.2
++
++dependencies:
++ '@toots/shine.js': file:../..
++ '@types/node': 18.11.18
++ '@types/wav': 1.0.1
++ ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq
++ typescript: 4.9.4
++ wav: 1.0.2
++
++packages:
++
++ /@cspotcode/source-map-support/0.8.1:
++ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
++ engines: {node: '>=12'}
++ dependencies:
++ '@jridgewell/trace-mapping': 0.3.9
++ dev: false
++
++ /@jridgewell/resolve-uri/3.1.0:
++ resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
++ engines: {node: '>=6.0.0'}
++ dev: false
++
++ /@jridgewell/sourcemap-codec/1.4.14:
++ resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
++ dev: false
++
++ /@jridgewell/trace-mapping/0.3.9:
++ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
++ dependencies:
++ '@jridgewell/resolve-uri': 3.1.0
++ '@jridgewell/sourcemap-codec': 1.4.14
++ dev: false
++
++ /@tsconfig/node10/1.0.9:
++ resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
++ dev: false
++
++ /@tsconfig/node12/1.0.11:
++ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
++ dev: false
++
++ /@tsconfig/node14/1.0.3:
++ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
++ dev: false
++
++ /@tsconfig/node16/1.0.3:
++ resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==}
++ dev: false
++
++ /@types/node/18.11.18:
++ resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
++ dev: false
++
++ /@types/wav/1.0.1:
++ resolution: {integrity: sha512-AKJeM5mqO1pdR2/HaTUQzSCm12No36KUM1larivXUmsLx+4JmMuC2Tv0kCdZzTx66h7IH2Xr92DGc9NQsXxa9Q==}
++ dependencies:
++ '@types/node': 18.11.18
++ dev: false
++
++ /acorn-walk/8.2.0:
++ resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
++ engines: {node: '>=0.4.0'}
++ dev: false
++
++ /acorn/8.8.1:
++ resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
++ engines: {node: '>=0.4.0'}
++ hasBin: true
++ dev: false
++
++ /arg/4.1.3:
++ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
++ dev: false
++
++ /buffer-alloc-unsafe/1.1.0:
++ resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
++ dev: false
++
++ /buffer-alloc/1.2.0:
++ resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}
++ dependencies:
++ buffer-alloc-unsafe: 1.1.0
++ buffer-fill: 1.0.0
++ dev: false
++
++ /buffer-fill/1.0.0:
++ resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
++ dev: false
++
++ /buffer-from/1.1.2:
++ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
++ dev: false
++
++ /core-util-is/1.0.3:
++ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
++ dev: false
++
++ /create-require/1.1.1:
++ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
++ dev: false
++
++ /debug/2.6.9:
++ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
++ peerDependencies:
++ supports-color: '*'
++ peerDependenciesMeta:
++ supports-color:
++ optional: true
++ dependencies:
++ ms: 2.0.0
++ dev: false
++
++ /diff/4.0.2:
++ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
++ engines: {node: '>=0.3.1'}
++ dev: false
++
++ /inherits/2.0.4:
++ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
++ dev: false
++
++ /isarray/0.0.1:
++ resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
++ dev: false
++
++ /make-error/1.3.6:
++ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
++ dev: false
++
++ /ms/2.0.0:
++ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
++ dev: false
++
++ /readable-stream/1.1.14:
++ resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
++ dependencies:
++ core-util-is: 1.0.3
++ inherits: 2.0.4
++ isarray: 0.0.1
++ string_decoder: 0.10.31
++ dev: false
++
++ /stream-parser/0.3.1:
++ resolution: {integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==}
++ dependencies:
++ debug: 2.6.9
++ transitivePeerDependencies:
++ - supports-color
++ dev: false
++
++ /string_decoder/0.10.31:
++ resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
++ dev: false
++
++ /ts-node/10.9.1_awa2wsr5thmg3i7jqycphctjfq:
++ resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
++ hasBin: true
++ peerDependencies:
++ '@swc/core': '>=1.2.50'
++ '@swc/wasm': '>=1.2.50'
++ '@types/node': '*'
++ typescript: '>=2.7'
++ peerDependenciesMeta:
++ '@swc/core':
++ optional: true
++ '@swc/wasm':
++ optional: true
++ dependencies:
++ '@cspotcode/source-map-support': 0.8.1
++ '@tsconfig/node10': 1.0.9
++ '@tsconfig/node12': 1.0.11
++ '@tsconfig/node14': 1.0.3
++ '@tsconfig/node16': 1.0.3
++ '@types/node': 18.11.18
++ acorn: 8.8.1
++ acorn-walk: 8.2.0
++ arg: 4.1.3
++ create-require: 1.1.1
++ diff: 4.0.2
++ make-error: 1.3.6
++ typescript: 4.9.4
++ v8-compile-cache-lib: 3.0.1
++ yn: 3.1.1
++ dev: false
++
++ /typescript/4.9.4:
++ resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==}
++ engines: {node: '>=4.2.0'}
++ hasBin: true
++ dev: false
++
++ /v8-compile-cache-lib/3.0.1:
++ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
++ dev: false
++
++ /wav/1.0.2:
++ resolution: {integrity: sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==}
++ dependencies:
++ buffer-alloc: 1.2.0
++ buffer-from: 1.1.2
++ debug: 2.6.9
++ readable-stream: 1.1.14
++ stream-parser: 0.3.1
++ transitivePeerDependencies:
++ - supports-color
++ dev: false
++
++ /yn/3.1.1:
++ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
++ engines: {node: '>=6'}
++ dev: false
++
++ file:../..:
++ resolution: {directory: ../.., type: directory}
++ name: '@toots/shine.js'
++ version: 1.0.3
++ dev: false
+diff --git a/js/test/node/rounds.coffee b/js/test/node/rounds.coffee
+deleted file mode 100644
+index 7be6690..0000000
+--- a/js/test/node/rounds.coffee
++++ /dev/null
+@@ -1,6 +0,0 @@
+-Shine = require "../../dist/libshine.js"
+-runRoundsTest = require "../lib/rounds.js"
+-
+-console.log ""
+-runRoundsTest Shine, (s) ->
+- console.log s
+diff --git a/js/test/node/rounds.ts b/js/test/node/rounds.ts
+new file mode 100644
+index 0000000..6f3e664
+--- /dev/null
++++ b/js/test/node/rounds.ts
+@@ -0,0 +1,11 @@
++import { Shine } from "@toots/shine.js";
++import runRoundsTest from "../lib/rounds";
++
++const exec = async () => {
++ await Shine.initialized;
++
++ console.log("");
++ runRoundsTest(Shine, s => console.log(s));
++};
++
++exec();
+diff --git a/js/test/node/tsconfig.json b/js/test/node/tsconfig.json
+new file mode 100644
+index 0000000..d1045e4
+--- /dev/null
++++ b/js/test/node/tsconfig.json
+@@ -0,0 +1,8 @@
++{
++ "include": ["**/*.ts"],
++ "compilerOptions": {
++ "allowJs": true,
++ "skipLibCheck": true,
++ "esModuleInterop": true
++ }
++}
+diff --git a/src/bin/main.c b/src/bin/main.c
+index ab16fea..b7b70a4 100644
+--- a/src/bin/main.c
++++ b/src/bin/main.c
+@@ -35,32 +35,25 @@ int _verbose = 0;
+ int stereo = STEREO;
+ int force_mono = 0;
+
+-int verbose()
+-{
+- return _verbose;
+-}
++int verbose() { return _verbose; }
+
+ /* Write out the MP3 file */
+-int write_mp3(long bytes, void *buffer, void *config)
+-{
+- return fwrite(buffer, sizeof(unsigned char), bytes, outfile) / sizeof(unsigned char);
++int write_mp3(long bytes, void *buffer, void *config) {
++ return fwrite(buffer, sizeof(unsigned char), bytes, outfile) /
++ sizeof(unsigned char);
+ }
+
+ /* Output error message and exit */
+-void error(char *s)
+-{
++void error(char *s) {
+ fprintf(stderr, "Error: %s\n", s);
+ exit(1);
+ }
+
+-static void print_name()
+-{
+- printf("shineenc (Liquidsoap version)\n");
+-}
++static void print_name() { printf("shineenc (Liquidsoap version)\n"); }
+
+-static void print_usage()
+-{
++static void print_usage() {
+ printf("Usage: shineenc [options] <infile> <outfile>\n\n");
++ printf("Use \"-\" for standard input or output.\n\n");
+ printf("Options:\n");
+ printf(" -h this help message\n");
+ printf(" -b <bitrate> set the bitrate [8-320], default 128kbit\n");
+@@ -73,88 +66,88 @@ static void print_usage()
+ }
+
+ /* Use these default settings, can be overridden */
+-static void set_defaults(shine_config_t *config)
+-{
++static void set_defaults(shine_config_t *config) {
+ shine_set_config_mpeg_defaults(&config->mpeg);
+ }
+
+ /* Parse command line arguments */
+-static int parse_command(int argc, char** argv, shine_config_t *config)
+-{
++static int parse_command(int argc, char **argv, shine_config_t *config) {
+ int i = 0;
+
+- if(argc < 3) return 0;
++ if (argc < 3)
++ return 0;
+
+ while (argv[++i][0] == '-' && argv[i][1] != '\000' && argv[i][1] != ' ')
+ switch (argv[i][1]) {
+- case 'b':
+- config->mpeg.bitr = atoi(argv[++i]);
+- break;
+-
+- case 'm':
+- force_mono = 1;
+- break;
+-
+- case 'j':
+- stereo = JOINT_STEREO;
+- break;
+-
+- case 'd':
+- stereo = DUAL_CHANNEL;
+- break;
+-
+- case 'c':
+- config->mpeg.copyright = 1;
+- break;
+-
+- case 'q':
+- quiet = 1;
+- _verbose = 0;
+- break;
+-
+- case 'v':
+- _verbose = 1;
+- quiet = 0;
+- break;
+-
+- case 'h':
+- default :
+- return 0;
++ case 'b':
++ config->mpeg.bitr = atoi(argv[++i]);
++ break;
++
++ case 'm':
++ force_mono = 1;
++ break;
++
++ case 'j':
++ stereo = JOINT_STEREO;
++ break;
++
++ case 'd':
++ stereo = DUAL_CHANNEL;
++ break;
++
++ case 'c':
++ config->mpeg.copyright = 1;
++ break;
++
++ case 'q':
++ quiet = 1;
++ _verbose = 0;
++ break;
++
++ case 'v':
++ _verbose = 1;
++ quiet = 0;
++ break;
++
++ case 'h':
++ default:
++ return 0;
+ }
+
+- if (argc - i != 2) return 0;
++ if (argc - i != 2)
++ return 0;
+ infname = argv[i++];
+ outfname = argv[i];
+ return 1;
+ }
+
+ /* Print some info about what we're going to encode */
+-static void check_config(shine_config_t *config)
+-{
+- static char *version_names[4] = { "2.5", "reserved", "II", "I" };
+- static char *mode_names[4] = { "stereo", "joint-stereo", "dual-channel", "mono" };
+- static char *demp_names[4] = { "none", "50/15us", "", "CITT" };
++static void check_config(shine_config_t *config) {
++ static char *version_names[4] = {"2.5", "reserved", "II", "I"};
++ static char *mode_names[4] = {"stereo", "joint-stereo", "dual-channel",
++ "mono"};
++ static char *demp_names[4] = {"none", "50/15us", "", "CITT"};
+
+ printf("MPEG-%s layer III, %s Psychoacoustic Model: Shine\n",
+- version_names[shine_check_config(config->wave.samplerate, config->mpeg.bitr)],
+- mode_names[config->mpeg.mode]);
++ version_names[shine_check_config(config->wave.samplerate,
++ config->mpeg.bitr)],
++ mode_names[config->mpeg.mode]);
+ printf("Bitrate: %d kbps ", config->mpeg.bitr);
+- printf("De-emphasis: %s %s %s\n",
+- demp_names[config->mpeg.emph],
+- ((config->mpeg.original) ? "Original" : ""),
+- ((config->mpeg.copyright) ? "(C)" : ""));
++ printf("De-emphasis: %s %s %s\n", demp_names[config->mpeg.emph],
++ ((config->mpeg.original) ? "Original" : ""),
++ ((config->mpeg.copyright) ? "(C)" : ""));
+ printf("Encoding \"%s\" to \"%s\"\n", infname, outfname);
+ }
+
+-int main(int argc, char **argv)
+-{
+- wave_t wave;
+- time_t start_time, end_time;
+- int16_t buffer[2*SHINE_MAX_SAMPLES];
++int main(int argc, char **argv) {
++ wave_t wave;
++ time_t start_time, end_time;
++ int16_t buffer[2 * SHINE_MAX_SAMPLES];
+ shine_config_t config;
+- shine_t s;
+- int written;
+- unsigned char *data;
++ shine_t s;
++ int written;
++ unsigned char *data;
++ int samples_per_pass;
+
+ time(&start_time);
+
+@@ -168,7 +161,8 @@ int main(int argc, char **argv)
+
+ quiet = quiet || !strcmp(outfname, "-");
+
+- if (!quiet) print_name();
++ if (!quiet)
++ print_name();
+
+ /* Open the input file and fill the config shine_wave_t header */
+ if (!wave_open(infname, &wave, &config, quiet))
+@@ -205,17 +199,17 @@ int main(int argc, char **argv)
+ // assert(s != NULL);
+
+ /* Print some info about the file about to be created (optional) */
+- if (!quiet) check_config(&config);
++ if (!quiet)
++ check_config(&config);
+
+- int samples_per_pass = shine_samples_per_pass(s);
++ samples_per_pass = shine_samples_per_pass(s);
+
+ /* All the magic happens here */
+ while (wave_get(buffer, &wave, samples_per_pass)) {
+ data = shine_encode_buffer_interleaved(s, buffer, &written);
+- if ( write_mp3(written, data, &config) != written )
+- {
+- fprintf(stderr, "shineenc: write error\n");
+- return 1;
++ if (write_mp3(written, data, &config) != written) {
++ fprintf(stderr, "shineenc: write error\n");
++ return 1;
+ }
+ }
+
+@@ -235,7 +229,9 @@ int main(int argc, char **argv)
+ time(&end_time);
+ end_time -= start_time;
+ if (!quiet)
+- printf("Finished in %02ld:%02ld:%02ld (%01.1fx realtime)\n", end_time / 3600, (end_time / 60) % 60, end_time % 60, (float)wave.duration / (float)end_time);
++ printf("Finished in %02ld:%02ld:%02ld (%01.1fx realtime)\n",
++ end_time / 3600, (end_time / 60) % 60, end_time % 60,
++ (float)wave.duration / (float)end_time);
+
+ return 0;
+ }
+diff --git a/src/bin/main.h b/src/bin/main.h
+index 52fbbb2..7ab9691 100644
+--- a/src/bin/main.h
++++ b/src/bin/main.h
+@@ -2,6 +2,6 @@
+ #define MAIN_H
+
+ void error(char *s);
+-int verbose();
++int verbose();
+
+ #endif
+diff --git a/src/bin/wave.c b/src/bin/wave.c
+index 5d19004..3c7ab81 100644
+--- a/src/bin/wave.c
++++ b/src/bin/wave.c
+@@ -9,17 +9,32 @@
+ #include "layer3.h"
+
+ /* Local header */
+-#include <stdint.h>
+-#include <string.h>
+ #include "main.h"
+ #include "wave.h"
++#include <stdint.h>
++#include <string.h>
+
+ /* RISC OS specifics */
+-#define WAVE 0xfb1 /* Wave filetype */
+-#define DATA 0xffd /* Data filetype */
++#define WAVE 0xfb1 /* Wave filetype */
++#define DATA 0xffd /* Data filetype */
+
+ #define MODE_MONO 3
+
++#ifdef SHINE_BIG_ENDIAN
++#if defined(SHINE_HAVE_BSWAP_H)
++#include <byteswap.h>
++#elif defined(__GNUC__) && \
++ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
++#define bswap_16(x) __builtin_bswap16(x)
++#define bswap_32(x) __builtin_bswap32(x)
++#else
++#define bswap_16(x) ((((x) >> 8) & 0xff) | (((x)&0xff) << 8))
++#define bswap_32(x) \
++ ((((x)&0xFF) << 24) | (((x) >> 24) & 0xFF) | (((x)&0x0000FF00) << 8) | \
++ (((x)&0x00FF0000) >> 8))
++#endif
++#endif
++
+ typedef struct {
+ char id[4];
+ uint32_t length;
+@@ -32,14 +47,28 @@ typedef struct {
+
+ typedef struct {
+ riff_chunk_header_t header;
+- uint16_t format; /* MS PCM = 1 */
+- uint16_t channels; /* channels, mono = 1, stereo = 2 */
+- uint32_t sample_rate; /* samples per second = 44100 */
+- uint32_t byte_rate; /* bytes per second = samp_rate * byte_samp = 176400 */
+- uint16_t frame_size; /* block align (bytes per sample) = channels * bits_per_sample / 8 = 4 */
+- uint16_t depth; /* bits per sample = 16 for MS PCM (format specific) */
++ uint16_t format; /* MS PCM = 1 */
++ uint16_t channels; /* channels, mono = 1, stereo = 2 */
++ uint32_t sample_rate; /* samples per second = 44100 */
++ uint32_t byte_rate; /* bytes per second = samp_rate * byte_samp = 176400 */
++ uint16_t frame_size; /* block align (bytes per sample) = channels *
++ bits_per_sample / 8 = 4 */
++ uint16_t depth; /* bits per sample = 16 for MS PCM (format specific) */
+ } fmt_chunk_t;
+
++#ifdef SHINE_BIG_ENDIAN
++#define native_fmt_chunk(fmt) \
++ { \
++ fmt.header.length = bswap_32(fmt.header.length); \
++ fmt.format = bswap_16(fmt.format); \
++ fmt.channels = bswap_16(fmt.channels); \
++ fmt.sample_rate = bswap_32(fmt.sample_rate); \
++ fmt.byte_rate = bswap_32(fmt.byte_rate); \
++ fmt.frame_size = bswap_16(fmt.frame_size); \
++ fmt.depth = bswap_16(fmt.depth); \
++ }
++#endif
++
+ void wave_seek(FILE *file, int has_seek, uint32_t bytes) {
+ uint32_t i;
+ if (has_seek == 1)
+@@ -50,15 +79,15 @@ void wave_seek(FILE *file, int has_seek, uint32_t bytes) {
+ }
+ }
+
+-unsigned char wave_get_chunk_header(FILE *file, int has_seek, const char id[4], riff_chunk_header_t *header)
+-{
++unsigned char wave_get_chunk_header(FILE *file, int has_seek, const char id[4],
++ riff_chunk_header_t *header) {
+ unsigned char found = 0;
+ uint32_t chunk_length;
+
+ if (verbose())
+ fprintf(stderr, "Looking for chunk '%s'\n", id);
+
+- while(!found) {
++ while (!found) {
+ if (fread(header, sizeof(riff_chunk_header_t), 1, file) != 1) {
+ if (feof(file))
+ return 0;
+@@ -69,24 +98,20 @@ unsigned char wave_get_chunk_header(FILE *file, int has_seek, const char id[4],
+ /* chunks must be word-aligned, chunk data doesn't need to */
+ chunk_length = header->length + header->length % 2;
+ if (verbose()) {
+- fprintf(stderr, "Found chunk '%.4s', length: %u\n", header->id, header->length);
++ fprintf(stderr, "Found chunk '%.4s', length: %u\n", header->id,
++ header->length);
+ }
+
+ if (strncmp(header->id, id, 4) == 0)
+ return 1;
+-
++
+ wave_seek(file, has_seek, chunk_length);
+ }
+
+ return 1;
+ }
+
+-
+-void wave_close(wave_t *wave)
+-{
+- fclose(wave->file);
+-}
+-
++void wave_close(wave_t *wave) { fclose(wave->file); }
+
+ /*
+ * wave_open:
+@@ -94,16 +119,17 @@ void wave_close(wave_t *wave)
+ * Opens and verifies the header of the Input Wave file. The file pointer is
+ * left pointing to the start of the samples.
+ */
+-unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config, int quiet)
+-{
+- static char *channel_mappings[] = { NULL, "mono", "stereo" };
++unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config,
++ int quiet) {
++ static char *channel_mappings[] = {NULL, "mono", "stereo"};
+ wave_chunk_t wave_chunk;
+ fmt_chunk_t fmt_chunk;
+ riff_chunk_header_t data_chunk;
+ uint32_t fmt_data, fmt_length;
+
+ if (!strcmp(fname, "-")) {
+- /* TODO: support raw PCM stream with commandline parameters specifying format */
++ /* TODO: support raw PCM stream with commandline parameters specifying
++ * format */
+ wave->file = stdin;
+ wave->has_seek = 0;
+ } else {
+@@ -124,14 +150,19 @@ unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config,
+ error("Not a WAVE audio file");
+
+ /* Check the fmt chunk */
+- if (!wave_get_chunk_header(wave->file, wave->has_seek, "fmt ", (riff_chunk_header_t *)&fmt_chunk))
++ if (!wave_get_chunk_header(wave->file, wave->has_seek, "fmt ",
++ (riff_chunk_header_t *)&fmt_chunk))
+ error("WAVE fmt chunk not found");
+
+ fmt_data = sizeof(fmt_chunk_t) - sizeof(riff_chunk_header_t);
+
+- if(fread(&fmt_chunk.format, fmt_data, 1, wave->file) != 1)
++ if (fread(&fmt_chunk.format, fmt_data, 1, wave->file) != 1)
+ error("Read error");
+
++#ifdef SHINE_BIG_ENDIAN
++ native_fmt_chunk(fmt_chunk);
++#endif
++
+ if (verbose())
+ fprintf(stderr, "WAVE format: %u\n", fmt_chunk.format);
+
+@@ -153,34 +184,31 @@ unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config,
+ if (!wave_get_chunk_header(wave->file, wave->has_seek, "data", &data_chunk))
+ error("WAVE data chunk not found");
+
+- config->wave.channels = fmt_chunk.channels;
++ config->wave.channels = fmt_chunk.channels;
+ config->wave.samplerate = fmt_chunk.sample_rate;
+
+ wave->channels = fmt_chunk.channels;
+- wave->length = data_chunk.length;
++ wave->length = data_chunk.length;
+ wave->duration = data_chunk.length / fmt_chunk.byte_rate;
+
+ if (!quiet)
+ printf("%s, %s %ldHz %ldbit, duration: %02ld:%02ld:%02ld\n",
+- "WAVE PCM Data", channel_mappings[fmt_chunk.channels], (long)fmt_chunk.sample_rate, (long)fmt_chunk.depth,
+- (long)wave->duration / 3600, (long)(wave->duration / 60) % 60, (long)wave->duration % 60);
++ "WAVE PCM Data", channel_mappings[fmt_chunk.channels],
++ (long)fmt_chunk.sample_rate, (long)fmt_chunk.depth,
++ (long)wave->duration / 3600, (long)(wave->duration / 60) % 60,
++ (long)wave->duration % 60);
+ return 1;
+ }
+
+ #ifdef SHINE_BIG_ENDIAN
+-#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
+-#define bswap_16(x) __builtin_bswap16(x)
+-#else
+-#define bswap_16(x) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
+-#endif
+-
+-void swap_buffer(int16_t *sample_buffer, int length)
+-{
++void swap_buffer(int16_t *sample_buffer, int length) {
+ int16_t *end = sample_buffer + length;
+
+ if (length >= 2 * sizeof(long) / sizeof(int16_t)) {
+- const unsigned long mask = (~0UL / 0xffff) * 0xff; /* 0x00ff00ff or 0x00ff00ff00ff00ff */
+- unsigned long *long_ptr = (unsigned long *)((unsigned long)sample_buffer & -sizeof(long));
++ const unsigned long mask =
++ (~0UL / 0xffff) * 0xff; /* 0x00ff00ff or 0x00ff00ff00ff00ff */
++ unsigned long *long_ptr =
++ (unsigned long *)((unsigned long)sample_buffer & -sizeof(long));
+
+ /* make sample_buffer aligned on word boundary */
+ if ((int16_t *)long_ptr != sample_buffer) {
+@@ -212,18 +240,19 @@ void swap_buffer(int16_t *sample_buffer, int length)
+ */
+
+ /* TODO: respect data chunk length */
+-int read_samples(int16_t *sample_buffer, int frame_size, FILE *file)
+-{
+- int samples_read=0;
++int read_samples(int16_t *sample_buffer, int frame_size, FILE *file) {
++ int samples_read = 0;
+
+- samples_read = fread(sample_buffer,sizeof(int16_t),frame_size, file);
++ samples_read = fread(sample_buffer, sizeof(int16_t), frame_size, file);
+
+ #ifdef SHINE_BIG_ENDIAN
+ swap_buffer(sample_buffer, samples_read);
+ #endif
+
+- if(samples_read<frame_size && samples_read>0) { /* Pad sample with zero's */
+- memset(sample_buffer + samples_read, 0, (frame_size - samples_read) * sizeof(int16_t));
++ if (samples_read < frame_size &&
++ samples_read > 0) { /* Pad sample with zero's */
++ memset(sample_buffer + samples_read, 0,
++ (frame_size - samples_read) * sizeof(int16_t));
+ samples_read = frame_size;
+ }
+
+@@ -236,8 +265,6 @@ int read_samples(int16_t *sample_buffer, int frame_size, FILE *file)
+ * Expects an interleaved 16bit pcm stream from read_samples, which it
+ * reads into the given buffer.
+ */
+-int wave_get(int16_t *buffer, wave_t *wave, int samp_per_pass)
+-{
+- return read_samples(buffer,samp_per_pass*wave->channels, wave->file);
++int wave_get(int16_t *buffer, wave_t *wave, int samp_per_pass) {
++ return read_samples(buffer, samp_per_pass * wave->channels, wave->file);
+ }
+-
+diff --git a/src/bin/wave.h b/src/bin/wave.h
+index 5a290a0..b77f0b5 100644
+--- a/src/bin/wave.h
++++ b/src/bin/wave.h
+@@ -4,15 +4,16 @@
+ #include <stdio.h>
+
+ typedef struct {
+- FILE *file;
+- int has_seek;
+- int channels;
+- long length;
+- long duration;
++ FILE *file;
++ int has_seek;
++ int channels;
++ long length;
++ long duration;
+ } wave_t;
+
+-unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config, int quiet);
+-int wave_get(int16_t *buffer, wave_t *wave, int samp_per_frame);
++unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config,
++ int quiet);
++int wave_get(int16_t *buffer, wave_t *wave, int samp_per_frame);
+ void wave_close(wave_t *wave);
+
+ #endif
+diff --git a/src/lib/bitstream.c b/src/lib/bitstream.c
+index 29afcb1..9408f2c 100644
+--- a/src/lib/bitstream.c
++++ b/src/lib/bitstream.c
+@@ -7,17 +7,16 @@
+ * Removed unused functions. Feb 2001 P.Everett
+ */
+
+-#include "types.h"
+ #include "bitstream.h"
++#include "types.h"
+
+-#if !defined(__APPLE__)
++#if !defined(__APPLE__) && !defined(__FreeBSD__)
+ #include <malloc.h>
+ #endif
+
+ /* open the device to write the bit stream into it */
+-void shine_open_bit_stream(bitstream_t *bs, int size)
+-{
+- bs->data = (unsigned char *)malloc(size*sizeof(unsigned char));
++void shine_open_bit_stream(bitstream_t *bs, int size) {
++ bs->data = (unsigned char *)malloc(size * sizeof(unsigned char));
+ bs->data_size = size;
+ bs->data_position = 0;
+ bs->cache = 0;
+@@ -25,8 +24,7 @@ void shine_open_bit_stream(bitstream_t *bs, int size)
+ }
+
+ /*close the device containing the bit stream */
+-void shine_close_bit_stream(bitstream_t *bs)
+-{
++void shine_close_bit_stream(bitstream_t *bs) {
+ if (bs->data)
+ free(bs->data);
+ }
+@@ -39,42 +37,40 @@ void shine_close_bit_stream(bitstream_t *bs)
+ * val = value to write into the buffer
+ * N = number of bits of val
+ */
+-void shine_putbits(bitstream_t *bs, unsigned int val, unsigned int N)
+-{
++void shine_putbits(bitstream_t *bs, unsigned int val, unsigned int N) {
+ #ifdef DEBUG
+- if (N > 32)
+- printf("Cannot write more than 32 bits at a time.\n");
+- if (N < 32 && (val >> N) != 0)
+- printf("Upper bits (higher than %d) are not all zeros.\n", N);
++ if (N > 32)
++ printf("Cannot write more than 32 bits at a time.\n");
++ if (N < 32 && (val >> N) != 0)
++ printf("Upper bits (higher than %d) are not all zeros.\n", N);
+ #endif
+
+- if (bs->cache_bits > N) {
+- bs->cache_bits -= N;
+- bs->cache |= val << bs->cache_bits;
+- } else {
+- if (bs->data_position + sizeof(unsigned int) >= bs->data_size) {
+- bs->data = (unsigned char *)realloc(bs->data, bs->data_size + (bs->data_size / 2));
+- bs->data_size += (bs->data_size / 2);
+- }
++ if (bs->cache_bits > N) {
++ bs->cache_bits -= N;
++ bs->cache |= val << bs->cache_bits;
++ } else {
++ if (bs->data_position + sizeof(unsigned int) >= bs->data_size) {
++ bs->data = (unsigned char *)realloc(bs->data,
++ bs->data_size + (bs->data_size / 2));
++ bs->data_size += (bs->data_size / 2);
++ }
+
+- N -= bs->cache_bits;
+- bs->cache |= val >> N;
++ N -= bs->cache_bits;
++ bs->cache |= val >> N;
+ #ifdef SHINE_BIG_ENDIAN
+- *(unsigned int*)(bs->data + bs->data_position) = bs->cache;
++ *(unsigned int *)(bs->data + bs->data_position) = bs->cache;
+ #else
+- *(unsigned int*)(bs->data + bs->data_position) = SWAB32(bs->cache);
++ *(unsigned int *)(bs->data + bs->data_position) = SWAB32(bs->cache);
+ #endif
+- bs->data_position += sizeof(unsigned int);
+- bs->cache_bits = 32 - N;
+- if (N != 0)
+- bs->cache = val << bs->cache_bits;
+- else
+- bs->cache = 0;
+- }
++ bs->data_position += sizeof(unsigned int);
++ bs->cache_bits = 32 - N;
++ if (N != 0)
++ bs->cache = val << bs->cache_bits;
++ else
++ bs->cache = 0;
++ }
+ }
+
+-int shine_get_bits_count(bitstream_t *bs)
+-{
+- return bs->data_position * 8 + 32 - bs->cache_bits;
++int shine_get_bits_count(bitstream_t *bs) {
++ return bs->data_position * 8 + 32 - bs->cache_bits;
+ }
+-
+diff --git a/src/lib/bitstream.h b/src/lib/bitstream.h
+index d910ef9..4f7efb6 100644
+--- a/src/lib/bitstream.h
++++ b/src/lib/bitstream.h
+@@ -1,28 +1,29 @@
+ #ifndef BITSTREAM_H
+ #define BITSTREAM_H
+
+-typedef struct bit_stream_struc {
+- unsigned char *data; /* Processed data */
+- int data_size; /* Total data size */
+- int data_position; /* Data position */
+- unsigned int cache; /* bit stream cache */
+- int cache_bits; /* free bits in cache */
++typedef struct bit_stream_struc {
++ unsigned char *data; /* Processed data */
++ int data_size; /* Total data size */
++ int data_position; /* Data position */
++ unsigned int cache; /* bit stream cache */
++ int cache_bits; /* free bits in cache */
+ } bitstream_t;
+
+ /* "bit_stream.h" Definitions */
+
+-#define MINIMUM 4 /* Minimum size of the buffer in bytes */
+-#define MAX_LENGTH 32 /* Maximum length of word written or
+- read from bit stream */
++#define MINIMUM 4 /* Minimum size of the buffer in bytes */
++#define MAX_LENGTH \
++ 32 /* Maximum length of word written or \
++ read from bit stream */
+
+-#define BUFFER_SIZE 4096
++#define BUFFER_SIZE 4096
+
+-#define MIN(A, B) ((A) < (B) ? (A) : (B))
+-#define MAX(A, B) ((A) > (B) ? (A) : (B))
++#define MIN(A, B) ((A) < (B) ? (A) : (B))
++#define MAX(A, B) ((A) > (B) ? (A) : (B))
+
+-void shine_open_bit_stream(bitstream_t *bs,const int size);
++void shine_open_bit_stream(bitstream_t *bs, const int size);
+ void shine_close_bit_stream(bitstream_t *bs);
+-void shine_putbits(bitstream_t *bs,unsigned int val, unsigned int N);
+-int shine_get_bits_count(bitstream_t *bs);
++void shine_putbits(bitstream_t *bs, unsigned int val, unsigned int N);
++int shine_get_bits_count(bitstream_t *bs);
+
+ #endif
+diff --git a/src/lib/huffman.c b/src/lib/huffman.c
+index d4bd6aa..854ae41 100644
+--- a/src/lib/huffman.c
++++ b/src/lib/huffman.c
+@@ -1,120 +1,248 @@
+ /* huffman.c */
+
+-#include "types.h"
+ #include "huffman.h"
+ #include "bitstream.h"
+ #include "l3bitstream.h"
++#include "types.h"
+
+-const HUFFBITS dmask = 1 << (((sizeof(HUFFBITS))<<3)-1);
+-const unsigned int hs = sizeof(HUFFBITS)<<3;
++const HUFFBITS dmask = 1 << (((sizeof(HUFFBITS)) << 3) - 1);
++const unsigned int hs = sizeof(HUFFBITS) << 3;
+
+-static const HUFFBITS t1HB[] = {1, 1, 1, 0};
+-static const HUFFBITS t2HB[] = {1, 2, 1, 3, 1, 1, 3, 2, 0};
+-static const HUFFBITS t3HB[] = {3, 2, 1, 1, 1, 1, 3, 2, 0};
+-static const HUFFBITS t5HB[] = {1, 2, 6, 5, 3, 1, 4, 4, 7, 5, 7, 1, 6, 1, 1, 0};
+-static const HUFFBITS t6HB[] = {7, 3, 5, 1, 6, 2, 3, 2, 5, 4, 4, 1, 3, 3, 2, 0};
+-static const HUFFBITS t7HB[] = {1, 2, 10, 19, 16, 10, 3, 3, 7, 10, 5, 3, 11, 4, 13, 17, 8, 4, 12, 11, 18, 15, 11, 2, 7, 6, 9, 14, 3, 1, 6, 4, 5, 3, 2, 0};
+-static const HUFFBITS t8HB[] = {3, 4, 6, 18, 12, 5, 5, 1, 2, 16, 9, 3, 7, 3, 5, 14, 7, 3, 19, 17, 15, 13, 10, 4, 13, 5, 8, 11, 5, 1, 12, 4, 4, 1, 1, 0};
+-static const HUFFBITS t9HB[] = {7, 5, 9, 14, 15, 7, 6, 4, 5, 5, 6, 7, 7, 6, 8, 8, 8, 5, 15, 6, 9, 10, 5, 1, 11, 7, 9, 6, 4, 1, 14, 4, 6, 2, 6, 0};
+-static const HUFFBITS t10HB[] = {1, 2, 10, 23, 35, 30, 12, 17, 3, 3, 8, 12, 18, 21, 12, 7, 11, 9, 15, 21, 32, 40, 19, 6, 14, 13, 22, 34, 46, 23, 18, 7, 20, 19, 33, 47, 27, 22, 9, 3, 31, 22, 41, 26, 21, 20, 5, 3, 14, 13, 10, 11, 16, 6, 5, 1, 9, 8, 7, 8, 4 , 4, 2, 0};
+-static const HUFFBITS t11HB[] = {3, 4, 10, 24, 34, 33, 21, 15, 5, 3, 4, 10, 32, 17, 11, 10, 11, 7, 13, 18, 30, 31, 20, 5, 25, 11, 19, 59, 27, 18, 12, 5, 35, 33, 31, 58, 30, 16, 7, 5, 28, 26, 32, 19, 17, 15, 8, 14, 14, 12, 9, 13, 14, 9, 4, 1, 11, 4, 6, 6, 6, 3, 2, 0};
+-static const HUFFBITS t12HB[] = {9, 6, 16, 33, 41, 39, 38, 26, 7, 5, 6, 9, 23, 16, 26, 11, 17, 7, 11, 14, 21, 30, 10, 7, 17, 10, 15, 12, 18, 28, 14, 5, 32, 13, 22, 19, 18, 16, 9, 5, 40, 17, 31, 29, 17, 13, 4, 2, 27, 12, 11, 15, 10, 7, 4, 1, 27, 12, 8, 12 , 6, 3, 1, 0};
+-static const HUFFBITS t13HB[] = {1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19, 3, 4, 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14, 15, 13, 23, 36, 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16, 22,
+- 20, 37, 61, 56, 79, 73, 64, 43, 76, 56, 37, 26, 31, 25, 14, 35, 16, 60, 57, 97, 75, 114, 91, 54, 73, 55, 41, 48, 53, 23, 24, 58, 27, 50, 96, 76, 70, 93, 84, 77, 58, 79, 29, 74, 49, 41, 17, 47,
+- 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50, 59, 38, 36, 15, 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44, 43, 42, 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16, 53,
+- 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11, 35, 33, 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22, 53, 25, 23, 38, 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7, 34, 32,
+- 28, 39, 49, 75, 30, 52, 48, 40, 52, 28, 18, 17, 9, 5, 45, 21, 34, 64, 56, 50, 49, 45, 31, 19, 12, 15, 10, 7, 6, 3, 48, 23, 20, 39, 36, 35, 53, 21, 16, 23, 13, 10, 6, 1, 4, 2, 16, 15, 17, 27, 25,
+- 20, 29, 11, 17, 12, 16, 8, 1, 1, 0, 1};
+-static const HUFFBITS t15HB[] = {7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63, 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36, 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56,
+- 33, 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29, 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27, 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38,
+- 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30, 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25, 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20,
+- 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15, 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9, 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11,
+- 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7, 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3, 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1, 71,
+- 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0};
+-static const HUFFBITS t16HB[] = {1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195, 376, 17, 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119, 201, 107, 207, 9, 15, 13, 23, 38, 67, 58, 103, 90, 161, 72, 127, 117,
+- 110, 209, 206, 16, 45, 21, 39, 69, 64, 114, 99, 87, 158, 140, 252, 212, 199, 387, 365, 26, 75, 36, 68, 65, 115, 101, 179, 164, 155, 264, 246, 226, 395, 382, 362, 9, 66, 30, 59, 56, 102,
+- 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16, 111, 54, 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10, 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372,
+- 380, 889, 884, 8, 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383, 727, 713, 708, 7, 154, 76, 73, 141, 131, 256, 245, 426, 406, 394, 384, 735, 359, 710, 352, 11, 139, 129, 67, 125,
+- 247, 233, 229, 219, 393, 743, 737, 720, 885, 882, 439, 4, 243, 120, 118, 115, 227, 223, 396, 746, 742, 736, 721, 712, 706, 223, 436, 6, 202, 224, 222, 218, 216, 389, 386, 381, 364, 888,
+- 443, 707, 440, 437, 1728, 4, 747, 211, 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2, 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870, 434,
+- 0, 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7, 5, 3, 1, 3};
+-static const HUFFBITS t24HB[] = {15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032, 88, 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297, 279, 42, 47, 22, 41, 74, 68, 128, 120, 221,
+- 207, 194, 182, 340, 315, 295, 541, 18, 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325, 311, 293, 271, 16, 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352, 323, 306, 285,
+- 540, 14, 263, 66, 129, 126, 119, 114, 214, 202, 192, 180, 341, 317, 301, 281, 262, 12, 249, 123, 121, 117, 113, 215, 206, 195, 185, 347, 330, 308, 291, 272, 520, 10, 435, 115, 111,
+- 109, 211, 203, 196, 187, 353, 332, 313, 298, 283, 531, 381, 17, 427, 212, 208, 205, 201, 193, 186, 177, 169, 320, 303, 286, 268, 514, 377, 16, 335, 199, 197, 191, 189, 181, 174, 333,
+- 321, 305, 289, 275, 521, 379, 371, 11, 668, 184, 183, 179, 175, 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10, 652, 346, 171, 168, 164, 318, 309, 299, 287, 276, 263, 513, 375,
+- 368, 362, 6, 648, 322, 316, 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4, 620, 300, 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2, 1033, 280, 278,
+- 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0, 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1, 3};
+-static const HUFFBITS t32HB[] = {1, 5, 4, 5, 6, 5, 4, 4, 7, 3, 6, 0, 7, 2, 3, 1};
+-static const HUFFBITS t33HB[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
++static const HUFFBITS t1HB[] = {1, 1, 1, 0};
++static const HUFFBITS t2HB[] = {1, 2, 1, 3, 1, 1, 3, 2, 0};
++static const HUFFBITS t3HB[] = {3, 2, 1, 1, 1, 1, 3, 2, 0};
++static const HUFFBITS t5HB[] = {1, 2, 6, 5, 3, 1, 4, 4, 7, 5, 7, 1, 6, 1, 1, 0};
++static const HUFFBITS t6HB[] = {7, 3, 5, 1, 6, 2, 3, 2, 5, 4, 4, 1, 3, 3, 2, 0};
++static const HUFFBITS t7HB[] = {1, 2, 10, 19, 16, 10, 3, 3, 7, 10, 5, 3,
++ 11, 4, 13, 17, 8, 4, 12, 11, 18, 15, 11, 2,
++ 7, 6, 9, 14, 3, 1, 6, 4, 5, 3, 2, 0};
++static const HUFFBITS t8HB[] = {3, 4, 6, 18, 12, 5, 5, 1, 2, 16, 9, 3,
++ 7, 3, 5, 14, 7, 3, 19, 17, 15, 13, 10, 4,
++ 13, 5, 8, 11, 5, 1, 12, 4, 4, 1, 1, 0};
++static const HUFFBITS t9HB[] = {7, 5, 9, 14, 15, 7, 6, 4, 5, 5, 6, 7,
++ 7, 6, 8, 8, 8, 5, 15, 6, 9, 10, 5, 1,
++ 11, 7, 9, 6, 4, 1, 14, 4, 6, 2, 6, 0};
++static const HUFFBITS t10HB[] = {
++ 1, 2, 10, 23, 35, 30, 12, 17, 3, 3, 8, 12, 18, 21, 12, 7,
++ 11, 9, 15, 21, 32, 40, 19, 6, 14, 13, 22, 34, 46, 23, 18, 7,
++ 20, 19, 33, 47, 27, 22, 9, 3, 31, 22, 41, 26, 21, 20, 5, 3,
++ 14, 13, 10, 11, 16, 6, 5, 1, 9, 8, 7, 8, 4, 4, 2, 0};
++static const HUFFBITS t11HB[] = {
++ 3, 4, 10, 24, 34, 33, 21, 15, 5, 3, 4, 10, 32, 17, 11, 10,
++ 11, 7, 13, 18, 30, 31, 20, 5, 25, 11, 19, 59, 27, 18, 12, 5,
++ 35, 33, 31, 58, 30, 16, 7, 5, 28, 26, 32, 19, 17, 15, 8, 14,
++ 14, 12, 9, 13, 14, 9, 4, 1, 11, 4, 6, 6, 6, 3, 2, 0};
++static const HUFFBITS t12HB[] = {
++ 9, 6, 16, 33, 41, 39, 38, 26, 7, 5, 6, 9, 23, 16, 26, 11,
++ 17, 7, 11, 14, 21, 30, 10, 7, 17, 10, 15, 12, 18, 28, 14, 5,
++ 32, 13, 22, 19, 18, 16, 9, 5, 40, 17, 31, 29, 17, 13, 4, 2,
++ 27, 12, 11, 15, 10, 7, 4, 1, 27, 12, 8, 12, 6, 3, 1, 0};
++static const HUFFBITS t13HB[] = {
++ 1, 5, 14, 21, 34, 51, 46, 71, 42, 52, 68, 52, 67, 44, 43, 19, 3, 4,
++ 12, 19, 31, 26, 44, 33, 31, 24, 32, 24, 31, 35, 22, 14, 15, 13, 23, 36,
++ 59, 49, 77, 65, 29, 40, 30, 40, 27, 33, 42, 16, 22, 20, 37, 61, 56, 79,
++ 73, 64, 43, 76, 56, 37, 26, 31, 25, 14, 35, 16, 60, 57, 97, 75, 114, 91,
++ 54, 73, 55, 41, 48, 53, 23, 24, 58, 27, 50, 96, 76, 70, 93, 84, 77, 58,
++ 79, 29, 74, 49, 41, 17, 47, 45, 78, 74, 115, 94, 90, 79, 69, 83, 71, 50,
++ 59, 38, 36, 15, 72, 34, 56, 95, 92, 85, 91, 90, 86, 73, 77, 65, 51, 44,
++ 43, 42, 43, 20, 30, 44, 55, 78, 72, 87, 78, 61, 46, 54, 37, 30, 20, 16,
++ 53, 25, 41, 37, 44, 59, 54, 81, 66, 76, 57, 54, 37, 18, 39, 11, 35, 33,
++ 31, 57, 42, 82, 72, 80, 47, 58, 55, 21, 22, 26, 38, 22, 53, 25, 23, 38,
++ 70, 60, 51, 36, 55, 26, 34, 23, 27, 14, 9, 7, 34, 32, 28, 39, 49, 75,
++ 30, 52, 48, 40, 52, 28, 18, 17, 9, 5, 45, 21, 34, 64, 56, 50, 49, 45,
++ 31, 19, 12, 15, 10, 7, 6, 3, 48, 23, 20, 39, 36, 35, 53, 21, 16, 23,
++ 13, 10, 6, 1, 4, 2, 16, 15, 17, 27, 25, 20, 29, 11, 17, 12, 16, 8,
++ 1, 1, 0, 1};
++static const HUFFBITS t15HB[] = {
++ 7, 12, 18, 53, 47, 76, 124, 108, 89, 123, 108, 119, 107, 81, 122, 63,
++ 13, 5, 16, 27, 46, 36, 61, 51, 42, 70, 52, 83, 65, 41, 59, 36,
++ 19, 17, 15, 24, 41, 34, 59, 48, 40, 64, 50, 78, 62, 80, 56, 33,
++ 29, 28, 25, 43, 39, 63, 55, 93, 76, 59, 93, 72, 54, 75, 50, 29,
++ 52, 22, 42, 40, 67, 57, 95, 79, 72, 57, 89, 69, 49, 66, 46, 27,
++ 77, 37, 35, 66, 58, 52, 91, 74, 62, 48, 79, 63, 90, 62, 40, 38,
++ 125, 32, 60, 56, 50, 92, 78, 65, 55, 87, 71, 51, 73, 51, 70, 30,
++ 109, 53, 49, 94, 88, 75, 66, 122, 91, 73, 56, 42, 64, 44, 21, 25,
++ 90, 43, 41, 77, 73, 63, 56, 92, 77, 66, 47, 67, 48, 53, 36, 20,
++ 71, 34, 67, 60, 58, 49, 88, 76, 67, 106, 71, 54, 38, 39, 23, 15,
++ 109, 53, 51, 47, 90, 82, 58, 57, 48, 72, 57, 41, 23, 27, 62, 9,
++ 86, 42, 40, 37, 70, 64, 52, 43, 70, 55, 42, 25, 29, 18, 11, 11,
++ 118, 68, 30, 55, 50, 46, 74, 65, 49, 39, 24, 16, 22, 13, 14, 7,
++ 91, 44, 39, 38, 34, 63, 52, 45, 31, 52, 28, 19, 14, 8, 9, 3,
++ 123, 60, 58, 53, 47, 43, 32, 22, 37, 24, 17, 12, 15, 10, 2, 1,
++ 71, 37, 34, 30, 28, 20, 17, 26, 21, 16, 10, 6, 8, 6, 2, 0};
++static const HUFFBITS t16HB[] = {
++ 1, 5, 14, 44, 74, 63, 110, 93, 172, 149, 138, 242, 225, 195,
++ 376, 17, 3, 4, 12, 20, 35, 62, 53, 47, 83, 75, 68, 119,
++ 201, 107, 207, 9, 15, 13, 23, 38, 67, 58, 103, 90, 161, 72,
++ 127, 117, 110, 209, 206, 16, 45, 21, 39, 69, 64, 114, 99, 87,
++ 158, 140, 252, 212, 199, 387, 365, 26, 75, 36, 68, 65, 115, 101,
++ 179, 164, 155, 264, 246, 226, 395, 382, 362, 9, 66, 30, 59, 56,
++ 102, 185, 173, 265, 142, 253, 232, 400, 388, 378, 445, 16, 111, 54,
++ 52, 100, 184, 178, 160, 133, 257, 244, 228, 217, 385, 366, 715, 10,
++ 98, 48, 91, 88, 165, 157, 148, 261, 248, 407, 397, 372, 380, 889,
++ 884, 8, 85, 84, 81, 159, 156, 143, 260, 249, 427, 401, 392, 383,
++ 727, 713, 708, 7, 154, 76, 73, 141, 131, 256, 245, 426, 406, 394,
++ 384, 735, 359, 710, 352, 11, 139, 129, 67, 125, 247, 233, 229, 219,
++ 393, 743, 737, 720, 885, 882, 439, 4, 243, 120, 118, 115, 227, 223,
++ 396, 746, 742, 736, 721, 712, 706, 223, 436, 6, 202, 224, 222, 218,
++ 216, 389, 386, 381, 364, 888, 443, 707, 440, 437, 1728, 4, 747, 211,
++ 210, 208, 370, 379, 734, 723, 714, 1735, 883, 877, 876, 3459, 865, 2,
++ 377, 369, 102, 187, 726, 722, 358, 711, 709, 866, 1734, 871, 3458, 870,
++ 434, 0, 12, 10, 7, 11, 10, 17, 11, 9, 13, 12, 10, 7,
++ 5, 3, 1, 3};
++static const HUFFBITS t24HB[] = {
++ 15, 13, 46, 80, 146, 262, 248, 434, 426, 669, 653, 649, 621, 517, 1032,
++ 88, 14, 12, 21, 38, 71, 130, 122, 216, 209, 198, 327, 345, 319, 297,
++ 279, 42, 47, 22, 41, 74, 68, 128, 120, 221, 207, 194, 182, 340, 315,
++ 295, 541, 18, 81, 39, 75, 70, 134, 125, 116, 220, 204, 190, 178, 325,
++ 311, 293, 271, 16, 147, 72, 69, 135, 127, 118, 112, 210, 200, 188, 352,
++ 323, 306, 285, 540, 14, 263, 66, 129, 126, 119, 114, 214, 202, 192, 180,
++ 341, 317, 301, 281, 262, 12, 249, 123, 121, 117, 113, 215, 206, 195, 185,
++ 347, 330, 308, 291, 272, 520, 10, 435, 115, 111, 109, 211, 203, 196, 187,
++ 353, 332, 313, 298, 283, 531, 381, 17, 427, 212, 208, 205, 201, 193, 186,
++ 177, 169, 320, 303, 286, 268, 514, 377, 16, 335, 199, 197, 191, 189, 181,
++ 174, 333, 321, 305, 289, 275, 521, 379, 371, 11, 668, 184, 183, 179, 175,
++ 344, 331, 314, 304, 290, 277, 530, 383, 373, 366, 10, 652, 346, 171, 168,
++ 164, 318, 309, 299, 287, 276, 263, 513, 375, 368, 362, 6, 648, 322, 316,
++ 312, 307, 302, 292, 284, 269, 261, 512, 376, 370, 364, 359, 4, 620, 300,
++ 296, 294, 288, 282, 273, 266, 515, 380, 374, 369, 365, 361, 357, 2, 1033,
++ 280, 278, 274, 267, 264, 259, 382, 378, 372, 367, 363, 360, 358, 356, 0,
++ 43, 20, 19, 17, 15, 13, 11, 9, 7, 6, 4, 7, 5, 3, 1,
++ 3};
++static const HUFFBITS t32HB[] = {1, 5, 4, 5, 6, 5, 4, 4,
++ 7, 3, 6, 0, 7, 2, 3, 1};
++static const HUFFBITS t33HB[] = {15, 14, 13, 12, 11, 10, 9, 8,
++ 7, 6, 5, 4, 3, 2, 1, 0};
+
+-static const unsigned char t1l[] = {1, 3, 2, 3};
+-static const unsigned char t2l[] = {1, 3, 6, 3, 3, 5, 5, 5, 6};
+-static const unsigned char t3l[] = {2, 2, 6, 3, 2, 5, 5, 5, 6};
+-static const unsigned char t5l[] = {1, 3, 6, 7, 3, 3, 6, 7, 6, 6, 7, 8, 7, 6, 7, 8};
+-static const unsigned char t6l[] = {3, 3, 5, 7, 3, 2, 4, 5, 4, 4, 5, 6, 6, 5, 6, 7};
+-static const unsigned char t7l[] = {1, 3, 6, 8, 8, 9, 3, 4, 6, 7, 7, 8, 6, 5, 7, 8, 8, 9, 7, 7, 8, 9, 9, 9, 7, 7, 8, 9, 9, 10, 8, 8, 9, 10, 10, 10};
+-static const unsigned char t8l[] = {2, 3, 6, 8, 8, 9, 3, 2, 4, 8, 8, 8, 6, 4, 6, 8, 8, 9, 8, 8, 8, 9, 9, 10, 8, 7, 8, 9, 10, 10, 9, 8, 9, 9, 11, 11};
+-static const unsigned char t9l[] = {3, 3, 5, 6, 8, 9, 3, 3, 4, 5, 6, 8, 4, 4, 5, 6, 7, 8, 6, 5, 6, 7, 7, 8, 7, 6, 7, 7, 8, 9, 8, 7, 8, 8, 9, 9};
+-static const unsigned char t10l[] = {1, 3, 6, 8, 9, 9, 9, 10, 3, 4, 6, 7, 8, 9, 8, 8, 6, 6, 7, 8, 9, 10, 9, 9, 7, 7, 8, 9, 10, 10, 9, 10, 8, 8, 9, 10, 10, 10, 10, 10, 9, 9, 10, 10, 11, 11, 10, 11, 8, 8, 9, 10, 10, 10, 11, 11, 9, 8, 9, 10, 10, 11, 11, 11};
+-static const unsigned char t11l[] = {2, 3, 5, 7, 8, 9, 8, 9, 3, 3, 4, 6, 8, 8, 7, 8, 5, 5, 6, 7, 8, 9, 8, 8, 7, 6, 7, 9, 8, 10, 8, 9, 8, 8, 8, 9, 9, 10, 9, 10, 8, 8, 9, 10, 10, 11, 10, 11, 8, 7, 7, 8, 9, 10, 10, 10, 8, 7, 8, 9, 10, 10, 10, 10};
+-static const unsigned char t12l[] = {4, 3, 5, 7, 8, 9, 9, 9, 3, 3, 4, 5, 7, 7, 8, 8, 5, 4, 5, 6, 7, 8, 7, 8, 6, 5, 6, 6, 7, 8, 8, 8, 7, 6, 7, 7, 8, 8, 8, 9, 8, 7, 8, 8, 8, 9, 8, 9, 8, 7, 7, 8, 8, 9, 9, 10, 9, 8, 8, 9, 9, 9, 9, 10};
+-static const unsigned char t13l[] = {1, 4, 6, 7, 8, 9, 9, 10, 9, 10, 11, 11, 12, 12, 13, 13, 3, 4, 6, 7, 8, 8, 9, 9, 9, 9, 10, 10, 11, 12, 12, 12, 6, 6, 7, 8, 9, 9, 10, 10, 9, 10, 10, 11, 11, 12, 13, 13, 7, 7, 8, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 13, 13,
+-8, 7, 9, 9, 10, 10, 11, 11, 10, 11, 11, 12, 12, 13, 13, 14, 9, 8, 9, 10, 10, 10, 11, 11, 11, 11, 12, 11, 13, 13, 14, 14, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 10, 9, 10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 16, 16, 9, 8, 9, 10,
+-10, 11, 11, 12, 12, 12, 12, 13, 13, 14, 15, 15, 10, 9, 10, 10, 11, 11, 11, 13, 12, 13, 13, 14, 14, 14, 16, 15, 10, 10, 10, 11, 11, 12, 12, 13, 12, 13, 14, 13, 14, 15, 16, 17, 11, 10, 10, 11, 12, 12, 12, 12, 13, 13, 13, 14, 15, 15, 15, 16, 11, 11, 11, 12, 12,
+-13, 12, 13, 14, 14, 15, 15, 15, 16, 16, 16, 12, 11, 12, 13, 13, 13, 14, 14, 14, 14, 14, 15, 16, 15, 16, 16, 13, 12, 12, 13, 13, 13, 15, 14, 14, 17, 15, 15, 15, 17, 16, 16, 12, 12, 13, 14, 14, 14, 15, 14, 15, 15, 16, 16, 19, 18, 19, 16};
+-static const unsigned char t15l[] = {3, 4, 5, 7, 7, 8, 9, 9, 9, 10, 10, 11, 11, 11, 12, 13, 4, 3, 5, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 5, 5, 5, 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 11, 11, 11, 6, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 7, 6, 7,
+- 7, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 11, 8, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 11, 12, 9, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 9, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 12, 9, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11,
+- 12, 12, 12, 9, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 10, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 13, 12, 10, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 11, 10, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 13, 13,
+-11, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 12, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 12, 13, 12, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13};
+-static const unsigned char t16l[] = {1, 4, 6, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 9, 3, 4, 6, 7, 8, 9, 9, 9, 10, 10, 10, 11, 12, 11, 12, 8, 6, 6, 7, 8, 9, 9, 10, 10, 11, 10, 11, 11, 11, 12, 12, 9, 8, 7, 8, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13, 13,
+- 10, 9, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 9, 9, 8, 9, 9, 10, 11, 11, 12, 11, 12, 12, 13, 13, 13, 14, 10, 10, 9, 9, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 10, 10, 9, 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 15, 15, 10, 10, 10,
+- 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 10, 11, 10, 10, 11, 11, 12, 12, 13, 13, 13, 13, 14, 13, 14, 13, 11, 11, 11, 10, 11, 12, 12, 12, 12, 13, 14, 14, 14, 15, 15, 14, 10, 12, 11, 11, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 13, 14, 11, 12, 12,
+- 12, 12, 12, 13, 13, 13, 13, 15, 14, 14, 14, 14, 16, 11, 14, 12, 12, 12, 13, 13, 14, 14, 14, 16, 15, 15, 15, 17, 15, 11, 13, 13, 11, 12, 14, 14, 13, 14, 14, 15, 16, 15, 17, 15, 14, 11, 9, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 8};
+-static const unsigned char t24l[] = {4, 4, 6, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 9, 4, 4, 5, 6, 7, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10, 8, 6, 5, 6, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 7, 7, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 7, 8, 7, 7, 8,
+- 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 7, 9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 7, 9, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 7, 10, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 8, 10, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11,
+-8, 10, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 8, 11, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 8, 11, 10, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 8, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 8, 11, 10, 10,
+- 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 8, 12, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 4};
+-static const unsigned char t32l[] = {1, 4, 4, 5, 4, 6, 5, 6, 4, 5, 5, 6, 5, 6, 6, 6};
+-static const unsigned char t33l[] = {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4};
++static const unsigned char t1l[] = {1, 3, 2, 3};
++static const unsigned char t2l[] = {1, 3, 6, 3, 3, 5, 5, 5, 6};
++static const unsigned char t3l[] = {2, 2, 6, 3, 2, 5, 5, 5, 6};
++static const unsigned char t5l[] = {1, 3, 6, 7, 3, 3, 6, 7,
++ 6, 6, 7, 8, 7, 6, 7, 8};
++static const unsigned char t6l[] = {3, 3, 5, 7, 3, 2, 4, 5,
++ 4, 4, 5, 6, 6, 5, 6, 7};
++static const unsigned char t7l[] = {1, 3, 6, 8, 8, 9, 3, 4, 6, 7, 7, 8,
++ 6, 5, 7, 8, 8, 9, 7, 7, 8, 9, 9, 9,
++ 7, 7, 8, 9, 9, 10, 8, 8, 9, 10, 10, 10};
++static const unsigned char t8l[] = {2, 3, 6, 8, 8, 9, 3, 2, 4, 8, 8, 8,
++ 6, 4, 6, 8, 8, 9, 8, 8, 8, 9, 9, 10,
++ 8, 7, 8, 9, 10, 10, 9, 8, 9, 9, 11, 11};
++static const unsigned char t9l[] = {3, 3, 5, 6, 8, 9, 3, 3, 4, 5, 6, 8,
++ 4, 4, 5, 6, 7, 8, 6, 5, 6, 7, 7, 8,
++ 7, 6, 7, 7, 8, 9, 8, 7, 8, 8, 9, 9};
++static const unsigned char t10l[] = {
++ 1, 3, 6, 8, 9, 9, 9, 10, 3, 4, 6, 7, 8, 9, 8, 8,
++ 6, 6, 7, 8, 9, 10, 9, 9, 7, 7, 8, 9, 10, 10, 9, 10,
++ 8, 8, 9, 10, 10, 10, 10, 10, 9, 9, 10, 10, 11, 11, 10, 11,
++ 8, 8, 9, 10, 10, 10, 11, 11, 9, 8, 9, 10, 10, 11, 11, 11};
++static const unsigned char t11l[] = {
++ 2, 3, 5, 7, 8, 9, 8, 9, 3, 3, 4, 6, 8, 8, 7, 8,
++ 5, 5, 6, 7, 8, 9, 8, 8, 7, 6, 7, 9, 8, 10, 8, 9,
++ 8, 8, 8, 9, 9, 10, 9, 10, 8, 8, 9, 10, 10, 11, 10, 11,
++ 8, 7, 7, 8, 9, 10, 10, 10, 8, 7, 8, 9, 10, 10, 10, 10};
++static const unsigned char t12l[] = {
++ 4, 3, 5, 7, 8, 9, 9, 9, 3, 3, 4, 5, 7, 7, 8, 8, 5, 4, 5, 6, 7, 8,
++ 7, 8, 6, 5, 6, 6, 7, 8, 8, 8, 7, 6, 7, 7, 8, 8, 8, 9, 8, 7, 8, 8,
++ 8, 9, 8, 9, 8, 7, 7, 8, 8, 9, 9, 10, 9, 8, 8, 9, 9, 9, 9, 10};
++static const unsigned char t13l[] = {
++ 1, 4, 6, 7, 8, 9, 9, 10, 9, 10, 11, 11, 12, 12, 13, 13, 3, 4, 6,
++ 7, 8, 8, 9, 9, 9, 9, 10, 10, 11, 12, 12, 12, 6, 6, 7, 8, 9, 9,
++ 10, 10, 9, 10, 10, 11, 11, 12, 13, 13, 7, 7, 8, 9, 9, 10, 10, 10, 10,
++ 11, 11, 11, 11, 12, 13, 13, 8, 7, 9, 9, 10, 10, 11, 11, 10, 11, 11, 12,
++ 12, 13, 13, 14, 9, 8, 9, 10, 10, 10, 11, 11, 11, 11, 12, 11, 13, 13, 14,
++ 14, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 14, 10, 9,
++ 10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 16, 16, 9, 8, 9, 10, 10,
++ 11, 11, 12, 12, 12, 12, 13, 13, 14, 15, 15, 10, 9, 10, 10, 11, 11, 11, 13,
++ 12, 13, 13, 14, 14, 14, 16, 15, 10, 10, 10, 11, 11, 12, 12, 13, 12, 13, 14,
++ 13, 14, 15, 16, 17, 11, 10, 10, 11, 12, 12, 12, 12, 13, 13, 13, 14, 15, 15,
++ 15, 16, 11, 11, 11, 12, 12, 13, 12, 13, 14, 14, 15, 15, 15, 16, 16, 16, 12,
++ 11, 12, 13, 13, 13, 14, 14, 14, 14, 14, 15, 16, 15, 16, 16, 13, 12, 12, 13,
++ 13, 13, 15, 14, 14, 17, 15, 15, 15, 17, 16, 16, 12, 12, 13, 14, 14, 14, 15,
++ 14, 15, 15, 16, 16, 19, 18, 19, 16};
++static const unsigned char t15l[] = {
++ 3, 4, 5, 7, 7, 8, 9, 9, 9, 10, 10, 11, 11, 11, 12, 13, 4, 3, 5,
++ 6, 7, 7, 8, 8, 8, 9, 9, 10, 10, 10, 11, 11, 5, 5, 5, 6, 7, 7,
++ 8, 8, 8, 9, 9, 10, 10, 11, 11, 11, 6, 6, 6, 7, 7, 8, 8, 9, 9,
++ 9, 10, 10, 10, 11, 11, 11, 7, 6, 7, 7, 8, 8, 9, 9, 9, 9, 10, 10,
++ 10, 11, 11, 11, 8, 7, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 11, 11, 11,
++ 12, 9, 7, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 9, 8,
++ 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 12, 9, 8, 8, 9, 9,
++ 9, 9, 10, 10, 10, 10, 11, 11, 12, 12, 12, 9, 8, 9, 9, 9, 9, 10, 10,
++ 10, 11, 11, 11, 11, 12, 12, 12, 10, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11,
++ 11, 11, 12, 13, 12, 10, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
++ 12, 13, 11, 10, 9, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 13, 13, 11,
++ 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 12, 11, 11, 11,
++ 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 12, 13, 12, 11, 11, 11, 11, 11, 11,
++ 12, 12, 12, 12, 12, 13, 13, 13, 13};
++static const unsigned char t16l[] = {
++ 1, 4, 6, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12, 13, 9, 3, 4, 6,
++ 7, 8, 9, 9, 9, 10, 10, 10, 11, 12, 11, 12, 8, 6, 6, 7, 8, 9, 9,
++ 10, 10, 11, 10, 11, 11, 11, 12, 12, 9, 8, 7, 8, 9, 9, 10, 10, 10, 11,
++ 11, 12, 12, 12, 13, 13, 10, 9, 8, 9, 9, 10, 10, 11, 11, 11, 12, 12, 12,
++ 13, 13, 13, 9, 9, 8, 9, 9, 10, 11, 11, 12, 11, 12, 12, 13, 13, 13, 14,
++ 10, 10, 9, 9, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 14, 10, 10, 9,
++ 10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 13, 15, 15, 10, 10, 10, 10, 11, 11,
++ 11, 12, 12, 13, 13, 13, 13, 14, 14, 14, 10, 11, 10, 10, 11, 11, 12, 12, 13,
++ 13, 13, 13, 14, 13, 14, 13, 11, 11, 11, 10, 11, 12, 12, 12, 12, 13, 14, 14,
++ 14, 15, 15, 14, 10, 12, 11, 11, 11, 12, 12, 13, 14, 14, 14, 14, 14, 14, 13,
++ 14, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 15, 14, 14, 14, 14, 16, 11, 14,
++ 12, 12, 12, 13, 13, 14, 14, 14, 16, 15, 15, 15, 17, 15, 11, 13, 13, 11, 12,
++ 14, 14, 13, 14, 14, 15, 16, 15, 17, 15, 14, 11, 9, 8, 8, 9, 9, 10, 10,
++ 10, 11, 11, 11, 11, 11, 11, 11, 8};
++static const unsigned char t24l[] = {
++ 4, 4, 6, 7, 8, 9, 9, 10, 10, 11, 11, 11, 11, 11, 12, 9, 4, 4, 5,
++ 6, 7, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10, 8, 6, 5, 6, 7, 7, 8,
++ 8, 9, 9, 9, 9, 10, 10, 10, 11, 7, 7, 6, 7, 7, 8, 8, 8, 9, 9,
++ 9, 9, 10, 10, 10, 10, 7, 8, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10,
++ 10, 10, 11, 7, 9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10,
++ 7, 9, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 7, 10, 8,
++ 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 8, 10, 9, 9, 9, 9,
++ 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 8, 10, 9, 9, 9, 9, 9, 9, 10,
++ 10, 10, 10, 10, 11, 11, 11, 8, 11, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
++ 11, 11, 11, 11, 8, 11, 10, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11,
++ 11, 8, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 8, 11,
++ 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 8, 12, 10, 10, 10,
++ 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 8, 8, 7, 7, 7, 7, 7, 7,
++ 7, 7, 7, 7, 8, 8, 8, 8, 4};
++static const unsigned char t32l[] = {1, 4, 4, 5, 4, 6, 5, 6,
++ 4, 5, 5, 6, 5, 6, 6, 6};
++static const unsigned char t33l[] = {4, 4, 4, 4, 4, 4, 4, 4,
++ 4, 4, 4, 4, 4, 4, 4, 4};
+
+ #define NOREF -1
+-const struct huffcodetab shine_huffman_table[HTN] =
+-{
+-{ 0, 0, 0, 0,NULL,NULL},
+-{ 2, 2, 0, 0,t1HB, t1l},
+-{ 3, 3, 0, 0,t2HB, t2l},
+-{ 3, 3, 0, 0,t3HB, t3l},
+-{ 0, 0, 0, 0,NULL,NULL},/* Apparently not used*/
+-{ 4, 4, 0, 0,t5HB, t5l},
+-{ 4, 4, 0, 0,t6HB, t6l},
+-{ 6, 6, 0, 0,t7HB, t7l},
+-{ 6, 6, 0, 0,t8HB, t8l},
+-{ 6, 6, 0, 0,t9HB, t9l},
+-{ 8, 8, 0, 0,t10HB, t10l},
+-{ 8, 8, 0, 0,t11HB, t11l},
+-{ 8, 8, 0, 0,t12HB, t12l},
+-{16,16, 0, 0,t13HB, t13l},
+-{ 0, 0, 0, 0,NULL,NULL},/* Apparently not used*/
+-{16,16, 0, 0,t15HB, t15l},
+-{16,16, 1, 1,t16HB, t16l},
+-{16,16, 2, 3,t16HB, t16l},
+-{16,16, 3, 7,t16HB, t16l},
+-{16,16, 4, 15,t16HB, t16l},
+-{16,16, 6, 63,t16HB, t16l},
+-{16,16, 8, 255,t16HB, t16l},
+-{16,16,10,1023,t16HB, t16l},
+-{16,16,13,8191,t16HB, t16l},
+-{16,16, 4, 15,t24HB, t24l},
+-{16,16, 5, 31,t24HB, t24l},
+-{16,16, 6, 63,t24HB, t24l},
+-{16,16, 7, 127,t24HB, t24l},
+-{16,16, 8, 255,t24HB, t24l},
+-{16,16, 9, 511,t24HB, t24l},
+-{16,16,11,2047,t24HB, t24l},
+-{16,16,13,8191,t24HB, t24l},
+-{ 1,16, 0, 0,t32HB, t32l},
+-{ 1,16, 0, 0,t33HB, t33l},
++const struct huffcodetab shine_huffman_table[HTN] = {
++ {0, 0, 0, 0, NULL, NULL},
++ {2, 2, 0, 0, t1HB, t1l},
++ {3, 3, 0, 0, t2HB, t2l},
++ {3, 3, 0, 0, t3HB, t3l},
++ {0, 0, 0, 0, NULL, NULL}, /* Apparently not used*/
++ {4, 4, 0, 0, t5HB, t5l},
++ {4, 4, 0, 0, t6HB, t6l},
++ {6, 6, 0, 0, t7HB, t7l},
++ {6, 6, 0, 0, t8HB, t8l},
++ {6, 6, 0, 0, t9HB, t9l},
++ {8, 8, 0, 0, t10HB, t10l},
++ {8, 8, 0, 0, t11HB, t11l},
++ {8, 8, 0, 0, t12HB, t12l},
++ {16, 16, 0, 0, t13HB, t13l},
++ {0, 0, 0, 0, NULL, NULL}, /* Apparently not used*/
++ {16, 16, 0, 0, t15HB, t15l},
++ {16, 16, 1, 1, t16HB, t16l},
++ {16, 16, 2, 3, t16HB, t16l},
++ {16, 16, 3, 7, t16HB, t16l},
++ {16, 16, 4, 15, t16HB, t16l},
++ {16, 16, 6, 63, t16HB, t16l},
++ {16, 16, 8, 255, t16HB, t16l},
++ {16, 16, 10, 1023, t16HB, t16l},
++ {16, 16, 13, 8191, t16HB, t16l},
++ {16, 16, 4, 15, t24HB, t24l},
++ {16, 16, 5, 31, t24HB, t24l},
++ {16, 16, 6, 63, t24HB, t24l},
++ {16, 16, 7, 127, t24HB, t24l},
++ {16, 16, 8, 255, t24HB, t24l},
++ {16, 16, 9, 511, t24HB, t24l},
++ {16, 16, 11, 2047, t24HB, t24l},
++ {16, 16, 13, 8191, t24HB, t24l},
++ {1, 16, 0, 0, t32HB, t32l},
++ {1, 16, 0, 0, t33HB, t33l},
+ };
+-
+-
+diff --git a/src/lib/huffman.h b/src/lib/huffman.h
+index d2d5b51..6a341c7 100644
+--- a/src/lib/huffman.h
++++ b/src/lib/huffman.h
+@@ -1,6 +1,8 @@
++#include <stdint.h>
++
+ #define HUFFBITS uint16_t
+-#define HTN 34
+-#define MXOFF 250
++#define HTN 34
++#define MXOFF 250
+
+ struct huffcodetab {
+ unsigned int xlen; /*max. x-index+ */
+@@ -11,9 +13,8 @@ struct huffcodetab {
+ const unsigned char *hlen; /*pointer to array[xlen][ylen] */
+ };
+
+-extern const struct huffcodetab shine_huffman_table[HTN];/* global memory block */
+- /* array of all huffcodtable headers */
+- /* 0..31 Huffman code table 0..31 */
+- /* 32,33 count1-tables */
+-
+-
++extern const struct huffcodetab
++ shine_huffman_table[HTN]; /* global memory block */
++ /* array of all huffcodtable headers */
++ /* 0..31 Huffman code table 0..31 */
++ /* 32,33 count1-tables */
+diff --git a/src/lib/l3bitstream.c b/src/lib/l3bitstream.c
+index ba788e6..1b2849e 100644
+--- a/src/lib/l3bitstream.c
++++ b/src/lib/l3bitstream.c
+@@ -1,20 +1,22 @@
+ /* l3bitstrea.c */
+
+-#include "types.h"
+-#include "l3mdct.h"
++#include "l3bitstream.h" /* the public interface */
++#include "bitstream.h"
++#include "huffman.h"
+ #include "l3loop.h"
++#include "l3mdct.h"
+ #include "layer3.h"
+-#include "huffman.h"
+-#include "bitstream.h"
+ #include "tables.h"
+-#include "l3bitstream.h" /* the public interface */
++#include "types.h"
+
+ static void shine_HuffmanCode(bitstream_t *bs, int table_select, int x, int y);
+-static void shine_huffman_coder_count1(bitstream_t *bs, const struct huffcodetab *h, int v, int w, int x, int y);
++static void shine_huffman_coder_count1(bitstream_t *bs,
++ const struct huffcodetab *h, int v,
++ int w, int x, int y);
+
+-static void encodeSideInfo( shine_global_config *config );
+-static void encodeMainData( shine_global_config *config );
+-static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi);
++static void encodeSideInfo(shine_global_config *config);
++static void encodeMainData(shine_global_config *config);
++static void Huffmancodebits(shine_global_config *config, int *ix, gr_info *gi);
+
+ /*
+ shine_format_bitstream()
+@@ -27,130 +29,121 @@ static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi);
+ in the IS).
+ */
+
+-void
+-shine_format_bitstream(shine_global_config *config)
+-{
++void shine_format_bitstream(shine_global_config *config) {
+ int gr, ch, i;
+
+- for ( ch = 0; ch < config->wave.channels; ch++ )
+- for ( gr = 0; gr < config->mpeg.granules_per_frame; gr++ )
+- {
+- int *pi = &config->l3_enc[ch][gr][0];
+- int32_t *pr = &config->mdct_freq[ch][gr][0];
+- for ( i = 0; i < GRANULE_SIZE; i++ )
+- {
+- if ( (pr[i] < 0) && (pi[i] > 0) )
+- pi[i] *= -1;
+- }
++ for (ch = 0; ch < config->wave.channels; ch++)
++ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) {
++ int *pi = &config->l3_enc[ch][gr][0];
++ int32_t *pr = &config->mdct_freq[ch][gr][0];
++ for (i = 0; i < GRANULE_SIZE; i++) {
++ if ((pr[i] < 0) && (pi[i] > 0))
++ pi[i] *= -1;
+ }
++ }
+
+- encodeSideInfo( config );
+- encodeMainData( config );
++ encodeSideInfo(config);
++ encodeMainData(config);
+ }
+
+-static void encodeMainData(shine_global_config *config)
+-{
++static void encodeMainData(shine_global_config *config) {
+ int gr, ch, sfb;
+- shine_side_info_t si = config->side_info;
+-
+- for ( gr = 0; gr < config->mpeg.granules_per_frame; gr++ )
+- {
+- for ( ch = 0; ch < config->wave.channels; ch++ )
+- {
+- gr_info *gi = &(si.gr[gr].ch[ch].tt);
+- unsigned slen1 = shine_slen1_tab[ gi->scalefac_compress ];
+- unsigned slen2 = shine_slen2_tab[ gi->scalefac_compress ];
+- int *ix = &config->l3_enc[ch][gr][0];
+-
+- if ( gr == 0 || si.scfsi[ch][0] == 0 )
+- for ( sfb = 0; sfb < 6; sfb++ )
+- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen1 );
+- if ( gr == 0 || si.scfsi[ch][1] == 0 )
+- for ( sfb = 6; sfb < 11; sfb++ )
+- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen1 );
+- if ( gr == 0 || si.scfsi[ch][2] == 0 )
+- for ( sfb = 11; sfb < 16; sfb++ )
+- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen2 );
+- if ( gr == 0 || si.scfsi[ch][3] == 0 )
+- for ( sfb = 16; sfb < 21; sfb++ )
+- shine_putbits( &config->bs, config->scalefactor.l[gr][ch][sfb], slen2 );
+-
+- Huffmancodebits( config, ix, gi );
+- }
++ shine_side_info_t si = config->side_info;
++
++ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) {
++ for (ch = 0; ch < config->wave.channels; ch++) {
++ gr_info *gi = &(si.gr[gr].ch[ch].tt);
++ unsigned slen1 = shine_slen1_tab[gi->scalefac_compress];
++ unsigned slen2 = shine_slen2_tab[gi->scalefac_compress];
++ int *ix = &config->l3_enc[ch][gr][0];
++
++ if (gr == 0 || si.scfsi[ch][0] == 0)
++ for (sfb = 0; sfb < 6; sfb++)
++ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen1);
++ if (gr == 0 || si.scfsi[ch][1] == 0)
++ for (sfb = 6; sfb < 11; sfb++)
++ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen1);
++ if (gr == 0 || si.scfsi[ch][2] == 0)
++ for (sfb = 11; sfb < 16; sfb++)
++ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen2);
++ if (gr == 0 || si.scfsi[ch][3] == 0)
++ for (sfb = 16; sfb < 21; sfb++)
++ shine_putbits(&config->bs, config->scalefactor.l[gr][ch][sfb], slen2);
++
++ Huffmancodebits(config, ix, gi);
+ }
++ }
+ }
+
+-static void encodeSideInfo( shine_global_config *config )
+-{
++static void encodeSideInfo(shine_global_config *config) {
+ int gr, ch, scfsi_band, region;
+- shine_side_info_t si = config->side_info;
+-
+- shine_putbits( &config->bs, 0x7ff, 11 );
+- shine_putbits( &config->bs, config->mpeg.version, 2 );
+- shine_putbits( &config->bs, config->mpeg.layer, 2 );
+- shine_putbits( &config->bs, !config->mpeg.crc, 1 );
+- shine_putbits( &config->bs, config->mpeg.bitrate_index, 4 );
+- shine_putbits( &config->bs, config->mpeg.samplerate_index % 3, 2 );
+- shine_putbits( &config->bs, config->mpeg.padding, 1 );
+- shine_putbits( &config->bs, config->mpeg.ext, 1 );
+- shine_putbits( &config->bs, config->mpeg.mode, 2 );
+- shine_putbits( &config->bs, config->mpeg.mode_ext, 2 );
+- shine_putbits( &config->bs, config->mpeg.copyright, 1 );
+- shine_putbits( &config->bs, config->mpeg.original, 1 );
+- shine_putbits( &config->bs, config->mpeg.emph, 2 );
+-
+- if ( config->mpeg.version == MPEG_I ) {
+- shine_putbits( &config->bs, 0, 9 );
+- if ( config->wave.channels == 2 )
+- shine_putbits( &config->bs, si.private_bits, 3 );
++ shine_side_info_t si = config->side_info;
++
++ shine_putbits(&config->bs, 0x7ff, 11);
++ shine_putbits(&config->bs, config->mpeg.version, 2);
++ shine_putbits(&config->bs, config->mpeg.layer, 2);
++ shine_putbits(&config->bs, !config->mpeg.crc, 1);
++ shine_putbits(&config->bs, config->mpeg.bitrate_index, 4);
++ shine_putbits(&config->bs, config->mpeg.samplerate_index % 3, 2);
++ shine_putbits(&config->bs, config->mpeg.padding, 1);
++ shine_putbits(&config->bs, config->mpeg.ext, 1);
++ shine_putbits(&config->bs, config->mpeg.mode, 2);
++ shine_putbits(&config->bs, config->mpeg.mode_ext, 2);
++ shine_putbits(&config->bs, config->mpeg.copyright, 1);
++ shine_putbits(&config->bs, config->mpeg.original, 1);
++ shine_putbits(&config->bs, config->mpeg.emph, 2);
++
++ if (config->mpeg.version == MPEG_I) {
++ shine_putbits(&config->bs, 0, 9);
++ if (config->wave.channels == 2)
++ shine_putbits(&config->bs, si.private_bits, 3);
+ else
+- shine_putbits( &config->bs, si.private_bits, 5 );
++ shine_putbits(&config->bs, si.private_bits, 5);
+ } else {
+- shine_putbits( &config->bs, 0, 8 );
+- if ( config->wave.channels == 2 )
+- shine_putbits( &config->bs, si.private_bits, 2 );
++ shine_putbits(&config->bs, 0, 8);
++ if (config->wave.channels == 2)
++ shine_putbits(&config->bs, si.private_bits, 2);
+ else
+- shine_putbits( &config->bs, si.private_bits, 1 );
++ shine_putbits(&config->bs, si.private_bits, 1);
+ }
+
+- if ( config->mpeg.version == MPEG_I )
+- for ( ch = 0; ch < config->wave.channels; ch++ ) {
+- for ( scfsi_band = 0; scfsi_band < 4; scfsi_band++ )
+- shine_putbits( &config->bs, si.scfsi[ch][scfsi_band], 1 );
++ if (config->mpeg.version == MPEG_I)
++ for (ch = 0; ch < config->wave.channels; ch++) {
++ for (scfsi_band = 0; scfsi_band < 4; scfsi_band++)
++ shine_putbits(&config->bs, si.scfsi[ch][scfsi_band], 1);
+ }
+
+- for ( gr = 0; gr < config->mpeg.granules_per_frame; gr++ )
+- for ( ch = 0; ch < config->wave.channels ; ch++ )
+- {
+- gr_info *gi = &(si.gr[gr].ch[ch].tt);
+-
+- shine_putbits( &config->bs, gi->part2_3_length, 12 );
+- shine_putbits( &config->bs, gi->big_values, 9 );
+- shine_putbits( &config->bs, gi->global_gain, 8 );
+- if ( config->mpeg.version == MPEG_I )
+- shine_putbits( &config->bs, gi->scalefac_compress, 4 );
+- else
+- shine_putbits( &config->bs, gi->scalefac_compress, 9 );
+- shine_putbits( &config->bs, 0, 1 );
+-
+- for ( region = 0; region < 3; region++ )
+- shine_putbits( &config->bs, gi->table_select[region], 5 );
+-
+- shine_putbits( &config->bs, gi->region0_count, 4 );
+- shine_putbits( &config->bs, gi->region1_count, 3 );
+-
+- if ( config->mpeg.version == MPEG_I )
+- shine_putbits( &config->bs, gi->preflag, 1 );
+- shine_putbits( &config->bs, gi->scalefac_scale, 1 );
+- shine_putbits( &config->bs, gi->count1table_select, 1 );
+- }
++ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++)
++ for (ch = 0; ch < config->wave.channels; ch++) {
++ gr_info *gi = &(si.gr[gr].ch[ch].tt);
++
++ shine_putbits(&config->bs, gi->part2_3_length, 12);
++ shine_putbits(&config->bs, gi->big_values, 9);
++ shine_putbits(&config->bs, gi->global_gain, 8);
++ if (config->mpeg.version == MPEG_I)
++ shine_putbits(&config->bs, gi->scalefac_compress, 4);
++ else
++ shine_putbits(&config->bs, gi->scalefac_compress, 9);
++ shine_putbits(&config->bs, 0, 1);
++
++ for (region = 0; region < 3; region++)
++ shine_putbits(&config->bs, gi->table_select[region], 5);
++
++ shine_putbits(&config->bs, gi->region0_count, 4);
++ shine_putbits(&config->bs, gi->region1_count, 3);
++
++ if (config->mpeg.version == MPEG_I)
++ shine_putbits(&config->bs, gi->preflag, 1);
++ shine_putbits(&config->bs, gi->scalefac_scale, 1);
++ shine_putbits(&config->bs, gi->count1table_select, 1);
++ }
+ }
+
+ /* Note the discussion of huffmancodebits() on pages 28 and 29 of the IS, as
+ well as the definitions of the side information on pages 26 and 27. */
+-static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi )
+-{
+- const int *scalefac = &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
++static void Huffmancodebits(shine_global_config *config, int *ix, gr_info *gi) {
++ const int *scalefac =
++ &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
+ unsigned scalefac_index;
+ int region1Start, region2Start;
+ int i, bigvalues, count1End;
+@@ -164,168 +157,153 @@ static void Huffmancodebits( shine_global_config *config, int *ix, gr_info *gi )
+ bigvalues = gi->big_values << 1;
+
+ scalefac_index = gi->region0_count + 1;
+- region1Start = scalefac[ scalefac_index ];
++ region1Start = scalefac[scalefac_index];
+ scalefac_index += gi->region1_count + 1;
+- region2Start = scalefac[ scalefac_index ];
+-
+- for ( i = 0; i < bigvalues; i += 2 )
+- {
+- /* get table pointer */
+- int idx = (i >= region1Start) + (i >= region2Start);
+- unsigned tableindex = gi->table_select[idx];
+- /* get huffman code */
+- if ( tableindex )
+- {
+- x = ix[i];
+- y = ix[i + 1];
+- shine_HuffmanCode( &config->bs, tableindex, x, y );
+- }
++ region2Start = scalefac[scalefac_index];
++
++ for (i = 0; i < bigvalues; i += 2) {
++ /* get table pointer */
++ int idx = (i >= region1Start) + (i >= region2Start);
++ unsigned tableindex = gi->table_select[idx];
++ /* get huffman code */
++ if (tableindex) {
++ x = ix[i];
++ y = ix[i + 1];
++ shine_HuffmanCode(&config->bs, tableindex, x, y);
+ }
++ }
+
+ /* 2: Write count1 area */
+ h = &shine_huffman_table[gi->count1table_select + 32];
+- count1End = bigvalues + (gi->count1 <<2);
+- for ( i = bigvalues; i < count1End; i += 4 )
+- {
+- v = ix[i];
+- w = ix[i+1];
+- x = ix[i+2];
+- y = ix[i+3];
+- shine_huffman_coder_count1( &config->bs, h, v, w, x, y );
+- }
++ count1End = bigvalues + (gi->count1 << 2);
++ for (i = bigvalues; i < count1End; i += 4) {
++ v = ix[i];
++ w = ix[i + 1];
++ x = ix[i + 2];
++ y = ix[i + 3];
++ shine_huffman_coder_count1(&config->bs, h, v, w, x, y);
++ }
+
+ bits = shine_get_bits_count(&config->bs) - bits;
+ bits = gi->part2_3_length - gi->part2_length - bits;
+- if (bits)
+- {
+- int stuffingWords = bits / 32;
+- int remainingBits = bits % 32;
+-
+- /* Due to the nature of the Huffman code tables, we will pad with ones */
+- while ( stuffingWords-- )
+- shine_putbits( &config->bs, ~0, 32 );
+- if ( remainingBits )
+- shine_putbits( &config->bs, (1UL << remainingBits) - 1, remainingBits );
+- }
++ if (bits) {
++ int stuffingWords = bits / 32;
++ int remainingBits = bits % 32;
++
++ /* Due to the nature of the Huffman code tables, we will pad with ones */
++ while (stuffingWords--)
++ shine_putbits(&config->bs, ~0, 32);
++ if (remainingBits)
++ shine_putbits(&config->bs, (1UL << remainingBits) - 1, remainingBits);
++ }
+ }
+
+-static inline int shine_abs_and_sign( int *x )
+-{
+- if ( *x > 0 ) return 0;
++static inline int shine_abs_and_sign(int *x) {
++ if (*x > 0)
++ return 0;
+ *x *= -1;
+ return 1;
+ }
+
+-static void shine_huffman_coder_count1( bitstream_t *bs, const struct huffcodetab *h, int v, int w, int x, int y )
+-{
++static void shine_huffman_coder_count1(bitstream_t *bs,
++ const struct huffcodetab *h, int v,
++ int w, int x, int y) {
+ unsigned int signv, signw, signx, signy;
+ unsigned int code = 0;
+ int p, cbits = 0;
+
+- signv = shine_abs_and_sign( &v );
+- signw = shine_abs_and_sign( &w );
+- signx = shine_abs_and_sign( &x );
+- signy = shine_abs_and_sign( &y );
++ signv = shine_abs_and_sign(&v);
++ signw = shine_abs_and_sign(&w);
++ signx = shine_abs_and_sign(&x);
++ signy = shine_abs_and_sign(&y);
+
+ p = v + (w << 1) + (x << 2) + (y << 3);
+- shine_putbits( bs, h->table[p], h->hlen[p] );
++ shine_putbits(bs, h->table[p], h->hlen[p]);
+
+- if ( v ) {
++ if (v) {
+ code = signv;
+ cbits = 1;
+ }
+- if ( w ) {
++ if (w) {
+ code = (code << 1) | signw;
+ cbits++;
+ }
+- if ( x ) {
++ if (x) {
+ code = (code << 1) | signx;
+ cbits++;
+ }
+- if ( y ) {
++ if (y) {
+ code = (code << 1) | signy;
+ cbits++;
+ }
+- shine_putbits( bs, code, cbits );
++ shine_putbits(bs, code, cbits);
+ }
+
+ /* Implements the pseudocode of page 98 of the IS */
+-static void shine_HuffmanCode(bitstream_t *bs, int table_select, int x, int y)
+-{
++static void shine_HuffmanCode(bitstream_t *bs, int table_select, int x, int y) {
+ int cbits = 0, xbits = 0;
+ unsigned int code = 0, ext = 0;
+ unsigned signx, signy, ylen, idx;
+ const struct huffcodetab *h;
+
+- signx = shine_abs_and_sign( &x );
+- signy = shine_abs_and_sign( &y );
++ signx = shine_abs_and_sign(&x);
++ signy = shine_abs_and_sign(&y);
+
+ h = &(shine_huffman_table[table_select]);
+ ylen = h->ylen;
+
+- if ( table_select > 15 )
+- { /* ESC-table is used */
+- unsigned linbitsx = 0, linbitsy = 0, linbits = h->linbits;
+-
+- if ( x > 14 )
+- {
+- linbitsx = x - 15;
+- x = 15;
+- }
+- if ( y > 14 )
+- {
+- linbitsy = y - 15;
+- y = 15;
+- }
+-
+- idx = (x * ylen) + y;
+- code = h->table[idx];
+- cbits = h->hlen [idx];
+- if ( x > 14 )
+- {
+- ext |= linbitsx;
+- xbits += linbits;
+- }
+- if ( x != 0 )
+- {
+- ext <<= 1;
+- ext |= signx;
+- xbits += 1;
+- }
+- if ( y > 14 )
+- {
+- ext <<= linbits;
+- ext |= linbitsy;
+- xbits += linbits;
+- }
+- if ( y != 0 )
+- {
+- ext <<= 1;
+- ext |= signy;
+- xbits += 1;
+- }
+-
+- shine_putbits( bs, code, cbits);
+- shine_putbits( bs, ext, xbits);
++ if (table_select > 15) { /* ESC-table is used */
++ unsigned linbitsx = 0, linbitsy = 0, linbits = h->linbits;
++
++ if (x > 14) {
++ linbitsx = x - 15;
++ x = 15;
++ }
++ if (y > 14) {
++ linbitsy = y - 15;
++ y = 15;
++ }
++
++ idx = (x * ylen) + y;
++ code = h->table[idx];
++ cbits = h->hlen[idx];
++ if (x > 14) {
++ ext |= linbitsx;
++ xbits += linbits;
+ }
+- else
+- { /* No ESC-words */
+- idx = (x * ylen) + y;
+- code = h->table[idx];
+- cbits = h->hlen[idx];
+- if ( x != 0 )
+- {
+- code <<= 1;
+- code |= signx;
+- cbits += 1;
+- }
+- if ( y != 0 )
+- {
+- code <<= 1;
+- code |= signy;
+- cbits += 1;
+- }
+-
+- shine_putbits( bs, code, cbits);
++ if (x != 0) {
++ ext <<= 1;
++ ext |= signx;
++ xbits += 1;
+ }
++ if (y > 14) {
++ ext <<= linbits;
++ ext |= linbitsy;
++ xbits += linbits;
++ }
++ if (y != 0) {
++ ext <<= 1;
++ ext |= signy;
++ xbits += 1;
++ }
++
++ shine_putbits(bs, code, cbits);
++ shine_putbits(bs, ext, xbits);
++ } else { /* No ESC-words */
++ idx = (x * ylen) + y;
++ code = h->table[idx];
++ cbits = h->hlen[idx];
++ if (x != 0) {
++ code <<= 1;
++ code |= signx;
++ cbits += 1;
++ }
++ if (y != 0) {
++ code <<= 1;
++ code |= signy;
++ cbits += 1;
++ }
++
++ shine_putbits(bs, code, cbits);
++ }
+ }
+diff --git a/src/lib/l3bitstream.h b/src/lib/l3bitstream.h
+index 6e165f5..fa61899 100644
+--- a/src/lib/l3bitstream.h
++++ b/src/lib/l3bitstream.h
+@@ -1,6 +1,8 @@
+ #ifndef shine_BITSTREAM_H
+ #define shine_BITSTREAM_H
+
++#include "types.h"
++
+ void shine_format_bitstream(shine_global_config *config);
+
+ #endif
+diff --git a/src/lib/l3loop.c b/src/lib/l3loop.c
+index 609c2b2..d3799fb 100644
+--- a/src/lib/l3loop.c
++++ b/src/lib/l3loop.c
+@@ -1,34 +1,40 @@
+ /* l3loop.c */
+
+-#include "types.h"
+-#include "tables.h"
+ #include "l3loop.h"
+-#include "layer3.h"
+-#include "huffman.h"
+ #include "bitstream.h"
++#include "huffman.h"
+ #include "l3bitstream.h"
++#include "layer3.h"
+ #include "reservoir.h"
++#include "tables.h"
++#include "types.h"
+
+-#define e 2.71828182845
+-#define CBLIMIT 21
++#define e 2.71828182845
++#define CBLIMIT 21
+ #define SFB_LMAX 22
+ #define en_tot_krit 10
+ #define en_dif_krit 100
+ #define en_scfsi_band_krit 10
+ #define xm_scfsi_band_krit 10
+
+-static void calc_scfsi(shine_psy_xmin_t *l3_xmin, int ch, int gr, shine_global_config *config);
++static void calc_scfsi(shine_psy_xmin_t *l3_xmin, int ch, int gr,
++ shine_global_config *config);
+ static int part2_length(int gr, int ch, shine_global_config *config);
+-static int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE], gr_info * cod_info, shine_global_config *config);
+-static int count_bit(int ix[GRANULE_SIZE], unsigned int start, unsigned int end, unsigned int table );
++static int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE],
++ gr_info *cod_info, shine_global_config *config);
++static int count_bit(int ix[GRANULE_SIZE], unsigned int start, unsigned int end,
++ unsigned int table);
+ static int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi);
+-static int new_choose_table( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end );
+-static void bigv_tab_select( int ix[GRANULE_SIZE], gr_info *cod_info );
+-static void subdivide(gr_info *cod_info, shine_global_config *config );
+-static int count1_bitcount( int ix[ GRANULE_SIZE ], gr_info *cod_info );
+-static void calc_runlen( int ix[GRANULE_SIZE], gr_info *cod_info );
+-static void calc_xmin(shine_psy_ratio_t *ratio, gr_info *cod_info, shine_psy_xmin_t *l3_xmin, int gr, int ch );
+-static int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config);
++static int new_choose_table(int ix[GRANULE_SIZE], unsigned int begin,
++ unsigned int end);
++static void bigv_tab_select(int ix[GRANULE_SIZE], gr_info *cod_info);
++static void subdivide(gr_info *cod_info, shine_global_config *config);
++static int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info);
++static void calc_runlen(int ix[GRANULE_SIZE], gr_info *cod_info);
++static void calc_xmin(shine_psy_ratio_t *ratio, gr_info *cod_info,
++ shine_psy_xmin_t *l3_xmin, int gr, int ch);
++static int quantize(int ix[GRANULE_SIZE], int stepsize,
++ shine_global_config *config);
+
+ /*
+ * shine_inner_loop:
+@@ -36,25 +42,22 @@ static int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *con
+ * The code selects the best quantizerStepSize for a particular set
+ * of scalefacs.
+ */
+-int shine_inner_loop(int ix[GRANULE_SIZE],
+- int max_bits, gr_info *cod_info, int gr, int ch,
+- shine_global_config *config )
+-{
++int shine_inner_loop(int ix[GRANULE_SIZE], int max_bits, gr_info *cod_info,
++ int gr, int ch, shine_global_config *config) {
+ int bits, c1bits, bvbits;
+
+- if(max_bits<0)
++ if (max_bits < 0)
+ cod_info->quantizerStepSize--;
+- do
+- {
+- while(quantize(ix,++cod_info->quantizerStepSize,config) > 8192); /* within table range? */
+-
+- calc_runlen(ix,cod_info); /* rzero,count1,big_values*/
+- bits = c1bits = count1_bitcount(ix,cod_info); /* count1_table selection*/
+- subdivide(cod_info, config); /* bigvalues sfb division */
+- bigv_tab_select(ix,cod_info); /* codebook selection*/
+- bits += bvbits = bigv_bitcount( ix, cod_info ); /* bit count */
+- }
+- while(bits>max_bits);
++ do {
++ while (quantize(ix, ++cod_info->quantizerStepSize, config) > 8192)
++ ; /* within table range? */
++
++ calc_runlen(ix, cod_info); /* rzero,count1,big_values*/
++ bits = c1bits = count1_bitcount(ix, cod_info); /* count1_table selection*/
++ subdivide(cod_info, config); /* bigvalues sfb division */
++ bigv_tab_select(ix, cod_info); /* codebook selection*/
++ bits += bvbits = bigv_bitcount(ix, cod_info); /* bit count */
++ } while (bits > max_bits);
+ return bits;
+ }
+
+@@ -66,21 +69,22 @@ int shine_inner_loop(int ix[GRANULE_SIZE],
+ * global gain. This module calls the inner iteration loop.
+ */
+
+-int shine_outer_loop( int max_bits,
+- shine_psy_xmin_t *l3_xmin, /* the allowed distortion of the scalefactor */
+- int ix[GRANULE_SIZE], /* vector of quantized values ix(0..575) */
+- int gr, int ch, shine_global_config *config)
+-{
++int shine_outer_loop(
++ int max_bits,
++ shine_psy_xmin_t *l3_xmin, /* the allowed distortion of the scalefactor */
++ int ix[GRANULE_SIZE], /* vector of quantized values ix(0..575) */
++ int gr, int ch, shine_global_config *config) {
+ int bits, huff_bits;
+- shine_side_info_t *side_info = &config->side_info;
++ shine_side_info_t *side_info = &config->side_info;
+ gr_info *cod_info = &side_info->gr[gr].ch[ch].tt;
+
+- cod_info->quantizerStepSize = bin_search_StepSize(max_bits,ix,cod_info, config);
++ cod_info->quantizerStepSize =
++ bin_search_StepSize(max_bits, ix, cod_info, config);
+
+- cod_info->part2_length = part2_length(gr,ch,config);
++ cod_info->part2_length = part2_length(gr, ch, config);
+ huff_bits = max_bits - cod_info->part2_length;
+
+- bits = shine_inner_loop(ix, huff_bits, cod_info, gr, ch, config );
++ bits = shine_inner_loop(ix, huff_bits, cod_info, gr, ch, config);
+ cod_info->part2_3_length = cod_info->part2_length + bits;
+
+ return cod_info->part2_3_length;
+@@ -90,18 +94,15 @@ int shine_outer_loop( int max_bits,
+ * shine_iteration_loop:
+ * ------------------
+ */
+-void shine_iteration_loop(shine_global_config *config)
+-{
++void shine_iteration_loop(shine_global_config *config) {
+ shine_psy_xmin_t l3_xmin;
+ gr_info *cod_info;
+ int max_bits;
+ int ch, gr, i;
+ int *ix;
+
+- for(ch=config->wave.channels; ch--; )
+- {
+- for(gr=0; gr<config->mpeg.granules_per_frame; gr++)
+- {
++ for (ch = config->wave.channels; ch--;) {
++ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) {
+ /* setup pointers */
+ ix = config->l3_enc[ch][gr];
+ config->l3loop.xr = config->mdct_freq[ch][gr];
+@@ -109,56 +110,58 @@ void shine_iteration_loop(shine_global_config *config)
+ /* Precalculate the square, abs, and maximum,
+ * for use later on.
+ */
+- for (i=GRANULE_SIZE, config->l3loop.xrmax=0; i--;)
+- {
+- config->l3loop.xrsq[i] = mulsr(config->l3loop.xr[i],config->l3loop.xr[i]);
++ for (i = GRANULE_SIZE, config->l3loop.xrmax = 0; i--;) {
++ config->l3loop.xrsq[i] =
++ mulsr(config->l3loop.xr[i], config->l3loop.xr[i]);
+ config->l3loop.xrabs[i] = labs(config->l3loop.xr[i]);
+- if(config->l3loop.xrabs[i]>config->l3loop.xrmax)
+- config->l3loop.xrmax=config->l3loop.xrabs[i];
++ if (config->l3loop.xrabs[i] > config->l3loop.xrmax)
++ config->l3loop.xrmax = config->l3loop.xrabs[i];
+ }
+
+- cod_info = (gr_info *) &(config->side_info.gr[gr].ch[ch]);
++ cod_info = (gr_info *)&(config->side_info.gr[gr].ch[ch]);
+ cod_info->sfb_lmax = SFB_LMAX - 1; /* gr_deco */
+
+- calc_xmin(&config->ratio, cod_info, &l3_xmin, gr, ch );
++ calc_xmin(&config->ratio, cod_info, &l3_xmin, gr, ch);
+
+- if ( config->mpeg.version == MPEG_I )
+- calc_scfsi(&l3_xmin,ch,gr,config);
++ if (config->mpeg.version == MPEG_I)
++ calc_scfsi(&l3_xmin, ch, gr, config);
+
+ /* calculation of number of available bit( per granule ) */
+- max_bits = shine_max_reservoir_bits(&config->pe[ch][gr],config);
++ max_bits = shine_max_reservoir_bits(&config->pe[ch][gr], config);
+
+ /* reset of iteration variables */
+- memset(config->scalefactor.l[gr][ch],0,sizeof(config->scalefactor.l[gr][ch]));
+- memset(config->scalefactor.s[gr][ch],0,sizeof(config->scalefactor.s[gr][ch]));
++ memset(config->scalefactor.l[gr][ch], 0,
++ sizeof(config->scalefactor.l[gr][ch]));
++ memset(config->scalefactor.s[gr][ch], 0,
++ sizeof(config->scalefactor.s[gr][ch]));
+
+- for ( i=4; i--; )
++ for (i = 4; i--;)
+ cod_info->slen[i] = 0;
+
+- cod_info->part2_3_length = 0;
+- cod_info->big_values = 0;
+- cod_info->count1 = 0;
++ cod_info->part2_3_length = 0;
++ cod_info->big_values = 0;
++ cod_info->count1 = 0;
+ cod_info->scalefac_compress = 0;
+- cod_info->table_select[0] = 0;
+- cod_info->table_select[1] = 0;
+- cod_info->table_select[2] = 0;
+- cod_info->region0_count = 0;
+- cod_info->region1_count = 0;
+- cod_info->part2_length = 0;
+- cod_info->preflag = 0;
+- cod_info->scalefac_scale = 0;
+- cod_info->count1table_select= 0;
++ cod_info->table_select[0] = 0;
++ cod_info->table_select[1] = 0;
++ cod_info->table_select[2] = 0;
++ cod_info->region0_count = 0;
++ cod_info->region1_count = 0;
++ cod_info->part2_length = 0;
++ cod_info->preflag = 0;
++ cod_info->scalefac_scale = 0;
++ cod_info->count1table_select = 0;
+
+ /* all spectral values zero ? */
+- if(config->l3loop.xrmax)
+- cod_info->part2_3_length = shine_outer_loop(max_bits,&l3_xmin,ix,
+- gr,ch,config);
++ if (config->l3loop.xrmax)
++ cod_info->part2_3_length =
++ shine_outer_loop(max_bits, &l3_xmin, ix, gr, ch, config);
+
+- shine_ResvAdjust(cod_info, config );
+- cod_info->global_gain = cod_info->quantizerStepSize+210;
++ shine_ResvAdjust(cod_info, config);
++ cod_info->global_gain = cod_info->quantizerStepSize + 210;
+
+ } /* for gr */
+- } /* for ch */
++ } /* for ch */
+
+ shine_ResvFrameEnd(config);
+ }
+@@ -168,21 +171,20 @@ void shine_iteration_loop(shine_global_config *config)
+ * -----------
+ * calculation of the scalefactor select information ( scfsi ).
+ */
+-void calc_scfsi( shine_psy_xmin_t *l3_xmin, int ch, int gr,
+- shine_global_config *config )
+-{
++void calc_scfsi(shine_psy_xmin_t *l3_xmin, int ch, int gr,
++ shine_global_config *config) {
+ shine_side_info_t *l3_side = &config->side_info;
+ /* This is the scfsi_band table from 2.4.2.7 of the IS */
+- static const int scfsi_band_long[5] = { 0, 6, 11, 16, 21 };
++ static const int scfsi_band_long[5] = {0, 6, 11, 16, 21};
+
+ int scfsi_band;
+- unsigned scfsi_set;
+
+ int sfb, start, end, i;
+ int condition = 0;
+ int temp;
+
+- const int *scalefac_band_long = &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
++ const int *scalefac_band_long =
++ &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
+
+ /* note. it goes quite a bit faster if you uncomment the next bit and exit
+ early from scfsi, but you then loose the advantage of common scale factors.
+@@ -194,82 +196,75 @@ void calc_scfsi( shine_psy_xmin_t *l3_xmin, int ch, int gr,
+ */
+
+ config->l3loop.xrmaxl[gr] = config->l3loop.xrmax;
+- scfsi_set = 0;
+
+ /* the total energy of the granule */
+- for ( temp = 0, i =GRANULE_SIZE; i--; )
+- temp += config->l3loop.xrsq[i]>>10; /* a bit of scaling to avoid overflow, (not very good) */
+- if ( temp )
+- config->l3loop.en_tot[gr] = log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */
++ for (temp = 0, i = GRANULE_SIZE; i--;)
++ temp += config->l3loop.xrsq[i] >>
++ 10; /* a bit of scaling to avoid overflow, (not very good) */
++ if (temp)
++ config->l3loop.en_tot[gr] =
++ log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */
+ else
+ config->l3loop.en_tot[gr] = 0;
+
+ /* the energy of each scalefactor band, en */
+ /* the allowed distortion of each scalefactor band, xm */
+
+- for(sfb=21; sfb--; )
+- {
+- start = scalefac_band_long[ sfb ];
+- end = scalefac_band_long[ sfb+1 ];
++ for (sfb = 21; sfb--;) {
++ start = scalefac_band_long[sfb];
++ end = scalefac_band_long[sfb + 1];
+
+- for ( temp = 0, i = start; i < end; i++ )
+- temp += config->l3loop.xrsq[i]>>10;
+- if ( temp )
+- config->l3loop.en[gr][sfb] = log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */
++ for (temp = 0, i = start; i < end; i++)
++ temp += config->l3loop.xrsq[i] >> 10;
++ if (temp)
++ config->l3loop.en[gr][sfb] =
++ log((double)temp * 4.768371584e-7) / LN2; /* 1024 / 0x7fffffff */
+ else
+ config->l3loop.en[gr][sfb] = 0;
+
+- if ( l3_xmin->l[gr][ch][sfb])
+- config->l3loop.xm[gr][sfb] = log( l3_xmin->l[gr][ch][sfb] ) / LN2;
++ if (l3_xmin->l[gr][ch][sfb])
++ config->l3loop.xm[gr][sfb] = log(l3_xmin->l[gr][ch][sfb]) / LN2;
+ else
+ config->l3loop.xm[gr][sfb] = 0;
+ }
+
+- if(gr==1)
+- {
++ if (gr == 1) {
+ int gr2, tp;
+
+- for(gr2=2; gr2--; )
+- {
++ for (gr2 = 2; gr2--;) {
+ /* The spectral values are not all zero */
+- if(config->l3loop.xrmaxl[gr2])
++ if (config->l3loop.xrmaxl[gr2])
+ condition++;
+
+ condition++;
+ }
+- if(abs(config->l3loop.en_tot[0]-config->l3loop.en_tot[1]) < en_tot_krit)
++ if (abs(config->l3loop.en_tot[0] - config->l3loop.en_tot[1]) < en_tot_krit)
+ condition++;
+- for(tp=0,sfb=21; sfb--; )
+- tp += abs(config->l3loop.en[0][sfb]-config->l3loop.en[1][sfb]);
++ for (tp = 0, sfb = 21; sfb--;)
++ tp += abs(config->l3loop.en[0][sfb] - config->l3loop.en[1][sfb]);
+ if (tp < en_dif_krit)
+ condition++;
+
+- if(condition==6)
+- {
+- for(scfsi_band=0;scfsi_band<4;scfsi_band++)
+- {
++ if (condition == 6) {
++ for (scfsi_band = 0; scfsi_band < 4; scfsi_band++) {
+ int sum0 = 0, sum1 = 0;
+ l3_side->scfsi[ch][scfsi_band] = 0;
+ start = scfsi_band_long[scfsi_band];
+- end = scfsi_band_long[scfsi_band+1];
+- for ( sfb = start; sfb < end; sfb++ )
+- {
+- sum0 += abs( config->l3loop.en[0][sfb] - config->l3loop.en[1][sfb] );
+- sum1 += abs( config->l3loop.xm[0][sfb] - config->l3loop.xm[1][sfb] );
++ end = scfsi_band_long[scfsi_band + 1];
++ for (sfb = start; sfb < end; sfb++) {
++ sum0 += abs(config->l3loop.en[0][sfb] - config->l3loop.en[1][sfb]);
++ sum1 += abs(config->l3loop.xm[0][sfb] - config->l3loop.xm[1][sfb]);
+ }
+
+- if(sum0<en_scfsi_band_krit && sum1<xm_scfsi_band_krit)
+- {
++ if (sum0 < en_scfsi_band_krit && sum1 < xm_scfsi_band_krit) {
+ l3_side->scfsi[ch][scfsi_band] = 1;
+- scfsi_set |= (1 << scfsi_band);
+- }
+- else
++ } else
+ l3_side->scfsi[ch][scfsi_band] = 0;
+ } /* for scfsi_band */
+- } /* if condition == 6 */
++ } /* if condition == 6 */
+ else
+- for(scfsi_band=0;scfsi_band<4;scfsi_band++)
+- l3_side->scfsi[ch][scfsi_band] = 0;
++ for (scfsi_band = 0; scfsi_band < 4; scfsi_band++)
++ l3_side->scfsi[ch][scfsi_band] = 0;
+ } /* if gr == 1 */
+ }
+
+@@ -279,27 +274,26 @@ void calc_scfsi( shine_psy_xmin_t *l3_xmin, int ch, int gr,
+ * calculates the number of bits needed to encode the scalefacs in the
+ * main data block.
+ */
+-int part2_length(int gr, int ch, shine_global_config *config)
+-{
++int part2_length(int gr, int ch, shine_global_config *config) {
+ int slen1, slen2, bits;
+ gr_info *gi = &config->side_info.gr[gr].ch[ch].tt;
+
+ bits = 0;
+
+ {
+- slen1 = shine_slen1_tab[ gi->scalefac_compress ];
+- slen2 = shine_slen2_tab[ gi->scalefac_compress ];
++ slen1 = shine_slen1_tab[gi->scalefac_compress];
++ slen2 = shine_slen2_tab[gi->scalefac_compress];
+
+- if ( !gr || !(config->side_info.scfsi[ch][0]) )
++ if (!gr || !(config->side_info.scfsi[ch][0]))
+ bits += (6 * slen1);
+
+- if ( !gr || !(config->side_info.scfsi[ch][1]) )
++ if (!gr || !(config->side_info.scfsi[ch][1]))
+ bits += (5 * slen1);
+
+- if ( !gr || !(config->side_info.scfsi[ch][2]) )
++ if (!gr || !(config->side_info.scfsi[ch][2]))
+ bits += (5 * slen2);
+
+- if ( !gr || !(config->side_info.scfsi[ch][3]) )
++ if (!gr || !(config->side_info.scfsi[ch][3]))
+ bits += (5 * slen2);
+ }
+ return bits;
+@@ -312,26 +306,22 @@ int part2_length(int gr, int ch, shine_global_config *config)
+ * as determined by the psychoacoustic model.
+ * xmin(sb) = ratio(sb) * en(sb) / bw(sb)
+ */
+-void calc_xmin(shine_psy_ratio_t *ratio,
+- gr_info *cod_info,
+- shine_psy_xmin_t *l3_xmin,
+- int gr, int ch )
+-{
++void calc_xmin(shine_psy_ratio_t *ratio, gr_info *cod_info,
++ shine_psy_xmin_t *l3_xmin, int gr, int ch) {
+ int sfb;
+
+- for ( sfb = cod_info->sfb_lmax; sfb--; )
+- {
+-/* note. xmin will always be zero with no psychoacoustic model
++ for (sfb = cod_info->sfb_lmax; sfb--;) {
++ /* note. xmin will always be zero with no psychoacoustic model
+
+- start = scalefac_band_long[ sfb ];
+- end = scalefac_band_long[ sfb+1 ];
+- bw = end - start;
++ start = scalefac_band_long[ sfb ];
++ end = scalefac_band_long[ sfb+1 ];
++ bw = end - start;
+
+- for ( en = 0, l = start; l < end; l++ )
+- en += config->l3loop.xrsq[l];
++ for ( en = 0, l = start; l < end; l++ )
++ en += config->l3loop.xrsq[l];
+
+- l3_xmin->l[gr][ch][sfb] = ratio->l[gr][ch][sfb] * en / bw;
+-*/
++ l3_xmin->l[gr][ch][sfb] = ratio->l[gr][ch][sfb] * en / bw;
++ */
+ l3_xmin->l[gr][ch][sfb] = 0;
+ }
+ }
+@@ -341,8 +331,7 @@ void calc_xmin(shine_psy_ratio_t *ratio,
+ * -------------------
+ * Calculates the look up tables used by the iteration loop.
+ */
+-void shine_loop_initialise(shine_global_config *config)
+-{
++void shine_loop_initialise(shine_global_config *config) {
+ int i;
+
+ /* quantize: stepsize conversion, fourth root of 2 table.
+@@ -350,24 +339,26 @@ void shine_loop_initialise(shine_global_config *config)
+ * in the spec because it is quicker to do x*y than x/y.
+ * The 0.5 is for rounding.
+ */
+- for(i=128; i--;)
+- {
+- config->l3loop.steptab[i] = pow(2.0,(double)(127-i)/4);
+- if((config->l3loop.steptab[i]*2)>0x7fffffff) /* MAXINT = 2**31 = 2**(124/4) */
+- config->l3loop.steptabi[i]=0x7fffffff;
++ for (i = 128; i--;) {
++ config->l3loop.steptab[i] = pow(2.0, (double)(127 - i) / 4);
++ if ((config->l3loop.steptab[i] * 2) >
++ 0x7fffffff) /* MAXINT = 2**31 = 2**(124/4) */
++ config->l3loop.steptabi[i] = 0x7fffffff;
+ else
+ /* The table is multiplied by 2 to give an extra bit of accuracy.
+ * In quantize, the long multiply does not shift it's result left one
+ * bit to compensate.
+ */
+- config->l3loop.steptabi[i] = (int32_t)((config->l3loop.steptab[i]*2) + 0.5);
++ config->l3loop.steptabi[i] =
++ (int32_t)((config->l3loop.steptab[i] * 2) + 0.5);
+ }
+
+ /* quantize: vector conversion, three quarter power table.
+ * The 0.5 is for rounding, the .0946 comes from the spec.
+ */
+- for(i=10000; i--;)
+- config->l3loop.int2idx[i] = (int)(sqrt(sqrt((double)i)*(double)i) - 0.0946 + 0.5);
++ for (i = 10000; i--;)
++ config->l3loop.int2idx[i] =
++ (int)(sqrt(sqrt((double)i) * (double)i) - 0.0946 + 0.5);
+ }
+
+ /*
+@@ -376,39 +367,37 @@ void shine_loop_initialise(shine_global_config *config)
+ * Function: Quantization of the vector xr ( -> ix).
+ * Returns maximum value of ix.
+ */
+-int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config )
+-{
++int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config) {
+ int i, max, ln;
+ int32_t scalei;
+ double scale, dbl;
+
+- scalei = config->l3loop.steptabi[stepsize+127]; /* 2**(-stepsize/4) */
++ scalei = config->l3loop.steptabi[stepsize + 127]; /* 2**(-stepsize/4) */
+
+ /* a quick check to see if ixmax will be less than 8192 */
+ /* this speeds up the early calls to bin_search_StepSize */
+- if((mulr(config->l3loop.xrmax,scalei)) > 165140) /* 8192**(4/3) */
++ if ((mulr(config->l3loop.xrmax, scalei)) > 165140) /* 8192**(4/3) */
+ max = 16384; /* no point in continuing, stepsize not big enough */
+ else
+- for(i=0, max=0;i<GRANULE_SIZE;i++)
+- {
++ for (i = 0, max = 0; i < GRANULE_SIZE; i++) {
+ /* This calculation is very sensitive. The multiply must round it's
+ * result or bad things happen to the quality.
+ */
+- ln = mulr(labs(config->l3loop.xr[i]),scalei);
++ ln = mulr(labs(config->l3loop.xr[i]), scalei);
+
+- if(ln<10000) /* ln < 10000 catches most values */
++ if (ln < 10000) /* ln < 10000 catches most values */
+ ix[i] = config->l3loop.int2idx[ln]; /* quick look up method */
+- else
+- {
++ else {
+ /* outside table range so have to do it using floats */
+- scale = config->l3loop.steptab[stepsize+127]; /* 2**(-stepsize/4) */
+- dbl = ((double)config->l3loop.xrabs[i]) * scale * 4.656612875e-10; /* 0x7fffffff */
+- ix[i] = (int)sqrt(sqrt(dbl)*dbl); /* dbl**(3/4) */
++ scale = config->l3loop.steptab[stepsize + 127]; /* 2**(-stepsize/4) */
++ dbl = ((double)config->l3loop.xrabs[i]) * scale *
++ 4.656612875e-10; /* 0x7fffffff */
++ ix[i] = (int)sqrt(sqrt(dbl) * dbl); /* dbl**(3/4) */
+ }
+
+ /* calculate ixmax while we're here */
+ /* note. ix cannot be negative */
+- if(max < ix[i])
++ if (max < ix[i])
+ max = ix[i];
+ }
+
+@@ -420,13 +409,13 @@ int quantize(int ix[GRANULE_SIZE], int stepsize, shine_global_config *config )
+ * -------
+ * Function: Calculate the maximum of ix from 0 to 575
+ */
+-static inline int ix_max( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end )
+-{
++static inline int ix_max(int ix[GRANULE_SIZE], unsigned int begin,
++ unsigned int end) {
+ register int i;
+ register int max = 0;
+
+- for(i=begin;i<end;i++)
+- if(max < ix[i])
++ for (i = begin; i < end; i++)
++ if (max < ix[i])
+ max = ix[i];
+ return max;
+ }
+@@ -437,28 +426,24 @@ static inline int ix_max( int ix[GRANULE_SIZE], unsigned int begin, unsigned int
+ * Function: Calculation of rzero, count1, big_values
+ * (Partitions ix into big values, quadruples and zeros).
+ */
+-void calc_runlen( int ix[GRANULE_SIZE], gr_info *cod_info )
+-{
++void calc_runlen(int ix[GRANULE_SIZE], gr_info *cod_info) {
+ int i;
+ int rzero = 0;
+
+- for ( i = GRANULE_SIZE; i > 1; i -= 2 )
+- if ( !ix[i-1] && !ix[i-2] )
++ for (i = GRANULE_SIZE; i > 1; i -= 2)
++ if (!ix[i - 1] && !ix[i - 2])
+ rzero++;
+ else
+ break;
+
+- cod_info->count1 = 0 ;
+- for ( ; i > 3; i -= 4 )
+- if ( ix[i-1] <= 1
+- && ix[i-2] <= 1
+- && ix[i-3] <= 1
+- && ix[i-4] <= 1 )
++ cod_info->count1 = 0;
++ for (; i > 3; i -= 4)
++ if (ix[i - 1] <= 1 && ix[i - 2] <= 1 && ix[i - 3] <= 1 && ix[i - 4] <= 1)
+ cod_info->count1++;
+ else
+ break;
+
+- cod_info->big_values = i>>1;
++ cod_info->big_values = i >> 1;
+ }
+
+ /*
+@@ -466,27 +451,29 @@ void calc_runlen( int ix[GRANULE_SIZE], gr_info *cod_info )
+ * ----------------
+ * Determines the number of bits to encode the quadruples.
+ */
+-int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info)
+-{
++int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info) {
+ int p, i, k;
+ int v, w, x, y, signbits;
+- int sum0 = 0,
+- sum1 = 0;
++ int sum0 = 0, sum1 = 0;
+
+- for(i=cod_info->big_values<<1, k=0; k<cod_info->count1; i+=4, k++)
+- {
++ for (i = cod_info->big_values << 1, k = 0; k < cod_info->count1;
++ i += 4, k++) {
+ v = ix[i];
+- w = ix[i+1];
+- x = ix[i+2];
+- y = ix[i+3];
++ w = ix[i + 1];
++ x = ix[i + 2];
++ y = ix[i + 3];
+
+- p = v + (w<<1) + (x<<2) + (y<<3);
++ p = v + (w << 1) + (x << 2) + (y << 3);
+
+ signbits = 0;
+- if(v!=0) signbits++;
+- if(w!=0) signbits++;
+- if(x!=0) signbits++;
+- if(y!=0) signbits++;
++ if (v != 0)
++ signbits++;
++ if (w != 0)
++ signbits++;
++ if (x != 0)
++ signbits++;
++ if (y != 0)
++ signbits++;
+
+ sum0 += signbits;
+ sum1 += signbits;
+@@ -495,13 +482,10 @@ int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info)
+ sum1 += shine_huffman_table[33].hlen[p];
+ }
+
+- if(sum0<sum1)
+- {
++ if (sum0 < sum1) {
+ cod_info->count1table_select = 0;
+ return sum0;
+- }
+- else
+- {
++ } else {
+ cod_info->count1table_select = 1;
+ return sum1;
+ }
+@@ -510,59 +494,56 @@ int count1_bitcount(int ix[GRANULE_SIZE], gr_info *cod_info)
+ /*
+ * subdivide:
+ * ----------
+- * presumable subdivides the bigvalue region which will use separate Huffman tables.
++ * presumable subdivides the bigvalue region which will use separate Huffman
++ * tables.
+ */
+-void subdivide(gr_info *cod_info, shine_global_config *config)
+-{
+- static const struct
+- {
++void subdivide(gr_info *cod_info, shine_global_config *config) {
++ static const struct {
+ unsigned region0_count;
+ unsigned region1_count;
+- } subdv_table[ 23 ] =
+- {
+- {0, 0}, /* 0 bands */
+- {0, 0}, /* 1 bands */
+- {0, 0}, /* 2 bands */
+- {0, 0}, /* 3 bands */
+- {0, 0}, /* 4 bands */
+- {0, 1}, /* 5 bands */
+- {1, 1}, /* 6 bands */
+- {1, 1}, /* 7 bands */
+- {1, 2}, /* 8 bands */
+- {2, 2}, /* 9 bands */
+- {2, 3}, /* 10 bands */
+- {2, 3}, /* 11 bands */
+- {3, 4}, /* 12 bands */
+- {3, 4}, /* 13 bands */
+- {3, 4}, /* 14 bands */
+- {4, 5}, /* 15 bands */
+- {4, 5}, /* 16 bands */
+- {4, 6}, /* 17 bands */
+- {5, 6}, /* 18 bands */
+- {5, 6}, /* 19 bands */
+- {5, 7}, /* 20 bands */
+- {6, 7}, /* 21 bands */
+- {6, 7}, /* 22 bands */
++ } subdv_table[23] = {
++ {0, 0}, /* 0 bands */
++ {0, 0}, /* 1 bands */
++ {0, 0}, /* 2 bands */
++ {0, 0}, /* 3 bands */
++ {0, 0}, /* 4 bands */
++ {0, 1}, /* 5 bands */
++ {1, 1}, /* 6 bands */
++ {1, 1}, /* 7 bands */
++ {1, 2}, /* 8 bands */
++ {2, 2}, /* 9 bands */
++ {2, 3}, /* 10 bands */
++ {2, 3}, /* 11 bands */
++ {3, 4}, /* 12 bands */
++ {3, 4}, /* 13 bands */
++ {3, 4}, /* 14 bands */
++ {4, 5}, /* 15 bands */
++ {4, 5}, /* 16 bands */
++ {4, 6}, /* 17 bands */
++ {5, 6}, /* 18 bands */
++ {5, 6}, /* 19 bands */
++ {5, 7}, /* 20 bands */
++ {6, 7}, /* 21 bands */
++ {6, 7}, /* 22 bands */
+ };
+
+- if (!cod_info->big_values)
+- { /* no big_values region */
++ if (!cod_info->big_values) { /* no big_values region */
+ cod_info->region0_count = 0;
+ cod_info->region1_count = 0;
+- }
+- else
+- {
+- const int *scalefac_band_long = &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
++ } else {
++ const int *scalefac_band_long =
++ &shine_scale_fact_band_index[config->mpeg.samplerate_index][0];
+ int bigvalues_region, scfb_anz, thiscount;
+
+ bigvalues_region = 2 * cod_info->big_values;
+
+ /* Calculate scfb_anz */
+ scfb_anz = 0;
+- while ( scalefac_band_long[scfb_anz] < bigvalues_region )
++ while (scalefac_band_long[scfb_anz] < bigvalues_region)
+ scfb_anz++;
+
+- for (thiscount = subdv_table[scfb_anz].region0_count; thiscount; thiscount--) {
++ for (thiscount = subdv_table[scfb_anz].region0_count; thiscount;
++ thiscount--) {
+ if (scalefac_band_long[thiscount + 1] <= bigvalues_region)
+ break;
+ }
+@@ -571,7 +552,8 @@ void subdivide(gr_info *cod_info, shine_global_config *config)
+
+ scalefac_band_long += cod_info->region0_count + 1;
+
+- for (thiscount = subdv_table[scfb_anz].region1_count; thiscount; thiscount--) {
++ for (thiscount = subdv_table[scfb_anz].region1_count; thiscount;
++ thiscount--) {
+ if (scalefac_band_long[thiscount + 1] <= bigvalues_region)
+ break;
+ }
+@@ -587,21 +569,22 @@ void subdivide(gr_info *cod_info, shine_global_config *config)
+ * ----------------
+ * Function: Select huffman code tables for bigvalues regions
+ */
+-void bigv_tab_select( int ix[GRANULE_SIZE], gr_info *cod_info )
+-{
++void bigv_tab_select(int ix[GRANULE_SIZE], gr_info *cod_info) {
+ cod_info->table_select[0] = 0;
+ cod_info->table_select[1] = 0;
+ cod_info->table_select[2] = 0;
+
+ {
+- if ( cod_info->address1 > 0 )
+- cod_info->table_select[0] = new_choose_table( ix, 0, cod_info->address1 );
++ if (cod_info->address1 > 0)
++ cod_info->table_select[0] = new_choose_table(ix, 0, cod_info->address1);
+
+- if ( cod_info->address2 > cod_info->address1 )
+- cod_info->table_select[1] = new_choose_table( ix, cod_info->address1, cod_info->address2 );
++ if (cod_info->address2 > cod_info->address1)
++ cod_info->table_select[1] =
++ new_choose_table(ix, cod_info->address1, cod_info->address2);
+
+- if ( cod_info->big_values<<1 > cod_info->address2 )
+- cod_info->table_select[2] = new_choose_table( ix, cod_info->address2, cod_info->big_values<<1 );
++ if (cod_info->big_values << 1 > cod_info->address2)
++ cod_info->table_select[2] =
++ new_choose_table(ix, cod_info->address2, cod_info->big_values << 1);
+ }
+ }
+
+@@ -614,98 +597,89 @@ void bigv_tab_select( int ix[GRANULE_SIZE], gr_info *cod_info )
+ * of the Huffman tables as defined in the IS (Table B.7), and will not work
+ * with any arbitrary tables.
+ */
+-int new_choose_table( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end )
+-{
++int new_choose_table(int ix[GRANULE_SIZE], unsigned int begin,
++ unsigned int end) {
+ int i, max;
+ int choice[2];
+ int sum[2];
+
+- max = ix_max(ix,begin,end);
+- if(!max)
++ max = ix_max(ix, begin, end);
++ if (!max)
+ return 0;
+
+ choice[0] = 0;
+ choice[1] = 0;
+
+- if(max<15)
+- {
++ if (max < 15) {
+ /* try tables with no linbits */
+- for ( i =14; i--; )
+- if ( shine_huffman_table[i].xlen > max )
+- {
++ for (i = 14; i--;)
++ if (shine_huffman_table[i].xlen > max) {
+ choice[0] = i;
+ break;
+ }
+
+- sum[0] = count_bit( ix, begin, end, choice[0] );
++ sum[0] = count_bit(ix, begin, end, choice[0]);
+
+- switch (choice[0])
+- {
+- case 2:
+- sum[1] = count_bit( ix, begin, end, 3 );
+- if ( sum[1] <= sum[0] )
+- choice[0] = 3;
+- break;
++ switch (choice[0]) {
++ case 2:
++ sum[1] = count_bit(ix, begin, end, 3);
++ if (sum[1] <= sum[0])
++ choice[0] = 3;
++ break;
+
+- case 5:
+- sum[1] = count_bit( ix, begin, end, 6 );
+- if ( sum[1] <= sum[0] )
+- choice[0] = 6;
+- break;
++ case 5:
++ sum[1] = count_bit(ix, begin, end, 6);
++ if (sum[1] <= sum[0])
++ choice[0] = 6;
++ break;
+
+- case 7:
+- sum[1] = count_bit( ix, begin, end, 8 );
+- if ( sum[1] <= sum[0] )
+- {
+- choice[0] = 8;
+- sum[0] = sum[1];
+- }
+- sum[1] = count_bit( ix, begin, end, 9 );
+- if ( sum[1] <= sum[0] )
+- choice[0] = 9;
+- break;
++ case 7:
++ sum[1] = count_bit(ix, begin, end, 8);
++ if (sum[1] <= sum[0]) {
++ choice[0] = 8;
++ sum[0] = sum[1];
++ }
++ sum[1] = count_bit(ix, begin, end, 9);
++ if (sum[1] <= sum[0])
++ choice[0] = 9;
++ break;
+
+- case 10:
+- sum[1] = count_bit( ix, begin, end, 11 );
+- if ( sum[1] <= sum[0] )
+- {
+- choice[0] = 11;
+- sum[0] = sum[1];
+- }
+- sum[1] = count_bit( ix, begin, end, 12 );
+- if ( sum[1] <= sum[0] )
+- choice[0] = 12;
+- break;
++ case 10:
++ sum[1] = count_bit(ix, begin, end, 11);
++ if (sum[1] <= sum[0]) {
++ choice[0] = 11;
++ sum[0] = sum[1];
++ }
++ sum[1] = count_bit(ix, begin, end, 12);
++ if (sum[1] <= sum[0])
++ choice[0] = 12;
++ break;
+
+- case 13:
+- sum[1] = count_bit( ix, begin, end, 15 );
+- if ( sum[1] <= sum[0] )
+- choice[0] = 15;
+- break;
++ case 13:
++ sum[1] = count_bit(ix, begin, end, 15);
++ if (sum[1] <= sum[0])
++ choice[0] = 15;
++ break;
+ }
+- }
+- else
+- {
++ } else {
+ /* try tables with linbits */
+ max -= 15;
+
+- for(i=15;i<24;i++)
+- if(shine_huffman_table[i].linmax>=max)
+- {
++ for (i = 15; i < 24; i++)
++ if (shine_huffman_table[i].linmax >= max) {
+ choice[0] = i;
+ break;
+ }
+
+- for(i=24;i<32;i++)
+- if(shine_huffman_table[i].linmax>=max)
+- {
++ for (i = 24; i < 32; i++)
++ if (shine_huffman_table[i].linmax >= max) {
+ choice[1] = i;
+ break;
+ }
+
+- sum[0] = count_bit(ix,begin,end,choice[0]);
+- sum[1] = count_bit(ix,begin,end,choice[1]);
+- if (sum[1]<sum[0])
++ sum[0] = count_bit(ix, begin, end, choice[0]);
++ sum[1] = count_bit(ix, begin, end, choice[1]);
++ if (sum[1] < sum[0])
+ choice[0] = choice[1];
+ }
+ return choice[0];
+@@ -716,17 +690,16 @@ int new_choose_table( int ix[GRANULE_SIZE], unsigned int begin, unsigned int end
+ * --------------
+ * Function: Count the number of bits necessary to code the bigvalues region.
+ */
+-int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi)
+-{
++int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi) {
+ int bits = 0;
+ unsigned int table;
+
+- if( (table=gi->table_select[0])) /* region0 */
+- bits += count_bit(ix, 0, gi->address1, table );
+- if( (table=gi->table_select[1])) /* region1 */
+- bits += count_bit(ix, gi->address1, gi->address2, table );
+- if( (table=gi->table_select[2])) /* region2 */
+- bits += count_bit(ix, gi->address2, gi->address3, table );
++ if ((table = gi->table_select[0])) /* region0 */
++ bits += count_bit(ix, 0, gi->address1, table);
++ if ((table = gi->table_select[1])) /* region1 */
++ bits += count_bit(ix, gi->address1, gi->address2, table);
++ if ((table = gi->table_select[2])) /* region2 */
++ bits += count_bit(ix, gi->address2, gi->address3, table);
+ return bits;
+ }
+
+@@ -735,61 +708,51 @@ int bigv_bitcount(int ix[GRANULE_SIZE], gr_info *gi)
+ * ----------
+ * Function: Count the number of bits necessary to code the subregion.
+ */
+-int count_bit(int ix[GRANULE_SIZE],
+- unsigned int start,
+- unsigned int end,
+- unsigned int table )
+-{
+- unsigned linbits, ylen;
+- register int i, sum;
+- register int x,y;
++int count_bit(int ix[GRANULE_SIZE], unsigned int start, unsigned int end,
++ unsigned int table) {
++ unsigned linbits, ylen;
++ register int i, sum;
++ register int x, y;
+ const struct huffcodetab *h;
+
+- if(!table)
++ if (!table)
+ return 0;
+
+- h = &(shine_huffman_table[table]);
++ h = &(shine_huffman_table[table]);
+ sum = 0;
+
+- ylen = h->ylen;
++ ylen = h->ylen;
+ linbits = h->linbits;
+
+- if(table>15)
+- { /* ESC-table is used */
+- for(i=start;i<end;i+=2)
+- {
++ if (table > 15) { /* ESC-table is used */
++ for (i = start; i < end; i += 2) {
+ x = ix[i];
+- y = ix[i+1];
+- if(x>14)
+- {
++ y = ix[i + 1];
++ if (x > 14) {
+ x = 15;
+ sum += linbits;
+ }
+- if(y>14)
+- {
++ if (y > 14) {
+ y = 15;
+ sum += linbits;
+ }
+
+- sum += h->hlen[(x*ylen)+y];
+- if(x)
++ sum += h->hlen[(x * ylen) + y];
++ if (x)
+ sum++;
+- if(y)
++ if (y)
+ sum++;
+ }
+- }
+- else
+- { /* No ESC-words */
+- for(i=start;i<end;i+=2)
+- {
++ } else { /* No ESC-words */
++ for (i = start; i < end; i += 2) {
+ x = ix[i];
+- y = ix[i+1];
++ y = ix[i + 1];
+
+- sum += h->hlen[(x*ylen)+y];
++ sum += h->hlen[(x * ylen) + y];
+
+- if(x!=0)
++ if (x != 0)
+ sum++;
+- if(y!=0)
++ if (y != 0)
+ sum++;
+ }
+ }
+@@ -809,20 +772,18 @@ int count_bit(int ix[GRANULE_SIZE],
+ * returns a good starting quantizerStepSize.
+ */
+ int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE],
+- gr_info * cod_info, shine_global_config *config)
+-{
++ gr_info *cod_info, shine_global_config *config) {
+ int bit, next, count;
+
+- next = -120;
++ next = -120;
+ count = 120;
+
+ do {
+ int half = count / 2;
+
+ if (quantize(ix, next + half, config) > 8192)
+- bit = 100000; /* fail */
+- else
+- {
++ bit = 100000; /* fail */
++ else {
+ calc_runlen(ix, cod_info); /* rzero,count1,big_values */
+ bit = count1_bitcount(ix, cod_info); /* count1_table selection */
+ subdivide(cod_info, config); /* bigvalues sfb division */
+@@ -832,8 +793,7 @@ int bin_search_StepSize(int desired_rate, int ix[GRANULE_SIZE],
+
+ if (bit < desired_rate)
+ count = half;
+- else
+- {
++ else {
+ next += half;
+ count -= half;
+ }
+diff --git a/src/lib/l3loop.h b/src/lib/l3loop.h
+index 0e71a91..94ecea3 100644
+--- a/src/lib/l3loop.h
++++ b/src/lib/l3loop.h
+@@ -1,9 +1,10 @@
+ #ifndef L3LOOP_H
+ #define L3LOOP_H
+
++#include "types.h"
++
+ void shine_loop_initialise(shine_global_config *config);
+
+ void shine_iteration_loop(shine_global_config *config);
+
+ #endif
+-
+diff --git a/src/lib/l3mdct.c b/src/lib/l3mdct.c
+index 7553a54..a76b702 100644
+--- a/src/lib/l3mdct.c
++++ b/src/lib/l3mdct.c
+@@ -1,88 +1,87 @@
+ /* L3mdct */
+
+-#include "types.h"
+ #include "l3mdct.h"
+ #include "l3subband.h"
++#include "types.h"
+
+ /* This is table B.9: coefficients for aliasing reduction */
+-#define MDCT_CA(coef) (int32_t)(coef / sqrt(1.0 + (coef * coef)) * 0x7fffffff)
+-#define MDCT_CS(coef) (int32_t)(1.0 / sqrt(1.0 + (coef * coef)) * 0x7fffffff)
++#define MDCT_CA(coef) (int32_t)(coef / sqrt(1.0 + (coef * coef)) * 0x7fffffff)
++#define MDCT_CS(coef) (int32_t)(1.0 / sqrt(1.0 + (coef * coef)) * 0x7fffffff)
+
+-#define MDCT_CA0 MDCT_CA(-0.6)
+-#define MDCT_CA1 MDCT_CA(-0.535)
+-#define MDCT_CA2 MDCT_CA(-0.33)
+-#define MDCT_CA3 MDCT_CA(-0.185)
+-#define MDCT_CA4 MDCT_CA(-0.095)
+-#define MDCT_CA5 MDCT_CA(-0.041)
+-#define MDCT_CA6 MDCT_CA(-0.0142)
+-#define MDCT_CA7 MDCT_CA(-0.0037)
++#define MDCT_CA0 MDCT_CA(-0.6)
++#define MDCT_CA1 MDCT_CA(-0.535)
++#define MDCT_CA2 MDCT_CA(-0.33)
++#define MDCT_CA3 MDCT_CA(-0.185)
++#define MDCT_CA4 MDCT_CA(-0.095)
++#define MDCT_CA5 MDCT_CA(-0.041)
++#define MDCT_CA6 MDCT_CA(-0.0142)
++#define MDCT_CA7 MDCT_CA(-0.0037)
+
+-#define MDCT_CS0 MDCT_CS(-0.6)
+-#define MDCT_CS1 MDCT_CS(-0.535)
+-#define MDCT_CS2 MDCT_CS(-0.33)
+-#define MDCT_CS3 MDCT_CS(-0.185)
+-#define MDCT_CS4 MDCT_CS(-0.095)
+-#define MDCT_CS5 MDCT_CS(-0.041)
+-#define MDCT_CS6 MDCT_CS(-0.0142)
+-#define MDCT_CS7 MDCT_CS(-0.0037)
++#define MDCT_CS0 MDCT_CS(-0.6)
++#define MDCT_CS1 MDCT_CS(-0.535)
++#define MDCT_CS2 MDCT_CS(-0.33)
++#define MDCT_CS3 MDCT_CS(-0.185)
++#define MDCT_CS4 MDCT_CS(-0.095)
++#define MDCT_CS5 MDCT_CS(-0.041)
++#define MDCT_CS6 MDCT_CS(-0.0142)
++#define MDCT_CS7 MDCT_CS(-0.0037)
+
+ /*
+ * shine_mdct_initialise:
+ * -------------------
+ */
+-void shine_mdct_initialise(shine_global_config *config)
+-{
+- int m,k;
++void shine_mdct_initialise(shine_global_config *config) {
++ int m, k;
+
+ /* prepare the mdct coefficients */
+- for(m=18; m--; )
+- for(k=36; k--; )
++ for (m = 18; m--;)
++ for (k = 36; k--;)
+ /* combine window and mdct coefficients into a single table */
+ /* scale and convert to fixed point before storing */
+- config->mdct.cos_l[m][k] = (int32_t)(sin(PI36*(k+0.5))
+- * cos((PI/72)*(2*k+19)*(2*m+1)) * 0x7fffffff);
++ config->mdct.cos_l[m][k] =
++ (int32_t)(sin(PI36 * (k + 0.5)) *
++ cos((PI / 72) * (2 * k + 19) * (2 * m + 1)) * 0x7fffffff);
+ }
+
+ /*
+ * shine_mdct_sub:
+ * ------------
+ */
+-void shine_mdct_sub(shine_global_config *config, int stride)
+-{
++void shine_mdct_sub(shine_global_config *config, int stride) {
+ /* note. we wish to access the array 'config->mdct_freq[2][2][576]' as
+ * [2][2][32][18]. (32*18=576),
+ */
+- int32_t (*mdct_enc)[18];
++ int32_t(*mdct_enc)[18];
+
+- int ch,gr,band,j,k;
++ int ch, gr, band, j, k;
+ int32_t mdct_in[36];
+
+- for(ch=config->wave.channels; ch--; )
+- {
+- for(gr=0; gr<config->mpeg.granules_per_frame; gr++)
+- {
++ for (ch = config->wave.channels; ch--;) {
++ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++) {
+ /* set up pointer to the part of config->mdct_freq we're using */
+- mdct_enc = (int32_t (*)[18]) config->mdct_freq[ch][gr];
++ mdct_enc = (int32_t(*)[18])config->mdct_freq[ch][gr];
+
+ /* polyphase filtering */
+- for(k=0; k<18; k+=2)
+- {
+- shine_window_filter_subband(&config->buffer[ch], &config->l3_sb_sample[ch][gr+1][k ][0], ch, config, stride);
+- shine_window_filter_subband(&config->buffer[ch], &config->l3_sb_sample[ch][gr+1][k+1][0], ch, config, stride);
++ for (k = 0; k < 18; k += 2) {
++ shine_window_filter_subband(&config->buffer[ch],
++ &config->l3_sb_sample[ch][gr + 1][k][0], ch,
++ config, stride);
++ shine_window_filter_subband(&config->buffer[ch],
++ &config->l3_sb_sample[ch][gr + 1][k + 1][0],
++ ch, config, stride);
+ /* Compensate for inversion in the analysis filter
+ * (every odd index of band AND k)
+ */
+- for(band=1; band<32; band+=2)
+- config->l3_sb_sample[ch][gr+1][k+1][band] *= -1;
++ for (band = 1; band < 32; band += 2)
++ config->l3_sb_sample[ch][gr + 1][k + 1][band] *= -1;
+ }
+
+- /* Perform imdct of 18 previous subband samples + 18 current subband samples */
+- for(band=0; band<32; band++)
+- {
+- for(k=18; k--; )
+- {
+- mdct_in[k ] = config->l3_sb_sample[ch][gr ][k][band];
+- mdct_in[k+18] = config->l3_sb_sample[ch][gr+1][k][band];
++ /* Perform imdct of 18 previous subband samples + 18 current subband
++ * samples */
++ for (band = 0; band < 32; band++) {
++ for (k = 18; k--;) {
++ mdct_in[k] = config->l3_sb_sample[ch][gr][k][band];
++ mdct_in[k + 18] = config->l3_sb_sample[ch][gr + 1][k][band];
+ }
+
+ /* Calculation of the MDCT
+@@ -90,41 +89,61 @@ void shine_mdct_sub(shine_global_config *config, int stride)
+ * 36 coefficients in the time domain and 18 in the frequency
+ * domain.
+ */
+- for(k=18; k--; )
+- {
++ for (k = 18; k--;) {
+ int32_t vm;
++#ifdef __BORLANDC__
++ uint32_t vm_lo;
++#else
+ uint32_t vm_lo __attribute__((unused));
++#endif
+
+ mul0(vm, vm_lo, mdct_in[35], config->mdct.cos_l[k][35]);
+- for(j=35; j; j-=7) {
+- muladd(vm, vm_lo, mdct_in[j-1], config->mdct.cos_l[k][j-1]);
+- muladd(vm, vm_lo, mdct_in[j-2], config->mdct.cos_l[k][j-2]);
+- muladd(vm, vm_lo, mdct_in[j-3], config->mdct.cos_l[k][j-3]);
+- muladd(vm, vm_lo, mdct_in[j-4], config->mdct.cos_l[k][j-4]);
+- muladd(vm, vm_lo, mdct_in[j-5], config->mdct.cos_l[k][j-5]);
+- muladd(vm, vm_lo, mdct_in[j-6], config->mdct.cos_l[k][j-6]);
+- muladd(vm, vm_lo, mdct_in[j-7], config->mdct.cos_l[k][j-7]);
++ for (j = 35; j; j -= 7) {
++ muladd(vm, vm_lo, mdct_in[j - 1], config->mdct.cos_l[k][j - 1]);
++ muladd(vm, vm_lo, mdct_in[j - 2], config->mdct.cos_l[k][j - 2]);
++ muladd(vm, vm_lo, mdct_in[j - 3], config->mdct.cos_l[k][j - 3]);
++ muladd(vm, vm_lo, mdct_in[j - 4], config->mdct.cos_l[k][j - 4]);
++ muladd(vm, vm_lo, mdct_in[j - 5], config->mdct.cos_l[k][j - 5]);
++ muladd(vm, vm_lo, mdct_in[j - 6], config->mdct.cos_l[k][j - 6]);
++ muladd(vm, vm_lo, mdct_in[j - 7], config->mdct.cos_l[k][j - 7]);
+ }
+ mulz(vm, vm_lo);
+ mdct_enc[band][k] = vm;
+ }
+
+ /* Perform aliasing reduction butterfly */
+- if (band != 0)
+- {
+- cmuls(mdct_enc[band][0], mdct_enc[band-1][17-0], mdct_enc[band][0], mdct_enc[band-1][17-0], MDCT_CS0, MDCT_CA0);
+- cmuls(mdct_enc[band][1], mdct_enc[band-1][17-1], mdct_enc[band][1], mdct_enc[band-1][17-1], MDCT_CS1, MDCT_CA1);
+- cmuls(mdct_enc[band][2], mdct_enc[band-1][17-2], mdct_enc[band][2], mdct_enc[band-1][17-2], MDCT_CS2, MDCT_CA2);
+- cmuls(mdct_enc[band][3], mdct_enc[band-1][17-3], mdct_enc[band][3], mdct_enc[band-1][17-3], MDCT_CS3, MDCT_CA3);
+- cmuls(mdct_enc[band][4], mdct_enc[band-1][17-4], mdct_enc[band][4], mdct_enc[band-1][17-4], MDCT_CS4, MDCT_CA4);
+- cmuls(mdct_enc[band][5], mdct_enc[band-1][17-5], mdct_enc[band][5], mdct_enc[band-1][17-5], MDCT_CS5, MDCT_CA5);
+- cmuls(mdct_enc[band][6], mdct_enc[band-1][17-6], mdct_enc[band][6], mdct_enc[band-1][17-6], MDCT_CS6, MDCT_CA6);
+- cmuls(mdct_enc[band][7], mdct_enc[band-1][17-7], mdct_enc[band][7], mdct_enc[band-1][17-7], MDCT_CS7, MDCT_CA7);
++ if (band != 0) {
++ cmuls(mdct_enc[band][0], mdct_enc[band - 1][17 - 0],
++ mdct_enc[band][0], mdct_enc[band - 1][17 - 0], MDCT_CS0,
++ MDCT_CA0);
++ cmuls(mdct_enc[band][1], mdct_enc[band - 1][17 - 1],
++ mdct_enc[band][1], mdct_enc[band - 1][17 - 1], MDCT_CS1,
++ MDCT_CA1);
++ cmuls(mdct_enc[band][2], mdct_enc[band - 1][17 - 2],
++ mdct_enc[band][2], mdct_enc[band - 1][17 - 2], MDCT_CS2,
++ MDCT_CA2);
++ cmuls(mdct_enc[band][3], mdct_enc[band - 1][17 - 3],
++ mdct_enc[band][3], mdct_enc[band - 1][17 - 3], MDCT_CS3,
++ MDCT_CA3);
++ cmuls(mdct_enc[band][4], mdct_enc[band - 1][17 - 4],
++ mdct_enc[band][4], mdct_enc[band - 1][17 - 4], MDCT_CS4,
++ MDCT_CA4);
++ cmuls(mdct_enc[band][5], mdct_enc[band - 1][17 - 5],
++ mdct_enc[band][5], mdct_enc[band - 1][17 - 5], MDCT_CS5,
++ MDCT_CA5);
++ cmuls(mdct_enc[band][6], mdct_enc[band - 1][17 - 6],
++ mdct_enc[band][6], mdct_enc[band - 1][17 - 6], MDCT_CS6,
++ MDCT_CA6);
++ cmuls(mdct_enc[band][7], mdct_enc[band - 1][17 - 7],
++ mdct_enc[band][7], mdct_enc[band - 1][17 - 7], MDCT_CS7,
++ MDCT_CA7);
+ }
+ }
+ }
+
+ /* Save latest granule's subband samples to be used in the next mdct call */
+- memcpy(config->l3_sb_sample[ch][0], config->l3_sb_sample[ch][config->mpeg.granules_per_frame], sizeof(config->l3_sb_sample[0][0]));
++ memcpy(config->l3_sb_sample[ch][0],
++ config->l3_sb_sample[ch][config->mpeg.granules_per_frame],
++ sizeof(config->l3_sb_sample[0][0]));
+ }
+ }
+diff --git a/src/lib/l3mdct.h b/src/lib/l3mdct.h
+index 1288259..3018eb9 100644
+--- a/src/lib/l3mdct.h
++++ b/src/lib/l3mdct.h
+@@ -1,7 +1,9 @@
+ #ifndef shine_MDCT_H
+ #define shine_MDCT_H
+
+-void shine_mdct_initialise();
++#include "types.h"
++
++void shine_mdct_initialise(shine_global_config *config);
+ void shine_mdct_sub(shine_global_config *config, int stride);
+
+ #endif
+diff --git a/src/lib/l3subband.c b/src/lib/l3subband.c
+index 58abf5f..78f428e 100644
+--- a/src/lib/l3subband.c
++++ b/src/lib/l3subband.c
+@@ -1,8 +1,8 @@
+ /* L3SubBand */
+
+-#include "types.h"
+-#include "tables.h"
+ #include "l3subband.h"
++#include "tables.h"
++#include "types.h"
+
+ /*
+ * shine_subband_initialise:
+@@ -11,23 +11,21 @@
+ * 9th decimal place accuracy of the filterbank tables in the ISO
+ * document. The coefficients are stored in #filter#
+ */
+-void shine_subband_initialise(shine_global_config *config)
+-{
+- int i,j;
++void shine_subband_initialise(shine_global_config *config) {
++ int i, j;
+ double filter;
+
+- for(i=MAX_CHANNELS; i-- ; ) {
++ for (i = MAX_CHANNELS; i--;) {
+ config->subband.off[i] = 0;
+ memset(config->subband.x[i], 0, sizeof(config->subband.x[i]));
+ }
+
+- for (i=SBLIMIT; i--; )
+- for (j=64; j--; )
+- {
+- if ((filter = 1e9*cos((double)((2*i+1)*(16-j)*PI64))) >= 0)
+- modf(filter+0.5, &filter);
++ for (i = SBLIMIT; i--;)
++ for (j = 64; j--;) {
++ if ((filter = 1e9 * cos((double)((2 * i + 1) * (16 - j) * PI64))) >= 0)
++ modf(filter + 0.5, &filter);
+ else
+- modf(filter-0.5, &filter);
++ modf(filter - 0.5, &filter);
+ /* scale and convert to fixed point before storing */
+ config->subband.fl[i][j] = (int32_t)(filter * (0x7fffffff * 1e-9));
+ }
+@@ -39,58 +37,90 @@ void shine_subband_initialise(shine_global_config *config)
+ * Overlapping window on PCM samples
+ * 32 16-bit pcm samples are scaled to fractional 2's complement and
+ * concatenated to the end of the window buffer #x#. The updated window
+- * buffer #x# is then windowed by the analysis window #shine_enwindow# to produce
+- * the windowed sample #z#
+- * Calculates the analysis filter bank coefficients
+- * The windowed samples #z# is filtered by the digital filter matrix #filter#
+- * to produce the subband samples #s#. This done by first selectively
+- * picking out values from the windowed samples, and then multiplying
+- * them by the filter matrix, producing 32 subband samples.
++ * buffer #x# is then windowed by the analysis window #shine_enwindow# to
++ * produce the windowed sample #z# Calculates the analysis filter bank
++ * coefficients The windowed samples #z# is filtered by the digital filter
++ * matrix #filter# to produce the subband samples #s#. This done by first
++ * selectively picking out values from the windowed samples, and then
++ * multiplying them by the filter matrix, producing 32 subband samples.
+ */
+-void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int ch, shine_global_config *config, int stride)
+-{
++void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int ch,
++ shine_global_config *config, int stride) {
+ int32_t y[64];
+- int i,j;
++ int i, j;
+ int16_t *ptr = *buffer;
+
+ /* replace 32 oldest samples with 32 new samples */
+- for (i=32;i--;) {
+- config->subband.x[ch][i+config->subband.off[ch]] = ((int32_t)*ptr) << 16;
++ for (i = 32; i--;) {
++ config->subband.x[ch][i + config->subband.off[ch]] = ((int32_t)*ptr) << 16;
+ ptr += stride;
+ }
+ *buffer = ptr;
+
+- for (i=64; i--; ) {
++ for (i = 64; i--;) {
+ int32_t s_value;
++#ifdef __BORLANDC__
++ uint32_t s_value_lo;
++#else
+ uint32_t s_value_lo __attribute__((unused));
++#endif
+
+- mul0 (s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (0<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (0<<6)]);
+- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (1<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (1<<6)]);
+- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (2<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (2<<6)]);
+- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (3<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (3<<6)]);
+- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (4<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (4<<6)]);
+- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (5<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (5<<6)]);
+- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (6<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (6<<6)]);
+- muladd(s_value, s_value_lo, config->subband.x[ch][(config->subband.off[ch] + i + (7<<6)) & (HAN_SIZE-1)], shine_enwindow[i + (7<<6)]);
+- mulz (s_value, s_value_lo);
++ mul0(s_value, s_value_lo,
++ config->subband
++ .x[ch][(config->subband.off[ch] + i + (0 << 6)) & (HAN_SIZE - 1)],
++ shine_enwindow[i + (0 << 6)]);
++ muladd(s_value, s_value_lo,
++ config->subband.x[ch][(config->subband.off[ch] + i + (1 << 6)) &
++ (HAN_SIZE - 1)],
++ shine_enwindow[i + (1 << 6)]);
++ muladd(s_value, s_value_lo,
++ config->subband.x[ch][(config->subband.off[ch] + i + (2 << 6)) &
++ (HAN_SIZE - 1)],
++ shine_enwindow[i + (2 << 6)]);
++ muladd(s_value, s_value_lo,
++ config->subband.x[ch][(config->subband.off[ch] + i + (3 << 6)) &
++ (HAN_SIZE - 1)],
++ shine_enwindow[i + (3 << 6)]);
++ muladd(s_value, s_value_lo,
++ config->subband.x[ch][(config->subband.off[ch] + i + (4 << 6)) &
++ (HAN_SIZE - 1)],
++ shine_enwindow[i + (4 << 6)]);
++ muladd(s_value, s_value_lo,
++ config->subband.x[ch][(config->subband.off[ch] + i + (5 << 6)) &
++ (HAN_SIZE - 1)],
++ shine_enwindow[i + (5 << 6)]);
++ muladd(s_value, s_value_lo,
++ config->subband.x[ch][(config->subband.off[ch] + i + (6 << 6)) &
++ (HAN_SIZE - 1)],
++ shine_enwindow[i + (6 << 6)]);
++ muladd(s_value, s_value_lo,
++ config->subband.x[ch][(config->subband.off[ch] + i + (7 << 6)) &
++ (HAN_SIZE - 1)],
++ shine_enwindow[i + (7 << 6)]);
++ mulz(s_value, s_value_lo);
+ y[i] = s_value;
+ }
+
+- config->subband.off[ch] = (config->subband.off[ch] + 480) & (HAN_SIZE-1); /* offset is modulo (HAN_SIZE)*/
++ config->subband.off[ch] = (config->subband.off[ch] + 480) &
++ (HAN_SIZE - 1); /* offset is modulo (HAN_SIZE)*/
+
+- for (i=SBLIMIT; i--; ) {
++ for (i = SBLIMIT; i--;) {
+ int32_t s_value;
++#ifdef __BORLANDC__
++ uint32_t s_value_lo;
++#else
+ uint32_t s_value_lo __attribute__((unused));
++#endif
+
+ mul0(s_value, s_value_lo, config->subband.fl[i][63], y[63]);
+- for (j=63; j; j-=7) {
+- muladd(s_value, s_value_lo, config->subband.fl[i][j-1], y[j-1]);
+- muladd(s_value, s_value_lo, config->subband.fl[i][j-2], y[j-2]);
+- muladd(s_value, s_value_lo, config->subband.fl[i][j-3], y[j-3]);
+- muladd(s_value, s_value_lo, config->subband.fl[i][j-4], y[j-4]);
+- muladd(s_value, s_value_lo, config->subband.fl[i][j-5], y[j-5]);
+- muladd(s_value, s_value_lo, config->subband.fl[i][j-6], y[j-6]);
+- muladd(s_value, s_value_lo, config->subband.fl[i][j-7], y[j-7]);
++ for (j = 63; j; j -= 7) {
++ muladd(s_value, s_value_lo, config->subband.fl[i][j - 1], y[j - 1]);
++ muladd(s_value, s_value_lo, config->subband.fl[i][j - 2], y[j - 2]);
++ muladd(s_value, s_value_lo, config->subband.fl[i][j - 3], y[j - 3]);
++ muladd(s_value, s_value_lo, config->subband.fl[i][j - 4], y[j - 4]);
++ muladd(s_value, s_value_lo, config->subband.fl[i][j - 5], y[j - 5]);
++ muladd(s_value, s_value_lo, config->subband.fl[i][j - 6], y[j - 6]);
++ muladd(s_value, s_value_lo, config->subband.fl[i][j - 7], y[j - 7]);
+ }
+ mulz(s_value, s_value_lo);
+ s[i] = s_value;
+diff --git a/src/lib/l3subband.h b/src/lib/l3subband.h
+index 9bfe861..5cfbef5 100644
+--- a/src/lib/l3subband.h
++++ b/src/lib/l3subband.h
+@@ -1,9 +1,11 @@
+ #ifndef L3SUBBAND_H
+ #define L3SUBBAND_H
+
++#include "types.h"
+ #include <stdint.h>
+
+-void shine_subband_initialise( shine_global_config *config );
+-void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int k, shine_global_config *config, int stride);
++void shine_subband_initialise(shine_global_config *config);
++void shine_window_filter_subband(int16_t **buffer, int32_t s[SBLIMIT], int k,
++ shine_global_config *config, int stride);
+
+ #endif
+diff --git a/src/lib/layer3.c b/src/lib/layer3.c
+index 0b574ad..f3d1ecd 100644
+--- a/src/lib/layer3.c
++++ b/src/lib/layer3.c
+@@ -1,28 +1,27 @@
+ /* layer3.c */
+
+-#include "types.h"
+-#include "tables.h"
+ #include "layer3.h"
+-#include "l3subband.h"
+-#include "l3mdct.h"
+-#include "l3loop.h"
+ #include "bitstream.h"
+ #include "l3bitstream.h"
++#include "l3loop.h"
++#include "l3mdct.h"
++#include "l3subband.h"
++#include "tables.h"
++#include "types.h"
+
+ static int granules_per_frame[4] = {
+ 1, /* MPEG 2.5 */
+- -1, /* Reserved */
++ -1, /* Reserved */
+ 1, /* MPEG II */
+- 2 /* MPEG I */
++ 2 /* MPEG I */
+ };
+
+ /* Set default values for important vars */
+-void shine_set_config_mpeg_defaults(shine_mpeg_t *mpeg)
+-{
++void shine_set_config_mpeg_defaults(shine_mpeg_t *mpeg) {
+ mpeg->bitr = 128;
+ mpeg->emph = NONE;
+ mpeg->copyright = 0;
+- mpeg->original = 1;
++ mpeg->original = 1;
+ }
+
+ int shine_mpeg_version(int samplerate_index) {
+@@ -38,56 +37,56 @@ int shine_mpeg_version(int samplerate_index) {
+ return MPEG_25;
+ }
+
+-int shine_find_samplerate_index(int freq)
+-{
++int shine_find_samplerate_index(int freq) {
+ int i;
+
+- for(i=0;i<9;i++)
+- if(freq==samplerates[i]) return i;
++ for (i = 0; i < 9; i++)
++ if (freq == samplerates[i])
++ return i;
+
+ return -1; /* error - not a valid samplerate for encoder */
+ }
+
+-int shine_find_bitrate_index(int bitr, int mpeg_version)
+-{
++int shine_find_bitrate_index(int bitr, int mpeg_version) {
+ int i;
+
+- for(i=0;i<16;i++)
+- if(bitr==bitrates[i][mpeg_version]) return i;
++ for (i = 0; i < 16; i++)
++ if (bitr == bitrates[i][mpeg_version])
++ return i;
+
+ return -1; /* error - not a valid samplerate for encoder */
+ }
+
+-int shine_check_config(int freq, int bitr)
+-{
++int shine_check_config(int freq, int bitr) {
+ int samplerate_index, bitrate_index, mpeg_version;
+
+ samplerate_index = shine_find_samplerate_index(freq);
+- if (samplerate_index < 0) return -1;
++ if (samplerate_index < 0)
++ return -1;
+
+ mpeg_version = shine_mpeg_version(samplerate_index);
+
+ bitrate_index = shine_find_bitrate_index(bitr, mpeg_version);
+- if (bitrate_index < 0) return -1;
++ if (bitrate_index < 0)
++ return -1;
+
+ return mpeg_version;
+ }
+
+-int shine_samples_per_pass(shine_t s)
+-{
++int shine_samples_per_pass(shine_t s) {
+ return s->mpeg.granules_per_frame * GRANULE_SIZE;
+ }
+
+ /* Compute default encoding values. */
+-shine_global_config *shine_initialise(shine_config_t *pub_config)
+-{
++shine_global_config *shine_initialise(shine_config_t *pub_config) {
+ double avg_slots_per_frame;
+ shine_global_config *config;
+
+- if (shine_check_config(pub_config->wave.samplerate, pub_config->mpeg.bitr) < 0)
++ if (shine_check_config(pub_config->wave.samplerate, pub_config->mpeg.bitr) <
++ 0)
+ return NULL;
+
+- config = calloc(1,sizeof(shine_global_config));
++ config = calloc(1, sizeof(shine_global_config));
+ if (config == NULL)
+ return config;
+
+@@ -96,65 +95,71 @@ shine_global_config *shine_initialise(shine_config_t *pub_config)
+ shine_loop_initialise(config);
+
+ /* Copy public config. */
+- config->wave.channels = pub_config->wave.channels;
+- config->wave.samplerate = pub_config->wave.samplerate;
+- config->mpeg.mode = pub_config->mpeg.mode;
+- config->mpeg.bitr = pub_config->mpeg.bitr;
+- config->mpeg.emph = pub_config->mpeg.emph;
+- config->mpeg.copyright = pub_config->mpeg.copyright;
+- config->mpeg.original = pub_config->mpeg.original;
++ config->wave.channels = pub_config->wave.channels;
++ config->wave.samplerate = pub_config->wave.samplerate;
++ config->mpeg.mode = pub_config->mpeg.mode;
++ config->mpeg.bitr = pub_config->mpeg.bitr;
++ config->mpeg.emph = pub_config->mpeg.emph;
++ config->mpeg.copyright = pub_config->mpeg.copyright;
++ config->mpeg.original = pub_config->mpeg.original;
+
+ /* Set default values. */
+- config->ResvMax = 0;
+- config->ResvSize = 0;
+- config->mpeg.layer = LAYER_III;
+- config->mpeg.crc = 0;
+- config->mpeg.ext = 0;
+- config->mpeg.mode_ext = 0;
+- config->mpeg.bits_per_slot = 8;
+-
+- config->mpeg.samplerate_index = shine_find_samplerate_index(config->wave.samplerate);
+- config->mpeg.version = shine_mpeg_version(config->mpeg.samplerate_index);
+- config->mpeg.bitrate_index = shine_find_bitrate_index(config->mpeg.bitr, config->mpeg.version);
++ config->ResvMax = 0;
++ config->ResvSize = 0;
++ config->mpeg.layer = LAYER_III;
++ config->mpeg.crc = 0;
++ config->mpeg.ext = 0;
++ config->mpeg.mode_ext = 0;
++ config->mpeg.bits_per_slot = 8;
++
++ config->mpeg.samplerate_index =
++ shine_find_samplerate_index(config->wave.samplerate);
++ config->mpeg.version = shine_mpeg_version(config->mpeg.samplerate_index);
++ config->mpeg.bitrate_index =
++ shine_find_bitrate_index(config->mpeg.bitr, config->mpeg.version);
+ config->mpeg.granules_per_frame = granules_per_frame[config->mpeg.version];
+
+ /* Figure average number of 'slots' per frame. */
+- avg_slots_per_frame = ((double)config->mpeg.granules_per_frame * GRANULE_SIZE /
+- ((double)config->wave.samplerate)) *
+- (1000*(double)config->mpeg.bitr /
+- (double)config->mpeg.bits_per_slot);
++ avg_slots_per_frame =
++ ((double)config->mpeg.granules_per_frame * GRANULE_SIZE /
++ ((double)config->wave.samplerate)) *
++ (1000 * (double)config->mpeg.bitr / (double)config->mpeg.bits_per_slot);
+
+- config->mpeg.whole_slots_per_frame = (int)avg_slots_per_frame;
++ config->mpeg.whole_slots_per_frame = (int)avg_slots_per_frame;
+
+- config->mpeg.frac_slots_per_frame = avg_slots_per_frame - (double)config->mpeg.whole_slots_per_frame;
+- config->mpeg.slot_lag = -config->mpeg.frac_slots_per_frame;
++ config->mpeg.frac_slots_per_frame =
++ avg_slots_per_frame - (double)config->mpeg.whole_slots_per_frame;
++ config->mpeg.slot_lag = -config->mpeg.frac_slots_per_frame;
+
+- if(config->mpeg.frac_slots_per_frame==0)
++ if (config->mpeg.frac_slots_per_frame == 0)
+ config->mpeg.padding = 0;
+
+ shine_open_bit_stream(&config->bs, BUFFER_SIZE);
+
+- memset((char *)&config->side_info,0,sizeof(shine_side_info_t));
++ memset((char *)&config->side_info, 0, sizeof(shine_side_info_t));
+
+ /* determine the mean bitrate for main data */
+ if (config->mpeg.granules_per_frame == 2) /* MPEG 1 */
+- config->sideinfo_len = 8 * ((config->wave.channels==1) ? 4 + 17 : 4 + 32);
+- else /* MPEG 2 */
+- config->sideinfo_len = 8 * ((config->wave.channels==1) ? 4 + 9 : 4 + 17);
++ config->sideinfo_len = 8 * ((config->wave.channels == 1) ? 4 + 17 : 4 + 32);
++ else /* MPEG 2 */
++ config->sideinfo_len = 8 * ((config->wave.channels == 1) ? 4 + 9 : 4 + 17);
+
+ return config;
+ }
+
+-static unsigned char *shine_encode_buffer_internal(shine_global_config *config, int *written, int stride)
+-{
+- if(config->mpeg.frac_slots_per_frame)
+- {
+- config->mpeg.padding = (config->mpeg.slot_lag <= (config->mpeg.frac_slots_per_frame - 1.0));
+- config->mpeg.slot_lag += (config->mpeg.padding - config->mpeg.frac_slots_per_frame);
++static unsigned char *shine_encode_buffer_internal(shine_global_config *config,
++ int *written, int stride) {
++ if (config->mpeg.frac_slots_per_frame) {
++ config->mpeg.padding =
++ (config->mpeg.slot_lag <= (config->mpeg.frac_slots_per_frame - 1.0));
++ config->mpeg.slot_lag +=
++ (config->mpeg.padding - config->mpeg.frac_slots_per_frame);
+ }
+
+- config->mpeg.bits_per_frame = 8*(config->mpeg.whole_slots_per_frame + config->mpeg.padding);
+- config->mean_bits = (config->mpeg.bits_per_frame - config->sideinfo_len)/config->mpeg.granules_per_frame;
++ config->mpeg.bits_per_frame =
++ 8 * (config->mpeg.whole_slots_per_frame + config->mpeg.padding);
++ config->mean_bits = (config->mpeg.bits_per_frame - config->sideinfo_len) /
++ config->mpeg.granules_per_frame;
+
+ /* apply mdct to the polyphase output */
+ shine_mdct_sub(config, stride);
+@@ -172,8 +177,8 @@ static unsigned char *shine_encode_buffer_internal(shine_global_config *config,
+ return config->bs.data;
+ }
+
+-unsigned char *shine_encode_buffer(shine_global_config *config, int16_t **data, int *written)
+-{
++unsigned char *shine_encode_buffer(shine_global_config *config, int16_t **data,
++ int *written) {
+ config->buffer[0] = data[0];
+ if (config->wave.channels == 2)
+ config->buffer[1] = data[1];
+@@ -181,8 +186,8 @@ unsigned char *shine_encode_buffer(shine_global_config *config, int16_t **data,
+ return shine_encode_buffer_internal(config, written, 1);
+ }
+
+-unsigned char *shine_encode_buffer_interleaved(shine_global_config *config, int16_t *data, int *written)
+-{
++unsigned char *shine_encode_buffer_interleaved(shine_global_config *config,
++ int16_t *data, int *written) {
+ config->buffer[0] = data;
+ if (config->wave.channels == 2)
+ config->buffer[1] = data + 1;
+@@ -197,7 +202,6 @@ unsigned char *shine_flush(shine_global_config *config, int *written) {
+ return config->bs.data;
+ }
+
+-
+ void shine_close(shine_global_config *config) {
+ shine_close_bit_stream(&config->bs);
+ free(config);
+diff --git a/src/lib/layer3.h b/src/lib/layer3.h
+index 7fb11e0..d72b6a4 100644
+--- a/src/lib/layer3.h
++++ b/src/lib/layer3.h
+@@ -5,48 +5,31 @@
+
+ /* This is the struct used to tell the encoder about the input PCM */
+
+-enum channels {
+- PCM_MONO = 1,
+- PCM_STEREO = 2
+-};
++enum channels { PCM_MONO = 1, PCM_STEREO = 2 };
+
+-enum mpeg_versions {
+- MPEG_I = 3,
+- MPEG_II = 2,
+- MPEG_25 = 0
+-};
++enum mpeg_versions { MPEG_I = 3, MPEG_II = 2, MPEG_25 = 0 };
+
+ /* Only Layer III currently implemented. */
+-enum mpeg_layers {
+- LAYER_III = 1
+-};
++enum mpeg_layers { LAYER_III = 1 };
+
+ typedef struct {
+- enum channels channels;
+- int samplerate;
++ enum channels channels;
++ int samplerate;
+ } shine_wave_t;
+
+-/* This is the struct the encoder uses to tell the encoder about the output MP3 */
++/* This is the struct the encoder uses to tell the encoder about the output MP3
++ */
+
+-enum modes {
+- STEREO = 0,
+- JOINT_STEREO = 1,
+- DUAL_CHANNEL = 2,
+- MONO = 3
+-};
++enum modes { STEREO = 0, JOINT_STEREO = 1, DUAL_CHANNEL = 2, MONO = 3 };
+
+-enum emph {
+- NONE = 0,
+- MU50_15 = 1,
+- CITT = 3
+-};
++enum emph { NONE = 0, MU50_15 = 1, CITT = 3 };
+
+ typedef struct {
+- enum modes mode; /* Stereo mode */
+- int bitr; /* Must conform to known bitrate */
+- enum emph emph; /* De-emphasis */
+- int copyright;
+- int original;
++ enum modes mode; /* Stereo mode */
++ int bitr; /* Must conform to known bitrate */
++ enum emph emph; /* De-emphasis */
++ int copyright;
++ int original;
+ } shine_mpeg_t;
+
+ typedef struct {
+@@ -60,7 +43,7 @@ typedef struct {
+ * const int samplerates[9] = {
+ * 44100, 48000, 32000, // MPEG-I
+ * 22050, 24000, 16000, // MPEG-II
+- * 11025, 12000, 8000 // MPEG-2.5
++ * 11025, 12000, 8000 // MPEG-2.5
+ * };
+ *
+ * const int bitrates[16][4] = {
+@@ -92,37 +75,37 @@ typedef struct shine_global_flags *shine_t;
+ /* Fill in a `mpeg_t` structure with default values. */
+ void shine_set_config_mpeg_defaults(shine_mpeg_t *mpeg);
+
+-/* Check if a given bitrate is supported by the encoder (see `bitrates` above for a list
+- * of acceptable values. */
++/* Check if a given bitrate is supported by the encoder (see `bitrates` above
++ * for a list of acceptable values. */
+ int shine_find_bitrate_index(int bitr, int mpeg_version);
+
+-/* Check if a given samplerate is supported by the encoder (see `samplerates` above for a list
+- * of acceptable values. */
++/* Check if a given samplerate is supported by the encoder (see `samplerates`
++ * above for a list of acceptable values. */
+ int shine_find_samplerate_index(int freq);
+
+ /* Returns the MPEG version used for the given samplerate index. See above
+- * `mpeg_versions` for a list of possible values. */
++ * `mpeg_versions` for a list of possible values. */
+ int shine_mpeg_version(int samplerate_index);
+
+-/* Check if a given bitrate and samplerate is supported by the encoder (see `samplerates`
+- * and `bitrates` above for a list of acceptable values).
++/* Check if a given bitrate and samplerate is supported by the encoder (see
++ * `samplerates` and `bitrates` above for a list of acceptable values).
+ *
+ * Returns -1 on error, mpeg_version on success. */
+ int shine_check_config(int freq, int bitr);
+
+ /* Pass a pointer to a `config_t` structure and returns an initialized
+- * encoder.
++ * encoder.
+ *
+ * Configuration data is copied over to the encoder. It is not possible
+ * to change its values after initializing the encoder at the moment.
+ *
+- * Checking for valid configuration values is left for the application to
+- * implement. You can use the `shine_find_bitrate_index` and
+- * `shine_find_samplerate_index` functions or the `bitrates` and
+- * `samplerates` arrays above to check those parameters. Mone and stereo
++ * Checking for valid configuration values is left for the application to
++ * implement. You can use the `shine_find_bitrate_index` and
++ * `shine_find_samplerate_index` functions or the `bitrates` and
++ * `samplerates` arrays above to check those parameters. Mone and stereo
+ * mode for wave and mpeg should also be consistent with each other.
+ *
+- * This function returns NULL if it was not able to allocate memory data for
++ * This function returns NULL if it was not able to allocate memory data for
+ * the encoder. */
+ shine_t shine_initialise(shine_config_t *config);
+
+@@ -132,26 +115,28 @@ shine_t shine_initialise(shine_config_t *config);
+ /* Returns audio samples expected in each frame. */
+ int shine_samples_per_pass(shine_t s);
+
+-/* Encode audio data. Source data must have `shine_samples_per_pass(s)` audio samples per
+- * channels. Mono encoder only expect one channel.
++/* Encode audio data. Source data must have `shine_samples_per_pass(s)` audio
++ * samples per channels. Mono encoder only expect one channel.
+ *
+- * Returns a pointer to freshly encoded data while `written` contains the size of
+- * available data. This pointer's memory is handled by the library and is only valid
+- * until the next call to `shine_encode_buffer` or `shine_close` and may be NULL if no data
+- * was written. */
++ * Returns a pointer to freshly encoded data while `written` contains the size
++ * of available data. This pointer's memory is handled by the library and is
++ * only valid until the next call to `shine_encode_buffer` or `shine_close` and
++ * may be NULL if no data was written. */
+ unsigned char *shine_encode_buffer(shine_t s, int16_t **data, int *written);
+
+-/* Encode interleaved audio data. Source data must have `shine_samples_per_pass(s)` audio samples per
+- * channels. Mono encoder only expect one channel.
++/* Encode interleaved audio data. Source data must have
++ * `shine_samples_per_pass(s)` audio samples per channels. Mono encoder only
++ * expect one channel.
+ *
+- * Returns a pointer to freshly encoded data while `written` contains the size of
+- * available data. This pointer's memory is handled by the library and is only valid
+- * until the next call to `shine_encode_buffer` or `shine_close` and may be NULL if no data
+- * was written. */
+-unsigned char *shine_encode_buffer_interleaved(shine_t s, int16_t *data, int *written);
+-
+-/* Flush all data currently in the encoding buffer. Should be used before closing
+- * the encoder, to make all encoded data has been written. */
++ * Returns a pointer to freshly encoded data while `written` contains the size
++ * of available data. This pointer's memory is handled by the library and is
++ * only valid until the next call to `shine_encode_buffer` or `shine_close` and
++ * may be NULL if no data was written. */
++unsigned char *shine_encode_buffer_interleaved(shine_t s, int16_t *data,
++ int *written);
++
++/* Flush all data currently in the encoding buffer. Should be used before
++ * closing the encoder, to make all encoded data has been written. */
+ unsigned char *shine_flush(shine_t s, int *written);
+
+ /* Close an encoder, freeing all associated memory. Encoder handler is not
+diff --git a/src/lib/mult_mips_gcc.h b/src/lib/mult_mips_gcc.h
+index 092ed84..d49d215 100644
+--- a/src/lib/mult_mips_gcc.h
++++ b/src/lib/mult_mips_gcc.h
+@@ -1,51 +1,50 @@
+ #include <stdint.h>
+
+-#define mul(a,b) \
+-({ \
+- register int32_t res; \
+- __asm__ __volatile__("mult %0, %1" : : "r" (a), "r" (b)); \
+- __asm__ __volatile__("mfhi %0" : "=r" (res)); \
+- res; \
+-})
++#define mul(a, b) \
++ ({ \
++ register int32_t res; \
++ __asm__ __volatile__("mult %0, %1" : : "r"(a), "r"(b)); \
++ __asm__ __volatile__("mfhi %0" : "=r"(res)); \
++ res; \
++ })
+
+-#define mul0(hi,lo,a,b) \
+- __asm__ __volatile__("mult %0, %1" : : "r" (a), "r" (b))
++#define mul0(hi, lo, a, b) \
++ __asm__ __volatile__("mult %0, %1" : : "r"(a), "r"(b))
+
+-#define muladd(hi,lo,a,b) \
+- __asm__ __volatile__("madd %0, %1" : : "r" (a), "r" (b))
++#define muladd(hi, lo, a, b) \
++ __asm__ __volatile__("madd %0, %1" : : "r"(a), "r"(b))
+
+-#define mulsub(hi,lo,a,b) \
+- __asm__ __volatile__("msub %0, %1" : : "r" (a), "r" (b))
++#define mulsub(hi, lo, a, b) \
++ __asm__ __volatile__("msub %0, %1" : : "r"(a), "r"(b))
+
+-#define mulz(hi,lo) \
+-do { \
+- register int32_t t; \
+- __asm__ __volatile__("mfhi %0" : "=r" (t)); \
+- (hi) = t; \
+-} while (0)
++#define mulz(hi, lo) \
++ do { \
++ register int32_t t; \
++ __asm__ __volatile__("mfhi %0" : "=r"(t)); \
++ (hi) = t; \
++ } while (0)
+
+-#define cmuls(dre, dim, are, aim, bre, bim) \
+-do { \
+- register int32_t t1, t2, tre; \
+- __asm__ __volatile__("mult %0, %1" : : "r" (are), "r" (bre)); \
+- __asm__ __volatile__("msub %0, %1" : : "r" (aim), "r" (bim)); \
+- __asm__ __volatile__("mfhi %0; mflo %1" : "=r" (t1), "=r" (t2)); \
+- tre = (t1 << 1) | ((uint32_t)t2 >> 31); \
+- __asm__ __volatile__("mult %0, %1" : : "r" (are), "r" (bim)); \
+- __asm__ __volatile__("madd %0, %1" : : "r" (bre), "r" (aim)); \
+- dre = tre; \
+- __asm__ __volatile__("mfhi %0; mflo %1" : "=r" (t1), "=r" (t2)); \
+- dim = (t1 << 1) | ((uint32_t)t2 >> 31); \
+-} while (0)
++#define cmuls(dre, dim, are, aim, bre, bim) \
++ do { \
++ register int32_t t1, t2, tre; \
++ __asm__ __volatile__("mult %0, %1" : : "r"(are), "r"(bre)); \
++ __asm__ __volatile__("msub %0, %1" : : "r"(aim), "r"(bim)); \
++ __asm__ __volatile__("mfhi %0; mflo %1" : "=r"(t1), "=r"(t2)); \
++ tre = (t1 << 1) | ((uint32_t)t2 >> 31); \
++ __asm__ __volatile__("mult %0, %1" : : "r"(are), "r"(bim)); \
++ __asm__ __volatile__("madd %0, %1" : : "r"(bre), "r"(aim)); \
++ dre = tre; \
++ __asm__ __volatile__("mfhi %0; mflo %1" : "=r"(t1), "=r"(t2)); \
++ dim = (t1 << 1) | ((uint32_t)t2 >> 31); \
++ } while (0)
+
+ #if __mips_isa_rev >= 2
+-static inline uint32_t SWAB32(uint32_t x)
+-{
+- __asm__(
+- " wsbh %0, %1 \n"
+- " rotr %0, %0, 16 \n"
+- : "=r" (x) : "r" (x));
+- return x;
++static inline uint32_t SWAB32(uint32_t x) {
++ __asm__(" wsbh %0, %1 \n"
++ " rotr %0, %0, 16 \n"
++ : "=r"(x)
++ : "r"(x));
++ return x;
+ }
+ #define SWAB32 SWAB32
+ #endif
+diff --git a/src/lib/mult_noarch_gcc.h b/src/lib/mult_noarch_gcc.h
+index 516e66c..2ee207e 100644
+--- a/src/lib/mult_noarch_gcc.h
++++ b/src/lib/mult_noarch_gcc.h
+@@ -1,34 +1,40 @@
+ #include <stdint.h>
+
+ #ifndef mul
+-#define mul(a,b) (int32_t) ( ( ((int64_t) a) * ((int64_t) b) ) >>32 )
++#define mul(a, b) (int32_t)((((int64_t)a) * ((int64_t)b)) >> 32)
+ #endif
+
+ #ifndef muls
+-#define muls(a,b) (int32_t) ( ( ((int64_t) a) * ((int64_t) b) ) >>31 )
++#define muls(a, b) (int32_t)((((int64_t)a) * ((int64_t)b)) >> 31)
+ #endif
+
+ #ifndef mulr
+-#define mulr(a,b) (int32_t) ( ( ( ((int64_t) a) * ((int64_t) b)) + 0x80000000LL ) >>32 )
++#define mulr(a, b) \
++ (int32_t)(((((int64_t)a) * ((int64_t)b)) + 0x80000000LL) >> 32)
+ #endif
+
+ #ifndef mulsr
+-#define mulsr(a,b) (int32_t) ( ( ( ((int64_t) a) * ((int64_t) b)) + 0x40000000LL ) >>31 )
++#define mulsr(a, b) \
++ (int32_t)(((((int64_t)a) * ((int64_t)b)) + 0x40000000LL) >> 31)
+ #endif
+
+ #ifndef mul0
+-#define mul0(hi,lo,a,b) ((hi) = mul((a), (b)))
+-#define muladd(hi,lo,a,b) ((hi) += mul((a), (b)))
+-#define mulsub(hi,lo,a,b) ((hi) -= mul((a), (b)))
+-#define mulz(hi,lo)
++#define mul0(hi, lo, a, b) ((hi) = mul((a), (b)))
++#define muladd(hi, lo, a, b) ((hi) += mul((a), (b)))
++#define mulsub(hi, lo, a, b) ((hi) -= mul((a), (b)))
++#define mulz(hi, lo)
+ #endif
+
+ #ifndef cmuls
+-#define cmuls(dre, dim, are, aim, bre, bim) \
+-do { \
+- int32_t tre; \
+- (tre) = (int32_t) (((int64_t) (are) * (int64_t) (bre) - (int64_t) (aim) * (int64_t) (bim)) >> 31); \
+- (dim) = (int32_t) (((int64_t) (are) * (int64_t) (bim) + (int64_t) (aim) * (int64_t) (bre)) >> 31); \
+- (dre) = tre; \
+-} while (0)
++#define cmuls(dre, dim, are, aim, bre, bim) \
++ do { \
++ int32_t tre; \
++ (tre) = (int32_t)(((int64_t)(are) * (int64_t)(bre) - \
++ (int64_t)(aim) * (int64_t)(bim)) >> \
++ 31); \
++ (dim) = (int32_t)(((int64_t)(are) * (int64_t)(bim) + \
++ (int64_t)(aim) * (int64_t)(bre)) >> \
++ 31); \
++ (dre) = tre; \
++ } while (0)
+ #endif
+diff --git a/src/lib/mult_sarm_gcc.h b/src/lib/mult_sarm_gcc.h
+index d229eff..0cf8e08 100644
+--- a/src/lib/mult_sarm_gcc.h
++++ b/src/lib/mult_sarm_gcc.h
+@@ -2,108 +2,102 @@
+
+ /* Fractional multiply */
+ #if __ARM_ARCH >= 6
+-#define mul(x,y) \
+-({ \
+- register int32_t result; \
+- asm ("smmul %0, %2, %1" : "=r" (result) : "r" (x), "r" (y)); \
+- result ;\
+-})
++#define mul(x, y) \
++ ({ \
++ register int32_t result; \
++ asm("smmul %0, %2, %1" : "=r"(result) : "r"(x), "r"(y)); \
++ result; \
++ })
+ #else
+-#define mul(x,y) \
+-({ \
+- register int32_t result; \
+- asm ("smull r3, %0, %2, %1" : "=r" (result) : "r" (x), "r" (y) : "r3"); \
+- result ; \
+-})
++#define mul(x, y) \
++ ({ \
++ register int32_t result; \
++ asm("smull r3, %0, %2, %1" : "=r"(result) : "r"(x), "r"(y) : "r3"); \
++ result; \
++ })
+ #endif
+
+ /* Fractional multiply with single bit left shift. */
+-#define muls(x,y) \
+-({ \
+- register int32_t result; \
+- asm ( \
+- "smull r3, %0, %2, %1\n\t" \
+- "movs r3, r3, lsl #1\n\t" \
+- "adc %0, %0, %0" \
+- : "=r" (result) : "r" (x), "r" (y) : "r3", "cc" \
+- ); \
+- result; \
+-})
+-
++#define muls(x, y) \
++ ({ \
++ register int32_t result; \
++ asm("smull r3, %0, %2, %1\n\t" \
++ "movs r3, r3, lsl #1\n\t" \
++ "adc %0, %0, %0" \
++ : "=r"(result) \
++ : "r"(x), "r"(y) \
++ : "r3", "cc"); \
++ result; \
++ })
+
+ #if __ARM_ARCH >= 6
+-#define mulr(x,y) \
+-({ \
+- register int32_t result; \
+- asm ( \
+- "smmulr %0, %2, %1" : "=r" (result) : "r" (x), "r" (y) \
+- ); \
+- result; \
+-})
++#define mulr(x, y) \
++ ({ \
++ register int32_t result; \
++ asm("smmulr %0, %2, %1" : "=r"(result) : "r"(x), "r"(y)); \
++ result; \
++ })
+ #else
+-#define mulr(x,y) \
+-({ \
+- register int32_t result; \
+- asm ( \
+- "smull r3, %0, %2, %1\n\t" \
+- "adds r3, r3, #0x80000000\n\t" \
+- "adc %0, %0, #0" \
+- : "=r" (result) : "r" (x), "r" (y) : "r3", "cc" \
+- ); \
+- result; \
+-})
++#define mulr(x, y) \
++ ({ \
++ register int32_t result; \
++ asm("smull r3, %0, %2, %1\n\t" \
++ "adds r3, r3, #0x80000000\n\t" \
++ "adc %0, %0, #0" \
++ : "=r"(result) \
++ : "r"(x), "r"(y) \
++ : "r3", "cc"); \
++ result; \
++ })
+ #endif
+
+-#define mulsr(x,y) \
+-({ \
+- register int32_t result; \
+- asm ( \
+- "smull r3, %0, %1, %2\n\t" \
+- "movs r3, r3, lsl #1\n\t" \
+- "adc %0, %0, %0\n\t" \
+- "adds r3, r3, #0x80000000\n\t" \
+- "adc %0, %0, #0" \
+- : "=r" (result) : "r" (x), "r" (y) : "r3", "cc" \
+- ); \
+- result; \
+-})
++#define mulsr(x, y) \
++ ({ \
++ register int32_t result; \
++ asm("smull r3, %0, %1, %2\n\t" \
++ "movs r3, r3, lsl #1\n\t" \
++ "adc %0, %0, %0\n\t" \
++ "adds r3, r3, #0x80000000\n\t" \
++ "adc %0, %0, #0" \
++ : "=r"(result) \
++ : "r"(x), "r"(y) \
++ : "r3", "cc"); \
++ result; \
++ })
+
+-#define mul0(hi,lo,a,b) \
+- asm ("smull %0, %1, %2, %3" : "=r" (lo), "=r" (hi) : "r" (a), "r" (b))
++#define mul0(hi, lo, a, b) \
++ asm("smull %0, %1, %2, %3" : "=r"(lo), "=r"(hi) : "r"(a), "r"(b))
+
+-#define muladd(hi,lo,a,b) \
+- asm ("smlal %0, %1, %2, %3" : "+r" (lo), "+r" (hi) : "r" (a), "r" (b))
++#define muladd(hi, lo, a, b) \
++ asm("smlal %0, %1, %2, %3" : "+r"(lo), "+r"(hi) : "r"(a), "r"(b))
+
+-#define mulsub(hi,lo,a,b) \
+- asm ("smlal %0, %1, %2, %3" : "+r" (lo), "+r" (hi) : "r" (a), "r" (-(b)))
++#define mulsub(hi, lo, a, b) \
++ asm("smlal %0, %1, %2, %3" : "+r"(lo), "+r"(hi) : "r"(a), "r"(-(b)))
+
+-#define mulz(hi,lo)
++#define mulz(hi, lo)
+
+-#define cmuls(dre, dim, are, aim, bre, bim) \
+-do { \
+- register int32_t tre, tim; \
+- asm ( \
+- "smull r3, %0, %2, %4\n\t" \
+- "smlal r3, %0, %3, %5\n\t" \
+- "movs r3, r3, lsl #1\n\t" \
+- "adc %0, %0, %0\n\t" \
+- "smull r3, %1, %2, %6\n\t" \
+- "smlal r3, %1, %4, %3\n\t" \
+- "movs r3, r3, lsl #1\n\t" \
+- "adc %1, %1, %1\n\t" \
+- : "=&r" (tre), "=&r" (tim) \
+- : "r" (are), "r" (aim), "r" (bre), "r" (-(bim)), "r" (bim) \
+- : "r3", "cc" \
+- ); \
+- dre = tre; \
+- dim = tim; \
+-} while (0)
++#define cmuls(dre, dim, are, aim, bre, bim) \
++ do { \
++ register int32_t tre, tim; \
++ asm("smull r3, %0, %2, %4\n\t" \
++ "smlal r3, %0, %3, %5\n\t" \
++ "movs r3, r3, lsl #1\n\t" \
++ "adc %0, %0, %0\n\t" \
++ "smull r3, %1, %2, %6\n\t" \
++ "smlal r3, %1, %4, %3\n\t" \
++ "movs r3, r3, lsl #1\n\t" \
++ "adc %1, %1, %1\n\t" \
++ : "=&r"(tre), "=&r"(tim) \
++ : "r"(are), "r"(aim), "r"(bre), "r"(-(bim)), "r"(bim) \
++ : "r3", "cc"); \
++ dre = tre; \
++ dim = tim; \
++ } while (0)
+
+ #if __ARM_ARCH >= 6
+-static inline uint32_t SWAB32(uint32_t x)
+-{
+- asm ("rev %0, %1" : "=r" (x) : "r" (x));
+- return x;
++static inline uint32_t SWAB32(uint32_t x) {
++ asm("rev %0, %1" : "=r"(x) : "r"(x));
++ return x;
+ }
+ #define SWAB32 SWAB32
+ #endif
+diff --git a/src/lib/reservoir.c b/src/lib/reservoir.c
+index ca84f3d..cea0a9b 100644
+--- a/src/lib/reservoir.c
++++ b/src/lib/reservoir.c
+@@ -2,13 +2,13 @@
+ * Layer3 bit reservoir: Described in C.1.5.4.2.2 of the IS
+ */
+
+-#include "types.h"
+-#include "layer3.h"
+-#include "l3loop.h"
+-#include "huffman.h"
++#include "reservoir.h"
+ #include "bitstream.h"
++#include "huffman.h"
+ #include "l3bitstream.h"
+-#include "reservoir.h"
++#include "l3loop.h"
++#include "layer3.h"
++#include "types.h"
+
+ /*
+ * shine_max_reservoir_bits:
+@@ -17,36 +17,34 @@
+ * allowance for the current granule based on reservoir size
+ * and perceptual entropy.
+ */
+-int shine_max_reservoir_bits (double *pe, shine_global_config *config )
+-{
++int shine_max_reservoir_bits(double *pe, shine_global_config *config) {
+ int more_bits, max_bits, add_bits, over_bits;
+ int mean_bits = config->mean_bits;
+
+ mean_bits /= config->wave.channels;
+ max_bits = mean_bits;
+
+- if(max_bits>4095)
++ if (max_bits > 4095)
+ max_bits = 4095;
+- if(!config->ResvMax)
++ if (!config->ResvMax)
+ return max_bits;
+
+ more_bits = *pe * 3.1 - mean_bits;
+ add_bits = 0;
+- if(more_bits>100)
+- {
++ if (more_bits > 100) {
+ int frac = (config->ResvSize * 6) / 10;
+
+- if(frac<more_bits)
++ if (frac < more_bits)
+ add_bits = frac;
+ else
+ add_bits = more_bits;
+ }
+- over_bits = config->ResvSize - ((config->ResvMax <<3) / 10) - add_bits;
+- if (over_bits>0)
++ over_bits = config->ResvSize - ((config->ResvMax << 3) / 10) - add_bits;
++ if (over_bits > 0)
+ add_bits += over_bits;
+
+ max_bits += add_bits;
+- if(max_bits>4095)
++ if (max_bits > 4095)
+ max_bits = 4095;
+ return max_bits;
+ }
+@@ -57,9 +55,9 @@ int shine_max_reservoir_bits (double *pe, shine_global_config *config )
+ * Called after a granule's bit allocation. Readjusts the size of
+ * the reservoir to reflect the granule's usage.
+ */
+-void shine_ResvAdjust(gr_info *gi, shine_global_config *config )
+-{
+- config->ResvSize += (config->mean_bits / config->wave.channels) - gi->part2_3_length;
++void shine_ResvAdjust(gr_info *gi, shine_global_config *config) {
++ config->ResvSize +=
++ (config->mean_bits / config->wave.channels) - gi->part2_3_length;
+ }
+
+ /*
+@@ -71,8 +69,7 @@ void shine_ResvAdjust(gr_info *gi, shine_global_config *config )
+ * part2_3_length. The bitstream formatter will detect this and write the
+ * appropriate stuffing bits to the bitstream.
+ */
+-void shine_ResvFrameEnd(shine_global_config *config )
+-{
++void shine_ResvFrameEnd(shine_global_config *config) {
+ gr_info *gi;
+ int gr, ch, ancillary_pad, stuffingBits;
+ int over_bits;
+@@ -81,42 +78,38 @@ void shine_ResvFrameEnd(shine_global_config *config )
+ ancillary_pad = 0;
+
+ /* just in case mean_bits is odd, this is necessary... */
+- if((config->wave.channels==2) && (config->mean_bits & 1))
++ if ((config->wave.channels == 2) && (config->mean_bits & 1))
+ config->ResvSize += 1;
+
+ over_bits = config->ResvSize - config->ResvMax;
+- if(over_bits<0)
++ if (over_bits < 0)
+ over_bits = 0;
+
+ config->ResvSize -= over_bits;
+ stuffingBits = over_bits + ancillary_pad;
+
+ /* we must be byte aligned */
+- if((over_bits = config->ResvSize % 8))
+- {
++ if ((over_bits = config->ResvSize % 8)) {
+ stuffingBits += over_bits;
+ config->ResvSize -= over_bits;
+ }
+
+- if(stuffingBits)
+- {
++ if (stuffingBits) {
+ /*
+ * plan a: put all into the first granule
+ * This was preferred by someone designing a
+ * real-time decoder...
+ */
+- gi = (gr_info *) &(l3_side->gr[0].ch[0]);
++ gi = (gr_info *)&(l3_side->gr[0].ch[0]);
+
+- if ( gi->part2_3_length + stuffingBits < 4095 )
++ if (gi->part2_3_length + stuffingBits < 4095)
+ gi->part2_3_length += stuffingBits;
+- else
+- {
++ else {
+ /* plan b: distribute throughout the granules */
+- for (gr = 0; gr < config->mpeg.granules_per_frame; gr++ )
+- for (ch = 0; ch < config->wave.channels; ch++ )
+- {
++ for (gr = 0; gr < config->mpeg.granules_per_frame; gr++)
++ for (ch = 0; ch < config->wave.channels; ch++) {
+ int extraBits, bitsThisGr;
+- gr_info *gi = (gr_info *) &(l3_side->gr[gr].ch[ch]);
++ gr_info *gi = (gr_info *)&(l3_side->gr[gr].ch[ch]);
+ if (!stuffingBits)
+ break;
+ extraBits = 4095 - gi->part2_3_length;
+@@ -133,5 +126,3 @@ void shine_ResvFrameEnd(shine_global_config *config )
+ }
+ }
+ }
+-
+-
+diff --git a/src/lib/reservoir.h b/src/lib/reservoir.h
+index 2f1ffa5..2245778 100644
+--- a/src/lib/reservoir.h
++++ b/src/lib/reservoir.h
+@@ -1,9 +1,11 @@
+ #ifndef RESERVOIR_H
+ #define RESERVOIR_H
+
++#include "types.h"
++
+ void shine_ResvFrameBegin(int frameLength, shine_global_config *config);
+-int shine_max_reservoir_bits (double *pe, shine_global_config *config);
+-void shine_ResvAdjust (gr_info *gi, shine_global_config *config );
+-void shine_ResvFrameEnd (shine_global_config *config );
++int shine_max_reservoir_bits(double *pe, shine_global_config *config);
++void shine_ResvAdjust(gr_info *gi, shine_global_config *config);
++void shine_ResvFrameEnd(shine_global_config *config);
+
+ #endif
+diff --git a/src/lib/tables.c b/src/lib/tables.c
+index ff7e374..3c63b4f 100644
+--- a/src/lib/tables.c
++++ b/src/lib/tables.c
+@@ -7,120 +7,171 @@
+
+ #include "tables.h"
+
+-const int shine_slen1_tab[16] = { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 };
+-const int shine_slen2_tab[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 };
++const int shine_slen1_tab[16] = {0, 0, 0, 0, 3, 1, 1, 1,
++ 2, 2, 2, 3, 3, 3, 4, 4};
++const int shine_slen2_tab[16] = {0, 1, 2, 3, 0, 1, 2, 3,
++ 1, 2, 3, 1, 2, 3, 2, 3};
+
+ /* Valid samplerates and bitrates. */
+ const int samplerates[9] = {
+- 44100, 48000, 32000, /* MPEG-I */
+- 22050, 24000, 16000, /* MPEG-II */
+- 11025, 12000, 8000 /* MPEG-2.5 */
++ 44100, 48000, 32000, /* MPEG-I */
++ 22050, 24000, 16000, /* MPEG-II */
++ 11025, 12000, 8000 /* MPEG-2.5 */
+ };
+
+ const int bitrates[16][4] = {
+- /* MPEG version:
+- * 2.5, reserved, II, I */
+- { -1, -1, -1, -1},
+- { 8, -1, 8, 32},
+- { 16, -1, 16, 40},
+- { 24, -1, 24, 48},
+- { 32, -1, 32, 56},
+- { 40, -1, 40, 64},
+- { 48, -1, 48, 80},
+- { 56, -1, 56, 96},
+- { 64, -1, 64, 112},
+- { -1, -1, 80, 128},
+- { -1, -1, 96, 160},
+- { -1, -1, 112, 192},
+- { -1, -1, 128, 224},
+- { -1, -1, 144, 256},
+- { -1, -1, 160, 320},
+- { -1, -1, -1, -1}
+-};
++ /* MPEG version:
++ * 2.5, reserved, II, I */
++ {-1, -1, -1, -1}, {8, -1, 8, 32}, {16, -1, 16, 40},
++ {24, -1, 24, 48}, {32, -1, 32, 56}, {40, -1, 40, 64},
++ {48, -1, 48, 80}, {56, -1, 56, 96}, {64, -1, 64, 112},
++ {-1, -1, 80, 128}, {-1, -1, 96, 160}, {-1, -1, 112, 192},
++ {-1, -1, 128, 224}, {-1, -1, 144, 256}, {-1, -1, 160, 320},
++ {-1, -1, -1, -1}};
+
+-const int shine_scale_fact_band_index[9][23] =
+-{
+- /* MPEG-I */
++const int shine_scale_fact_band_index[9][23] = {
++ /* MPEG-I */
+ /* Table B.8.b: 44.1 kHz */
+- {0,4,8,12,16,20,24,30,36,44,52,62,74,90,110,134,162,196,238,288,342,418,576},
++ {0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62,
++ 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, 576},
+ /* Table B.8.c: 48 kHz */
+- {0,4,8,12,16,20,24,30,36,42,50,60,72,88,106,128,156,190,230,276,330,384,576},
++ {0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60,
++ 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, 576},
+ /* Table B.8.a: 32 kHz */
+- {0,4,8,12,16,20,24,30,36,44,54,66,82,102,126,156,194,240,296,364,448,550,576},
+- /* MPEG-II */
++ {0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66,
++ 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, 576},
++ /* MPEG-II */
+ /* Table B.2.b: 22.05 kHz */
+- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
++ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96,
++ 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576},
+ /* Table B.2.c: 24 kHz */
+- {0,6,12,18,24,30,36,44,54,66,80,96,114,136,162,194,232,278,330,394,464,540,576},
++ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96,
++ 114, 136, 162, 194, 232, 278, 330, 394, 464, 540, 576},
+ /* Table B.2.a: 16 kHz */
+- {0,6,12,18,24,30,36,44,45,66,80,96,116,140,168,200,238,248,336,396,464,522,576},
++ {0, 6, 12, 18, 24, 30, 36, 44, 45, 66, 80, 96,
++ 116, 140, 168, 200, 238, 248, 336, 396, 464, 522, 576},
+
+- /* MPEG-2.5 */
++ /* MPEG-2.5 */
+ /* 11.025 kHz */
+- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
++ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96,
++ 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576},
+ /* 12 kHz */
+- {0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
++ {0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96,
++ 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576},
+ /* MPEG-2.5 8 kHz */
+- {0,12,24,36,48,60,72,88,108,132,160,192,232,280,336,400,476,566,568,570,572,574,576},
++ {0, 12, 24, 36, 48, 60, 72, 88, 108, 132, 160, 192,
++ 232, 280, 336, 400, 476, 566, 568, 570, 572, 574, 576},
+ };
+
+ /* note. 0.035781 is shine_enwindow maximum value */
+ /* scale and convert to fixed point before storing */
+-#define SHINE_EW(x) (int32_t)((double)(x) * 0x7fffffff)
+-#define SHINE_EW2(a,b) SHINE_EW(a), SHINE_EW(b)
+-#define SHINE_EW10(a,b,c,d,e,f,g,h,i,j) SHINE_EW2(a,b), SHINE_EW2(c,d), SHINE_EW2(e,f), SHINE_EW2(g,h), SHINE_EW2(i,j)
++#define SHINE_EW(x) (int32_t)((double)(x)*0x7fffffff)
++#define SHINE_EW2(a, b) SHINE_EW(a), SHINE_EW(b)
++#define SHINE_EW10(a, b, c, d, e, f, g, h, i, j) \
++ SHINE_EW2(a, b), SHINE_EW2(c, d), SHINE_EW2(e, f), SHINE_EW2(g, h), \
++ SHINE_EW2(i, j)
+
+ const int32_t shine_enwindow[] = {
+-SHINE_EW10( 0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000001, -0.000001, -0.000001),
+-SHINE_EW10( -0.000001, -0.000001, -0.000001, -0.000002, -0.000002, -0.000002, -0.000002, -0.000003, -0.000003, -0.000003),
+-SHINE_EW10( -0.000004, -0.000004, -0.000005, -0.000005, -0.000006, -0.000007, -0.000008, -0.000008, -0.000009, -0.000010),
+-SHINE_EW10( -0.000011, -0.000012, -0.000014, -0.000015, -0.000017, -0.000018, -0.000020, -0.000021, -0.000023, -0.000025),
+-SHINE_EW10( -0.000028, -0.000030, -0.000032, -0.000035, -0.000038, -0.000041, -0.000043, -0.000046, -0.000050, -0.000053),
+-SHINE_EW10( -0.000056, -0.000060, -0.000063, -0.000066, -0.000070, -0.000073, -0.000077, -0.000081, -0.000084, -0.000087),
+-SHINE_EW10( -0.000091, -0.000093, -0.000096, -0.000099, 0.000102, 0.000104, 0.000106, 0.000107, 0.000108, 0.000109),
+-SHINE_EW10( 0.000109, 0.000108, 0.000107, 0.000105, 0.000103, 0.000099, 0.000095, 0.000090, 0.000084, 0.000078),
+-SHINE_EW10( 0.000070, 0.000061, 0.000051, 0.000040, 0.000027, 0.000014, -0.000001, -0.000017, -0.000034, -0.000053),
+-SHINE_EW10( -0.000073, -0.000094, -0.000116, -0.000140, -0.000165, -0.000191, -0.000219, -0.000247, -0.000277, -0.000308),
+-SHINE_EW10( -0.000339, -0.000371, -0.000404, -0.000438, -0.000473, -0.000507, -0.000542, -0.000577, -0.000612, -0.000647),
+-SHINE_EW10( -0.000681, -0.000714, -0.000747, -0.000779, -0.000810, -0.000839, -0.000866, -0.000892, -0.000915, -0.000936),
+-SHINE_EW10( -0.000954, -0.000969, -0.000981, -0.000989, -0.000994, -0.000995, -0.000992, -0.000984, 0.000971, 0.000954),
+-SHINE_EW10( 0.000931, 0.000903, 0.000869, 0.000829, 0.000784, 0.000732, 0.000674, 0.000610, 0.000539, 0.000463),
+-SHINE_EW10( 0.000379, 0.000288, 0.000192, 0.000088, -0.000021, -0.000137, -0.000260, -0.000388, -0.000522, -0.000662),
+-SHINE_EW10( -0.000807, -0.000957, -0.001111, -0.001270, -0.001432, -0.001598, -0.001767, -0.001937, -0.002110, -0.002283),
+-SHINE_EW10( -0.002457, -0.002631, -0.002803, -0.002974, -0.003142, -0.003307, -0.003467, -0.003623, -0.003772, -0.003914),
+-SHINE_EW10( -0.004049, -0.004175, -0.004291, -0.004396, -0.004490, -0.004570, -0.004638, -0.004691, -0.004728, -0.004749),
+-SHINE_EW10( -0.004752, -0.004737, -0.004703, -0.004649, -0.004574, -0.004477, -0.004358, -0.004215, -0.004049, -0.003859),
+-SHINE_EW10( -0.003643, -0.003402, 0.003135, 0.002841, 0.002522, 0.002175, 0.001801, 0.001400, 0.000971, 0.000516),
+-SHINE_EW10( 0.000033, -0.000476, -0.001012, -0.001574, -0.002162, -0.002774, -0.003411, -0.004072, -0.004756, -0.005462),
+-SHINE_EW10( -0.006189, -0.006937, -0.007703, -0.008487, -0.009288, -0.010104, -0.010933, -0.011775, -0.012628, -0.013489),
+-SHINE_EW10( -0.014359, -0.015234, -0.016113, -0.016994, -0.017876, -0.018757, -0.019634, -0.020507, -0.021372, -0.022229),
+-SHINE_EW10( -0.023074, -0.023907, -0.024725, -0.025527, -0.026311, -0.027074, -0.027815, -0.028533, -0.029225, -0.029890),
+-SHINE_EW10( -0.030527, -0.031133, -0.031707, -0.032248, -0.032755, -0.033226, -0.033660, -0.034056, -0.034413, -0.034730),
+-SHINE_EW10( -0.035007, -0.035242, -0.035435, -0.035586, -0.035694, -0.035759, 0.035781, 0.035759, 0.035694, 0.035586),
+-SHINE_EW10( 0.035435, 0.035242, 0.035007, 0.034730, 0.034413, 0.034056, 0.033660, 0.033226, 0.032755, 0.032248),
+-SHINE_EW10( 0.031707, 0.031133, 0.030527, 0.029890, 0.029225, 0.028533, 0.027815, 0.027074, 0.026311, 0.025527),
+-SHINE_EW10( 0.024725, 0.023907, 0.023074, 0.022229, 0.021372, 0.020507, 0.019634, 0.018757, 0.017876, 0.016994),
+-SHINE_EW10( 0.016113, 0.015234, 0.014359, 0.013489, 0.012628, 0.011775, 0.010933, 0.010104, 0.009288, 0.008487),
+-SHINE_EW10( 0.007703, 0.006937, 0.006189, 0.005462, 0.004756, 0.004072, 0.003411, 0.002774, 0.002162, 0.001574),
+-SHINE_EW10( 0.001012, 0.000476, -0.000033, -0.000516, -0.000971, -0.001400, -0.001801, -0.002175, -0.002522, -0.002841),
+-SHINE_EW10( 0.003135, 0.003402, 0.003643, 0.003859, 0.004049, 0.004215, 0.004358, 0.004477, 0.004574, 0.004649),
+-SHINE_EW10( 0.004703, 0.004737, 0.004752, 0.004749, 0.004728, 0.004691, 0.004638, 0.004570, 0.004490, 0.004396),
+-SHINE_EW10( 0.004291, 0.004175, 0.004049, 0.003914, 0.003772, 0.003623, 0.003467, 0.003307, 0.003142, 0.002974),
+-SHINE_EW10( 0.002803, 0.002631, 0.002457, 0.002283, 0.002110, 0.001937, 0.001767, 0.001598, 0.001432, 0.001270),
+-SHINE_EW10( 0.001111, 0.000957, 0.000807, 0.000662, 0.000522, 0.000388, 0.000260, 0.000137, 0.000021, -0.000088),
+-SHINE_EW10( -0.000192, -0.000288, -0.000379, -0.000463, -0.000539, -0.000610, -0.000674, -0.000732, -0.000784, -0.000829),
+-SHINE_EW10( -0.000869, -0.000903, -0.000931, -0.000954, 0.000971, 0.000984, 0.000992, 0.000995, 0.000994, 0.000989),
+-SHINE_EW10( 0.000981, 0.000969, 0.000954, 0.000936, 0.000915, 0.000892, 0.000866, 0.000839, 0.000810, 0.000779),
+-SHINE_EW10( 0.000747, 0.000714, 0.000681, 0.000647, 0.000612, 0.000577, 0.000542, 0.000507, 0.000473, 0.000438),
+-SHINE_EW10( 0.000404, 0.000371, 0.000339, 0.000308, 0.000277, 0.000247, 0.000219, 0.000191, 0.000165, 0.000140),
+-SHINE_EW10( 0.000116, 0.000094, 0.000073, 0.000053, 0.000034, 0.000017, 0.000001, -0.000014, -0.000027, -0.000040),
+-SHINE_EW10( -0.000051, -0.000061, -0.000070, -0.000078, -0.000084, -0.000090, -0.000095, -0.000099, -0.000103, -0.000105),
+-SHINE_EW10( -0.000107, -0.000108, -0.000109, -0.000109, -0.000108, -0.000107, -0.000106, -0.000104, 0.000102, 0.000099),
+-SHINE_EW10( 0.000096, 0.000093, 0.000091, 0.000087, 0.000084, 0.000081, 0.000077, 0.000073, 0.000070, 0.000066),
+-SHINE_EW10( 0.000063, 0.000060, 0.000056, 0.000053, 0.000050, 0.000046, 0.000043, 0.000041, 0.000038, 0.000035),
+-SHINE_EW10( 0.000032, 0.000030, 0.000028, 0.000025, 0.000023, 0.000021, 0.000020, 0.000018, 0.000017, 0.000015),
+-SHINE_EW10( 0.000014, 0.000012, 0.000011, 0.000010, 0.000009, 0.000008, 0.000008, 0.000007, 0.000006, 0.000005),
+-SHINE_EW10( 0.000005, 0.000004, 0.000004, 0.000003, 0.000003, 0.000003, 0.000002, 0.000002, 0.000002, 0.000002),
+-SHINE_EW10( 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000000, 0.000000, 0.000000, 0.000000),
+-SHINE_EW2 ( 0.000000, 0.000000)
+-};
++ SHINE_EW10(0.000000, -0.000000, -0.000000, -0.000000, -0.000000, -0.000000,
++ -0.000000, -0.000001, -0.000001, -0.000001),
++ SHINE_EW10(-0.000001, -0.000001, -0.000001, -0.000002, -0.000002, -0.000002,
++ -0.000002, -0.000003, -0.000003, -0.000003),
++ SHINE_EW10(-0.000004, -0.000004, -0.000005, -0.000005, -0.000006, -0.000007,
++ -0.000008, -0.000008, -0.000009, -0.000010),
++ SHINE_EW10(-0.000011, -0.000012, -0.000014, -0.000015, -0.000017, -0.000018,
++ -0.000020, -0.000021, -0.000023, -0.000025),
++ SHINE_EW10(-0.000028, -0.000030, -0.000032, -0.000035, -0.000038, -0.000041,
++ -0.000043, -0.000046, -0.000050, -0.000053),
++ SHINE_EW10(-0.000056, -0.000060, -0.000063, -0.000066, -0.000070, -0.000073,
++ -0.000077, -0.000081, -0.000084, -0.000087),
++ SHINE_EW10(-0.000091, -0.000093, -0.000096, -0.000099, 0.000102, 0.000104,
++ 0.000106, 0.000107, 0.000108, 0.000109),
++ SHINE_EW10(0.000109, 0.000108, 0.000107, 0.000105, 0.000103, 0.000099,
++ 0.000095, 0.000090, 0.000084, 0.000078),
++ SHINE_EW10(0.000070, 0.000061, 0.000051, 0.000040, 0.000027, 0.000014,
++ -0.000001, -0.000017, -0.000034, -0.000053),
++ SHINE_EW10(-0.000073, -0.000094, -0.000116, -0.000140, -0.000165, -0.000191,
++ -0.000219, -0.000247, -0.000277, -0.000308),
++ SHINE_EW10(-0.000339, -0.000371, -0.000404, -0.000438, -0.000473, -0.000507,
++ -0.000542, -0.000577, -0.000612, -0.000647),
++ SHINE_EW10(-0.000681, -0.000714, -0.000747, -0.000779, -0.000810, -0.000839,
++ -0.000866, -0.000892, -0.000915, -0.000936),
++ SHINE_EW10(-0.000954, -0.000969, -0.000981, -0.000989, -0.000994, -0.000995,
++ -0.000992, -0.000984, 0.000971, 0.000954),
++ SHINE_EW10(0.000931, 0.000903, 0.000869, 0.000829, 0.000784, 0.000732,
++ 0.000674, 0.000610, 0.000539, 0.000463),
++ SHINE_EW10(0.000379, 0.000288, 0.000192, 0.000088, -0.000021, -0.000137,
++ -0.000260, -0.000388, -0.000522, -0.000662),
++ SHINE_EW10(-0.000807, -0.000957, -0.001111, -0.001270, -0.001432, -0.001598,
++ -0.001767, -0.001937, -0.002110, -0.002283),
++ SHINE_EW10(-0.002457, -0.002631, -0.002803, -0.002974, -0.003142, -0.003307,
++ -0.003467, -0.003623, -0.003772, -0.003914),
++ SHINE_EW10(-0.004049, -0.004175, -0.004291, -0.004396, -0.004490, -0.004570,
++ -0.004638, -0.004691, -0.004728, -0.004749),
++ SHINE_EW10(-0.004752, -0.004737, -0.004703, -0.004649, -0.004574, -0.004477,
++ -0.004358, -0.004215, -0.004049, -0.003859),
++ SHINE_EW10(-0.003643, -0.003402, 0.003135, 0.002841, 0.002522, 0.002175,
++ 0.001801, 0.001400, 0.000971, 0.000516),
++ SHINE_EW10(0.000033, -0.000476, -0.001012, -0.001574, -0.002162, -0.002774,
++ -0.003411, -0.004072, -0.004756, -0.005462),
++ SHINE_EW10(-0.006189, -0.006937, -0.007703, -0.008487, -0.009288, -0.010104,
++ -0.010933, -0.011775, -0.012628, -0.013489),
++ SHINE_EW10(-0.014359, -0.015234, -0.016113, -0.016994, -0.017876, -0.018757,
++ -0.019634, -0.020507, -0.021372, -0.022229),
++ SHINE_EW10(-0.023074, -0.023907, -0.024725, -0.025527, -0.026311, -0.027074,
++ -0.027815, -0.028533, -0.029225, -0.029890),
++ SHINE_EW10(-0.030527, -0.031133, -0.031707, -0.032248, -0.032755, -0.033226,
++ -0.033660, -0.034056, -0.034413, -0.034730),
++ SHINE_EW10(-0.035007, -0.035242, -0.035435, -0.035586, -0.035694, -0.035759,
++ 0.035781, 0.035759, 0.035694, 0.035586),
++ SHINE_EW10(0.035435, 0.035242, 0.035007, 0.034730, 0.034413, 0.034056,
++ 0.033660, 0.033226, 0.032755, 0.032248),
++ SHINE_EW10(0.031707, 0.031133, 0.030527, 0.029890, 0.029225, 0.028533,
++ 0.027815, 0.027074, 0.026311, 0.025527),
++ SHINE_EW10(0.024725, 0.023907, 0.023074, 0.022229, 0.021372, 0.020507,
++ 0.019634, 0.018757, 0.017876, 0.016994),
++ SHINE_EW10(0.016113, 0.015234, 0.014359, 0.013489, 0.012628, 0.011775,
++ 0.010933, 0.010104, 0.009288, 0.008487),
++ SHINE_EW10(0.007703, 0.006937, 0.006189, 0.005462, 0.004756, 0.004072,
++ 0.003411, 0.002774, 0.002162, 0.001574),
++ SHINE_EW10(0.001012, 0.000476, -0.000033, -0.000516, -0.000971, -0.001400,
++ -0.001801, -0.002175, -0.002522, -0.002841),
++ SHINE_EW10(0.003135, 0.003402, 0.003643, 0.003859, 0.004049, 0.004215,
++ 0.004358, 0.004477, 0.004574, 0.004649),
++ SHINE_EW10(0.004703, 0.004737, 0.004752, 0.004749, 0.004728, 0.004691,
++ 0.004638, 0.004570, 0.004490, 0.004396),
++ SHINE_EW10(0.004291, 0.004175, 0.004049, 0.003914, 0.003772, 0.003623,
++ 0.003467, 0.003307, 0.003142, 0.002974),
++ SHINE_EW10(0.002803, 0.002631, 0.002457, 0.002283, 0.002110, 0.001937,
++ 0.001767, 0.001598, 0.001432, 0.001270),
++ SHINE_EW10(0.001111, 0.000957, 0.000807, 0.000662, 0.000522, 0.000388,
++ 0.000260, 0.000137, 0.000021, -0.000088),
++ SHINE_EW10(-0.000192, -0.000288, -0.000379, -0.000463, -0.000539, -0.000610,
++ -0.000674, -0.000732, -0.000784, -0.000829),
++ SHINE_EW10(-0.000869, -0.000903, -0.000931, -0.000954, 0.000971, 0.000984,
++ 0.000992, 0.000995, 0.000994, 0.000989),
++ SHINE_EW10(0.000981, 0.000969, 0.000954, 0.000936, 0.000915, 0.000892,
++ 0.000866, 0.000839, 0.000810, 0.000779),
++ SHINE_EW10(0.000747, 0.000714, 0.000681, 0.000647, 0.000612, 0.000577,
++ 0.000542, 0.000507, 0.000473, 0.000438),
++ SHINE_EW10(0.000404, 0.000371, 0.000339, 0.000308, 0.000277, 0.000247,
++ 0.000219, 0.000191, 0.000165, 0.000140),
++ SHINE_EW10(0.000116, 0.000094, 0.000073, 0.000053, 0.000034, 0.000017,
++ 0.000001, -0.000014, -0.000027, -0.000040),
++ SHINE_EW10(-0.000051, -0.000061, -0.000070, -0.000078, -0.000084, -0.000090,
++ -0.000095, -0.000099, -0.000103, -0.000105),
++ SHINE_EW10(-0.000107, -0.000108, -0.000109, -0.000109, -0.000108, -0.000107,
++ -0.000106, -0.000104, 0.000102, 0.000099),
++ SHINE_EW10(0.000096, 0.000093, 0.000091, 0.000087, 0.000084, 0.000081,
++ 0.000077, 0.000073, 0.000070, 0.000066),
++ SHINE_EW10(0.000063, 0.000060, 0.000056, 0.000053, 0.000050, 0.000046,
++ 0.000043, 0.000041, 0.000038, 0.000035),
++ SHINE_EW10(0.000032, 0.000030, 0.000028, 0.000025, 0.000023, 0.000021,
++ 0.000020, 0.000018, 0.000017, 0.000015),
++ SHINE_EW10(0.000014, 0.000012, 0.000011, 0.000010, 0.000009, 0.000008,
++ 0.000008, 0.000007, 0.000006, 0.000005),
++ SHINE_EW10(0.000005, 0.000004, 0.000004, 0.000003, 0.000003, 0.000003,
++ 0.000002, 0.000002, 0.000002, 0.000002),
++ SHINE_EW10(0.000001, 0.000001, 0.000001, 0.000001, 0.000001, 0.000001,
++ 0.000000, 0.000000, 0.000000, 0.000000),
++ SHINE_EW2(0.000000, 0.000000)};
+diff --git a/src/lib/tables.h b/src/lib/tables.h
+index 5c94228..fe06502 100644
+--- a/src/lib/tables.h
++++ b/src/lib/tables.h
+@@ -9,8 +9,7 @@ extern const int shine_slen2_tab[16];
+ extern const int samplerates[9];
+ extern const int bitrates[16][4];
+
+-extern const int shine_scale_fact_band_index[9][23];
++extern const int shine_scale_fact_band_index[9][23];
+ extern const int32_t shine_enwindow[];
+
+ #endif
+-
+diff --git a/src/lib/types.h b/src/lib/types.h
+index f3def1a..11a05fc 100644
+--- a/src/lib/types.h
++++ b/src/lib/types.h
+@@ -2,18 +2,18 @@
+ #define PRIV_TYPES_H
+
+ #include <stdio.h>
+-#include <string.h>
+ #include <stdlib.h>
++#include <string.h>
+
+ #include <math.h>
+
+-#define GRANULE_SIZE 576
++#define GRANULE_SIZE 576
+
+ #include "bitstream.h"
+
+ /* Include arch-specific instructions,
+ * when defined. */
+-#if defined(__mips__) && (__mips != 64)
++#if defined(__mips__) && (__mips == 32)
+ #include "mult_mips_gcc.h"
+ #elif defined(__arm__) && !defined(__thumb__)
+ #include "mult_sarm_gcc.h"
+@@ -24,29 +24,32 @@
+ #include "mult_noarch_gcc.h"
+
+ #ifndef SWAB32
+-#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
+-#define SWAB32(x) __builtin_bswap32(x)
++#if defined(__GNUC__) && \
++ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
++#define SWAB32(x) __builtin_bswap32(x)
+ #else
+-#define SWAB32(x) (((unsigned int)(x) >> 24) | (((unsigned int)(x) >> 8) & 0xff00) | (((unsigned int)(x) & 0xff00) << 8) | ((unsigned int)(x) << 24))
++#define SWAB32(x) \
++ (((unsigned int)(x) >> 24) | (((unsigned int)(x) >> 8) & 0xff00) | \
++ (((unsigned int)(x)&0xff00) << 8) | ((unsigned int)(x) << 24))
+ #endif
+ #endif
+
+ /* #define DEBUG if you want the library to dump info to stdout */
+
+-#define PI 3.14159265358979
+-#define PI4 0.78539816339745
+-#define PI12 0.26179938779915
+-#define PI36 0.087266462599717
+-#define PI64 0.049087385212
+-#define SQRT2 1.41421356237
+-#define LN2 0.69314718
++#define PI 3.14159265358979
++#define PI4 0.78539816339745
++#define PI12 0.26179938779915
++#define PI36 0.087266462599717
++#define PI64 0.049087385212
++#define SQRT2 1.41421356237
++#define LN2 0.69314718
+ #define LN_TO_LOG10 0.2302585093
+-#define BLKSIZE 1024
+-#define HAN_SIZE 512 /* for loop unrolling, require that HAN_SIZE%8==0 */
++#define BLKSIZE 1024
++#define HAN_SIZE 512 /* for loop unrolling, require that HAN_SIZE%8==0 */
+ #define SCALE_BLOCK 12
+ #define SCALE_RANGE 64
+-#define SCALE 32768
+-#define SBLIMIT 32
++#define SCALE 32768
++#define SBLIMIT 32
+
+ #ifndef MAX_CHANNELS
+ #define MAX_CHANNELS 2
+@@ -57,44 +60,44 @@
+ #endif
+
+ typedef struct {
+- int channels;
+- int samplerate;
++ int channels;
++ int samplerate;
+ } priv_shine_wave_t;
+
+ typedef struct {
+- int version;
+- int layer;
+- int granules_per_frame;
+- int mode; /* + */ /* Stereo mode */
+- int bitr; /* + */ /* Must conform to known bitrate - see Main.c */
+- int emph; /* + */ /* De-emphasis */
+- int padding;
+- int bits_per_frame;
+- int bits_per_slot;
+- double frac_slots_per_frame;
+- double slot_lag;
+- int whole_slots_per_frame;
+- int bitrate_index; /* + */ /* See Main.c and Layer3.c */
+- int samplerate_index; /* + */ /* See Main.c and Layer3.c */
+- int crc;
+- int ext;
+- int mode_ext;
+- int copyright; /* + */
+- int original; /* + */
++ int version;
++ int layer;
++ int granules_per_frame;
++ int mode; /* + */ /* Stereo mode */
++ int bitr; /* + */ /* Must conform to known bitrate - see Main.c */
++ int emph; /* + */ /* De-emphasis */
++ int padding;
++ int bits_per_frame;
++ int bits_per_slot;
++ double frac_slots_per_frame;
++ double slot_lag;
++ int whole_slots_per_frame;
++ int bitrate_index; /* + */ /* See Main.c and Layer3.c */
++ int samplerate_index; /* + */ /* See Main.c and Layer3.c */
++ int crc;
++ int ext;
++ int mode_ext;
++ int copyright; /* + */
++ int original; /* + */
+ } priv_shine_mpeg_t;
+
+ typedef struct {
+- int32_t *xr; /* magnitudes of the spectral values */
+- int32_t xrsq[GRANULE_SIZE]; /* xr squared */
+- int32_t xrabs[GRANULE_SIZE]; /* xr absolute */
+- int32_t xrmax; /* maximum of xrabs array */
+- int32_t en_tot[MAX_GRANULES]; /* gr */
++ int32_t *xr; /* magnitudes of the spectral values */
++ int32_t xrsq[GRANULE_SIZE]; /* xr squared */
++ int32_t xrabs[GRANULE_SIZE]; /* xr absolute */
++ int32_t xrmax; /* maximum of xrabs array */
++ int32_t en_tot[MAX_GRANULES]; /* gr */
+ int32_t en[MAX_GRANULES][21];
+ int32_t xm[MAX_GRANULES][21];
+ int32_t xrmaxl[MAX_GRANULES];
+- double steptab[128]; /* 2**(-x/4) for x = -127..0 */
+- int32_t steptabi[128]; /* 2**(-x/4) for x = -127..0 */
+- int int2idx[10000]; /* x**(3/4) for x = 0..9999 */
++ double steptab[128]; /* 2**(-x/4) for x = -127..0 */
++ int32_t steptabi[128]; /* 2**(-x/4) for x = -127..0 */
++ int int2idx[10000]; /* x**(3/4) for x = 0..9999 */
+ } l3loop_t;
+
+ typedef struct {
+@@ -105,7 +108,7 @@ typedef struct {
+ int off[MAX_CHANNELS];
+ int32_t fl[SBLIMIT][64];
+ int32_t x[MAX_CHANNELS][HAN_SIZE];
+-} subband_t;
++} subband_t;
+
+ /* Side information */
+ typedef struct {
+@@ -130,49 +133,48 @@ typedef struct {
+ } gr_info;
+
+ typedef struct {
+- unsigned private_bits;
+- int resvDrain;
+- unsigned scfsi[MAX_CHANNELS][4];
++ unsigned private_bits;
++ int resvDrain;
++ unsigned scfsi[MAX_CHANNELS][4];
++ struct {
+ struct {
+- struct {
+- gr_info tt;
+- } ch[MAX_CHANNELS];
+- } gr[MAX_GRANULES];
++ gr_info tt;
++ } ch[MAX_CHANNELS];
++ } gr[MAX_GRANULES];
+ } shine_side_info_t;
+
+ typedef struct {
+- double l[MAX_GRANULES][MAX_CHANNELS][21];
++ double l[MAX_GRANULES][MAX_CHANNELS][21];
+ } shine_psy_ratio_t;
+
+ typedef struct {
+- double l[MAX_GRANULES][MAX_CHANNELS][21];
++ double l[MAX_GRANULES][MAX_CHANNELS][21];
+ } shine_psy_xmin_t;
+
+ typedef struct {
+- int32_t l[MAX_GRANULES][MAX_CHANNELS][22]; /* [cb] */
+- int32_t s[MAX_GRANULES][MAX_CHANNELS][13][3]; /* [window][cb] */
++ int32_t l[MAX_GRANULES][MAX_CHANNELS][22]; /* [cb] */
++ int32_t s[MAX_GRANULES][MAX_CHANNELS][13][3]; /* [window][cb] */
+ } shine_scalefac_t;
+
+-
+-typedef struct shine_global_flags {
+- priv_shine_wave_t wave;
+- priv_shine_mpeg_t mpeg;
+- bitstream_t bs;
++typedef struct shine_global_flags {
++ priv_shine_wave_t wave;
++ priv_shine_mpeg_t mpeg;
++ bitstream_t bs;
+ shine_side_info_t side_info;
+- int sideinfo_len;
+- int mean_bits;
++ int sideinfo_len;
++ int mean_bits;
+ shine_psy_ratio_t ratio;
+- shine_scalefac_t scalefactor;
+- int16_t *buffer[MAX_CHANNELS];
+- double pe[MAX_CHANNELS][MAX_GRANULES];
+- int l3_enc[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE];
+- int32_t l3_sb_sample[MAX_CHANNELS][MAX_GRANULES+1][18][SBLIMIT];
+- int32_t mdct_freq[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE];
+- int ResvSize;
+- int ResvMax;
+- l3loop_t l3loop;
+- mdct_t mdct;
+- subband_t subband;
++ shine_scalefac_t scalefactor;
++ int16_t *buffer[MAX_CHANNELS];
++ double pe[MAX_CHANNELS][MAX_GRANULES];
++ int l3_enc[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE];
++ int32_t l3_sb_sample[MAX_CHANNELS][MAX_GRANULES + 1][18][SBLIMIT];
++ int32_t mdct_freq[MAX_CHANNELS][MAX_GRANULES][GRANULE_SIZE];
++ int ResvSize;
++ int ResvMax;
++ l3loop_t l3loop;
++ mdct_t mdct;
++ subband_t subband;
+ } shine_global_config;
+
+ #endif
diff --git a/multimedia/shine/shine.SlackBuild b/multimedia/shine/shine.SlackBuild
index 3caf69653d..81d701d8f3 100644
--- a/multimedia/shine/shine.SlackBuild
+++ b/multimedia/shine/shine.SlackBuild
@@ -2,7 +2,7 @@
# Slackware build script for shine
-# Copyright 2022 Vijay Marcel
+# Copyright 2022-2024 Vijay Marcel
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -25,8 +25,7 @@
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=shine
-VERSION=${VERSION:-20042019_76ea4f0}
-COMMIT=${COMMIT:-76ea4f072e03a3d76283c99412f698076a20a362}
+VERSION=${VERSION:-3.1.1}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
@@ -39,9 +38,6 @@ case "$( uname -m )" in
esac
fi
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
@@ -52,13 +48,13 @@ PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ SLKCFLAGS="-march=i586 -mtune=i686 -pipe -O2 -fPIC"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ SLKCFLAGS="-march=i686 -mtune=i686 -pipe -O2 -fPIC"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
+ SLKCFLAGS="-march=x86-64 -mtune=generic -pipe -O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
@@ -71,9 +67,9 @@ trap 'echo "$0 FAILED at line $LINENO!" | tee -a $OUTPUT/error-${PRGNAM}.log' ER
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
-rm -rf $PRGNAM-$COMMIT
-tar xvf $CWD/$PRGNAM-$COMMIT.tar.gz
-cd $PRGNAM-$COMMIT
+rm -rf $PRGNAM-$VERSION
+tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
+cd $PRGNAM-$VERSION
chown -R root:root .
find -L . \
@@ -82,10 +78,11 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-CFLAGS="$SLKCFLAGS" \
-CXXFLAGS="$SLKCFLAGS" \
+patch -p1 --verbose --unified < $CWD/fix-bugs.patch
./bootstrap
+CFLAGS="$SLKCFLAGS" \
+CXXFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
@@ -101,7 +98,7 @@ make install DESTDIR=$PKG
rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+ | cut -f 1 -d : | xargs strip --strip-unneeded --remove-section=.comment --remove-section=.note 2> /dev/null || true
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a README.md COPYING ChangeLog $PKG/usr/doc/$PRGNAM-$VERSION
diff --git a/multimedia/shine/shine.info b/multimedia/shine/shine.info
index ddff14a8c6..401505a283 100644
--- a/multimedia/shine/shine.info
+++ b/multimedia/shine/shine.info
@@ -1,8 +1,8 @@
PRGNAM="shine"
-VERSION="20042019_76ea4f0"
+VERSION="3.1.1"
HOMEPAGE="https://github.com/toots/shine"
-DOWNLOAD="https://github.com/toots/shine/archive/76ea4f0/shine-76ea4f072e03a3d76283c99412f698076a20a362.tar.gz"
-MD5SUM="c44a4512276982a351c693f32206a7f3"
+DOWNLOAD="https://github.com/toots/shine/archive/3.1.1/shine-3.1.1.tar.gz"
+MD5SUM="ff41cb139c25470f2d9c9acc9f97cc8d"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""