diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..580f7338 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,46 @@ +name: Build and Deploy + +on: [workflow_dispatch] + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + deployments: write + +# Allow one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v3 + with: + node-version: 16 + cache: "npm" + - name: Install Dependencies + run: npm ci && cd repl && npm ci && cd ../tutorial && npm ci + + - name: Build + run: npm run build + + - name: Setup Pages + uses: actions/configure-pages@v2 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + # Upload entire repository + path: "./out" + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b26f4cb4..7813cf60 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node-version: [16, 17] + node-version: [18] steps: - uses: actions/checkout@v2 diff --git a/.gitignore b/.gitignore index cbe4c324..52900ad4 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,10 @@ doc out .parcel-cache repl_old -tutorial.rendered.mdx \ No newline at end of file +tutorial.rendered.mdx +doc.json +talk/public/EmuSP12 +talk/public/samples +server/samples/old +repl/stats.html +coverage \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index e8635e12..e005426f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,8 @@ "cSpell.words": [ "subspan", "vals" - ] + ], + "yaml.schemas": { + "https://json.schemastore.org/github-workflow.json": "file:///home/felix/projects/strudel/.github/workflows/deploy.yml" + } } \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2f7e5ba3..2ca14905 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,7 +12,7 @@ To get in touch with the contributors, either ## Ask a Question -If you have any questions about strudel, make sure you've read the +If you have any questions about strudel, make sure you've read the [tutorial](https://strudel.tidalcycles.org/tutorial/) to find out if it answers your question. If not, use one of the Communication Channels above! @@ -31,8 +31,9 @@ Use one of the Communication Channels listed above. ## Improve the Tutorial -If you find some weak spots in the [tutorial](https://strudel.tidalcycles.org/), -you are welcome to improve them by editing [this file](https://github.com/tidalcycles/strudel/blob/main/repl/src/tutorial/tutorial.mdx). +If you find some weak spots in the [tutorial](https://strudel.tidalcycles.org/), +you are welcome to improve them by editing [this file](https://github.com/tidalcycles/strudel/blob/main/tutorial/tutorial.mdx). + This will even work without setting up a development environment, only a github account is required. ## Propose a Feature @@ -50,11 +51,11 @@ Please check that it has not been reported before. To fix a bug that has been reported, 1. check that nobody else is already fixing it and respond to the issue to let people know you're on it -3. fork the repository -4. make sure you've setup the project (see below) -5. hopefully fix the bug -6. make sure the tests pass -7. send a pull request +2. fork the repository +3. make sure you've setup the project (see below) +4. hopefully fix the bug +5. make sure the tests pass +6. send a pull request ## Write Tests @@ -78,7 +79,7 @@ cd repl && npm i # install repl dependencies npm run start # start repl ``` -Those commands might look slightly different for your OS. +Those commands might look slightly different for your OS. Please report any problems you've had with the setup instructions! ## Code Style @@ -95,7 +96,7 @@ If you use VSCode, you can The project is split into multiple [packages](https://github.com/tidalcycles/strudel/tree/main/packages) with independent versioning. When you run `npm i` on the root folder, [npm workspaces](https://docs.npmjs.com/cli/v7/using-npm/workspaces) will symlink all packages -in the `node_modules` folder. This will allow any js file to import `@strudel.cycles/` to get the local version, +in the `node_modules` folder. This will allow any js file to import `@strudel.cycles/` to get the local version, which allows developing multiple packages at the same time ## Package Publishing @@ -103,9 +104,18 @@ which allows developing multiple packages at the same time To publish all packages that have been changed since the last release, run: ```sh +npm login npx lerna publish ``` +### New Packages + +To add a new package, you have to publish it manually the first time, using: + +```sh +cd packages/ && npm publish --access public +``` + ## Have Fun Remember to have fun, and that this project is driven by the passion of volunteers! diff --git a/README.md b/README.md index 78ad71d3..cd8c604f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Strudel test status](https://github.com/tidalcycles/strudel/actions/workflows/test.yml/badge.svg)](https://github.com/tidalcycles/strudel/actions) -An experiment in making a [Tidal](https://github.com/tidalcycles/tidal/) using web technologies. This is unstable software, please tread carefully. +An experiment in making a [Tidal](https://github.com/tidalcycles/tidal/) using web technologies. This software is slowly stabilising, but please continue to tread carefully. - Try it here: - Tutorial: @@ -38,6 +38,12 @@ Click on the package names to find out more about each one. There are many ways to contribute to this project! See [contribution guide](./CONTRIBUTING.md). + + + + +Made with [contrib.rocks](https://contrib.rocks). + ## Community There is a #strudel channel on the TidalCycles discord: diff --git a/dependencies.svg b/dependencies.svg new file mode 100644 index 00000000..2d2fc61d --- /dev/null +++ b/dependencies.svg @@ -0,0 +1,1806 @@ + + + + + + +dependency-cruiser output + + +cluster_packages + +packages + + +cluster_packages/core + +core + + +cluster_packages/core/test + +test + + +cluster_packages/embed + +embed + + +cluster_packages/eval + +eval + + +cluster_packages/eval/shift-traverser + +shift-traverser + + +cluster_packages/eval/test + +test + + +cluster_packages/midi + +midi + + +cluster_packages/mini + +mini + + +cluster_packages/mini/test + +test + + +cluster_packages/osc + +osc + + +cluster_packages/react + +react + + +cluster_packages/react/dist + +dist + + +cluster_packages/react/src + +src + + +cluster_packages/react/src/components + +components + + +cluster_packages/react/src/hooks + +hooks + + +cluster_packages/react/src/themes + +themes + + +cluster_packages/serial + +serial + + +cluster_packages/soundfonts + +soundfonts + + +cluster_packages/tonal + +tonal + + +cluster_packages/tonal/test + +test + + +cluster_packages/tone + +tone + + +cluster_packages/tone/test + +test + + +cluster_packages/webaudio + +webaudio + + +cluster_packages/webdirt + +webdirt + + +cluster_packages/xen + +xen + + +cluster_packages/xen/test + +test + + + +packages/core/controls.mjs + + +controls.mjs + + + + + +packages/core/pattern.mjs + + +pattern.mjs + + + + + +packages/core/controls.mjs->packages/core/pattern.mjs + + + + + +packages/core/drawLine.mjs + + +drawLine.mjs + + + + + +packages/core/pattern.mjs->packages/core/drawLine.mjs + + + + + +packages/core/fraction.mjs + + +fraction.mjs + + + + + +packages/core/pattern.mjs->packages/core/fraction.mjs + + + + + +packages/core/util.mjs + + +util.mjs + + + + + +packages/core/pattern.mjs->packages/core/util.mjs + + + + + +packages/core/timespan.mjs + + +timespan.mjs + + + + + +packages/core/pattern.mjs->packages/core/timespan.mjs + + + + + +packages/core/hap.mjs + + +hap.mjs + + + + + +packages/core/pattern.mjs->packages/core/hap.mjs + + + + + +packages/core/state.mjs + + +state.mjs + + + + + +packages/core/pattern.mjs->packages/core/state.mjs + + + + + +packages/core/value.mjs + + +value.mjs + + + + + +packages/core/pattern.mjs->packages/core/value.mjs + + + + + +packages/core/drawLine.mjs->packages/core/fraction.mjs + + + + + +packages/core/fraction.mjs->packages/core/timespan.mjs + + + + + + + +packages/core/euclid.mjs + + +euclid.mjs + + + + + +packages/core/euclid.mjs->packages/core/pattern.mjs + + + + + +packages/core/euclid.mjs->packages/core/fraction.mjs + + + + + +packages/core/euclid.mjs->packages/core/util.mjs + + + + + +packages/core/timespan.mjs->packages/core/fraction.mjs + + + + + + + +packages/core/gist.js + + +gist.js + + + + + +packages/core/index.mjs + + +index.mjs + + + + + +packages/core/index.mjs->packages/core/controls.mjs + + + + + +packages/core/index.mjs->packages/core/pattern.mjs + + + + + +packages/core/index.mjs->packages/core/fraction.mjs + + + + + +packages/core/index.mjs->packages/core/euclid.mjs + + + + + +packages/core/index.mjs->packages/core/util.mjs + + + + + +packages/core/index.mjs->packages/core/timespan.mjs + + + + + +packages/core/index.mjs->packages/core/gist.js + + + + + +packages/core/index.mjs->packages/core/hap.mjs + + + + + +packages/core/signal.mjs + + +signal.mjs + + + + + +packages/core/index.mjs->packages/core/signal.mjs + + + + + +packages/core/speak.mjs + + +speak.mjs + + + + + +packages/core/index.mjs->packages/core/speak.mjs + + + + + + + +packages/core/index.mjs->packages/core/state.mjs + + + + + +packages/core/signal.mjs->packages/core/pattern.mjs + + + + + +packages/core/signal.mjs->packages/core/fraction.mjs + + + + + +packages/core/signal.mjs->packages/core/util.mjs + + + + + +packages/core/signal.mjs->packages/core/hap.mjs + + + + + +packages/core/speak.mjs->packages/core/index.mjs + + + + + + + +packages/core/value.mjs->packages/core/util.mjs + + + + + +packages/core/test/drawLine.test.mjs + + +drawLine.test.mjs + + + + + +packages/core/test/drawLine.test.mjs->packages/core/pattern.mjs + + + + + +packages/core/test/drawLine.test.mjs->packages/core/drawLine.mjs + + + + + +packages/core/test/fraction.test.mjs + + +fraction.test.mjs + + + + + +packages/core/test/fraction.test.mjs->packages/core/fraction.mjs + + + + + +packages/core/test/pattern.test.mjs + + +pattern.test.mjs + + + + + +packages/core/test/pattern.test.mjs->packages/core/index.mjs + + + + + +packages/core/test/pattern.test.mjs->packages/core/signal.mjs + + + + + +packages/core/test/util.test.mjs + + +util.test.mjs + + + + + +packages/core/test/util.test.mjs->packages/core/pattern.mjs + + + + + +packages/core/test/util.test.mjs->packages/core/util.mjs + + + + + +packages/core/test/value.test.mjs + + +value.test.mjs + + + + + +packages/core/test/value.test.mjs->packages/core/value.mjs + + + + + +packages/embed/embed.js + + +embed.js + + + + + +packages/eval/evaluate.mjs + + +evaluate.mjs + + + + + +packages/eval/evaluate.mjs->packages/core/index.mjs + + + + + +packages/eval/shapeshifter.mjs + + +shapeshifter.mjs + + + + + +packages/eval/evaluate.mjs->packages/eval/shapeshifter.mjs + + + + + +packages/eval/shapeshifter.mjs->packages/core/index.mjs + + + + + +packages/eval/shift-traverser/index.js + + +index.js + + + + + +packages/eval/shapeshifter.mjs->packages/eval/shift-traverser/index.js + + + + + +packages/eval/index.mjs + + +index.mjs + + + + + +packages/eval/index.mjs->packages/eval/evaluate.mjs + + + + + +packages/eval/test/evaluate.test.mjs + + +evaluate.test.mjs + + + + + +packages/eval/test/evaluate.test.mjs->packages/core/index.mjs + + + + + +packages/eval/test/evaluate.test.mjs->packages/eval/evaluate.mjs + + + + + +packages/mini/index.mjs + + +index.mjs + + + + + +packages/eval/test/evaluate.test.mjs->packages/mini/index.mjs + + + + + +packages/mini/krill-parser.js + + +krill-parser.js + + + + + +packages/mini/index.mjs->packages/mini/krill-parser.js + + + + + +packages/mini/mini.mjs + + +mini.mjs + + + + + +packages/mini/index.mjs->packages/mini/mini.mjs + + + + + +packages/eval/test/shapeshifter.test.mjs + + +shapeshifter.test.mjs + + + + + +packages/eval/test/shapeshifter.test.mjs->packages/eval/shapeshifter.mjs + + + + + +packages/midi/index.mjs + + +index.mjs + + + + + +packages/midi/midi.mjs + + +midi.mjs + + + + + +packages/midi/index.mjs->packages/midi/midi.mjs + + + + + +packages/midi/midi.mjs->packages/core/index.mjs + + + + + +packages/tone/index.mjs + + +index.mjs + + + + + +packages/midi/midi.mjs->packages/tone/index.mjs + + + + + +packages/tone/draw.mjs + + +draw.mjs + + + + + +packages/tone/index.mjs->packages/tone/draw.mjs + + + + + +packages/tone/tone.mjs + + +tone.mjs + + + + + +packages/tone/index.mjs->packages/tone/tone.mjs + + + + + +packages/tone/pianoroll.mjs + + +pianoroll.mjs + + + + + +packages/tone/index.mjs->packages/tone/pianoroll.mjs + + + + + +packages/tone/ui.mjs + + +ui.mjs + + + + + +packages/tone/index.mjs->packages/tone/ui.mjs + + + + + +packages/mini/mini.mjs->packages/core/index.mjs + + + + + +packages/mini/mini.mjs->packages/eval/shapeshifter.mjs + + + + + +packages/mini/mini.mjs->packages/mini/krill-parser.js + + + + + +packages/mini/test/mini.test.mjs + + +mini.test.mjs + + + + + +packages/mini/test/mini.test.mjs->packages/core/euclid.mjs + + + + + +packages/mini/test/mini.test.mjs->packages/mini/mini.mjs + + + + + +packages/osc/osc.mjs + + +osc.mjs + + + + + +packages/osc/osc.mjs->packages/core/index.mjs + + + + + +packages/osc/server.js + + +server.js + + + + + +packages/osc/tidal-sniffer.js + + +tidal-sniffer.js + + + + + +packages/react/dist/index.cjs.js + + +index.cjs.js + + + + + +packages/react/dist/index.cjs.js->packages/core/util.mjs + + + + + +packages/react/dist/index.cjs.js->packages/core/index.mjs + + + + + +packages/react/dist/index.cjs.js->packages/eval/index.mjs + + + + + +packages/react/dist/index.cjs.js->packages/midi/index.mjs + + + + + +packages/react/dist/index.cjs.js->packages/tone/index.mjs + + + + + +packages/react/dist/index.es.js + + +index.es.js + + + + + +packages/react/dist/index.es.js->packages/core/util.mjs + + + + + +packages/react/dist/index.es.js->packages/core/index.mjs + + + + + +packages/react/dist/index.es.js->packages/eval/index.mjs + + + + + +packages/react/dist/index.es.js->packages/midi/index.mjs + + + + + +packages/react/dist/index.es.js->packages/tone/index.mjs + + + + + +packages/react/dist/index.es.js->packages/react/dist/index.cjs.js + + + + + +packages/react/package.json + + +package.json + + + + + +packages/react/postcss.config.js + + +postcss.config.js + + + + + +packages/react/src/App.jsx + + +App.jsx + + + + + +packages/react/src/App.jsx->packages/core/index.mjs + + + + + +packages/react/src/App.jsx->packages/eval/index.mjs + + + + + +packages/react/src/App.jsx->packages/mini/index.mjs + + + + + +packages/react/src/App.jsx->packages/midi/index.mjs + + + + + +packages/react/src/App.jsx->packages/tone/index.mjs + + + + + +packages/react/src/App.jsx->packages/react/dist/index.cjs.js + + + + + +packages/react/src/components/MiniRepl.jsx + + +MiniRepl.jsx + + + + + +packages/react/src/App.jsx->packages/react/src/components/MiniRepl.jsx + + + + + +packages/tonal/index.mjs + + +index.mjs + + + + + +packages/react/src/App.jsx->packages/tonal/index.mjs + + + + + +packages/webaudio/index.mjs + + +index.mjs + + + + + +packages/react/src/App.jsx->packages/webaudio/index.mjs + + + + + +packages/xen/index.mjs + + +index.mjs + + + + + +packages/react/src/App.jsx->packages/xen/index.mjs + + + + + +packages/react/src/components/MiniRepl.jsx->packages/react/dist/index.cjs.js + + + + + +packages/react/src/components/CodeMirror6.jsx + + +CodeMirror6.jsx + + + + + +packages/react/src/components/MiniRepl.jsx->packages/react/src/components/CodeMirror6.jsx + + + + + +packages/react/src/cx.js + + +cx.js + + + + + +packages/react/src/components/MiniRepl.jsx->packages/react/src/cx.js + + + + + +packages/react/src/hooks/useHighlighting.mjs + + +useHighlighting.mjs + + + + + +packages/react/src/components/MiniRepl.jsx->packages/react/src/hooks/useHighlighting.mjs + + + + + +packages/react/src/hooks/useRepl.mjs + + +useRepl.mjs + + + + + +packages/react/src/components/MiniRepl.jsx->packages/react/src/hooks/useRepl.mjs + + + + + +packages/react/src/components/MiniRepl.module.css + + +MiniRepl.module.css + + + + + +packages/react/src/components/MiniRepl.jsx->packages/react/src/components/MiniRepl.module.css + + + + + +packages/react/src/components/style.css + + +style.css + + + + + +packages/react/src/components/MiniRepl.jsx->packages/react/src/components/style.css + + + + + +packages/tonal/tonal.mjs + + +tonal.mjs + + + + + +packages/tonal/index.mjs->packages/tonal/tonal.mjs + + + + + +packages/tonal/voicings.mjs + + +voicings.mjs + + + + + +packages/tonal/index.mjs->packages/tonal/voicings.mjs + + + + + +packages/webaudio/clockworker.mjs + + +clockworker.mjs + + + + + +packages/webaudio/index.mjs->packages/webaudio/clockworker.mjs + + + + + +packages/webaudio/sampler.mjs + + +sampler.mjs + + + + + +packages/webaudio/index.mjs->packages/webaudio/sampler.mjs + + + + + +packages/webaudio/scheduler.mjs + + +scheduler.mjs + + + + + +packages/webaudio/index.mjs->packages/webaudio/scheduler.mjs + + + + + +packages/webaudio/webaudio.mjs + + +webaudio.mjs + + + + + +packages/webaudio/index.mjs->packages/webaudio/webaudio.mjs + + + + + +packages/xen/tune.mjs + + +tune.mjs + + + + + +packages/xen/index.mjs->packages/xen/tune.mjs + + + + + +packages/xen/xen.mjs + + +xen.mjs + + + + + +packages/xen/index.mjs->packages/xen/xen.mjs + + + + + +packages/react/src/components/CodeMirror6.jsx->packages/react/dist/index.cjs.js + + + + + +packages/react/src/themes/material-palenight.js + + +material-palenight.js + + + + + +packages/react/src/components/CodeMirror6.jsx->packages/react/src/themes/material-palenight.js + + + + + +packages/react/src/hooks/useHighlighting.mjs->packages/tone/index.mjs + + + + + +packages/react/src/hooks/useHighlighting.mjs->packages/react/dist/index.cjs.js + + + + + +packages/react/src/hooks/useHighlighting.mjs->packages/react/src/components/CodeMirror6.jsx + + + + + +packages/react/src/hooks/useRepl.mjs->packages/core/util.mjs + + + + + +packages/react/src/hooks/useRepl.mjs->packages/eval/index.mjs + + + + + +packages/react/src/hooks/useRepl.mjs->packages/react/dist/index.cjs.js + + + + + +packages/react/src/hooks/useCycle.mjs + + +useCycle.mjs + + + + + +packages/react/src/hooks/useRepl.mjs->packages/react/src/hooks/useCycle.mjs + + + + + +packages/react/src/hooks/usePostMessage.mjs + + +usePostMessage.mjs + + + + + +packages/react/src/hooks/useRepl.mjs->packages/react/src/hooks/usePostMessage.mjs + + + + + +packages/react/src/hooks/useCycle.mjs->packages/core/index.mjs + + + + + +packages/react/src/hooks/useCycle.mjs->packages/tone/index.mjs + + + + + +packages/react/src/hooks/useCycle.mjs->packages/react/dist/index.cjs.js + + + + + +packages/react/src/hooks/usePostMessage.mjs->packages/react/dist/index.cjs.js + + + + + +packages/react/src/hooks/useWebMidi.mjs + + +useWebMidi.mjs + + + + + +packages/react/src/hooks/useWebMidi.mjs->packages/midi/index.mjs + + + + + +packages/react/src/hooks/useWebMidi.mjs->packages/react/dist/index.cjs.js + + + + + +packages/react/src/index.js + + +index.js + + + + + +packages/react/src/index.js->packages/react/src/components/MiniRepl.jsx + + + + + +packages/react/src/index.js->packages/react/src/components/CodeMirror6.jsx + + + + + +packages/react/src/index.js->packages/react/src/cx.js + + + + + +packages/react/src/index.js->packages/react/src/hooks/useHighlighting.mjs + + + + + +packages/react/src/index.js->packages/react/src/hooks/useRepl.mjs + + + + + +packages/react/src/index.js->packages/react/src/hooks/useCycle.mjs + + + + + +packages/react/src/index.js->packages/react/src/hooks/usePostMessage.mjs + + + + + +packages/react/src/index.js->packages/react/src/hooks/useWebMidi.mjs + + + + + +packages/react/src/main.jsx + + +main.jsx + + + + + +packages/react/src/main.jsx->packages/react/dist/index.cjs.js + + + + + +packages/react/src/main.jsx->packages/react/src/App.jsx + + + + + +packages/react/tailwind.config.js + + +tailwind.config.js + + + + + +packages/react/vite.config.js + + +vite.config.js + + + + + +packages/react/vite.config.js->packages/react/package.json + + + + + +packages/serial/serial.mjs + + +serial.mjs + + + + + +packages/serial/serial.mjs->packages/core/index.mjs + + + + + +packages/soundfonts/convert.js + + +convert.js + + + + + +packages/soundfonts/fontloader.mjs + + +fontloader.mjs + + + + + +packages/soundfonts/index.mjs + + +index.mjs + + + + + +packages/soundfonts/index.mjs->packages/soundfonts/fontloader.mjs + + + + + +packages/soundfonts/list.mjs + + +list.mjs + + + + + +packages/soundfonts/index.mjs->packages/soundfonts/list.mjs + + + + + +packages/tonal/tonal.mjs->packages/core/index.mjs + + + + + +packages/tonal/voicings.mjs->packages/core/index.mjs + + + + + +packages/tonal/test/tonal.test.mjs + + +tonal.test.mjs + + + + + +packages/tonal/test/tonal.test.mjs->packages/core/index.mjs + + + + + +packages/tonal/test/tonal.test.mjs->packages/tonal/tonal.mjs + + + + + +packages/tone/draw.mjs->packages/core/index.mjs + + + + + +packages/tone/draw.mjs->packages/tone/tone.mjs + + + + + +packages/tone/tone.mjs->packages/core/util.mjs + + + + + +packages/tone/tone.mjs->packages/core/index.mjs + + + + + +packages/tone/pianoroll.mjs->packages/core/index.mjs + + + + + +packages/tone/ui.mjs->packages/tone/tone.mjs + + + + + +packages/tone/test/tone.test.mjs + + +tone.test.mjs + + + + + +packages/tone/test/tone.test.mjs->packages/core/index.mjs + + + + + +packages/tone/test/tone.test.mjs->packages/tone/tone.mjs + + + + + +packages/webaudio/scheduler.mjs->packages/core/index.mjs + + + + + +packages/webaudio/scheduler.mjs->packages/webaudio/clockworker.mjs + + + + + +packages/webaudio/webaudio.mjs->packages/core/index.mjs + + + + + +packages/webaudio/webaudio.mjs->packages/webaudio/sampler.mjs + + + + + +packages/webdirt/index.mjs + + +index.mjs + + + + + +packages/webdirt/webdirt.mjs + + +webdirt.mjs + + + + + +packages/webdirt/index.mjs->packages/webdirt/webdirt.mjs + + + + + +packages/webdirt/webdirt.mjs->packages/core/index.mjs + + + + + +packages/webdirt/webdirt.mjs->packages/webaudio/index.mjs + + + + + +packages/xen/tune.mjs->packages/core/index.mjs + + + + + +packages/xen/tunejs.js + + +tunejs.js + + + + + +packages/xen/tune.mjs->packages/xen/tunejs.js + + + + + +packages/xen/xen.mjs->packages/core/index.mjs + + + + + +packages/xen/test/xen.test.mjs + + +xen.test.mjs + + + + + +packages/xen/test/xen.test.mjs->packages/xen/xen.mjs + + + + + diff --git a/doc.json b/doc.json deleted file mode 100644 index caec3b45..00000000 --- a/doc.json +++ /dev/null @@ -1,3639 +0,0 @@ -{ - "docs": [ - { - "comment": "/**\n * Select a sound / sample by name.\n *\n *
\n * show all sounds\n *\n * 808 (6) 808bd (25) 808cy (25) 808hc (5) 808ht (5) 808lc (5) 808lt (5) 808mc (5) 808mt (5) 808oh (5) 808sd (25) 909 (1) ab (12) ade (10) ades2 (9) ades3 (7) ades4 (6) alex (2) alphabet (26) amencutup (32) armora (7) arp (2) arpy (11) auto (11) baa (7) baa2 (7) bass (4) bass0 (3) bass1 (30) bass2 (5) bass3 (11) bassdm (24) bassfoo (3) battles (2) bd (24) bend (4) bev (2) bin (2) birds (10) birds3 (19) bleep (13) blip (2) blue (2) bottle (13) breaks125 (2) breaks152 (1) breaks157 (1) breaks165 (1) breath (1) bubble (8) can (14) casio (3) cb (1) cc (6) chin (4) circus (3) clak (2) click (4) clubkick (5) co (4) coins (1) control (2) cosmicg (15) cp (2) cr (6) crow (4) d (4) db (13) diphone (38) diphone2 (12) dist (16) dork2 (4) dorkbot (2) dr (42) dr2 (6) dr55 (4) dr_few (8) drum (6) drumtraks (13) e (8) east (9) electro1 (13) em2 (6) erk (1) f (1) feel (7) feelfx (8) fest (1) fire (1) flick (17) fm (17) foo (27) future (17) gab (10) gabba (4) gabbaloud (4) gabbalouder (4) glasstap (3) glitch (8) glitch2 (8) gretsch (24) gtr (3) h (7) hand (17) hardcore (12) hardkick (6) haw (6) hc (6) hh (13) hh27 (13) hit (6) hmm (1) ho (6) hoover (6) house (8) ht (16) if (5) ifdrums (3) incoming (8) industrial (32) insect (3) invaders (18) jazz (8) jungbass (20) jungle (13) juno (12) jvbass (13) kicklinn (1) koy (2) kurt (7) latibro (8) led (1) less (4) lighter (33) linnhats (6) lt (16) made (7) made2 (1) mash (2) mash2 (4) metal (10) miniyeah (4) monsterb (6) moog (7) mouth (15) mp3 (4) msg (9) mt (16) mute (28) newnotes (15) noise (1) noise2 (8) notes (15) numbers (9) oc (4) odx (15) off (1) outdoor (6) pad (3) padlong (1) pebbles (1) perc (6) peri (15) pluck (17) popkick (10) print (11) proc (2) procshort (8) psr (30) rave (8) rave2 (4) ravemono (2) realclaps (4) reverbkick (1) rm (2) rs (1) sax (22) sd (2) seawolf (3) sequential (8) sf (18) sheffield (1) short (5) sid (12) sine (6) sitar (8) sn (52) space (18) speakspell (12) speech (7) speechless (10) speedupdown (9) stab (23) stomp (10) subroc3d (11) sugar (2) sundance (6) tabla (26) tabla2 (46) tablex (3) tacscan (22) tech (13) techno (7) tink (5) tok (4) toys (13) trump (11) ul (10) ulgab (5) uxay (3) v (6) voodoo (5) wind (10) wobble (1) world (3) xmas (1) yeah (31)\n *\n * more info\n *\n *
\n *\n * @name s\n * @param {string | Pattern} sound The sound / pattern of sounds to pick\n * @example\n * s(\"bd hh\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 11, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Select a sound / sample by name.

\n
\nshow all sounds\n

808 (6) 808bd (25) 808cy (25) 808hc (5) 808ht (5) 808lc (5) 808lt (5) 808mc (5) 808mt (5) 808oh (5) 808sd (25) 909 (1) ab (12) ade (10) ades2 (9) ades3 (7) ades4 (6) alex (2) alphabet (26) amencutup (32) armora (7) arp (2) arpy (11) auto (11) baa (7) baa2 (7) bass (4) bass0 (3) bass1 (30) bass2 (5) bass3 (11) bassdm (24) bassfoo (3) battles (2) bd (24) bend (4) bev (2) bin (2) birds (10) birds3 (19) bleep (13) blip (2) blue (2) bottle (13) breaks125 (2) breaks152 (1) breaks157 (1) breaks165 (1) breath (1) bubble (8) can (14) casio (3) cb (1) cc (6) chin (4) circus (3) clak (2) click (4) clubkick (5) co (4) coins (1) control (2) cosmicg (15) cp (2) cr (6) crow (4) d (4) db (13) diphone (38) diphone2 (12) dist (16) dork2 (4) dorkbot (2) dr (42) dr2 (6) dr55 (4) dr_few (8) drum (6) drumtraks (13) e (8) east (9) electro1 (13) em2 (6) erk (1) f (1) feel (7) feelfx (8) fest (1) fire (1) flick (17) fm (17) foo (27) future (17) gab (10) gabba (4) gabbaloud (4) gabbalouder (4) glasstap (3) glitch (8) glitch2 (8) gretsch (24) gtr (3) h (7) hand (17) hardcore (12) hardkick (6) haw (6) hc (6) hh (13) hh27 (13) hit (6) hmm (1) ho (6) hoover (6) house (8) ht (16) if (5) ifdrums (3) incoming (8) industrial (32) insect (3) invaders (18) jazz (8) jungbass (20) jungle (13) juno (12) jvbass (13) kicklinn (1) koy (2) kurt (7) latibro (8) led (1) less (4) lighter (33) linnhats (6) lt (16) made (7) made2 (1) mash (2) mash2 (4) metal (10) miniyeah (4) monsterb (6) moog (7) mouth (15) mp3 (4) msg (9) mt (16) mute (28) newnotes (15) noise (1) noise2 (8) notes (15) numbers (9) oc (4) odx (15) off (1) outdoor (6) pad (3) padlong (1) pebbles (1) perc (6) peri (15) pluck (17) popkick (10) print (11) proc (2) procshort (8) psr (30) rave (8) rave2 (4) ravemono (2) realclaps (4) reverbkick (1) rm (2) rs (1) sax (22) sd (2) seawolf (3) sequential (8) sf (18) sheffield (1) short (5) sid (12) sine (6) sitar (8) sn (52) space (18) speakspell (12) speech (7) speechless (10) speedupdown (9) stab (23) stomp (10) subroc3d (11) sugar (2) sundance (6) tabla (26) tabla2 (46) tablex (3) tacscan (22) tech (13) techno (7) tink (5) tok (4) toys (13) trump (11) ul (10) ulgab (5) uxay (3) v (6) voodoo (5) wind (10) wobble (1) world (3) xmas (1) yeah (31)

\n

more info

\n
", - "name": "s", - "params": [ - { - "type": { - "names": [ - "string", - "Pattern" - ] - }, - "description": "

The sound / pattern of sounds to pick

", - "name": "sound" - } - ], - "examples": [ - "s(\"bd hh\").osc()" - ], - "longname": "s", - "kind": "member", - "scope": "global", - "___id": "T000002R000004", - "___s": true - }, - { - "comment": "/**\n * The note or sample number to choose for a synth or sampleset\n * Note names currently not working yet, but will hopefully soon. Just stick to numbers for now\n *\n * @name n\n * @param {string | number | Pattern} value note name, note number or sample number\n * @example\n * s('superpiano').n(\"<0 1 2 3>\").osc()\n * @example\n * s('superpiano').n(\"\").osc()\n * @example\n * n(\"0 1 2 3\").s('east').osc()\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 30, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

The note or sample number to choose for a synth or sampleset\nNote names currently not working yet, but will hopefully soon. Just stick to numbers for now

", - "name": "n", - "params": [ - { - "type": { - "names": [ - "string", - "number", - "Pattern" - ] - }, - "description": "

note name, note number or sample number

", - "name": "value" - } - ], - "examples": [ - "s('superpiano').n(\"<0 1 2 3>\").osc()", - "s('superpiano').n(\"\").osc()", - "n(\"0 1 2 3\").s('east').osc()" - ], - "longname": "n", - "kind": "member", - "scope": "global", - "___id": "T000002R000005", - "___s": true - }, - { - "comment": "/**\n * A pattern of numbers that speed up (or slow down) samples while they play. Currently only supported by osc / superdirt.\n *\n * @name accelerate\n * @param {number | Pattern} amount acceleration.\n * @example\n * s(\"sax\").accelerate(\"<0 1 2 4 8 16>\").slow(2).osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 54, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

A pattern of numbers that speed up (or slow down) samples while they play. Currently only supported by osc / superdirt.

", - "name": "accelerate", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

acceleration.

", - "name": "amount" - } - ], - "examples": [ - "s(\"sax\").accelerate(\"<0 1 2 4 8 16>\").slow(2).osc()" - ], - "longname": "accelerate", - "kind": "member", - "scope": "global", - "___id": "T000002R000006", - "___s": true - }, - { - "comment": "/**\n * Like {@link amp}, but exponential.\n *\n * @name gain\n * @param {number | Pattern} amount gain.\n * @example\n * s(\"bd*8\").gain(\".7*2 1 .7*2 1 .7 1\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 64, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Like {@link amp}, but exponential.

", - "name": "gain", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

gain.

", - "name": "amount" - } - ], - "examples": [ - "s(\"bd*8\").gain(\".7*2 1 .7*2 1 .7 1\").osc()" - ], - "longname": "gain", - "kind": "member", - "scope": "global", - "___id": "T000002R000007", - "___s": true - }, - { - "comment": "/**\n * Like {@link gain}, but linear.\n *\n * @name amp\n * @param {number | Pattern} amount gain.\n * @example\n * s(\"bd*8\").amp(\".1*2 .5 .1*2 .5 .1 .5\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 78, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Like {@link gain}, but linear.

", - "name": "amp", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

gain.

", - "name": "amount" - } - ], - "examples": [ - "s(\"bd*8\").amp(\".1*2 .5 .1*2 .5 .1 .5\").osc()" - ], - "longname": "amp", - "kind": "member", - "scope": "global", - "___id": "T000002R000008", - "___s": true - }, - { - "comment": "/**\n * Sets the center frequency of the band-pass filter.\n *\n * @name bandf\n * @param {number | Pattern} frequency center frequency\n * @example\n * s(\"bd sd\").bandf(\"<1000 2000 4000 8000>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 126, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Sets the center frequency of the band-pass filter.

", - "name": "bandf", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

center frequency

", - "name": "frequency" - } - ], - "examples": [ - "s(\"bd sd\").bandf(\"<1000 2000 4000 8000>\").osc()" - ], - "longname": "bandf", - "kind": "member", - "scope": "global", - "___id": "T000002R000009", - "___s": true - }, - { - "comment": "/**\n * Sets the q-factor of the band-pass filter\n *\n * @name bandq\n * @param {number | Pattern} q q factor\n * @example\n * s(\"bd sd\").bandf(2000).bandq(\"<.2 .9>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 137, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Sets the q-factor of the band-pass filter

", - "name": "bandq", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

q factor

", - "name": "q" - } - ], - "examples": [ - "s(\"bd sd\").bandf(2000).bandq(\"<.2 .9>\").osc()" - ], - "longname": "bandq", - "kind": "member", - "scope": "global", - "___id": "T000002R000010", - "___s": true - }, - { - "comment": "/**\n * a pattern of numbers from 0 to 1. Skips the beginning of each sample, e.g. `0.25` to cut off the first quarter from each sample.\n *\n * @name begin\n * @param {number | Pattern} amount between 0 and 1, where 1 is the length of the sample\n * @example\n * s(\"rave\").begin(\"<0 .25 .5 .75>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 147, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

a pattern of numbers from 0 to 1. Skips the beginning of each sample, e.g. 0.25 to cut off the first quarter from each sample.

", - "name": "begin", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

between 0 and 1, where 1 is the length of the sample

", - "name": "amount" - } - ], - "examples": [ - "s(\"rave\").begin(\"<0 .25 .5 .75>\").osc()" - ], - "longname": "begin", - "kind": "member", - "scope": "global", - "___id": "T000002R000011", - "___s": true - }, - { - "comment": "/**\n * The same as {@link begin}, but cuts off the end off each sample.\n *\n * @name end\n * @param {number | Pattern} length 1 = whole sample, .5 = half sample, .25 = quarter sample etc..\n * @example\n * s(\"bd*2,ho*4\").end(\"<.1 .2 .5 1>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 161, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

The same as {@link begin}, but cuts off the end off each sample.

", - "name": "end", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

1 = whole sample, .5 = half sample, .25 = quarter sample etc..

", - "name": "length" - } - ], - "examples": [ - "s(\"bd*2,ho*4\").end(\"<.1 .2 .5 1>\").osc()" - ], - "longname": "end", - "kind": "member", - "scope": "global", - "___id": "T000002R000012", - "___s": true - }, - { - "comment": "/**\n * Loops the sample (from `begin` to `end`) the specified number of times.\n * Note that the tempo of the loop is not synced with the cycle tempo.\n *\n * @name loop\n * @param {number | Pattern} times How often the sample is looped\n * @example\n * s(\"bd\").loop(\"<1 2 3 4>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 175, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Loops the sample (from begin to end) the specified number of times.\nNote that the tempo of the loop is not synced with the cycle tempo.

", - "name": "loop", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

How often the sample is looped

", - "name": "times" - } - ], - "examples": [ - "s(\"bd\").loop(\"<1 2 3 4>\").osc()" - ], - "longname": "loop", - "kind": "member", - "scope": "global", - "___id": "T000002R000013", - "___s": true - }, - { - "comment": "/**\n * a pattern of numbers from 0 to 1. Skips the beginning of each sample, e.g. `0.25` to cut off the first quarter from each sample.\n *\n * @name legato\n * @param {number | Pattern} duration between 0 and 1, where 1 is the length of the whole hap time\n * @example\n * \"c4 eb4 g4 bb4\".legato(\"<0.125 .25 .5 .75 1 2 4>\")\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 188, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

a pattern of numbers from 0 to 1. Skips the beginning of each sample, e.g. 0.25 to cut off the first quarter from each sample.

", - "name": "legato", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

between 0 and 1, where 1 is the length of the whole hap time

", - "name": "duration" - } - ], - "examples": [ - "\"c4 eb4 g4 bb4\".legato(\"<0.125 .25 .5 .75 1 2 4>\")" - ], - "longname": "legato", - "kind": "member", - "scope": "global", - "___id": "T000002R000014", - "___s": true - }, - { - "comment": "/**\n * bit crusher effect.\n *\n * @name crush\n * @param {number | Pattern} depth between 1 (for drastic reduction in bit-depth) to 16 (for barely no reduction).\n * @example\n * s(\",hh*3,jvbass*2\").fast(2).crush(\"<16 8 7 6 5 4 3 2>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 199, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

bit crusher effect.

", - "name": "crush", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

between 1 (for drastic reduction in bit-depth) to 16 (for barely no reduction).

", - "name": "depth" - } - ], - "examples": [ - "s(\",hh*3,jvbass*2\").fast(2).crush(\"<16 8 7 6 5 4 3 2>\").osc()" - ], - "longname": "crush", - "kind": "member", - "scope": "global", - "___id": "T000002R000015", - "___s": true - }, - { - "comment": "/**\n * fake-resampling for lowering the sample rate\n *\n * @name coarse\n * @param {number | Pattern} factor 1 for original 2 for half, 3 for a third and so on.\n * @example\n * s(\"xmas\").coarse(\"<1 4 8 16 32>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 213, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

fake-resampling for lowering the sample rate

", - "name": "coarse", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

1 for original 2 for half, 3 for a third and so on.

", - "name": "factor" - } - ], - "examples": [ - "s(\"xmas\").coarse(\"<1 4 8 16 32>\").osc()" - ], - "longname": "coarse", - "kind": "member", - "scope": "global", - "___id": "T000002R000016", - "___s": true - }, - { - "comment": "/**\n * choose the channel the pattern is sent to in superdirt\n *\n * @name channel\n * @param {number | Pattern} channel channel number\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 228, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

choose the channel the pattern is sent to in superdirt

", - "name": "channel", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

channel number

", - "name": "channel" - } - ], - "longname": "channel", - "kind": "member", - "scope": "global", - "___id": "T000002R000017", - "___s": true - }, - { - "comment": "/**\n * In the style of classic drum-machines, `cut` will stop a playing sample as soon as another samples with in same cutgroup is to be played. An example would be an open hi-hat followed by a closed one, essentially muting the open.\n *\n * @name cut\n * @param {number | Pattern} group cut group number\n * @example\n * s(\"bd sax\").cut(1).osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 236, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

In the style of classic drum-machines, cut will stop a playing sample as soon as another samples with in same cutgroup is to be played. An example would be an open hi-hat followed by a closed one, essentially muting the open.

", - "name": "cut", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

cut group number

", - "name": "group" - } - ], - "examples": [ - "s(\"bd sax\").cut(1).osc()" - ], - "longname": "cut", - "kind": "member", - "scope": "global", - "___id": "T000002R000018", - "___s": true - }, - { - "comment": "/**\n * Applies the cutoff frequency of the low-pass filter.\n *\n * @name cutoff\n * @param {number | Pattern} frequency audible between 0 and 20000\n * @example\n * s(\"bd,hh*2,<~ sd>\").fast(2).cutoff(\"<4000 2000 1000 500 200 100>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 250, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Applies the cutoff frequency of the low-pass filter.

", - "name": "cutoff", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

audible between 0 and 20000

", - "name": "frequency" - } - ], - "examples": [ - "s(\"bd,hh*2,<~ sd>\").fast(2).cutoff(\"<4000 2000 1000 500 200 100>\").osc()" - ], - "longname": "cutoff", - "kind": "member", - "scope": "global", - "___id": "T000002R000019", - "___s": true - }, - { - "comment": "/**\n * Applies the cutoff frequency of the high-pass filter.\n *\n * @name hcutoff\n * @param {number | Pattern} frequency audible between 0 and 20000\n * @example\n * s(\"bd,hh*2,<~ sd>\").fast(2).hcutoff(\"<4000 2000 1000 500 200 100>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 261, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Applies the cutoff frequency of the high-pass filter.

", - "name": "hcutoff", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

audible between 0 and 20000

", - "name": "frequency" - } - ], - "examples": [ - "s(\"bd,hh*2,<~ sd>\").fast(2).hcutoff(\"<4000 2000 1000 500 200 100>\").osc()" - ], - "longname": "hcutoff", - "kind": "member", - "scope": "global", - "___id": "T000002R000020", - "___s": true - }, - { - "comment": "/**\n * Applies the cutoff frequency of the high-pass filter.\n *\n * @name hresonance\n * @param {number | Pattern} q resonance factor between 0 and 1\n * @example\n * s(\"bd,hh*2,<~ sd>\").fast(2).hcutoff(2000).hresonance(\"<0 .2 .4 .6>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 276, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Applies the cutoff frequency of the high-pass filter.

", - "name": "hresonance", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

resonance factor between 0 and 1

", - "name": "q" - } - ], - "examples": [ - "s(\"bd,hh*2,<~ sd>\").fast(2).hcutoff(2000).hresonance(\"<0 .2 .4 .6>\").osc()" - ], - "longname": "hresonance", - "kind": "member", - "scope": "global", - "___id": "T000002R000021", - "___s": true - }, - { - "comment": "/**\n * Applies the cutoff frequency of the low-pass filter.\n *\n * @name resonance\n * @param {number | Pattern} q resonance factor between 0 and 1\n * @example\n * s(\"bd,hh*2,<~ sd>\").fast(2).cutoff(2000).resonance(\"<0 .2 .4 .6>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 291, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Applies the cutoff frequency of the low-pass filter.

", - "name": "resonance", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

resonance factor between 0 and 1

", - "name": "q" - } - ], - "examples": [ - "s(\"bd,hh*2,<~ sd>\").fast(2).cutoff(2000).resonance(\"<0 .2 .4 .6>\").osc()" - ], - "longname": "resonance", - "kind": "member", - "scope": "global", - "___id": "T000002R000022", - "___s": true - }, - { - "comment": "/**\n * Set detune of oscillators. Works only with some synths, see tidal doc\n *\n * @name djf\n * @param {number | Pattern} cutoff below 0.5 is low pass filter, above is high pass filter\n * @example\n * n(\"0 3 7 [10,24]\").s('superzow').octave(3).djf(\"<.5 .25 .5 .75>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 302, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Set detune of oscillators. Works only with some synths, see tidal doc

", - "name": "djf", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

below 0.5 is low pass filter, above is high pass filter

", - "name": "cutoff" - } - ], - "examples": [ - "n(\"0 3 7 [10,24]\").s('superzow').octave(3).djf(\"<.5 .25 .5 .75>\").osc()" - ], - "longname": "djf", - "kind": "member", - "scope": "global", - "___id": "T000002R000023", - "___s": true - }, - { - "comment": "/**\n * Set detune of oscillators. Works only with some synths, see tidal doc\n *\n * @name detune\n * @param {number | Pattern} amount between 0 and 1\n * @example\n * n(\"0 3 7\").s('superzow').octave(3).detune(\"<0 .25 .5 1 2>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 340, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Set detune of oscillators. Works only with some synths, see tidal doc

", - "name": "detune", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

between 0 and 1

", - "name": "amount" - } - ], - "examples": [ - "n(\"0 3 7\").s('superzow').octave(3).detune(\"<0 .25 .5 1 2>\").osc()" - ], - "longname": "detune", - "kind": "member", - "scope": "global", - "___id": "T000002R000024", - "___s": true - }, - { - "comment": "/**\n * Set dryness of reverb. See {@link room} and {@link size} for more information about reverb.\n *\n * @name dry\n * @param {number | Pattern} dry 0 = wet, 1 = dry\n * @example\n * n(\"[0,3,7](3,8)\").s(\"superpiano\").room(.7).dry(\"<0 .5 .75 1>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 350, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Set dryness of reverb. See {@link room} and {@link size} for more information about reverb.

", - "name": "dry", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

0 = wet, 1 = dry

", - "name": "dry" - } - ], - "examples": [ - "n(\"[0,3,7](3,8)\").s(\"superpiano\").room(.7).dry(\"<0 .5 .75 1>\").osc()" - ], - "longname": "dry", - "kind": "member", - "scope": "global", - "___id": "T000002R000025", - "___s": true - }, - { - "comment": "/**\n * Set frequency of sound.\n *\n * @name freq\n * @param {number | Pattern} frequency in Hz. the audible range is between 20 and 20000 Hz\n * @example\n * freq(\"220 110 440 110\").s(\"superzow\").osc()\n * @example\n * freq(\"110\".mulOut(\".5 1.5 .6 [2 3]\")).s(\"superzow\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 385, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Set frequency of sound.

", - "name": "freq", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

in Hz. the audible range is between 20 and 20000 Hz

", - "name": "frequency" - } - ], - "examples": [ - "freq(\"220 110 440 110\").s(\"superzow\").osc()", - "freq(\"110\".mulOut(\".5 1.5 .6 [2 3]\")).s(\"superzow\").osc()" - ], - "longname": "freq", - "kind": "member", - "scope": "global", - "___id": "T000002R000026", - "___s": true - }, - { - "comment": "/**\n * Emulation of a Leslie speaker: speakers rotating in a wooden amplified cabinet.\n *\n * @name leslie\n * @param {number | Pattern} wet between 0 and 1\n * @example\n * n(\"0,4,7\").s(\"supersquare\").leslie(\"<0 .4 .6 1>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 408, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Emulation of a Leslie speaker: speakers rotating in a wooden amplified cabinet.

", - "name": "leslie", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

between 0 and 1

", - "name": "wet" - } - ], - "examples": [ - "n(\"0,4,7\").s(\"supersquare\").leslie(\"<0 .4 .6 1>\").osc()" - ], - "longname": "leslie", - "kind": "member", - "scope": "global", - "___id": "T000002R000027", - "___s": true - }, - { - "comment": "/**\n * Rate of modulation / rotation for leslie effect\n *\n * @name lrate\n * @param {number | Pattern} rate 6.7 for fast, 0.7 for slow\n * @example\n * n(\"0,4,7\").s(\"supersquare\").leslie(1).lrate(\"<1 2 4 8>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 418, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Rate of modulation / rotation for leslie effect

", - "name": "lrate", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

6.7 for fast, 0.7 for slow

", - "name": "rate" - } - ], - "examples": [ - "n(\"0,4,7\").s(\"supersquare\").leslie(1).lrate(\"<1 2 4 8>\").osc()" - ], - "longname": "lrate", - "kind": "member", - "scope": "global", - "___id": "T000002R000028", - "___s": true - }, - { - "comment": "/**\n * Physical size of the cabinet in meters. Be careful, it might be slightly larger than your computer. Affects the Doppler amount (pitch warble)\n *\n * @name lsize\n * @param {number | Pattern} meters somewhere between 0 and 1\n * @example\n * n(\"0,4,7\").s(\"supersquare\").leslie(1).lrate(2).lsize(\"<.1 .5 1>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 429, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Physical size of the cabinet in meters. Be careful, it might be slightly larger than your computer. Affects the Doppler amount (pitch warble)

", - "name": "lsize", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

somewhere between 0 and 1

", - "name": "meters" - } - ], - "examples": [ - "n(\"0,4,7\").s(\"supersquare\").leslie(1).lrate(2).lsize(\"<.1 .5 1>\").osc()" - ], - "longname": "lsize", - "kind": "member", - "scope": "global", - "___id": "T000002R000029", - "___s": true - }, - { - "comment": "/**\n * Sets the default octave of a synth.\n *\n * @name octave\n * @param {number | Pattern} octave octave number\n * @example\n * n(\"0,4,7\").s('supersquare').octave(\"<3 4 5 6>\").osc()\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 464, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Sets the default octave of a synth.

", - "name": "octave", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

octave number

", - "name": "octave" - } - ], - "examples": [ - "n(\"0,4,7\").s('supersquare').octave(\"<3 4 5 6>\").osc()" - ], - "longname": "octave", - "kind": "member", - "scope": "global", - "___id": "T000002R000030", - "___s": true - }, - { - "comment": "/**\n * a pattern of numbers. An `orbit` is a global parameter context for patterns. Patterns with the same orbit will share hardware output bus offset and global effects, e.g. reverb and delay. The maximum number of orbits is specified in the superdirt startup, numbers higher than maximum will wrap around.\n *\n * @name orbit\n * @param {number | Pattern} number\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 476, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

a pattern of numbers. An orbit is a global parameter context for patterns. Patterns with the same orbit will share hardware output bus offset and global effects, e.g. reverb and delay. The maximum number of orbits is specified in the superdirt startup, numbers higher than maximum will wrap around.

", - "name": "orbit", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "name": "number" - } - ], - "longname": "orbit", - "kind": "member", - "scope": "global", - "___id": "T000002R000031", - "___s": true - }, - { - "comment": "/**\n * Sets position in stereo.\n *\n * @name pan\n * @param {number | Pattern} pan between 0 and 1, from left to right (assuming stereo), once round a circle (assuming multichannel)\n * @example\n * s(\"[bd hh]*2\").pan(\"<.5 1 .5 0>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 490, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Sets position in stereo.

", - "name": "pan", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

between 0 and 1, from left to right (assuming stereo), once round a circle (assuming multichannel)

", - "name": "pan" - } - ], - "examples": [ - "s(\"[bd hh]*2\").pan(\"<.5 1 .5 0>\").osc()" - ], - "longname": "pan", - "kind": "member", - "scope": "global", - "___id": "T000002R000032", - "___s": true - }, - { - "comment": "/**\n * Sets the level of reverb.\n *\n * @name room\n * @param {number | Pattern} level between 0 and 1\n * @example\n * s(\"bd sd\").room(\"<0 .2 .4 .6 .8 1>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 557, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Sets the level of reverb.

", - "name": "room", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

between 0 and 1

", - "name": "level" - } - ], - "examples": [ - "s(\"bd sd\").room(\"<0 .2 .4 .6 .8 1>\").osc()" - ], - "longname": "room", - "kind": "member", - "scope": "global", - "___id": "T000002R000033", - "___s": true - }, - { - "comment": "/**\n * Sets the room size of the reverb, see {@link room}.\n *\n * @name size\n * @param {number | Pattern} size between 0 and 1\n * @example\n * s(\"bd sd\").room(.8).size(\"<0 .2 .4 .6 .8 1>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 567, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Sets the room size of the reverb, see {@link room}.

", - "name": "size", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

between 0 and 1

", - "name": "size" - } - ], - "examples": [ - "s(\"bd sd\").room(.8).size(\"<0 .2 .4 .6 .8 1>\").osc()" - ], - "longname": "size", - "kind": "member", - "scope": "global", - "___id": "T000002R000034", - "___s": true - }, - { - "comment": "/**\n * Wave shaping distortion. CAUTION: it might get loud\n *\n * @name shape\n * @param {number | Pattern} distortion between 0 and 1\n * @example\n * s(\"bd sd\").shape(\"<0 .2 .4 .6 .8 1>\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 588, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Wave shaping distortion. CAUTION: it might get loud

", - "name": "shape", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

between 0 and 1

", - "name": "distortion" - } - ], - "examples": [ - "s(\"bd sd\").shape(\"<0 .2 .4 .6 .8 1>\").osc()" - ], - "longname": "shape", - "kind": "member", - "scope": "global", - "___id": "T000002R000035", - "___s": true - }, - { - "comment": "/**\n * Changes the speed of sample playback, i.e. a cheap way of changing pitch.\n *\n * @name speed\n * @param {number | Pattern} speed -inf to inf, negative numbers play the sample backwards.\n * @example\n * s(\"bd\").speed(\"<1 2 4 1 -2 -4>\").osc()\n * @example\n * speed(\"1 1.5*2 [2 1.1]\").s(\"sax\").cut(1).osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 602, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Changes the speed of sample playback, i.e. a cheap way of changing pitch.

", - "name": "speed", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

inf to inf, negative numbers play the sample backwards.

", - "name": "speed" - } - ], - "examples": [ - "s(\"bd\").speed(\"<1 2 4 1 -2 -4>\").osc()", - "speed(\"1 1.5*2 [2 1.1]\").s(\"sax\").cut(1).osc()" - ], - "longname": "speed", - "kind": "member", - "scope": "global", - "___id": "T000002R000036", - "___s": true - }, - { - "comment": "/**\n * Used in conjunction with {@link speed}, accepts values of \"r\" (rate, default behavior), \"c\" (cycles), or \"s\" (seconds). Using `unit \"c\"` means `speed` will be interpreted in units of cycles, e.g. `speed \"1\"` means samples will be stretched to fill a cycle. Using `unit \"s\"` means the playback speed will be adjusted so that the duration is the number of seconds specified by `speed`.\n *\n * @name unit\n * @param {number | string | Pattern} unit see description above\n * @example\n * speed(\"1 2 .5 3\").s(\"bd\").unit(\"c\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 618, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Used in conjunction with {@link speed}, accepts values of "r" (rate, default behavior), "c" (cycles), or "s" (seconds). Using unit "c" means speed will be interpreted in units of cycles, e.g. speed "1" means samples will be stretched to fill a cycle. Using unit "s" means the playback speed will be adjusted so that the duration is the number of seconds specified by speed.

", - "name": "unit", - "params": [ - { - "type": { - "names": [ - "number", - "string", - "Pattern" - ] - }, - "description": "

see description above

", - "name": "unit" - } - ], - "examples": [ - "speed(\"1 2 .5 3\").s(\"bd\").unit(\"c\").osc()" - ], - "longname": "unit", - "kind": "member", - "scope": "global", - "___id": "T000002R000037", - "___s": true - }, - { - "comment": "/**\n * Made by Calum Gunn. Reminiscent of some weird mixture of filter, ring-modulator and pitch-shifter. The SuperCollider manual defines Squiz as:\n *\n * \"A simplistic pitch-raising algorithm. It's not meant to sound natural; its sound is reminiscent of some weird mixture of filter, ring-modulator and pitch-shifter, depending on the input. The algorithm works by cutting the signal into fragments (delimited by upwards-going zero-crossings) and squeezing those fragments in the time domain (i.e. simply playing them back faster than they came in), leaving silences inbetween. All the parameters apart from memlen can be modulated.\"\n *\n * @name squiz\n * @param {number | Pattern} squiz Try passing multiples of 2 to it - 2, 4, 8 etc.\n * @example\n * squiz(\"2 4/2 6 [8 16]\").s(\"bd\").osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 632, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Made by Calum Gunn. Reminiscent of some weird mixture of filter, ring-modulator and pitch-shifter. The SuperCollider manual defines Squiz as:

\n

"A simplistic pitch-raising algorithm. It's not meant to sound natural; its sound is reminiscent of some weird mixture of filter, ring-modulator and pitch-shifter, depending on the input. The algorithm works by cutting the signal into fragments (delimited by upwards-going zero-crossings) and squeezing those fragments in the time domain (i.e. simply playing them back faster than they came in), leaving silences inbetween. All the parameters apart from memlen can be modulated."

", - "name": "squiz", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

Try passing multiples of 2 to it - 2, 4, 8 etc.

", - "name": "squiz" - } - ], - "examples": [ - "squiz(\"2 4/2 6 [8 16]\").s(\"bd\").osc()" - ], - "longname": "squiz", - "kind": "member", - "scope": "global", - "___id": "T000002R000038", - "___s": true - }, - { - "comment": "/**\n *\n * Formant filter to make things sound like vowels.\n *\n * @name vowel\n * @param {string | Pattern} vowel You can use a e i o u. Use a rest (~) to override the effect\n * @example\n * vowel(\"a e i [o u]\").slow(2)\n * .n(\"<[0,7]!4 [2,7]!4>\")\n * .s('supersquare').osc()\n *\n */", - "meta": { - "filename": "controls.mjs", - "lineno": 651, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Formant filter to make things sound like vowels.

", - "name": "vowel", - "params": [ - { - "type": { - "names": [ - "string", - "Pattern" - ] - }, - "description": "

You can use a e i o u. Use a rest (~) to override the effect

", - "name": "vowel" - } - ], - "examples": [ - "vowel(\"a e i [o u]\").slow(2)\n.n(\"<[0,7]!4 [2,7]!4>\")\n.s('supersquare').osc()" - ], - "longname": "vowel", - "kind": "member", - "scope": "global", - "___id": "T000002R000039", - "___s": true - }, - { - "comment": "/**\n * Intended for a debugging, drawLine renders the pattern as a string, where each character represents the same time span.\n * Should only be used with single characters as values, otherwise the character slots will be messed up.\n * Character legend:\n *\n * - \"|\" cycle separator\n * - \"-\" hold previous value\n * - \".\" silence\n *\n * @param {Pattern} pattern the pattern to use\n * @param {number} chars max number of characters (approximately)\n * @returns string\n * @example\n * const line = drawLine(\"0 [1 2 3]\", 10); // |0--123|0--123\n * console.log(line);\n */", - "meta": { - "range": [ - 1414, - 2784 - ], - "filename": "drawLine.mjs", - "lineno": 25, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100000596", - "name": "drawLine", - "type": "FunctionDeclaration", - "paramnames": [ - "pat", - "chars" - ] - }, - "vars": { - "cycle": "drawLine~cycle", - "pos": "drawLine~pos", - "lines": "drawLine~lines", - "emptyLine": "drawLine~emptyLine", - "haps": "drawLine~haps", - "durations": "drawLine~durations", - "": null, - "charFraction": "drawLine~charFraction", - "totalSlots": "drawLine~totalSlots", - "i": "drawLine~i", - "undefined": null, - "matches": "drawLine~matches", - "missingLines": "drawLine~missingLines" - } - }, - "description": "

Intended for a debugging, drawLine renders the pattern as a string, where each character represents the same time span.\nShould only be used with single characters as values, otherwise the character slots will be messed up.\nCharacter legend:

\n
    \n
  • "|" cycle separator
  • \n
  • "-" hold previous value
  • \n
  • "." silence
  • \n
", - "params": [ - { - "type": { - "names": [ - "Pattern" - ] - }, - "description": "

the pattern to use

", - "name": "pattern" - }, - { - "type": { - "names": [ - "number" - ] - }, - "description": "

max number of characters (approximately)

", - "name": "chars" - } - ], - "returns": [ - { - "description": "

string

" - } - ], - "examples": [ - "const line = drawLine(\"0 [1 2 3]\", 10); // |0--123|0--123\nconsole.log(line);" - ], - "name": "drawLine", - "longname": "drawLine", - "kind": "function", - "scope": "global", - "___id": "T000002R000046", - "___s": true - }, - { - "comment": "/**\n * Changes the structure of the pattern to form an euclidean rhythm.\n * Euclidian rhythms are rhythms obtained using the greatest common divisor of two numbers.\n * They were described in 2004 by Godfried Toussaint, a canadian computer scientist.\n * Euclidian rhythms are really useful for computer/algorithmic music because they can accurately\n * describe a large number of rhythms used in the most important music world traditions.\n *\n * @memberof Pattern\n * @param {number} pulses the number of onsets / beats\n * @param {number} steps the number of steps to fill\n * @param {number} rotation (optional) offset in steps\n * @returns Pattern\n * @example // The Cuban tresillo pattern.\n * \"c3\".euclid(3,8)\n * @example // A thirteenth century Persian rhythm called Khafif-e-ramal.\n * \"c3\".euclid(2,5)\n * @example // The archetypal pattern of the Cumbia from Colombia, as well as a Calypso rhythm from Trinidad.\n * \"c3\".euclid(3,4)\n * @example // Another thirteenth century Persian rhythm by the name of Khafif-e-ramal, as well as a Rumanian folk-dance rhythm.\n * \"c3\".euclid(3,5,2)\n * @example // A Ruchenitza rhythm used in a Bulgarian folk-dance.\n * \"c3\".euclid(3,7)\n * @example // The Cuban tresillo pattern.\n * \"c3\".euclid(3,8)\n * @example // Another Ruchenitza Bulgarian folk-dance rhythm.\n * \"c3\".euclid(4,7)\n * @example // The Aksak rhythm of Turkey.\n * \"c3\".euclid(4,9)\n * @example // The metric pattern used by Frank Zappa in his piece titled Outside Now.\n * \"c3\".euclid(4,11)\n * @example // Yields the York-Samai pattern, a popular Arab rhythm.\n * \"c3\".euclid(5,6)\n * @example // The Nawakhat pattern, another popular Arab rhythm.\n * \"c3\".euclid(5,7)\n * @example // The Cuban cinquillo pattern.\n * \"c3\".euclid(5,8)\n * @example // A popular Arab rhythm called Agsag-Samai.\n * \"c3\".euclid(5,9)\n * @example // The metric pattern used by Moussorgsky in Pictures at an Exhibition.\n * \"c3\".euclid(5,11)\n * @example // The Venda clapping pattern of a South African children’s song.\n * \"c3\".euclid(5,12)\n * @example // The Bossa-Nova rhythm necklace of Brazil.\n * \"c3\".euclid(5,16)\n * @example // A typical rhythm played on the Bendir (frame drum).\n * \"c3\".euclid(7,8)\n * @example // A common West African bell pattern.\n * \"c3\".euclid(7,12)\n * @example // A Samba rhythm necklace from Brazil.\n * \"c3\".euclid(7,16,14)\n * @example // A rhythm necklace used in the Central African Republic.\n * \"c3\".euclid(9,16)\n * @example // A rhythm necklace of the Aka Pygmies of Central Africa.\n * \"c3\".euclid(11,24,14)\n * @example // Another rhythm necklace of the Aka Pygmies of the upper Sangha.\n * \"c3\".euclid(13,24,5)\n */", - "meta": { - "range": [ - 3722, - 3846 - ], - "filename": "euclid.mjs", - "lineno": 77, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100000894", - "name": "Pattern.prototype.euclid", - "type": "FunctionExpression", - "paramnames": [ - "pulses", - "steps", - "rotation" - ] - } - }, - "description": "

Changes the structure of the pattern to form an euclidean rhythm.\nEuclidian rhythms are rhythms obtained using the greatest common divisor of two numbers.\nThey were described in 2004 by Godfried Toussaint, a canadian computer scientist.\nEuclidian rhythms are really useful for computer/algorithmic music because they can accurately\ndescribe a large number of rhythms used in the most important music world traditions.

", - "memberof": "Pattern", - "params": [ - { - "type": { - "names": [ - "number" - ] - }, - "description": "

the number of onsets / beats

", - "name": "pulses" - }, - { - "type": { - "names": [ - "number" - ] - }, - "description": "

the number of steps to fill

", - "name": "steps" - }, - { - "type": { - "names": [ - "number" - ] - }, - "description": "

(optional) offset in steps

", - "name": "rotation" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "examples": [ - "// The Cuban tresillo pattern.\n\"c3\".euclid(3,8)", - "// A thirteenth century Persian rhythm called Khafif-e-ramal.\n\"c3\".euclid(2,5)", - "// The archetypal pattern of the Cumbia from Colombia, as well as a Calypso rhythm from Trinidad.\n\"c3\".euclid(3,4)", - "// Another thirteenth century Persian rhythm by the name of Khafif-e-ramal, as well as a Rumanian folk-dance rhythm.\n\"c3\".euclid(3,5,2)", - "// A Ruchenitza rhythm used in a Bulgarian folk-dance.\n\"c3\".euclid(3,7)", - "// The Cuban tresillo pattern.\n\"c3\".euclid(3,8)", - "// Another Ruchenitza Bulgarian folk-dance rhythm.\n\"c3\".euclid(4,7)", - "// The Aksak rhythm of Turkey.\n\"c3\".euclid(4,9)", - "// The metric pattern used by Frank Zappa in his piece titled Outside Now.\n\"c3\".euclid(4,11)", - "// Yields the York-Samai pattern, a popular Arab rhythm.\n\"c3\".euclid(5,6)", - "// The Nawakhat pattern, another popular Arab rhythm.\n\"c3\".euclid(5,7)", - "// The Cuban cinquillo pattern.\n\"c3\".euclid(5,8)", - "// A popular Arab rhythm called Agsag-Samai.\n\"c3\".euclid(5,9)", - "// The metric pattern used by Moussorgsky in Pictures at an Exhibition.\n\"c3\".euclid(5,11)", - "// The Venda clapping pattern of a South African children’s song.\n\"c3\".euclid(5,12)", - "// The Bossa-Nova rhythm necklace of Brazil.\n\"c3\".euclid(5,16)", - "// A typical rhythm played on the Bendir (frame drum).\n\"c3\".euclid(7,8)", - "// A common West African bell pattern.\n\"c3\".euclid(7,12)", - "// A Samba rhythm necklace from Brazil.\n\"c3\".euclid(7,16,14)", - "// A rhythm necklace used in the Central African Republic.\n\"c3\".euclid(9,16)", - "// A rhythm necklace of the Aka Pygmies of Central Africa.\n\"c3\".euclid(11,24,14)", - "// Another rhythm necklace of the Aka Pygmies of the upper Sangha.\n\"c3\".euclid(13,24,5)" - ], - "name": "euclid", - "longname": "Pattern#euclid", - "kind": "function", - "scope": "instance", - "___id": "T000002R000070", - "___s": true - }, - { - "comment": "/**\n * Similar to {@link Pattern#euclid}, but each pulse is held until the next pulse, so there will be no gaps.\n */", - "meta": { - "range": [ - 3966, - 4337 - ], - "filename": "euclid.mjs", - "lineno": 84, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100000918", - "name": "Pattern.prototype.euclidLegato", - "type": "FunctionExpression", - "paramnames": [ - "pulses", - "steps", - "rotation" - ] - }, - "vars": { - "bin_pat": "Pattern#euclidLegato~bin_pat", - "firstOne": "Pattern#euclidLegato~firstOne", - "gapless": "Pattern#euclidLegato~gapless", - "": null - } - }, - "description": "

Similar to {@link Pattern#euclid}, but each pulse is held until the next pulse, so there will be no gaps.

", - "name": "euclidLegato", - "longname": "Pattern#euclidLegato", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000071", - "___s": true - }, - { - "comment": "/** @class Class representing a pattern. */", - "meta": { - "range": [ - 1178, - 31622 - ], - "filename": "pattern.mjs", - "lineno": 17, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005731", - "name": "exports.Pattern", - "type": "ClassDeclaration" - } - }, - "name": "Pattern", - "longname": "Pattern", - "kind": "class", - "classdesc": "

Class representing a pattern.

", - "scope": "global", - "description": "

Create a pattern. As an end user, you will most likely not create a Pattern directly.

", - "memberof": "Pattern", - "params": [ - { - "type": { - "names": [ - "function" - ] - }, - "description": "

The function that maps a {@link State} to an array of {@link Hap}.

", - "name": "query" - } - ], - "___id": "T000002R000531", - "___s": true - }, - { - "comment": "/**\n * query haps insude the tiven time span\n *\n * @param {Fraction | number} begin from time\n * @param {Fraction | number} end to time\n * @returns Hap[]\n * @example\n * const pattern = sequence('a', ['b', 'c']);\n * const haps = pattern.queryArc(0, 1);\n */", - "meta": { - "range": [ - 1737, - 1823 - ], - "filename": "pattern.mjs", - "lineno": 37, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005746", - "name": "Pattern#queryArc", - "type": "MethodDefinition", - "paramnames": [ - "begin", - "end" - ] - }, - "vars": { - "": null - } - }, - "description": "

query haps insude the tiven time span

", - "params": [ - { - "type": { - "names": [ - "Fraction", - "number" - ] - }, - "description": "

from time

", - "name": "begin" - }, - { - "type": { - "names": [ - "Fraction", - "number" - ] - }, - "description": "

to time

", - "name": "end" - } - ], - "returns": [ - { - "description": "

Hap[]

" - } - ], - "examples": [ - "const pattern = sequence('a', ['b', 'c']);\nconst haps = pattern.queryArc(0, 1);" - ], - "name": "queryArc", - "longname": "Pattern#queryArc", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000533", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern, with queries split at cycle boundaries. This makes\n * some calculations easier to express, as all haps are then constrained to\n * happen within a cycle.\n * @returns Pattern\n */", - "meta": { - "range": [ - 2046, - 2247 - ], - "filename": "pattern.mjs", - "lineno": 47, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005763", - "name": "Pattern#_splitQueries", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern, with queries split at cycle boundaries. This makes\nsome calculations easier to express, as all haps are then constrained to\nhappen within a cycle.

", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_splitQueries", - "longname": "Pattern#_splitQueries", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000534", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern, where the given function is applied to the query\n * timespan before passing it to the original pattern.\n * @param {Function} func the function to apply\n * @returns Pattern\n */", - "meta": { - "range": [ - 2469, - 2563 - ], - "filename": "pattern.mjs", - "lineno": 61, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005803", - "name": "Pattern#withQuerySpan", - "type": "MethodDefinition", - "paramnames": [ - "func" - ] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern, where the given function is applied to the query\ntimespan before passing it to the original pattern.

", - "params": [ - { - "type": { - "names": [ - "function" - ] - }, - "description": "

the function to apply

", - "name": "func" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "withQuerySpan", - "longname": "Pattern#withQuerySpan", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000537", - "___s": true - }, - { - "comment": "/**\n * As with {@link Pattern#withQuerySpan}, but the function is applied to both the\n * begin and end time of the query timespan.\n * @param {Function} func the function to apply\n * @returns Pattern\n */", - "meta": { - "range": [ - 2782, - 2901 - ], - "filename": "pattern.mjs", - "lineno": 71, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005822", - "name": "Pattern#withQueryTime", - "type": "MethodDefinition", - "paramnames": [ - "func" - ] - }, - "vars": { - "": null - } - }, - "description": "

As with {@link Pattern#withQuerySpan}, but the function is applied to both the\nbegin and end time of the query timespan.

", - "params": [ - { - "type": { - "names": [ - "function" - ] - }, - "description": "

the function to apply

", - "name": "func" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "withQueryTime", - "longname": "Pattern#withQueryTime", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000538", - "___s": true - }, - { - "comment": "/**\n * Similar to {@link Pattern#withQuerySpan}, but the function is applied to the timespans\n * of all haps returned by pattern queries (both `part` timespans, and where\n * present, `whole` timespans).\n * @param {Function} func\n * @returns Pattern\n */", - "meta": { - "range": [ - 3172, - 3282 - ], - "filename": "pattern.mjs", - "lineno": 82, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005847", - "name": "Pattern#withHapSpan", - "type": "MethodDefinition", - "paramnames": [ - "func" - ] - }, - "vars": { - "": null - } - }, - "description": "

Similar to {@link Pattern#withQuerySpan}, but the function is applied to the timespans\nof all haps returned by pattern queries (both part timespans, and where\npresent, whole timespans).

", - "params": [ - { - "type": { - "names": [ - "function" - ] - }, - "name": "func" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "withHapSpan", - "longname": "Pattern#withHapSpan", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000539", - "___s": true - }, - { - "comment": "/**\n * As with {@link Pattern#withHapSpan}, but the function is applied to both the\n * begin and end time of the hap timespans.\n * @param {Function} func the function to apply\n * @returns Pattern\n */", - "meta": { - "range": [ - 3498, - 3581 - ], - "filename": "pattern.mjs", - "lineno": 92, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005872", - "name": "Pattern#withHapTime", - "type": "MethodDefinition", - "paramnames": [ - "func" - ] - }, - "vars": { - "": null - } - }, - "description": "

As with {@link Pattern#withHapSpan}, but the function is applied to both the\nbegin and end time of the hap timespans.

", - "params": [ - { - "type": { - "names": [ - "function" - ] - }, - "description": "

the function to apply

", - "name": "func" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "withHapTime", - "longname": "Pattern#withHapTime", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000540", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern with the given function applied to the list of haps returned by every query.\n * @param {Function} func\n * @returns Pattern\n */", - "meta": { - "range": [ - 3751, - 3832 - ], - "filename": "pattern.mjs", - "lineno": 101, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005889", - "name": "Pattern#_withHaps", - "type": "MethodDefinition", - "paramnames": [ - "func" - ] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern with the given function applied to the list of haps returned by every query.

", - "params": [ - { - "type": { - "names": [ - "function" - ] - }, - "name": "func" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_withHaps", - "longname": "Pattern#_withHaps", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000541", - "___s": true - }, - { - "comment": "/**\n * As with {@link Pattern#_withHaps}, but applies the function to every hap, rather than every list of haps.\n * @param {Function} func\n * @returns Pattern\n */", - "meta": { - "range": [ - 4009, - 4082 - ], - "filename": "pattern.mjs", - "lineno": 110, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005906", - "name": "Pattern#_withHap", - "type": "MethodDefinition", - "paramnames": [ - "func" - ] - }, - "vars": { - "": null - } - }, - "description": "

As with {@link Pattern#_withHaps}, but applies the function to every hap, rather than every list of haps.

", - "params": [ - { - "type": { - "names": [ - "function" - ] - }, - "name": "func" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_withHap", - "longname": "Pattern#_withHap", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000542", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern with the context field set to every hap set to the given value.\n * @param {*} context\n * @returns Pattern\n */", - "meta": { - "range": [ - 4235, - 4321 - ], - "filename": "pattern.mjs", - "lineno": 119, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005923", - "name": "Pattern#_setContext", - "type": "MethodDefinition", - "paramnames": [ - "context" - ] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern with the context field set to every hap set to the given value.

", - "params": [ - { - "type": { - "names": [ - "*" - ] - }, - "name": "context" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_setContext", - "longname": "Pattern#_setContext", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000543", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern with the given function applied to the context field of every hap.\n * @param {Function} func\n * @returns Pattern\n */", - "meta": { - "range": [ - 4481, - 4575 - ], - "filename": "pattern.mjs", - "lineno": 128, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005940", - "name": "Pattern#_withContext", - "type": "MethodDefinition", - "paramnames": [ - "func" - ] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern with the given function applied to the context field of every hap.

", - "params": [ - { - "type": { - "names": [ - "function" - ] - }, - "name": "func" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_withContext", - "longname": "Pattern#_withContext", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000544", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern with the context field of every hap set to an empty object.\n * @returns Pattern\n */", - "meta": { - "range": [ - 4700, - 4776 - ], - "filename": "pattern.mjs", - "lineno": 136, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005961", - "name": "Pattern#_stripContext", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern with the context field of every hap set to an empty object.

", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_stripContext", - "longname": "Pattern#_stripContext", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000545", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern with the given location information added to the\n * context of every hap.\n * @param {Number} start\n * @param {Number} end\n * @returns Pattern\n */", - "meta": { - "range": [ - 4969, - 5321 - ], - "filename": "pattern.mjs", - "lineno": 147, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100005977", - "name": "Pattern#withLocation", - "type": "MethodDefinition", - "paramnames": [ - "start", - "end" - ] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern with the given location information added to the\ncontext of every hap.

", - "params": [ - { - "type": { - "names": [ - "Number" - ] - }, - "name": "start" - }, - { - "type": { - "names": [ - "Number" - ] - }, - "name": "end" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "withLocation", - "longname": "Pattern#withLocation", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000546", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern, with the function applied to the value of\n * each hap. It has the alias {@link Pattern#fmap}.\n * @param {Function} func\n * @returns Pattern\n */", - "meta": { - "range": [ - 6336, - 6445 - ], - "filename": "pattern.mjs", - "lineno": 190, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006189", - "name": "Pattern#withValue", - "type": "MethodDefinition", - "paramnames": [ - "func" - ] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern, with the function applied to the value of\neach hap. It has the alias {@link Pattern#fmap}.

", - "params": [ - { - "type": { - "names": [ - "function" - ] - }, - "name": "func" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "withValue", - "longname": "Pattern#withValue", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000580", - "___s": true - }, - { - "comment": "/**\n * see {@link Pattern#withValue}\n */", - "meta": { - "range": [ - 6496, - 6545 - ], - "filename": "pattern.mjs", - "lineno": 197, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006214", - "name": "Pattern#fmap", - "type": "MethodDefinition", - "paramnames": [ - "func" - ] - }, - "vars": { - "": null - } - }, - "description": "

see {@link Pattern#withValue}

", - "name": "fmap", - "longname": "Pattern#fmap", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000581", - "___s": true - }, - { - "comment": "/**\n * Returns a new Pattern, which only returns haps that meet the given test.\n * @param {Function} hap_test - a function which returns false for haps to be removed from the pattern\n * @returns Pattern\n */", - "meta": { - "range": [ - 6766, - 6864 - ], - "filename": "pattern.mjs", - "lineno": 206, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006225", - "name": "Pattern#_filterHaps", - "type": "MethodDefinition", - "paramnames": [ - "hap_test" - ] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new Pattern, which only returns haps that meet the given test.

", - "params": [ - { - "type": { - "names": [ - "function" - ] - }, - "description": "

a function which returns false for haps to be removed from the pattern

", - "name": "hap_test" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_filterHaps", - "longname": "Pattern#_filterHaps", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000582", - "___s": true - }, - { - "comment": "/**\n * As with {@link Pattern#_filterHaps}, but the function is applied to values\n * inside haps.\n * @param {Function} value_test\n * @returns Pattern\n */", - "meta": { - "range": [ - 7034, - 7158 - ], - "filename": "pattern.mjs", - "lineno": 216, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006244", - "name": "Pattern#_filterValues", - "type": "MethodDefinition", - "paramnames": [ - "value_test" - ] - }, - "vars": { - "": null - } - }, - "description": "

As with {@link Pattern#_filterHaps}, but the function is applied to values\ninside haps.

", - "params": [ - { - "type": { - "names": [ - "function" - ] - }, - "name": "value_test" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_filterValues", - "longname": "Pattern#_filterValues", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000583", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern, with haps containing undefined values removed from\n * query results.\n * @returns Pattern\n */", - "meta": { - "range": [ - 7295, - 7378 - ], - "filename": "pattern.mjs", - "lineno": 225, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006269", - "name": "Pattern#_removeUndefineds", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern, with haps containing undefined values removed from\nquery results.

", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_removeUndefineds", - "longname": "Pattern#_removeUndefineds", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000584", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern, with all haps without onsets filtered out. A hap\n * with an onset is one with a `whole` timespan that begins at the same time\n * as its `part` timespan.\n * @returns Pattern\n */", - "meta": { - "range": [ - 7601, - 7867 - ], - "filename": "pattern.mjs", - "lineno": 235, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006283", - "name": "Pattern#onsetsOnly", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern, with all haps without onsets filtered out. A hap\nwith an onset is one with a whole timespan that begins at the same time\nas its part timespan.

", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "onsetsOnly", - "longname": "Pattern#onsetsOnly", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000585", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern, with 'continuous' haps (those without 'whole'\n * timespans) removed from query results.\n * @returns Pattern\n */", - "meta": { - "range": [ - 8023, - 8158 - ], - "filename": "pattern.mjs", - "lineno": 247, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006298", - "name": "Pattern#discreteOnly", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern, with 'continuous' haps (those without 'whole'\ntimespans) removed from query results.

", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "discreteOnly", - "longname": "Pattern#discreteOnly", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000586", - "___s": true - }, - { - "comment": "/**\n * When this method is called on a pattern of functions, it matches its haps\n * with those in the given pattern of values. A new pattern is returned, with\n * each matching value applied to the corresponding function.\n *\n * In this `appBoth` variant, where timespans of the function and value haps\n * are not the same but do intersect, the resulting hap has a timespan of the\n * intersection. This applies to both the part and the whole timespan.\n * @param {Pattern} pat_val\n * @returns Pattern\n */", - "meta": { - "range": [ - 9601, - 9882 - ], - "filename": "pattern.mjs", - "lineno": 290, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006419", - "name": "Pattern#appBoth", - "type": "MethodDefinition", - "paramnames": [ - "pat_val" - ] - }, - "vars": { - "": null - } - }, - "description": "

When this method is called on a pattern of functions, it matches its haps\nwith those in the given pattern of values. A new pattern is returned, with\neach matching value applied to the corresponding function.

\n

In this appBoth variant, where timespans of the function and value haps\nare not the same but do intersect, the resulting hap has a timespan of the\nintersection. This applies to both the part and the whole timespan.

", - "params": [ - { - "type": { - "names": [ - "Pattern" - ] - }, - "name": "pat_val" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "appBoth", - "longname": "Pattern#appBoth", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000594", - "___s": true - }, - { - "comment": "/**\n * As with {@link Pattern#appBoth}, but the `whole` timespan is not the intersection,\n * but the timespan from the function of patterns that this method is called\n * on. In practice, this means that the pattern structure, including onsets,\n * are preserved from the pattern of functions (often referred to as the left\n * hand or inner pattern).\n * @param {Pattern} pat_val\n * @returns Pattern\n */", - "meta": { - "range": [ - 10305, - 11049 - ], - "filename": "pattern.mjs", - "lineno": 310, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006455", - "name": "Pattern#appLeft", - "type": "MethodDefinition", - "paramnames": [ - "pat_val" - ] - }, - "vars": { - "": null - } - }, - "description": "

As with {@link Pattern#appBoth}, but the whole timespan is not the intersection,\nbut the timespan from the function of patterns that this method is called\non. In practice, this means that the pattern structure, including onsets,\nare preserved from the pattern of functions (often referred to as the left\nhand or inner pattern).

", - "params": [ - { - "type": { - "names": [ - "Pattern" - ] - }, - "name": "pat_val" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "appLeft", - "longname": "Pattern#appLeft", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000596", - "___s": true - }, - { - "comment": "/**\n * As with {@link Pattern#appLeft}, but `whole` timespans are instead taken from the\n * pattern of values, i.e. structure is preserved from the right hand/outer\n * pattern.\n * @param {Pattern} pat_val\n * @returns Pattern\n */", - "meta": { - "range": [ - 11296, - 12041 - ], - "filename": "pattern.mjs", - "lineno": 340, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006565", - "name": "Pattern#appRight", - "type": "MethodDefinition", - "paramnames": [ - "pat_val" - ] - }, - "vars": { - "": null - } - }, - "description": "

As with {@link Pattern#appLeft}, but whole timespans are instead taken from the\npattern of values, i.e. structure is preserved from the right hand/outer\npattern.

", - "params": [ - { - "type": { - "names": [ - "Pattern" - ] - }, - "name": "pat_val" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "appRight", - "longname": "Pattern#appRight", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000608", - "___s": true - }, - { - "comment": "/**\n * Queries the pattern for the first cycle, returning Haps. Mainly of use when\n * debugging a pattern.\n * @param {Boolean} with_context - set to true, otherwise the context field\n * will be stripped from the resulting haps.\n * @returns [Hap]\n */", - "meta": { - "range": [ - 12309, - 12508 - ], - "filename": "pattern.mjs", - "lineno": 370, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006675", - "name": "Pattern#firstCycle", - "type": "MethodDefinition", - "paramnames": [ - "with_context" - ] - }, - "vars": { - "": null - } - }, - "description": "

Queries the pattern for the first cycle, returning Haps. Mainly of use when\ndebugging a pattern.

", - "params": [ - { - "type": { - "names": [ - "Boolean" - ] - }, - "description": "

set to true, otherwise the context field\nwill be stripped from the resulting haps.

", - "name": "with_context", - "defaultvalue": false - } - ], - "returns": [ - { - "description": "

[Hap]

" - } - ], - "name": "firstCycle", - "longname": "Pattern#firstCycle", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000620", - "___s": true - }, - { - "comment": "/**\n * Accessor for a list of values returned by querying the first cycle.\n */", - "meta": { - "range": [ - 12597, - 12680 - ], - "filename": "pattern.mjs", - "lineno": 381, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006712", - "name": "Pattern#_firstCycleValues", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Accessor for a list of values returned by querying the first cycle.

", - "name": "_firstCycleValues", - "longname": "Pattern#_firstCycleValues", - "kind": "member", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000623", - "___s": true - }, - { - "comment": "/**\n * More human-readable version of the {@link Pattern#_firstCycleValues} accessor.\n */", - "meta": { - "range": [ - 12780, - 12944 - ], - "filename": "pattern.mjs", - "lineno": 388, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006729", - "name": "Pattern#_showFirstCycle", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

More human-readable version of the {@link Pattern#_firstCycleValues} accessor.

", - "name": "_showFirstCycle", - "longname": "Pattern#_showFirstCycle", - "kind": "member", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000624", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern, which returns haps sorted in temporal order. Mainly\n * of use when comparing two patterns for equality, in tests.\n * @returns Pattern\n */", - "meta": { - "range": [ - 13126, - 13401 - ], - "filename": "pattern.mjs", - "lineno": 399, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100006767", - "name": "Pattern#_sortHapsByPart", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern, which returns haps sorted in temporal order. Mainly\nof use when comparing two patterns for equality, in tests.

", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_sortHapsByPart", - "longname": "Pattern#_sortHapsByPart", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000625", - "___s": true - }, - { - "comment": "/**\n * Assumes a numerical pattern. Returns a new pattern with all values rounded\n * to the nearest integer.\n * @returns Pattern\n */", - "meta": { - "range": [ - 15309, - 15378 - ], - "filename": "pattern.mjs", - "lineno": 472, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100007154", - "name": "Pattern#round", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Assumes a numerical pattern. Returns a new pattern with all values rounded\nto the nearest integer.

", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "round", - "longname": "Pattern#round", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000644", - "___s": true - }, - { - "comment": "/**\n * Assumes a numerical pattern. Returns a new pattern with all values set to\n * their mathematical floor. E.g. `3.7` replaced with to `3`, and `-4.2`\n * replaced with `-5`.\n * @returns Pattern\n */", - "meta": { - "range": [ - 15595, - 15664 - ], - "filename": "pattern.mjs", - "lineno": 482, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100007173", - "name": "Pattern#floor", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Assumes a numerical pattern. Returns a new pattern with all values set to\ntheir mathematical floor. E.g. 3.7 replaced with to 3, and -4.2\nreplaced with -5.

", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "floor", - "longname": "Pattern#floor", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000645", - "___s": true - }, - { - "comment": "/**\n * Assumes a numerical pattern. Returns a new pattern with all values set to\n * their mathematical ceiling. E.g. `3.2` replaced with `4`, and `-4.2`\n * replaced with `-4`.\n * @returns Pattern\n */", - "meta": { - "range": [ - 15880, - 15947 - ], - "filename": "pattern.mjs", - "lineno": 492, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100007192", - "name": "Pattern#ceil", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Assumes a numerical pattern. Returns a new pattern with all values set to\ntheir mathematical ceiling. E.g. 3.2 replaced with 4, and -4.2\nreplaced with -4.

", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "ceil", - "longname": "Pattern#ceil", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000646", - "___s": true - }, - { - "comment": "/**\n * Assumes a numerical pattern, containing unipolar values in the range 0 ..\n * 1. Returns a new pattern with values scaled to the bipolar range -1 .. 1\n * @returns Pattern\n */", - "meta": { - "range": [ - 16142, - 16200 - ], - "filename": "pattern.mjs", - "lineno": 501, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100007211", - "name": "Pattern#_toBipolar", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Assumes a numerical pattern, containing unipolar values in the range 0 ..

\n
    \n
  1. Returns a new pattern with values scaled to the bipolar range -1 .. 1
  2. \n
", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_toBipolar", - "longname": "Pattern#_toBipolar", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000647", - "___s": true - }, - { - "comment": "/**\n * Assumes a numerical pattern, containing bipolar values in the range -1 ..\n * 1. Returns a new pattern with values scaled to the unipolar range 0 .. 1\n * @returns Pattern\n */", - "meta": { - "range": [ - 16395, - 16457 - ], - "filename": "pattern.mjs", - "lineno": 510, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100007227", - "name": "Pattern#_fromBipolar", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Assumes a numerical pattern, containing bipolar values in the range -1 ..

\n
    \n
  1. Returns a new pattern with values scaled to the unipolar range 0 .. 1
  2. \n
", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "_fromBipolar", - "longname": "Pattern#_fromBipolar", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000648", - "___s": true - }, - { - "comment": "/**\n * Assumes a numerical pattern, containing unipolar values in the range 0 ..\n * 1. Returns a new pattern with values scaled to the given min/max range.\n * @param {Number} min\n * @param {Number} max\n * @returns Pattern\n */", - "meta": { - "range": [ - 16701, - 16763 - ], - "filename": "pattern.mjs", - "lineno": 521, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100007243", - "name": "Pattern#range", - "type": "MethodDefinition", - "paramnames": [ - "min", - "max" - ] - }, - "vars": { - "": null - } - }, - "description": "

Assumes a numerical pattern, containing unipolar values in the range 0 ..

\n
    \n
  1. Returns a new pattern with values scaled to the given min/max range.
  2. \n
", - "params": [ - { - "type": { - "names": [ - "Number" - ] - }, - "name": "min" - }, - { - "type": { - "names": [ - "Number" - ] - }, - "name": "max" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "range", - "longname": "Pattern#range", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000649", - "___s": true - }, - { - "comment": "/**\n * Assumes a numerical pattern, containing unipolar values in the range 0 ..\n * 1. Returns a new pattern with values scaled to the given min/max range,\n * following an exponential curve.\n * @param {Number} min\n * @param {Number} max\n * @returns Pattern\n */", - "meta": { - "range": [ - 17044, - 17134 - ], - "filename": "pattern.mjs", - "lineno": 533, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100007261", - "name": "Pattern#rangex", - "type": "MethodDefinition", - "paramnames": [ - "min", - "max" - ] - }, - "vars": { - "": null - } - }, - "description": "

Assumes a numerical pattern, containing unipolar values in the range 0 ..

\n
    \n
  1. Returns a new pattern with values scaled to the given min/max range,\nfollowing an exponential curve.
  2. \n
", - "params": [ - { - "type": { - "names": [ - "Number" - ] - }, - "name": "min" - }, - { - "type": { - "names": [ - "Number" - ] - }, - "name": "max" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "rangex", - "longname": "Pattern#rangex", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000650", - "___s": true - }, - { - "comment": "/**\n * Assumes a numerical pattern, containing bipolar values in the range -1 ..\n * 1. Returns a new pattern with values scaled to the given min/max range.\n * @param {Number} min\n * @param {Number} max\n * @returns Pattern\n */", - "meta": { - "range": [ - 17378, - 17448 - ], - "filename": "pattern.mjs", - "lineno": 544, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100007288", - "name": "Pattern#range2", - "type": "MethodDefinition", - "paramnames": [ - "min", - "max" - ] - }, - "vars": { - "": null - } - }, - "description": "

Assumes a numerical pattern, containing bipolar values in the range -1 ..

\n
    \n
  1. Returns a new pattern with values scaled to the given min/max range.
  2. \n
", - "params": [ - { - "type": { - "names": [ - "Number" - ] - }, - "name": "min" - }, - { - "type": { - "names": [ - "Number" - ] - }, - "name": "max" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "range2", - "longname": "Pattern#range2", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "___id": "T000002R000651", - "___s": true - }, - { - "comment": "/**\n * Speed up a pattern by the given factor.\n *\n * @name fast\n * @memberof Pattern\n * @param {number | Pattern} factor speed up factor\n * @returns Pattern\n * @example\n * seq(e5, b4, d5, c5).fast(2)\n */", - "meta": { - "filename": "pattern.mjs", - "lineno": 735, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Speed up a pattern by the given factor.

", - "name": "fast", - "memberof": "Pattern", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

speed up factor

", - "name": "factor" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "examples": [ - "seq(e5, b4, d5, c5).fast(2)" - ], - "scope": "static", - "longname": "Pattern.fast", - "kind": "member", - "___id": "T000002R000700", - "___s": true - }, - { - "comment": "/**\n * Slow down a pattern over the given number of cycles.\n *\n * @name slow\n * @memberof Pattern\n * @param {number | Pattern} factor slow down factor\n * @returns Pattern\n * @example\n * seq(e5, b4, d5, c5).slow(2)\n */", - "meta": { - "filename": "pattern.mjs", - "lineno": 750, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": {} - }, - "description": "

Slow down a pattern over the given number of cycles.

", - "name": "slow", - "memberof": "Pattern", - "params": [ - { - "type": { - "names": [ - "number", - "Pattern" - ] - }, - "description": "

slow down factor

", - "name": "factor" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "examples": [ - "seq(e5, b4, d5, c5).slow(2)" - ], - "scope": "static", - "longname": "Pattern.slow", - "kind": "member", - "___id": "T000002R000703", - "___s": true - }, - { - "comment": "/**\n * Returns a new pattern where every other cycle is played once, twice as\n * fast, and offset in time by one quarter of a cycle. Creates a kind of\n * breakbeat feel.\n * @returns Pattern\n */", - "meta": { - "range": [ - 27788, - 27884 - ], - "filename": "pattern.mjs", - "lineno": 904, - "columnno": 2, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100008779", - "name": "Pattern#brak", - "type": "MethodDefinition", - "paramnames": [] - }, - "vars": { - "": null - } - }, - "description": "

Returns a new pattern where every other cycle is played once, twice as\nfast, and offset in time by one quarter of a cycle. Creates a kind of\nbreakbeat feel.

", - "returns": [ - { - "description": "

Pattern

" - } - ], - "name": "brak", - "longname": "Pattern#brak", - "kind": "function", - "memberof": "Pattern", - "scope": "instance", - "params": [], - "___id": "T000002R000750", - "___s": true - }, - { - "comment": "/** A discrete value that repeats once per cycle:\n *\n * @param {any} value - The value to repeat\n * @returns {Pattern}\n * @example\n * pure('e4')\n */", - "meta": { - "range": [ - 35703, - 35907 - ], - "filename": "pattern.mjs", - "lineno": 1203, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100010127", - "name": "exports.pure", - "type": "FunctionDeclaration", - "paramnames": [ - "value" - ] - } - }, - "description": "

A discrete value that repeats once per cycle:

", - "params": [ - { - "type": { - "names": [ - "any" - ] - }, - "description": "

The value to repeat

", - "name": "value" - } - ], - "returns": [ - { - "type": { - "names": [ - "Pattern" - ] - } - } - ], - "examples": [ - "pure('e4')" - ], - "name": "pure", - "longname": "pure", - "kind": "function", - "scope": "global", - "___id": "T000002R000868", - "___s": true - }, - { - "comment": "/** The given items are played at the same time at the same length:\n *\n * @param {...any} items - The items to stack\n * @return {Pattern}\n * @example\n * stack(g3, b3, [e4, d4])\n */", - "meta": { - "range": [ - 36420, - 36693 - ], - "filename": "pattern.mjs", - "lineno": 1230, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100010188", - "name": "exports.stack", - "type": "FunctionDeclaration", - "paramnames": [ - "pats" - ] - } - }, - "description": "

The given items are played at the same time at the same length:

", - "params": [ - { - "type": { - "names": [ - "any" - ] - }, - "variable": true, - "description": "

The items to stack

", - "name": "items" - } - ], - "returns": [ - { - "type": { - "names": [ - "Pattern" - ] - } - } - ], - "examples": [ - "stack(g3, b3, [e4, d4])" - ], - "name": "stack", - "longname": "stack", - "kind": "function", - "scope": "global", - "___id": "T000002R000875", - "___s": true - }, - { - "comment": "/** Concatenation: combines a list of patterns, switching between them successively, one per cycle:\n *\n * synonyms: {@link cat}\n *\n * @param {...any} items - The items to concatenate\n * @return {Pattern}\n * @example\n * slowcat(e5, b4, [d5, c5])\n *\n */", - "meta": { - "range": [ - 36947, - 37858 - ], - "filename": "pattern.mjs", - "lineno": 1247, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100010238", - "name": "exports.slowcat", - "type": "FunctionDeclaration", - "paramnames": [ - "pats" - ] - } - }, - "description": "

Concatenation: combines a list of patterns, switching between them successively, one per cycle:

\n

synonyms: {@link cat}

", - "params": [ - { - "type": { - "names": [ - "any" - ] - }, - "variable": true, - "description": "

The items to concatenate

", - "name": "items" - } - ], - "returns": [ - { - "type": { - "names": [ - "Pattern" - ] - } - } - ], - "examples": [ - "slowcat(e5, b4, [d5, c5])" - ], - "name": "slowcat", - "longname": "slowcat", - "kind": "function", - "scope": "global", - "___id": "T000002R000879", - "___s": true - }, - { - "comment": "/** Concatenation: combines a list of patterns, switching between them successively, one per cycle. Unlike slowcat, this version will skip cycles.\n * @param {...any} items - The items to concatenate\n * @return {Pattern}\n */", - "meta": { - "range": [ - 38084, - 38356 - ], - "filename": "pattern.mjs", - "lineno": 1272, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100010365", - "name": "exports.slowcatPrime", - "type": "FunctionDeclaration", - "paramnames": [ - "pats" - ] - } - }, - "description": "

Concatenation: combines a list of patterns, switching between them successively, one per cycle. Unlike slowcat, this version will skip cycles.

", - "params": [ - { - "type": { - "names": [ - "any" - ] - }, - "variable": true, - "description": "

The items to concatenate

", - "name": "items" - } - ], - "returns": [ - { - "type": { - "names": [ - "Pattern" - ] - } - } - ], - "name": "slowcatPrime", - "longname": "slowcatPrime", - "kind": "function", - "scope": "global", - "___id": "T000002R000887", - "___s": true - }, - { - "comment": "/** Concatenation: as with {@link slowcat}, but squashes a cycle from each pattern into one cycle\n *\n * Synonyms: {@link seq}, {@link sequence}\n *\n * @param {...any} items - The items to concatenate\n * @return {Pattern}\n * @example\n * fastcat(e5, b4, [d5, c5])\n * // sequence(e5, b4, [d5, c5])\n * // seq(e5, b4, [d5, c5])\n */", - "meta": { - "range": [ - 38684, - 38766 - ], - "filename": "pattern.mjs", - "lineno": 1293, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100010420", - "name": "exports.fastcat", - "type": "FunctionDeclaration", - "paramnames": [ - "pats" - ] - } - }, - "description": "

Concatenation: as with {@link slowcat}, but squashes a cycle from each pattern into one cycle

\n

Synonyms: {@link seq}, {@link sequence}

", - "params": [ - { - "type": { - "names": [ - "any" - ] - }, - "variable": true, - "description": "

The items to concatenate

", - "name": "items" - } - ], - "returns": [ - { - "type": { - "names": [ - "Pattern" - ] - } - } - ], - "examples": [ - "fastcat(e5, b4, [d5, c5])\n// sequence(e5, b4, [d5, c5])\n// seq(e5, b4, [d5, c5])" - ], - "name": "fastcat", - "longname": "fastcat", - "kind": "function", - "scope": "global", - "___id": "T000002R000893", - "___s": true - }, - { - "comment": "/** See {@link slowcat} */", - "meta": { - "range": [ - 38795, - 38854 - ], - "filename": "pattern.mjs", - "lineno": 1298, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100010437", - "name": "exports.cat", - "type": "FunctionDeclaration", - "paramnames": [ - "pats" - ] - } - }, - "description": "

See {@link slowcat}

", - "name": "cat", - "longname": "cat", - "kind": "function", - "scope": "global", - "___id": "T000002R000895", - "___s": true - }, - { - "comment": "/** Like {@link fastcat}, but where each step has a temporal weight:\n * @param {...Array} items - The items to concatenate\n * @return {Pattern}\n * @example\n * timeCat([3,e3],[1, g3])\n */", - "meta": { - "range": [ - 39043, - 39402 - ], - "filename": "pattern.mjs", - "lineno": 1308, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100010448", - "name": "exports.timeCat", - "type": "FunctionDeclaration", - "paramnames": [ - "timepats" - ] - } - }, - "description": "

Like {@link fastcat}, but where each step has a temporal weight:

", - "params": [ - { - "type": { - "names": [ - "Array" - ] - }, - "variable": true, - "description": "

The items to concatenate

", - "name": "items" - } - ], - "returns": [ - { - "type": { - "names": [ - "Pattern" - ] - } - } - ], - "examples": [ - "timeCat([3,e3],[1, g3])" - ], - "name": "timeCat", - "longname": "timeCat", - "kind": "function", - "scope": "global", - "___id": "T000002R000897", - "___s": true - }, - { - "comment": "/** See {@link fastcat} */", - "meta": { - "range": [ - 39431, - 39495 - ], - "filename": "pattern.mjs", - "lineno": 1321, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100010534", - "name": "exports.sequence", - "type": "FunctionDeclaration", - "paramnames": [ - "pats" - ] - } - }, - "description": "

See {@link fastcat}

", - "name": "sequence", - "longname": "sequence", - "kind": "function", - "scope": "global", - "___id": "T000002R000904", - "___s": true - }, - { - "comment": "/** See {@link fastcat} */", - "meta": { - "range": [ - 39524, - 39583 - ], - "filename": "pattern.mjs", - "lineno": 1326, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/core", - "code": { - "id": "astnode100010545", - "name": "exports.seq", - "type": "FunctionDeclaration", - "paramnames": [ - "pats" - ] - } - }, - "description": "

See {@link fastcat}

", - "name": "seq", - "longname": "seq", - "kind": "function", - "scope": "global", - "___id": "T000002R000906", - "___s": true - }, - { - "comment": "/**\n *\n * Sends each hap as an OSC message, which can be picked up by SuperCollider or any other OSC-enabled software.\n *\n * @name osc\n * @memberof Pattern\n * @returns Pattern\n */", - "meta": { - "filename": "osc.mjs", - "lineno": 15, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/osc", - "code": {} - }, - "description": "

Sends each hap as an OSC message, which can be picked up by SuperCollider or any other OSC-enabled software.

", - "name": "osc", - "memberof": "Pattern", - "returns": [ - { - "description": "

Pattern

" - } - ], - "scope": "static", - "longname": "Pattern.osc", - "kind": "member", - "___id": "T000002R002650", - "___s": true - }, - { - "comment": "/**\n * Change the pitch of each value by the given amount. Expects numbers or note strings as values.\n * The amount can be given as a number of semitones or as a string in interval short notation.\n * If you don't care about enharmonic correctness, just use numbers. Otherwise, pass the interval of\n * the form: ST where S is the degree number and T the type of interval with\n *\n * - M = major\n * - m = minor\n * - P = perfect\n * - A = augmented\n * - d = diminished\n *\n * Examples intervals:\n *\n * - 1P = unison\n * - 3M = major third\n * - 3m = minor third\n * - 4P = perfect fourth\n * - 4A = augmented fourth\n * - 5P = perfect fifth\n * - 5d = diminished fifth\n *\n * @param {string | number} amount Either number of semitones or interval string.\n * @returns Pattern\n * @memberof Pattern\n * @name transpose\n * @example\n * \"c2 c3\".fast(2).transpose(\"<0 -2 5 3>\".slow(2)).transpose(0)\n * @example\n * \"c2 c3\".fast(2).transpose(\"<1P -2M 4P 3m>\".slow(2)).transpose(0)\n */", - "meta": { - "filename": "tonal.mjs", - "lineno": 45, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/tonal", - "code": {} - }, - "description": "

Change the pitch of each value by the given amount. Expects numbers or note strings as values.\nThe amount can be given as a number of semitones or as a string in interval short notation.\nIf you don't care about enharmonic correctness, just use numbers. Otherwise, pass the interval of\nthe form: ST where S is the degree number and T the type of interval with

\n
    \n
  • M = major
  • \n
  • m = minor
  • \n
  • P = perfect
  • \n
  • A = augmented
  • \n
  • d = diminished
  • \n
\n

Examples intervals:

\n
    \n
  • 1P = unison
  • \n
  • 3M = major third
  • \n
  • 3m = minor third
  • \n
  • 4P = perfect fourth
  • \n
  • 4A = augmented fourth
  • \n
  • 5P = perfect fifth
  • \n
  • 5d = diminished fifth
  • \n
", - "params": [ - { - "type": { - "names": [ - "string", - "number" - ] - }, - "description": "

Either number of semitones or interval string.

", - "name": "amount" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "memberof": "Pattern", - "name": "transpose", - "examples": [ - "\"c2 c3\".fast(2).transpose(\"<0 -2 5 3>\".slow(2)).transpose(0)", - "\"c2 c3\".fast(2).transpose(\"<1P -2M 4P 3m>\".slow(2)).transpose(0)" - ], - "scope": "static", - "longname": "Pattern.transpose", - "kind": "member", - "___id": "T000002R003716", - "___s": true - }, - { - "comment": "/**\n * Transposes notes inside the scale by the number of steps.\n * Expected to be called on a Pattern which already has a {@link Pattern#scale}\n *\n * @memberof Pattern\n * @name scaleTranspose\n * @param {offset} offset number of steps inside the scale\n * @returns Pattern\n * @example\n * \"-8 [2,4,6]\"\n * .scale('C4 bebop major')\n * .scaleTranspose(\"<0 -1 -2 -3 -4 -5 -6 -4>\")\n */", - "meta": { - "filename": "tonal.mjs", - "lineno": 98, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/tonal", - "code": {} - }, - "description": "

Transposes notes inside the scale by the number of steps.\nExpected to be called on a Pattern which already has a {@link Pattern#scale}

", - "memberof": "Pattern", - "name": "scaleTranspose", - "params": [ - { - "type": { - "names": [ - "offset" - ] - }, - "description": "

number of steps inside the scale

", - "name": "offset" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "examples": [ - "\"-8 [2,4,6]\"\n.scale('C4 bebop major')\n.scaleTranspose(\"<0 -1 -2 -3 -4 -5 -6 -4>\")" - ], - "scope": "static", - "longname": "Pattern.scaleTranspose", - "kind": "member", - "___id": "T000002R003720", - "___s": true - }, - { - "comment": "/**\n * Turns numbers into notes in the scale (zero indexed). Also sets scale for other scale operations, like {@link Pattern#scaleTranspose}.\n *\n * The scale name has the form \"TO? N\" wher\n *\n * - T = Tonic\n * - O = Octave (optional, defaults to 3)\n * - N = Name of scale, available names can be found [here](https://github.com/tonaljs/tonal/blob/main/packages/scale-type/data.ts).\n *\n * @memberof Pattern\n * @name scale\n * @param {string} scale Name of scale\n * @returns Pattern\n * @example \n * \"0 2 4 6 4 2\"\n * .scale(seq('C2 major', 'C2 minor').slow(2))\n */", - "meta": { - "filename": "tonal.mjs", - "lineno": 124, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/tonal", - "code": {} - }, - "description": "

Turns numbers into notes in the scale (zero indexed). Also sets scale for other scale operations, like {@link Pattern#scaleTranspose}.

\n

The scale name has the form "TO? N" wher

\n
    \n
  • T = Tonic
  • \n
  • O = Octave (optional, defaults to 3)
  • \n
  • N = Name of scale, available names can be found here.
  • \n
", - "memberof": "Pattern", - "name": "scale", - "params": [ - { - "type": { - "names": [ - "string" - ] - }, - "description": "

Name of scale

", - "name": "scale" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "examples": [ - "\"0 2 4 6 4 2\"\n.scale(seq('C2 major', 'C2 minor').slow(2))" - ], - "scope": "static", - "longname": "Pattern.scale", - "kind": "member", - "___id": "T000002R003722", - "___s": true - }, - { - "comment": "/**\n * Turns chord symbols into voicings, using the smoothest voice leading possible.\n * Uses [chord-voicings package](https://github.com/felixroos/chord-voicings#chord-voicings).\n *\n * @name voicings\n * @memberof Pattern\n * @param {range} range note range for possible voicings (optional, defaults to `['F3', 'A4']`)\n * @returns Pattern\n * @example\n * stack(\"\".voicings(), \"\")\n */", - "meta": { - "filename": "voicings.mjs", - "lineno": 34, - "columnno": 0, - "path": "/home/felix/projects/strudel/packages/tonal", - "code": {} - }, - "description": "

Turns chord symbols into voicings, using the smoothest voice leading possible.\nUses chord-voicings package.

", - "name": "voicings", - "memberof": "Pattern", - "params": [ - { - "type": { - "names": [ - "range" - ] - }, - "description": "

note range for possible voicings (optional, defaults to ['F3', 'A4'])

", - "name": "range" - } - ], - "returns": [ - { - "description": "

Pattern

" - } - ], - "examples": [ - "stack(\"\".voicings(), \"\")" - ], - "scope": "static", - "longname": "Pattern.voicings", - "kind": "member", - "___id": "T000002R003747", - "___s": true - }, - { - "kind": "package", - "longname": "package:undefined", - "files": [ - "/home/felix/projects/strudel/packages/core/controls.mjs", - "/home/felix/projects/strudel/packages/core/drawLine.mjs", - "/home/felix/projects/strudel/packages/core/euclid.mjs", - "/home/felix/projects/strudel/packages/core/fraction.mjs", - "/home/felix/projects/strudel/packages/core/gist.js", - "/home/felix/projects/strudel/packages/core/hap.mjs", - "/home/felix/projects/strudel/packages/core/index.mjs", - "/home/felix/projects/strudel/packages/core/out/scripts/linenumber.js", - "/home/felix/projects/strudel/packages/core/out/scripts/prettify/lang-css.js", - "/home/felix/projects/strudel/packages/core/out/scripts/prettify/prettify.js", - "/home/felix/projects/strudel/packages/core/pattern.mjs", - "/home/felix/projects/strudel/packages/core/signal.mjs", - "/home/felix/projects/strudel/packages/core/speak.mjs", - "/home/felix/projects/strudel/packages/core/state.mjs", - "/home/felix/projects/strudel/packages/core/test/drawLine.test.mjs", - "/home/felix/projects/strudel/packages/core/test/fraction.test.mjs", - "/home/felix/projects/strudel/packages/core/test/pattern.test.mjs", - "/home/felix/projects/strudel/packages/core/test/util.test.mjs", - "/home/felix/projects/strudel/packages/core/test/value.test.mjs", - "/home/felix/projects/strudel/packages/core/timespan.mjs", - "/home/felix/projects/strudel/packages/core/util.mjs", - "/home/felix/projects/strudel/packages/core/value.mjs", - "/home/felix/projects/strudel/packages/embed/embed.js", - "/home/felix/projects/strudel/packages/eval/evaluate.mjs", - "/home/felix/projects/strudel/packages/eval/index.mjs", - "/home/felix/projects/strudel/packages/eval/shapeshifter.mjs", - "/home/felix/projects/strudel/packages/eval/test/evaluate.test.mjs", - "/home/felix/projects/strudel/packages/eval/test/shapeshifter.test.mjs", - "/home/felix/projects/strudel/packages/midi/index.mjs", - "/home/felix/projects/strudel/packages/midi/midi.mjs", - "/home/felix/projects/strudel/packages/mini/index.mjs", - "/home/felix/projects/strudel/packages/mini/krill-parser.js", - "/home/felix/projects/strudel/packages/mini/mini.mjs", - "/home/felix/projects/strudel/packages/mini/test/mini.test.mjs", - "/home/felix/projects/strudel/packages/osc/osc.mjs", - "/home/felix/projects/strudel/packages/osc/server.js", - "/home/felix/projects/strudel/packages/osc/tidal-sniffer.js", - "/home/felix/projects/strudel/packages/react/dist/index.cjs.js", - "/home/felix/projects/strudel/packages/react/dist/index.es.js", - "/home/felix/projects/strudel/packages/react/postcss.config.js", - "/home/felix/projects/strudel/packages/react/src/App.jsx", - "/home/felix/projects/strudel/packages/react/src/components/CodeMirror6.jsx", - "/home/felix/projects/strudel/packages/react/src/components/MiniRepl.jsx", - "/home/felix/projects/strudel/packages/react/src/cx.js", - "/home/felix/projects/strudel/packages/react/src/hooks/useCycle.mjs", - "/home/felix/projects/strudel/packages/react/src/hooks/useHighlighting.mjs", - "/home/felix/projects/strudel/packages/react/src/hooks/usePostMessage.mjs", - "/home/felix/projects/strudel/packages/react/src/hooks/useRepl.mjs", - "/home/felix/projects/strudel/packages/react/src/hooks/useWebMidi.mjs", - "/home/felix/projects/strudel/packages/react/src/index.js", - "/home/felix/projects/strudel/packages/react/src/main.jsx", - "/home/felix/projects/strudel/packages/react/src/themes/material-palenight.js", - "/home/felix/projects/strudel/packages/react/tailwind.config.js", - "/home/felix/projects/strudel/packages/react/vite.config.js", - "/home/felix/projects/strudel/packages/serial/serial.mjs", - "/home/felix/projects/strudel/packages/tonal/index.mjs", - "/home/felix/projects/strudel/packages/tonal/test/tonal.test.mjs", - "/home/felix/projects/strudel/packages/tonal/tonal.mjs", - "/home/felix/projects/strudel/packages/tonal/voicings.mjs", - "/home/felix/projects/strudel/packages/tone/draw.mjs", - "/home/felix/projects/strudel/packages/tone/index.mjs", - "/home/felix/projects/strudel/packages/tone/pianoroll.mjs", - "/home/felix/projects/strudel/packages/tone/test/tone.test.mjs", - "/home/felix/projects/strudel/packages/tone/tone.mjs", - "/home/felix/projects/strudel/packages/tone/ui.mjs", - "/home/felix/projects/strudel/packages/webaudio/clockworker.mjs", - "/home/felix/projects/strudel/packages/webaudio/index.mjs", - "/home/felix/projects/strudel/packages/webaudio/scheduler.mjs", - "/home/felix/projects/strudel/packages/webaudio/webaudio.mjs", - "/home/felix/projects/strudel/packages/xen/index.mjs", - "/home/felix/projects/strudel/packages/xen/test/xen.test.mjs", - "/home/felix/projects/strudel/packages/xen/tune.mjs", - "/home/felix/projects/strudel/packages/xen/tunejs.js", - "/home/felix/projects/strudel/packages/xen/xen.mjs" - ], - "___id": "T000002R014016", - "___s": true - } - ] -} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 61748dcc..dc882281 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,71 +1,79 @@ { "name": "@strudel.cycles/monorepo", - "version": "0.0.1", + "version": "0.0.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@strudel.cycles/monorepo", - "version": "0.0.1", + "version": "0.0.4", "license": "AGPL-3.0-or-later", "workspaces": [ "packages/*" ], "devDependencies": { + "@vitest/ui": "^0.21.1", + "c8": "^7.12.0", "events": "^3.3.0", "gh-pages": "^4.0.0", "jsdoc": "^3.6.10", "jsdoc-json": "^2.0.2", "jsdoc-to-markdown": "^7.1.1", "lerna": "^4.0.0", - "mocha": "^9.1.4" + "rollup-plugin-visualizer": "^5.8.1", + "vitest": "^0.21.1" } }, "node_modules/@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -84,43 +92,60 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", - "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.2.tgz", + "integrity": "sha512-SD75PMIK6i9H8G/tfGvB4KKl4Nw6Ssos9nGgYwxbgyTP0iX/Z55DveoH86rmUB/YHTQQ+ZC0F7xxaY8l2OF44Q==", + "dev": true, "dependencies": { - "@babel/types": "^7.17.10", - "@jridgewell/gen-mapping": "^0.1.0", + "@babel/types": "^7.20.2", + "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "engines": { @@ -134,139 +159,157 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dependencies": { - "@babel/types": "^7.16.7" - }, + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, "dependencies": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, "dependencies": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "dev": true, "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -278,6 +321,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -289,6 +333,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -302,6 +347,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -309,20 +355,14 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } @@ -331,6 +371,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -339,9 +380,10 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.2.tgz", + "integrity": "sha512-afk318kh2uKbo7BEj2QtEi8HVCGrwHUffrYDy7dgVcSa2j9lY3LDjPzcyGdpX7xgm35aWqvciZJ4WKmdF/SxYg==", + "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -350,12 +392,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -365,16 +407,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -384,12 +426,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", "dev": true, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.16.7" + "@babel/plugin-transform-react-jsx": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -399,12 +441,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", - "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -414,12 +456,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", - "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -429,9 +471,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.0.tgz", - "integrity": "sha512-etcO/ohMNaNA2UBdaXBBSX/3aEzFMRrVfaPv8Ptc0k+cWpWW0QFiGZ2XnVqQZI1Cf734LbPGmqBKWESfW4x/dQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -440,31 +482,33 @@ } }, "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", - "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -473,238 +517,162 @@ } }, "node_modules/@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@codemirror/autocomplete": { - "version": "0.19.15", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-0.19.15.tgz", - "integrity": "sha512-GQWzvvuXxNUyaEk+5gawbAD8s51/v2Chb++nx0e2eGWrphWk42isBtzOMdc3DxrxrZtPZ55q2ldNp+6G8KJLIQ==", - "dependencies": { - "@codemirror/language": "^0.19.0", - "@codemirror/state": "^0.19.4", - "@codemirror/text": "^0.19.2", - "@codemirror/tooltip": "^0.19.12", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.0" - } + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, - "node_modules/@codemirror/closebrackets": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/closebrackets/-/closebrackets-0.19.2.tgz", - "integrity": "sha512-ClMPzPcPP0eQiDcVjtVPl6OLxgdtZSYDazsvT0AKl70V1OJva0eHgl4/6kCW3RZ0pb2n34i9nJz4eXCmK+TYDA==", + "node_modules/@codemirror/autocomplete": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.1.0.tgz", + "integrity": "sha512-wtO4O5WDyXhhCd4q4utDIDZxnQfmJ++3dGBCG9LMtI79+92OcA1DVk/n7BEupKmjIr8AzvptDz7YQ9ud6OkU+A==", "dependencies": { - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.2", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.44" + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" + }, + "peerDependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" } }, "node_modules/@codemirror/commands": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-0.19.8.tgz", - "integrity": "sha512-65LIMSGUGGpY3oH6mzV46YWRrgao6NmfJ+AuC7jNz3K5NPnH6GCV1H5I6SwOFyVbkiygGyd0EFwrWqywTBD1aw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.1.2.tgz", + "integrity": "sha512-sO3jdX1s0pam6lIdeSJLMN3DQ6mPEbM4yLvyKkdqtmd/UDwhXA5+AwFJ89rRXm6vTeOXBsE5cAmlos/t7MJdgg==", "dependencies": { - "@codemirror/language": "^0.19.0", - "@codemirror/matchbrackets": "^0.19.0", - "@codemirror/state": "^0.19.2", - "@codemirror/text": "^0.19.6", - "@codemirror/view": "^0.19.22", - "@lezer/common": "^0.15.0" - } - }, - "node_modules/@codemirror/comment": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/comment/-/comment-0.19.1.tgz", - "integrity": "sha512-uGKteBuVWAC6fW+Yt8u27DOnXMT/xV4Ekk2Z5mRsiADCZDqYvryrJd6PLL5+8t64BVyocwQwNfz1UswYS2CtFQ==", - "dependencies": { - "@codemirror/state": "^0.19.9", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "node_modules/@codemirror/fold": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@codemirror/fold/-/fold-0.19.4.tgz", - "integrity": "sha512-0SNSkRSOa6gymD6GauHa3sxiysjPhUC0SRVyTlvL52o0gz9GHdc8kNqNQskm3fBtGGOiSriGwF/kAsajRiGhVw==", - "dependencies": { - "@codemirror/gutter": "^0.19.0", - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.22" - } - }, - "node_modules/@codemirror/gutter": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/gutter/-/gutter-0.19.9.tgz", - "integrity": "sha512-PFrtmilahin1g6uL27aG5tM/rqR9DZzZYZsIrCXA5Uc2OFTFqx4owuhoU9hqfYxHp5ovfvBwQ+txFzqS4vog6Q==", - "dependencies": { - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.23" - } - }, - "node_modules/@codemirror/highlight": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@codemirror/highlight/-/highlight-0.19.8.tgz", - "integrity": "sha512-v/lzuHjrYR8MN2mEJcUD6fHSTXXli9C1XGYpr+ElV6fLBIUhMTNKR3qThp611xuWfXfwDxeL7ppcbkM/MzPV3A==", - "dependencies": { - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.3", - "@codemirror/view": "^0.19.39", - "@lezer/common": "^0.15.0", - "style-mod": "^4.0.0" - } - }, - "node_modules/@codemirror/history": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/history/-/history-0.19.2.tgz", - "integrity": "sha512-unhP4t3N2smzmHoo/Yio6ueWi+il8gm9VKrvi6wlcdGH5fOfVDNkmjHQ495SiR+EdOG35+3iNebSPYww0vN7ow==", - "dependencies": { - "@codemirror/state": "^0.19.2", - "@codemirror/view": "^0.19.0" + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" } }, "node_modules/@codemirror/lang-javascript": { - "version": "0.19.7", - "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-0.19.7.tgz", - "integrity": "sha512-DL9f3JLqOEHH9cIwEqqjnP5bkjdVXeECksLtV+/MbPm+l4H+AG+PkwZaJQ2oR1GfPZKh8MVSIE94aGWNkJP8WQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.1.1.tgz", + "integrity": "sha512-F4+kiuC5d5dUSJmff96tJQwpEXs/tX/4bapMRnZWW6bHKK1Fx6MunTzopkCUWRa9bF87GPmb9m7Qtg7Yv8f3uQ==", "dependencies": { - "@codemirror/autocomplete": "^0.19.0", - "@codemirror/highlight": "^0.19.7", - "@codemirror/language": "^0.19.0", - "@codemirror/lint": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/javascript": "^0.15.1" + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" } }, "node_modules/@codemirror/language": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-0.19.10.tgz", - "integrity": "sha512-yA0DZ3RYn2CqAAGW62VrU8c4YxscMQn45y/I9sjBlqB1e2OTQLg4CCkMBuMSLXk4xaqjlsgazeOQWaJQOKfV8Q==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.2.1.tgz", + "integrity": "sha512-MC3svxuvIj0MRpFlGHxLS6vPyIdbTr2KKPEW46kCoCXw2ktb4NTkpkPBI/lSP/FoNXLCBJ0mrnUi1OoZxtpW1Q==", "dependencies": { - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.5", - "@lezer/lr": "^0.15.0" + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" } }, "node_modules/@codemirror/lint": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-0.19.6.tgz", - "integrity": "sha512-Pbw1Y5kHVs2J+itQ0uez3dI4qY9ApYVap7eNfV81x1/3/BXgBkKfadaw0gqJ4h4FDG7OnJwb0VbPsjJQllHjaA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.0.0.tgz", + "integrity": "sha512-nUUXcJW1Xp54kNs+a1ToPLK8MadO0rMTnJB8Zk4Z8gBdrN0kqV7uvUraU/T2yqg+grDNR38Vmy/MrhQN/RgwiA==", "dependencies": { - "@codemirror/gutter": "^0.19.4", - "@codemirror/panel": "^0.19.0", - "@codemirror/rangeset": "^0.19.1", - "@codemirror/state": "^0.19.4", - "@codemirror/tooltip": "^0.19.16", - "@codemirror/view": "^0.19.22", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", "crelt": "^1.0.5" } }, - "node_modules/@codemirror/matchbrackets": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@codemirror/matchbrackets/-/matchbrackets-0.19.4.tgz", - "integrity": "sha512-VFkaOKPNudAA5sGP1zikRHCEKU0hjYmkKpr04pybUpQvfTvNJXlReCyP0rvH/1iEwAGPL990ZTT+QrLdu4MeEA==", - "dependencies": { - "@codemirror/language": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.0" - } - }, - "node_modules/@codemirror/panel": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/panel/-/panel-0.19.1.tgz", - "integrity": "sha512-sYeOCMA3KRYxZYJYn5PNlt9yNsjy3zTNTrbYSfVgjgL9QomIVgOJWPO5hZ2sTN8lufO6lw0vTBsIPL9MSidmBg==", - "dependencies": { - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "node_modules/@codemirror/rangeset": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/rangeset/-/rangeset-0.19.9.tgz", - "integrity": "sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ==", - "dependencies": { - "@codemirror/state": "^0.19.0" - } - }, - "node_modules/@codemirror/rectangular-selection": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/rectangular-selection/-/rectangular-selection-0.19.2.tgz", - "integrity": "sha512-AXK/p5eGwFJ9GJcLfntqN4dgY+XiIF7eHfXNQJX5HhQLSped2wJE6WuC1rMEaOlcpOqlb9mrNi/ZdUjSIj9mbA==", - "dependencies": { - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.4", - "@codemirror/view": "^0.19.48" - } - }, "node_modules/@codemirror/search": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-0.19.10.tgz", - "integrity": "sha512-qjubm69HJixPBWzI6HeEghTWOOD8NXiHOTRNvdizqs8xWRuFChq9zkjD3XiAJ7GXSTzCuQJnAP9DBBGCLq4ZIA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.2.2.tgz", + "integrity": "sha512-2pWY599zXk+lSoJ2iv9EuTO4gB7lhgBPLPwFb/zTbimFH4NmZSaKzJSV51okjABZ7/Rj0DYy5klWbIgaJh2LoQ==", "dependencies": { - "@codemirror/panel": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.3", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.34", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", "crelt": "^1.0.5" } }, "node_modules/@codemirror/state": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-0.19.9.tgz", - "integrity": "sha512-psOzDolKTZkx4CgUqhBQ8T8gBc0xN5z4gzed109aF6x7D7umpDRoimacI/O6d9UGuyl4eYuDCZmDFr2Rq7aGOw==", - "dependencies": { - "@codemirror/text": "^0.19.0" - } + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.1.tgz", + "integrity": "sha512-2s+aXsxmAwnR3Rd+JDHPG/1lw0YsA9PEwl7Re88gHJHGfxyfEzKBmsN4rr53RyPIR4lzbbhJX0DCq0WlqlBIRw==" }, - "node_modules/@codemirror/text": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@codemirror/text/-/text-0.19.6.tgz", - "integrity": "sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA==" - }, - "node_modules/@codemirror/tooltip": { - "version": "0.19.16", - "resolved": "https://registry.npmjs.org/@codemirror/tooltip/-/tooltip-0.19.16.tgz", - "integrity": "sha512-zxKDHryUV5/RS45AQL+wOeN+i7/l81wK56OMnUPoTSzCWNITfxHn7BToDsjtrRKbzHqUxKYmBnn/4hPjpZ4WJQ==", + "node_modules/@codemirror/theme-one-dark": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.0.0.tgz", + "integrity": "sha512-jTCfi1I8QT++3m21Ui6sU8qwu3F/hLv161KLxfvkV1cYWSBwyUanmQFs89ChobQjBHi2x7s2k71wF9WYvE8fdw==", "dependencies": { - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0" + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/highlight": "^1.0.0" } }, "node_modules/@codemirror/view": { - "version": "0.19.48", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-0.19.48.tgz", - "integrity": "sha512-0eg7D2Nz4S8/caetCTz61rK0tkHI17V/d15Jy0kLOT8dTLGGNJUponDnW28h2B6bERmPlVHKh8MJIr5OCp1nGw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.2.0.tgz", + "integrity": "sha512-3emW1symh+GoteFMBPsltjmF790U/trouLILATh3JodbF/z98HvcQh2g3+H6dfNIHx16uNonsAF4mNzVr1TJNA==", "dependencies": { - "@codemirror/rangeset": "^0.19.5", - "@codemirror/state": "^0.19.3", - "@codemirror/text": "^0.19.0", + "@codemirror/state": "^6.0.0", "style-mod": "^4.0.0", "w3c-keyname": "^2.2.4" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", + "integrity": "sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz", + "integrity": "sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@gar/promisify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", - "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, "node_modules/@hutson/parse-repository-url": { @@ -716,10 +684,20 @@ "node": ">=6.9.0" } }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -729,33 +707,37 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@lerna/add": { @@ -1331,65 +1313,6 @@ "node": ">= 10.18.0" } }, - "node_modules/@lerna/npm-dist-tag/node_modules/make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@lerna/npm-dist-tag/node_modules/npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", - "dev": true, - "dependencies": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/npm-dist-tag/node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@lerna/npm-install": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-4.0.0.tgz", @@ -1626,65 +1549,6 @@ "node": ">= 10.18.0" } }, - "node_modules/@lerna/publish/node_modules/make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@lerna/publish/node_modules/npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", - "dev": true, - "dependencies": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/publish/node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@lerna/pulse-till-done": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-4.0.0.tgz", @@ -1889,24 +1753,33 @@ } }, "node_modules/@lezer/common": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", - "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.0.tgz", + "integrity": "sha512-ohydQe+Hb+w4oMDvXzs8uuJd2NoA3D8YDcLiuDsLqH+yflDTPEpgCsWI3/6rH5C3BAedtH1/R51dxENldQceEA==" + }, + "node_modules/@lezer/highlight": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.0.0.tgz", + "integrity": "sha512-nsCnNtim90UKsB5YxoX65v3GEIw3iCHw9RM2DtdgkiqAbKh9pCdvi8AWNwkYf10Lu6fxNhXPpkpHbW6mihhvJA==", + "dependencies": { + "@lezer/common": "^1.0.0" + } }, "node_modules/@lezer/javascript": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-0.15.3.tgz", - "integrity": "sha512-8jA2NpOfpWwSPZxRhd9BxK2ZPvGd7nLE3LFTJ5AbMhXAzMHeMjneV6GEVd7dAIee85dtap0jdb6bgOSO0+lfwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.0.2.tgz", + "integrity": "sha512-IjOVeIRhM8IuafWNnk+UzRz7p4/JSOKBNINLYLsdSGuJS9Ju7vFdc82AlTt0jgtV5D8eBZf4g0vK4d3ttBNz7A==", "dependencies": { - "@lezer/lr": "^0.15.0" + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" } }, "node_modules/@lezer/lr": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", - "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.2.1.tgz", + "integrity": "sha512-RpHRs+Q+5tPsXtobSfSeRFRAnTRD0e4bApDvo74O+JiaWq9812x5S8WgftNX67owdaTQXCB5E8XZGALo4Wt77A==", "dependencies": { - "@lezer/common": "^0.15.0" + "@lezer/common": "^1.0.0" } }, "node_modules/@nodelib/fs.scandir": { @@ -1951,16 +1824,13 @@ "dev": true }, "node_modules/@npmcli/fs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.0.tgz", - "integrity": "sha512-VhP1qZLXcrXRIaPoqb4YA55JQxLNF3jNR4T55IdOJa3+IFJKNYHtPvtXx8slmeMavj37vCzCfrqQM1vWLsYKLA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/@npmcli/git": { @@ -1999,6 +1869,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "dependencies": { "mkdirp": "^1.0.4", @@ -2035,6 +1906,45 @@ "read-package-json-fast": "^2.0.1" } }, + "node_modules/@npmcli/run-script/node_modules/node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@octokit/auth-token": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", @@ -2082,9 +1992,9 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", - "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", "dev": true }, "node_modules/@octokit/plugin-enterprise-rest": { @@ -2094,12 +2004,12 @@ "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", - "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "version": "2.21.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", + "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", "dev": true, "dependencies": { - "@octokit/types": "^6.34.0" + "@octokit/types": "^6.40.0" }, "peerDependencies": { "@octokit/core": ">=2" @@ -2115,12 +2025,12 @@ } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", - "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", + "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", "dev": true, "dependencies": { - "@octokit/types": "^6.34.0", + "@octokit/types": "^6.39.0", "deprecation": "^2.3.1" }, "peerDependencies": { @@ -2165,51 +2075,19 @@ } }, "node_modules/@octokit/types": { - "version": "6.34.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", - "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^11.2.0" + "@octokit/openapi-types": "^12.11.0" } }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true }, "node_modules/@strudel.cycles/core": { "resolved": "packages/core", @@ -2243,6 +2121,10 @@ "resolved": "packages/serial", "link": true }, + "node_modules/@strudel.cycles/soundfonts": { + "resolved": "packages/soundfonts", + "link": true + }, "node_modules/@strudel.cycles/tonal": { "resolved": "packages/tonal", "link": true @@ -2251,10 +2133,18 @@ "resolved": "packages/tone", "link": true }, + "node_modules/@strudel.cycles/transpiler": { + "resolved": "packages/transpiler", + "link": true + }, "node_modules/@strudel.cycles/webaudio": { "resolved": "packages/webaudio", "link": true }, + "node_modules/@strudel.cycles/webdirt": { + "resolved": "packages/webdirt", + "link": true + }, "node_modules/@strudel.cycles/xen": { "resolved": "packages/xen", "link": true @@ -2458,46 +2348,71 @@ "@tonaljs/time-signature": "^4.6.2" } }, - "node_modules/@tonejs/piano": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@tonejs/piano/-/piano-0.2.1.tgz", - "integrity": "sha512-JIwZ91RSFR7Rt16o7cA7O7G30wenFl0lY5yhTsuwZmn48MO9KV+X7kyXE98Bqvs/dCBVg9PoAJ1GKMabPOW4yQ==", - "dependencies": { - "tslib": "^1.11.1" - }, - "peerDependencies": { - "tone": "^14.6.1", - "webmidi": "^2.5.1" - } - }, - "node_modules/@tonejs/piano/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/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, + "optional": true, + "peer": true, "engines": { - "node": ">= 6" + "node": ">= 10" } }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + "node_modules/@types/chai": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true }, "node_modules/@types/linkify-it": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", + "dev": true }, "node_modules/@types/markdown-it": { "version": "12.2.3", "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dev": true, "dependencies": { "@types/linkify-it": "*", "@types/mdurl": "*" @@ -2506,7 +2421,8 @@ "node_modules/@types/mdurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "dev": true }, "node_modules/@types/minimatch": { "version": "3.0.5", @@ -2520,6 +2436,12 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, + "node_modules/@types/node": { + "version": "18.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz", + "integrity": "sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg==", + "dev": true + }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", @@ -2538,6 +2460,34 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", "dev": true }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/@types/react": { + "version": "17.0.52", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.52.tgz", + "integrity": "sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "17.0.18", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.18.tgz", + "integrity": "sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw==", + "dev": true, + "dependencies": { + "@types/react": "^17" + } + }, "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", @@ -2550,49 +2500,81 @@ "integrity": "sha512-sfS0A5IryqmBrUpcGPipEPeFdpqmZzP6b6lZFxHKgz5n2Vhzh4yJ5P2TvoDUhDjqJyv0Y25ng0Qodgo2Vu08ug==", "optional": true }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true + "node_modules/@uiw/codemirror-extensions-basic-setup": { + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.12.4.tgz", + "integrity": "sha512-owSCcRBtS2wYjxgBFkuIjfjWJHsR8AxgsQtqPpHB/6U0zCLuzKS/OM5ZRS2T3rdOizg0hCPztVvmshWeKjF+qw==", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + }, + "peerDependencies": { + "@codemirror/autocomplete": ">=6.0.0", + "@codemirror/commands": ">=6.0.0", + "@codemirror/language": ">=6.0.0", + "@codemirror/lint": ">=6.0.0", + "@codemirror/search": ">=6.0.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/view": ">=6.0.0" + } + }, + "node_modules/@uiw/codemirror-themes": { + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/@uiw/codemirror-themes/-/codemirror-themes-4.12.4.tgz", + "integrity": "sha512-ekySMFlXaJ4u0TCz/caHG8HqJPT0+viUA2ZQ4yZ+F1z2Lk9HgMS/1YfRj8vHuEUPNXc9Fsy5qxwTp7I1hEanEg==", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + }, + "peerDependencies": { + "@codemirror/language": ">=6.0.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/view": ">=6.0.0" + } }, "node_modules/@vitejs/plugin-react": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.3.2.tgz", - "integrity": "sha512-aurBNmMo0kz1O4qRoY+FM4epSA39y3ShWGuqfLRA/3z0oEJAdtoSfgA3aO98/PCCHAqMaduLxIxErWrVKIFzXA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.2.0.tgz", + "integrity": "sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==", "dev": true, "dependencies": { - "@babel/core": "^7.17.10", - "@babel/plugin-transform-react-jsx": "^7.17.3", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-jsx-self": "^7.16.7", - "@babel/plugin-transform-react-jsx-source": "^7.16.7", - "@rollup/pluginutils": "^4.2.1", - "react-refresh": "^0.13.0", - "resolve": "^1.22.0" + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-jsx": "^7.19.0", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.26.7", + "react-refresh": "^0.14.0" }, "engines": { - "node": ">=12.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0" } }, - "node_modules/@vitejs/plugin-react/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "node_modules/@vitest/ui": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.21.1.tgz", + "integrity": "sha512-e+AZdMG6NvrYhxB99LGxW1GkoTpqSDPKpL+wghsApWhocNwALBOBzvgsDr/WN6D6YWRXf18rsJ1kY/KaIspRdg==", "dev": true, "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" + "sirv": "^2.0.2" } }, - "node_modules/@vitejs/plugin-react/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/abbrev": { "version": "1.1.1", @@ -2612,6 +2594,18 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, "node_modules/acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", @@ -2635,7 +2629,7 @@ "node_modules/add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", "dev": true }, "node_modules/agent-base": { @@ -2651,9 +2645,9 @@ } }, "node_modules/agentkeepalive": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz", - "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "dev": true, "dependencies": { "debug": "^4.1.0", @@ -2693,14 +2687,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escape-sequences": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz", @@ -2775,9 +2761,9 @@ } }, "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "node_modules/are-we-there-yet": { @@ -2791,15 +2777,16 @@ } }, "node_modules/arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, "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==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/array-back": { "version": "6.2.2", @@ -2822,7 +2809,7 @@ "node_modules/array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true }, "node_modules/array-union": { @@ -2843,10 +2830,29 @@ "node": ">=0.10.0" } }, + "node_modules/array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -2870,12 +2876,21 @@ "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, "engines": { "node": ">=0.8" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -2913,9 +2928,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "dev": true, "funding": [ { @@ -2928,8 +2943,8 @@ } ], "dependencies": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -2948,7 +2963,7 @@ "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, "engines": { "node": "*" @@ -2963,7 +2978,8 @@ "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==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -2988,27 +3004,16 @@ "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, "dependencies": { "tweetnacl": "^0.14.3" } }, - "node_modules/beeper": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-2.1.0.tgz", - "integrity": "sha512-85+CcymhlP0jM4fs4ZMiMRl58VthoN9NRdvi+knXiQpP2UggkSre+A9rOZ0c2g2Vh+pEF5ZAlT+k8dsJNoanAA==", - "dependencies": { - "yoctodelay": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true }, "node_modules/binary-extensions": { @@ -3053,12 +3058,14 @@ "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, "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==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3076,16 +3083,19 @@ "node": ">=8" } }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true, + "optional": true, + "peer": true }, "node_modules/browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, "funding": [ { "type": "opencollective", @@ -3097,11 +3107,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" }, "bin": { "browserslist": "cli.js" @@ -3143,13 +3152,13 @@ "node_modules/builtins": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", "dev": true }, "node_modules/byline": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", + "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3164,6 +3173,41 @@ "node": ">=10" } }, + "node_modules/c8": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", + "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/c8/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/cacache": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", @@ -3239,15 +3283,12 @@ } }, "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/camelcase-css": { @@ -3276,15 +3317,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/camelcase-keys/node_modules/quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", @@ -3295,9 +3327,10 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001341", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", - "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==", + "version": "1.0.30001430", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz", + "integrity": "sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -3319,6 +3352,7 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dev": true, "dependencies": { "lodash": "^4.17.15" }, @@ -3326,6 +3360,24 @@ "node": ">= 10" } }, + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -3342,24 +3394,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chalk/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -3451,33 +3500,10 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "engines": { "node": ">=0.8" @@ -3524,12 +3550,26 @@ "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/codemirror": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", + "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, "node_modules/collect-all": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.4.tgz", @@ -3720,7 +3760,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/concat-stream": { "version": "2.0.0", @@ -3782,7 +3823,7 @@ "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "node_modules/conventional-changelog-angular": { @@ -3923,6 +3964,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } @@ -3930,7 +3972,8 @@ "node_modules/convert-source-map/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/core-util-is": { "version": "1.0.3", @@ -3973,6 +4016,14 @@ "node": ">= 8" } }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -3985,6 +4036,36 @@ "node": ">=4" } }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/csstype": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", @@ -4003,7 +4084,7 @@ "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, "dependencies": { "assert-plus": "^1.0.0" @@ -4012,6 +4093,71 @@ "node": ">=0.10" } }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -4025,6 +4171,7 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -4040,33 +4187,31 @@ "node_modules/debug/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==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/debuglog": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", "dev": true, "engines": { "node": "*" } }, "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { "decamelize": "^1.1.0", @@ -4074,53 +4219,55 @@ }, "engines": { "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", "dev": true, "engines": { "node": ">=0.10" } }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -4133,35 +4280,53 @@ "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==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "dependencies": { "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/delayed-stream": { "version": "1.0.0", @@ -4175,13 +4340,13 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { "node": ">= 0.6" @@ -4215,14 +4380,14 @@ } }, "node_modules/detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dev": true, "dependencies": { - "acorn-node": "^1.6.1", + "acorn-node": "^1.8.2", "defined": "^1.0.0", - "minimist": "^1.1.1" + "minimist": "^1.2.6" }, "bin": { "detective": "bin/detective.js" @@ -4232,9 +4397,9 @@ } }, "node_modules/dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, "dependencies": { "asap": "^2.0.0", @@ -4247,15 +4412,6 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -4269,12 +4425,11 @@ } }, "node_modules/djipevents": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/djipevents/-/djipevents-2.0.4.tgz", - "integrity": "sha512-ozscQ0QQaPIqx0gEMI6BIEMGWlEVuFZb+R3ER0TYrCugdEipAb38ddAXmytMOM7bnvToAzZU0RItaHcBSi6TYA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/djipevents/-/djipevents-2.0.6.tgz", + "integrity": "sha512-2vS7/OVdqocBAIVPbxhk36swE4HnjUL1muoibrkoaCaEAEAF/ww8QbYm55PqlzMp51pvD01wHr/CkZmKZdrI/g==", "dependencies": { - "@babel/runtime": "^7.16.3", - "gulp-jsdoc3": "^3.0.0" + "@babel/runtime": "^7.17.9" } }, "node_modules/dlv": { @@ -4306,83 +4461,29 @@ "node": ">=12" } }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "optional": true, + "peer": true, "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom-serializer/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=12" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "dependencies": { - "domelementtype": "^2.0.1" - }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "optional": true, + "peer": true, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/domutils/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=12" } }, "node_modules/dot-prop": { @@ -4409,7 +4510,7 @@ "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, "dependencies": { "jsbn": "~0.1.0", @@ -4417,9 +4518,10 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true }, "node_modules/email-addresses": { "version": "3.1.0", @@ -4456,6 +4558,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -4497,31 +4600,35 @@ } }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4530,6 +4637,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -4548,9 +4661,9 @@ } }, "node_modules/esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.13.tgz", + "integrity": "sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==", "dev": true, "hasInstallScript": true, "bin": { @@ -4560,32 +4673,34 @@ "node": ">=12" }, "optionalDependencies": { - "esbuild-android-64": "0.14.39", - "esbuild-android-arm64": "0.14.39", - "esbuild-darwin-64": "0.14.39", - "esbuild-darwin-arm64": "0.14.39", - "esbuild-freebsd-64": "0.14.39", - "esbuild-freebsd-arm64": "0.14.39", - "esbuild-linux-32": "0.14.39", - "esbuild-linux-64": "0.14.39", - "esbuild-linux-arm": "0.14.39", - "esbuild-linux-arm64": "0.14.39", - "esbuild-linux-mips64le": "0.14.39", - "esbuild-linux-ppc64le": "0.14.39", - "esbuild-linux-riscv64": "0.14.39", - "esbuild-linux-s390x": "0.14.39", - "esbuild-netbsd-64": "0.14.39", - "esbuild-openbsd-64": "0.14.39", - "esbuild-sunos-64": "0.14.39", - "esbuild-windows-32": "0.14.39", - "esbuild-windows-64": "0.14.39", - "esbuild-windows-arm64": "0.14.39" + "@esbuild/android-arm": "0.15.13", + "@esbuild/linux-loong64": "0.15.13", + "esbuild-android-64": "0.15.13", + "esbuild-android-arm64": "0.15.13", + "esbuild-darwin-64": "0.15.13", + "esbuild-darwin-arm64": "0.15.13", + "esbuild-freebsd-64": "0.15.13", + "esbuild-freebsd-arm64": "0.15.13", + "esbuild-linux-32": "0.15.13", + "esbuild-linux-64": "0.15.13", + "esbuild-linux-arm": "0.15.13", + "esbuild-linux-arm64": "0.15.13", + "esbuild-linux-mips64le": "0.15.13", + "esbuild-linux-ppc64le": "0.15.13", + "esbuild-linux-riscv64": "0.15.13", + "esbuild-linux-s390x": "0.15.13", + "esbuild-netbsd-64": "0.15.13", + "esbuild-openbsd-64": "0.15.13", + "esbuild-sunos-64": "0.15.13", + "esbuild-windows-32": "0.15.13", + "esbuild-windows-64": "0.15.13", + "esbuild-windows-arm64": "0.15.13" } }, "node_modules/esbuild-android-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", - "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz", + "integrity": "sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==", "cpu": [ "x64" ], @@ -4599,9 +4714,9 @@ } }, "node_modules/esbuild-android-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", - "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz", + "integrity": "sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==", "cpu": [ "arm64" ], @@ -4615,9 +4730,9 @@ } }, "node_modules/esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz", + "integrity": "sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==", "cpu": [ "x64" ], @@ -4631,9 +4746,9 @@ } }, "node_modules/esbuild-darwin-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", - "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz", + "integrity": "sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==", "cpu": [ "arm64" ], @@ -4647,9 +4762,9 @@ } }, "node_modules/esbuild-freebsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", - "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz", + "integrity": "sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==", "cpu": [ "x64" ], @@ -4663,9 +4778,9 @@ } }, "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", - "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz", + "integrity": "sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==", "cpu": [ "arm64" ], @@ -4679,9 +4794,9 @@ } }, "node_modules/esbuild-linux-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", - "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz", + "integrity": "sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==", "cpu": [ "ia32" ], @@ -4695,9 +4810,9 @@ } }, "node_modules/esbuild-linux-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", - "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz", + "integrity": "sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==", "cpu": [ "x64" ], @@ -4711,9 +4826,9 @@ } }, "node_modules/esbuild-linux-arm": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", - "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz", + "integrity": "sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==", "cpu": [ "arm" ], @@ -4727,9 +4842,9 @@ } }, "node_modules/esbuild-linux-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", - "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz", + "integrity": "sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==", "cpu": [ "arm64" ], @@ -4743,9 +4858,9 @@ } }, "node_modules/esbuild-linux-mips64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", - "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz", + "integrity": "sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==", "cpu": [ "mips64el" ], @@ -4759,9 +4874,9 @@ } }, "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", - "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz", + "integrity": "sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==", "cpu": [ "ppc64" ], @@ -4775,9 +4890,9 @@ } }, "node_modules/esbuild-linux-riscv64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", - "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz", + "integrity": "sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==", "cpu": [ "riscv64" ], @@ -4791,9 +4906,9 @@ } }, "node_modules/esbuild-linux-s390x": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", - "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz", + "integrity": "sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==", "cpu": [ "s390x" ], @@ -4807,9 +4922,9 @@ } }, "node_modules/esbuild-netbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", - "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz", + "integrity": "sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==", "cpu": [ "x64" ], @@ -4823,9 +4938,9 @@ } }, "node_modules/esbuild-openbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", - "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz", + "integrity": "sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==", "cpu": [ "x64" ], @@ -4839,9 +4954,9 @@ } }, "node_modules/esbuild-sunos-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", - "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz", + "integrity": "sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==", "cpu": [ "x64" ], @@ -4855,9 +4970,9 @@ } }, "node_modules/esbuild-windows-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", - "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz", + "integrity": "sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==", "cpu": [ "ia32" ], @@ -4871,9 +4986,9 @@ } }, "node_modules/esbuild-windows-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", - "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz", + "integrity": "sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==", "cpu": [ "x64" ], @@ -4887,9 +5002,9 @@ } }, "node_modules/esbuild-windows-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", - "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz", + "integrity": "sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==", "cpu": [ "arm64" ], @@ -4906,27 +5021,24 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } }, "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==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, "node_modules/escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -4948,7 +5060,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -4966,9 +5077,9 @@ } }, "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz", + "integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==" }, "node_modules/esutils": { "version": "2.0.3", @@ -5060,7 +5171,7 @@ "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, "engines": [ "node >=0.6.0" @@ -5073,9 +5184,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -5097,8 +5208,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "node_modules/fastq": { "version": "1.13.0", @@ -5109,6 +5219,29 @@ "reusify": "^1.0.4" } }, + "node_modules/fetch-blob": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.5.tgz", + "integrity": "sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -5124,15 +5257,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-set": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/file-set/-/file-set-4.0.2.tgz", @@ -5196,7 +5320,7 @@ "node_modules/filter-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5256,19 +5380,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, - "bin": { - "flat": "cli.js" + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" } }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, "engines": { "node": "*" @@ -5288,6 +5416,18 @@ "node": ">= 0.12" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -5355,12 +5495,14 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -5376,10 +5518,37 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "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==", + "dev": true, + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "dev": true, "dependencies": { "aproba": "^1.0.3", @@ -5395,16 +5564,48 @@ "node_modules/gauge/node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/gauge/node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/gauge/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -5417,6 +5618,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -5430,15 +5632,24 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5515,7 +5726,7 @@ "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, "dependencies": { "assert-plus": "^1.0.0" @@ -5625,7 +5836,7 @@ "node_modules/git-remote-origin-url": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, "dependencies": { "gitconfiglocal": "^1.0.0", @@ -5682,7 +5893,7 @@ "node_modules/gitconfiglocal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, "dependencies": { "ini": "^1.3.2" @@ -5698,6 +5909,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5729,6 +5941,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { "node": ">=4" } @@ -5759,52 +5972,6 @@ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/gulp-jsdoc3": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-jsdoc3/-/gulp-jsdoc3-3.0.0.tgz", - "integrity": "sha512-rE2jAwCPA8XFi9g4V3Z3LPhZNjxuMTIYQVMjdqZAQpRfJITLVaUK3xfmiiNTMc7j+fT7pL8Q5yj7ZPRdwCJWNg==", - "dependencies": { - "ansi-colors": "^4.1.1", - "beeper": "^2.0.0", - "debug": "^4.1.1", - "fancy-log": "^1.3.3", - "ink-docstrap": "^1.3.2", - "jsdoc": "^3.6.3", - "map-stream": "0.0.7", - "tmp": "0.1.0" - } - }, - "node_modules/gulp-jsdoc3/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/gulp-jsdoc3/node_modules/tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dependencies": { - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -5826,10 +5993,38 @@ "uglify-js": "^3.1.4" } }, + "node_modules/happy-dom": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-6.0.4.tgz", + "integrity": "sha512-b+ID23Ms0BY08UNLymsOMG7EI2jSlwEt4cbJs938GZfeNAg+fqgkSO3TokQMgSOFoHznpjWmpVjBUL5boJ9PWw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "css.escape": "^1.5.1", + "he": "^1.2.0", + "node-fetch": "^2.x.x", + "sync-request": "^6.1.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0" + } + }, + "node_modules/happy-dom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, "engines": { "node": ">=4" @@ -5871,9 +6066,9 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5888,6 +6083,18 @@ "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==", + "dev": true, + "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", @@ -5918,7 +6125,7 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "node_modules/he": { @@ -5926,6 +6133,8 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "optional": true, + "peer": true, "bin": { "he": "bin/he" } @@ -5942,15 +6151,58 @@ "node": ">=10" } }, - "node_modules/htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "optional": true, + "peer": true, "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-basic/node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "optional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "node_modules/http-cache-semantics": { @@ -5960,12 +6212,14 @@ "dev": true }, "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "optional": true, + "peer": true, "dependencies": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, @@ -5973,10 +6227,29 @@ "node": ">= 6" } }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, "dependencies": { "assert-plus": "^1.0.0", @@ -5989,9 +6262,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { "agent-base": "6", @@ -6013,7 +6286,7 @@ "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "dependencies": { "ms": "^2.0.0" @@ -6117,7 +6390,7 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { "node": ">=0.8.19" @@ -6142,6 +6415,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6150,7 +6424,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", @@ -6191,15 +6466,6 @@ "node": ">=10" } }, - "node_modules/ink-docstrap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ink-docstrap/-/ink-docstrap-1.3.2.tgz", - "integrity": "sha512-STx5orGQU1gfrkoI/fMU7lX6CSP7LBGO10gXNgOZhwKhUqbtNjCkYSewJtNnLmWP1tAGN6oyEpG1HFPw5vpa5Q==", - "dependencies": { - "moment": "^2.14.1", - "sanitize-html": "^1.13.0" - } - }, "node_modules/inquirer": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", @@ -6224,29 +6490,6 @@ "node": ">=8.0.0" } }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -6278,15 +6521,15 @@ } }, "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "node_modules/is-bigint": { @@ -6330,9 +6573,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" @@ -6354,9 +6597,9 @@ } }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -6380,6 +6623,21 @@ "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==", + "dev": true, + "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", @@ -6390,15 +6648,12 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-glob": { @@ -6416,7 +6671,7 @@ "node_modules/is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, "node_modules/is-negative-zero": { @@ -6441,9 +6696,9 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" @@ -6465,12 +6720,12 @@ } }, "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/is-plain-object": { @@ -6482,6 +6737,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -6499,21 +6762,24 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "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==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-ssh": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.3.tgz", - "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", "dev": true, "dependencies": { - "protocols": "^1.1.0" + "protocols": "^2.0.1" } }, "node_modules/is-stream": { @@ -6561,7 +6827,7 @@ "node_modules/is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "dependencies": { "text-extensions": "^1.0.0" @@ -6573,21 +6839,9 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -6600,6 +6854,18 @@ "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==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -6615,7 +6881,7 @@ "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -6624,9 +6890,45 @@ "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jazz-midi": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/jazz-midi/-/jazz-midi-1.7.5.tgz", @@ -6641,22 +6943,11 @@ "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==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/js2xmlparser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dev": true, "dependencies": { "xmlcreate": "^2.0.4" } @@ -6664,13 +6955,14 @@ "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, "node_modules/jsdoc": { - "version": "3.6.10", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz", - "integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==", + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", + "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", + "dev": true, "dependencies": { "@babel/parser": "^7.9.4", "@types/markdown-it": "^12.2.3", @@ -6678,7 +6970,7 @@ "catharsis": "^0.9.0", "escape-string-regexp": "^2.0.0", "js2xmlparser": "^4.0.2", - "klaw": "^4.0.1", + "klaw": "^3.0.0", "markdown-it": "^12.3.2", "markdown-it-anchor": "^8.4.1", "marked": "^4.0.10", @@ -6692,7 +6984,7 @@ "jsdoc": "jsdoc.js" }, "engines": { - "node": ">=8.15.0" + "node": ">=12.0.0" } }, "node_modules/jsdoc-api": { @@ -6763,14 +7055,161 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, "engines": { "node": ">=8" } }, + "node_modules/jsdom": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz", + "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.7.1", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "^7.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.8.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -6805,13 +7244,14 @@ "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "node_modules/json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -6834,7 +7274,7 @@ "node_modules/jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" @@ -6891,11 +7331,12 @@ } }, "node_modules/klaw": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz", - "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==", - "engines": { - "node": ">=14.14.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.9" } }, "node_modules/lerna": { @@ -6933,8 +7374,7 @@ "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -6958,11 +7398,86 @@ "node": ">=10" } }, - "node_modules/libnpmaccess/node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true + "node_modules/libnpmaccess/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/libnpmaccess/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/libnpmaccess/node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/libnpmaccess/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmaccess/node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } }, "node_modules/libnpmpublish": { "version": "4.0.2", @@ -6980,10 +7495,91 @@ "node": ">=10" } }, + "node_modules/libnpmpublish/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/libnpmpublish/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/libnpmpublish/node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/libnpmpublish/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", "dev": true, "engines": { "node": ">=10" @@ -6999,6 +7595,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, "dependencies": { "uc.micro": "^1.0.1" } @@ -7027,6 +7624,18 @@ "node": ">=8" } }, + "node_modules/local-pkg": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -7045,12 +7654,13 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", "dev": true }, "node_modules/lodash.camelcase": { @@ -7062,7 +7672,7 @@ "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, "node_modules/lodash.omit": { @@ -7102,27 +7712,10 @@ "lodash._reinterpolate": "^3.0.0" } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "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==", - "dev": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -7130,6 +7723,15 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -7142,6 +7744,18 @@ "node": ">=10" } }, + "node_modules/magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -7167,13 +7781,13 @@ } }, "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", "dev": true, "dependencies": { "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "cacache": "^15.0.5", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", @@ -7184,15 +7798,37 @@ "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", + "socks-proxy-agent": "^5.0.0", "ssri": "^8.0.0" }, "engines": { "node": ">= 10" } }, + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -7205,15 +7841,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=" - }, "node_modules/markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, "dependencies": { "argparse": "^2.0.1", "entities": "~2.1.0", @@ -7229,15 +7861,17 @@ "version": "8.6.2", "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.2.tgz", "integrity": "sha512-JNaekTlIwwyYGBN3zifZDxgz4bSL8sbEj58fdTZGmPSMMGXBZapFjcZk2I33Jy79c1fvCKHpF7MA/67FOTjvzA==", + "dev": true, "peerDependencies": { "@types/markdown-it": "*", "markdown-it": "*" } }, "node_modules/marked": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.14.tgz", - "integrity": "sha512-HL5sSPE/LP6U9qKgngIIPTthuxC0jrfxpYMZ3LdGDD3vTnLs59m2Z7r6+LNDR3ToqEQdkKd6YaaEfJhodJmijQ==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.17.tgz", + "integrity": "sha512-Wfk0ATOK5iPxM4ptrORkFemqroz0ZDxp5MWfYA7H/F+wO17NRWV5Ypxi6p3g2Xmw2bKeiYOl6oVnLHKxBA0VhA==", + "dev": true, "bin": { "marked": "bin/marked.js" }, @@ -7248,7 +7882,8 @@ "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true }, "node_modules/meow": { "version": "8.1.2", @@ -7474,18 +8109,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -7499,6 +8122,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7526,19 +8150,10 @@ "node": ">= 6" } }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dev": true, "dependencies": { "yallist": "^4.0.0" @@ -7639,6 +8254,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -7672,61 +8288,6 @@ "integrity": "sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==", "dev": true }, - "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -7736,12 +8297,13 @@ "node": ">=0.10.0" } }, - "node_modules/moment": { - "version": "2.29.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", - "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==", + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, "engines": { - "node": "*" + "node": ">=10" } }, "node_modules/ms": { @@ -7828,9 +8390,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -7860,22 +8422,23 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true, - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" } }, "node_modules/node-fetch": { @@ -7921,47 +8484,150 @@ } }, "node_modules/node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", + "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", "dev": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 10.12.0" + "node": ">= 6.0.0" } }, - "node_modules/node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" + "node_modules/node-gyp/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "node_modules/node-gyp/node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "dependencies": { - "abbrev": "1" + "minipass": "^2.6.0" + } + }, + "node_modules/node-gyp/node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/node-gyp/node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/node-gyp/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-gyp/node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/node-gyp/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" }, "bin": { "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" } }, "node_modules/normalize-package-data": { @@ -8046,90 +8712,6 @@ "which": "^1.3.1" } }, - "node_modules/npm-lifecycle/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/npm-lifecycle/node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/npm-lifecycle/node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/npm-lifecycle/node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/npm-lifecycle/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/npm-lifecycle/node_modules/node-gyp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", - "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.12", - "which": "^1.3.1" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/npm-lifecycle/node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, "node_modules/npm-lifecycle/node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -8139,45 +8721,6 @@ "node": ">=4" } }, - "node_modules/npm-lifecycle/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/npm-lifecycle/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/npm-lifecycle/node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dev": true, - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "engines": { - "node": ">=4.5" - } - }, "node_modules/npm-lifecycle/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -8190,12 +8733,6 @@ "which": "bin/which" } }, - "node_modules/npm-lifecycle/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, "node_modules/npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", @@ -8247,12 +8784,14 @@ } }, "node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", "dev": true, "dependencies": { - "make-fetch-happen": "^9.0.1", + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", "minipass": "^3.1.3", "minipass-fetch": "^1.3.0", "minipass-json-stream": "^1.0.1", @@ -8290,12 +8829,20 @@ "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/nwsapi": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", + "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -8329,9 +8876,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8356,14 +8903,14 @@ } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -8374,14 +8921,15 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", + "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", "dev": true, "dependencies": { + "array.prototype.reduce": "^1.0.4", "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" }, "engines": { "node": ">= 0.8" @@ -8394,6 +8942,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -8413,11 +8962,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "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.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -8433,7 +8998,7 @@ "node_modules/os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -8442,18 +9007,18 @@ "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/osc-js": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/osc-js/-/osc-js-2.3.2.tgz", - "integrity": "sha512-9i7J4u1hH+glooGMh+ki1ni0JGqKmylT8r0nXKugHbRK63rR+kl4O+5tGW6+/EszjbCju3KV+eXQQzFDdGrmhg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/osc-js/-/osc-js-2.4.0.tgz", + "integrity": "sha512-9cvB8m6zt/iCsmeDdFJaD4mjC8preB1Gio+NVmjT0S3qxiejTfJ8vGudyTQciL9yqQHEuINNYS5Kb94+Ceqekg==", "dependencies": { - "ws": "^8.5.0" + "ws": "^8.9.0" } }, "node_modules/osenv": { @@ -8469,7 +9034,7 @@ "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, "engines": { "node": ">=4" @@ -8644,6 +9209,87 @@ "node": ">=10" } }, + "node_modules/pacote/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pacote/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pacote/node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pacote/node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -8656,6 +9302,14 @@ "node": ">=6" } }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -8675,9 +9329,9 @@ } }, "node_modules/parse-path": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.3.tgz", - "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.4.tgz", + "integrity": "sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw==", "dev": true, "dependencies": { "is-ssh": "^1.3.0", @@ -8686,10 +9340,16 @@ "query-string": "^6.13.8" } }, + "node_modules/parse-path/node_modules/protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + }, "node_modules/parse-path/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "dependencies": { "side-channel": "^1.0.4" @@ -8701,15 +9361,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse-srcset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=" - }, "node_modules/parse-url": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.0.tgz", - "integrity": "sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.5.tgz", + "integrity": "sha512-e35AeLTSIlkw/5GFq70IN7po8fmDUjpDPY1rIK+VubRfsUvBonjQ+PBZG+vWMACnQSmNlvl524IucoDmcioMxA==", "dev": true, "dependencies": { "is-ssh": "^1.3.0", @@ -8718,6 +9373,40 @@ "protocols": "^1.4.0" } }, + "node_modules/parse-url/node_modules/protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + }, + "node_modules/parse5": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", + "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "entities": "^4.3.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", + "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -8731,6 +9420,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8759,21 +9449,57 @@ "node": ">=8" } }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/peggy": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/peggy/-/peggy-2.0.1.tgz", + "integrity": "sha512-mBqfmdUAOVn7RILpXTbcRBhLfTR4Go0SresSnivGDdRylBOyVFJncFiVyCNNpPWq8HmgeRleXHs/Go4o8kQVXA==", + "dev": true, + "dependencies": { + "commander": "^9.3.0", + "source-map-generator": "0.8.0" + }, + "bin": { + "peggy": "bin/peggy.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/peggy/node_modules/commander": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -8928,9 +9654,9 @@ } }, "node_modules/postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "dev": true, "funding": [ { @@ -8943,7 +9669,7 @@ } ], "dependencies": { - "nanoid": "^3.3.3", + "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -8951,6 +9677,23 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, "node_modules/postcss-js": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", @@ -9000,12 +9743,12 @@ } }, "node_modules/postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.6" + "postcss-selector-parser": "^6.0.10" }, "engines": { "node": ">=12.0" @@ -9037,18 +9780,6 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/prebuild-install": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", @@ -9080,7 +9811,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -9091,19 +9821,21 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "node_modules/promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", "dev": true, - "engines": { - "node": ">=0.4.0" + "optional": true, + "peer": true, + "dependencies": { + "asap": "~2.0.6" } }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true }, "node_modules/promise-retry": { @@ -9122,7 +9854,7 @@ "node_modules/promzard": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", + "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", "dev": true, "dependencies": { "read": "1" @@ -9131,13 +9863,13 @@ "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, "node_modules/protocols": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", - "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true }, "node_modules/psl": { @@ -9168,7 +9900,7 @@ "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true, "engines": { "node": ">=0.6.0", @@ -9234,70 +9966,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react": { "resolved": "packages/react", "link": true }, - "node_modules/react-codemirror6": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/react-codemirror6/-/react-codemirror6-1.1.0.tgz", - "integrity": "sha512-xoXBMrnD4ZikGc3pJSXvjcy8HXuFHMOID1CTf3oJZzfh25MtkLaJxSd3gBz/hqy3rqlGXJH3BMVYDsFsfnHwQQ==", - "dependencies": { - "@babel/runtime": "^7.14.8", - "@codemirror/autocomplete": "^0.19.15", - "@codemirror/closebrackets": "^0.19.1", - "@codemirror/commands": "^0.19.8", - "@codemirror/comment": "^0.19.1", - "@codemirror/fold": "^0.19.3", - "@codemirror/gutter": "^0.19.9", - "@codemirror/highlight": "^0.19.8", - "@codemirror/history": "^0.19.2", - "@codemirror/language": "^0.19.10", - "@codemirror/lint": "^0.19.6", - "@codemirror/matchbrackets": "^0.19.4", - "@codemirror/rectangular-selection": "^0.19.2", - "@codemirror/search": "^0.19.9", - "@codemirror/state": "^0.19.9", - "@codemirror/view": "^0.19.48" - }, - "peerDependencies": { - "react": "^17.0.2", - "react-dom": "^17.0.2" - } - }, "node_modules/react-hook-inview": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/react-hook-inview/-/react-hook-inview-4.5.0.tgz", @@ -9308,9 +9980,9 @@ } }, "node_modules/react-refresh": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.13.0.tgz", - "integrity": "sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9319,7 +9991,7 @@ "node_modules/read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, "dependencies": { "mute-stream": "~0.0.4" @@ -9328,6 +10000,15 @@ "node": ">=0.8" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, "node_modules/read-cmd-shim": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", @@ -9416,7 +10097,7 @@ "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "dependencies": { "load-json-file": "^4.0.0", @@ -9430,7 +10111,7 @@ "node_modules/read-pkg-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, "dependencies": { "find-up": "^2.0.0", @@ -9443,7 +10124,7 @@ "node_modules/read-pkg-up/node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "dependencies": { "locate-path": "^2.0.0" @@ -9455,7 +10136,7 @@ "node_modules/read-pkg-up/node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "dependencies": { "p-locate": "^2.0.0", @@ -9480,7 +10161,7 @@ "node_modules/read-pkg-up/node_modules/p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "dependencies": { "p-limit": "^1.1.0" @@ -9492,7 +10173,7 @@ "node_modules/read-pkg-up/node_modules/p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, "engines": { "node": ">=4" @@ -9501,7 +10182,7 @@ "node_modules/read-pkg-up/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "engines": { "node": ">=4" @@ -9516,7 +10197,7 @@ "node_modules/read-pkg/node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -9543,7 +10224,7 @@ "node_modules/read-pkg/node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "dependencies": { "error-ex": "^1.3.1", @@ -9568,7 +10249,7 @@ "node_modules/read-pkg/node_modules/pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "engines": { "node": ">=4" @@ -9586,7 +10267,7 @@ "node_modules/read-pkg/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { "node": ">=4" @@ -9617,6 +10298,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "dependencies": { "debuglog": "^1.0.1", @@ -9747,6 +10429,23 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, + "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==", + "dev": true, + "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/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -9792,17 +10491,18 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", + "dev": true, "dependencies": { "lodash": "^4.17.14" } }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -9850,7 +10550,7 @@ "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "engines": { "node": ">= 4" @@ -9882,9 +10582,10 @@ } }, "node_modules/rollup": { - "version": "2.70.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", - "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -9895,6 +10596,67 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.8.3.tgz", + "integrity": "sha512-QGJk4Bqe4AOat5AjipOh8esZH1nck5X2KFpf4VytUdSUuuuSwvIQZjMGgjcxe/zXexltqaXp5Vx1V3LmnQH15Q==", + "dev": true, + "dependencies": { + "open": "^8.4.0", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "rollup": "2.x || 3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -9965,58 +10727,53 @@ } ] }, + "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==", + "dev": true, + "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/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/sanitize-html": { - "version": "1.27.5", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.27.5.tgz", - "integrity": "sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A==", + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "optional": true, + "peer": true, "dependencies": { - "htmlparser2": "^4.1.0", - "lodash": "^4.17.15", - "parse-srcset": "^1.0.2", - "postcss": "^7.0.27" - } - }, - "node_modules/sanitize-html/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "node_modules/sanitize-html/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" + "xmlchars": "^2.2.0" }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=v12.22.7" } }, "node_modules/scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -10028,21 +10785,20 @@ "node": ">=10" } }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/sfumato": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/sfumato/-/sfumato-0.1.2.tgz", + "integrity": "sha512-j2s5BLUS5VUNtaK1l+v+yal3XjjV7JXCQIwE5Xs4yiQ3HJ+2Fc/dd3IkkrVHn0AJO2epShSWVoP3GnE0TvPdMg==", + "dependencies": { + "soundfont2": "^0.4.0" + } + }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -10077,53 +10833,43 @@ } }, "node_modules/shift-ast": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.1.0.tgz", - "integrity": "sha512-Vj4XUIJIFPIh6VcBGJ1hjH/kM88XGer94Pr7Rvxa+idEylDsrwtLw268HoxGo5xReL6T3DdRl/9/Pr1XihZ/8Q==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-7.0.0.tgz", + "integrity": "sha512-O0INwsZa1XH/lMSf52udGnjNOxKBLxFiZHt0Ys3i6bqtwuGEA3eDR4+e0qJELIsCy8+BiTtlTgQzP76K1ehipQ==" }, "node_modules/shift-codegen": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/shift-codegen/-/shift-codegen-7.0.3.tgz", - "integrity": "sha512-dfCVVdBF0qZ6pkajQ3bjxRdNEltyxEITVe7tBJkQt2eCI3znUkSxq0VSe/tTWq1LKHeAS4HuOiqYEuHMFkSq9w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/shift-codegen/-/shift-codegen-8.1.0.tgz", + "integrity": "sha512-hV48SiFM0pgTLCueh0iwqbvqElXPtZL69nb+3eXOU3iZZnLP+AlBQSLKKvHSPr/Onmk0lcUEkAM7RA6V6Wj1GQ==", "dependencies": { "esutils": "^2.0.2", "object-assign": "^4.1.0", - "shift-reducer": "6.0.0" + "shift-reducer": "7.0.0" } }, "node_modules/shift-parser": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/shift-parser/-/shift-parser-7.0.3.tgz", - "integrity": "sha512-uYX2ORyZfKZrUc4iKKkO9KOhzUSxCrSBk7QK6ZmShId+BOo1gh1IwecVy97ynyOTpmhPWUttjC8BzsnQl65Zew==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/shift-parser/-/shift-parser-8.0.0.tgz", + "integrity": "sha512-IShW1wGhvA5e+SPNVQ+Dwi/Be6651F2jZc6wwYHbYW7PiswAYfvR/v3Q+CjjxsVCna5L6J5OtR6y+tkkCzvCfw==", "dependencies": { "multimap": "^1.0.2", - "shift-ast": "6.0.0", - "shift-reducer": "6.0.0", - "shift-regexp-acceptor": "2.0.3" + "shift-ast": "7.0.0", + "shift-reducer": "7.0.0", + "shift-regexp-acceptor": "3.0.0" } }, - "node_modules/shift-parser/node_modules/shift-ast": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.0.0.tgz", - "integrity": "sha512-XXxDcEBWVBzqWXfNYJlLyJ1/9kMvOXVRXiqPjkOrTCC5qRsBvEMJMRLLFhU3tn8ue56Y7IZyBE6bexFum5QLUw==" - }, "node_modules/shift-reducer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/shift-reducer/-/shift-reducer-6.0.0.tgz", - "integrity": "sha512-2rJraRP8drIOjvaE/sALa+0tGJmMVUzlmS3wIJerJbaYuCjpFAiF0WjkTOFVtz1144Nm/ECmqeG+7yRhuMVsMg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/shift-reducer/-/shift-reducer-7.0.0.tgz", + "integrity": "sha512-9igIDMHzp1+CkQZITGHM1sAd9jqMPV0vhqHuh8jlYumHSMIwsYcrDeo1tlpzNRUnfbEq1nLyh8Bf1YU8HGUE7g==", "dependencies": { - "shift-ast": "6.0.0" + "shift-ast": "7.0.0" } }, - "node_modules/shift-reducer/node_modules/shift-ast": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.0.0.tgz", - "integrity": "sha512-XXxDcEBWVBzqWXfNYJlLyJ1/9kMvOXVRXiqPjkOrTCC5qRsBvEMJMRLLFhU3tn8ue56Y7IZyBE6bexFum5QLUw==" - }, "node_modules/shift-regexp-acceptor": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/shift-regexp-acceptor/-/shift-regexp-acceptor-2.0.3.tgz", - "integrity": "sha512-sxL7e5JNUFxm+gutFRXktX2D6KVgDAHNuDsk5XHB9Z+N5yXooZG6pdZ1GEbo3Jz6lF7ETYLBC4WAjIFm2RKTmA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shift-regexp-acceptor/-/shift-regexp-acceptor-3.0.0.tgz", + "integrity": "sha512-98UKizBjHY6SjjLUr51YYw4rtR+vxjGFm8znqNsoahesAI8Y9+WVAyiBCxxkov1KSDhW0Wz8FwwUqHnlFnjdUg==", "dependencies": { "unicode-match-property-ecmascript": "1.0.4", "unicode-match-property-value-ecmascript": "1.0.2", @@ -10131,9 +10877,9 @@ } }, "node_modules/shift-spec": { - "version": "2018.0.2", - "resolved": "https://registry.npmjs.org/shift-spec/-/shift-spec-2018.0.2.tgz", - "integrity": "sha512-5CP/cKDEim4rZ6ViCSipTLY2U7HJr8q/kpDuCBmebFqbx/0DeozWO+9ienHmYjgGLDfHrqj+LBAN67FRK2vE6w==" + "version": "2019.0.0", + "resolved": "https://registry.npmjs.org/shift-spec/-/shift-spec-2019.0.0.tgz", + "integrity": "sha512-vYfKl+afWPUj/wfr5T/+mdYvWx0nn8LY6hVdfZmFENdGEBpAfQyOTo4/5i+rs8mj+Jz4+0MnsP4vXagjEoHfEw==" }, "node_modules/shift-traverser": { "version": "1.0.0", @@ -10172,40 +10918,23 @@ } }, "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "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/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "node_modules/sirv": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", "dev": true, "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" } }, "node_modules/slash": { @@ -10220,7 +10949,7 @@ "node_modules/slide": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", "dev": true, "engines": { "node": "*" @@ -10237,13 +10966,13 @@ } }, "node_modules/socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" }, "engines": { "node": ">= 10.13.0", @@ -10251,17 +10980,17 @@ } }, "node_modules/socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", "dev": true, "dependencies": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "4", + "socks": "^2.3.3" }, "engines": { - "node": ">= 10" + "node": ">= 6" } }, "node_modules/sort-array": { @@ -10310,14 +11039,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/soundfont2": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/soundfont2/-/soundfont2-0.4.0.tgz", + "integrity": "sha512-537WiurDBRbDLVhJMxXLE06D6yWxJCidfPClnibZ0f8dKMDpv+0fIfwCQ8pELE0JqKX05SOJosNJgKzQobaAEA==" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/source-map-generator": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/source-map-generator/-/source-map-generator-0.8.0.tgz", + "integrity": "sha512-psgxdGMwl5MZM9S3FWee4EgsEaIjahYV5AzGnwUvPhWeITz/j6rKpysQHlQ4USdxvINlb8lKfWGIXwfkrgtqkA==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -10327,6 +11080,12 @@ "node": ">=0.10.0" } }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -10354,9 +11113,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, "node_modules/split": { @@ -10495,7 +11254,7 @@ "node_modules/strict-uri-encode": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", "dev": true, "engines": { "node": ">=4" @@ -10517,61 +11276,42 @@ "dev": true }, "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10623,6 +11363,7 @@ "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==", + "dev": true, "engines": { "node": ">=8" }, @@ -10642,15 +11383,6 @@ "node": ">=0.10.0" } }, - "node_modules/strip-outer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/strong-log-transformer": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", @@ -10674,18 +11406,15 @@ "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==" }, "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -10700,6 +11429,52 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/sync-rpc/node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/table-layout": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz", @@ -10731,35 +11506,38 @@ "node_modules/taffydb": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=" + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true }, "node_modules/tailwindcss": { - "version": "3.0.24", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", - "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.2.tgz", + "integrity": "sha512-c2GtSdqg+harR4QeoTmex0Ngfg8IIHNeLQH5yr2B9uZbZR1Xt1rYbjWOWTcj3YLTZhrmZnPowoQDbSRFyZHQ5Q==", "dev": true, "dependencies": { - "arg": "^5.0.1", + "arg": "^5.0.2", "chokidar": "^3.5.3", "color-name": "^1.1.4", - "detective": "^5.2.0", + "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.11", + "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "lilconfig": "^2.0.5", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.12", + "postcss": "^8.4.18", + "postcss-import": "^14.1.0", "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", + "postcss-nested": "6.0.0", "postcss-selector-parser": "^6.0.10", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "resolve": "^1.22.0" + "resolve": "^1.22.1" }, "bin": { "tailwind": "lib/cli.js", @@ -10785,9 +11563,9 @@ } }, "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", + "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", "dev": true, "dependencies": { "chownr": "^2.0.0", @@ -10798,7 +11576,7 @@ "yallist": "^4.0.0" }, "engines": { - "node": ">= 10" + "node": ">=10" } }, "node_modules/tar-fs": { @@ -10852,7 +11630,7 @@ "node_modules/temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true, "engines": { "node": ">=4" @@ -10880,6 +11658,20 @@ "node": ">=8" } }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/test-value": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", @@ -10914,10 +11706,59 @@ "node": ">=0.10" } }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/then-request/node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "optional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "node_modules/through2": { @@ -10943,6 +11784,24 @@ "node": ">= 6" } }, + "node_modules/tinypool": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.2.4.tgz", + "integrity": "sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.0.tgz", + "integrity": "sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -10958,7 +11817,8 @@ "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, "engines": { "node": ">=4" } @@ -10984,6 +11844,15 @@ "tslib": "^2.0.1" } }, + "node_modules/totalist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -11030,24 +11899,15 @@ "node": ">=0.10.0" } }, - "node_modules/trim-repeated/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "dependencies": { "safe-buffer": "^5.0.1" @@ -11059,14 +11919,13 @@ "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -11074,6 +11933,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", @@ -11110,7 +11978,8 @@ "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true }, "node_modules/uglify-js": { "version": "3.15.3", @@ -11128,7 +11997,7 @@ "node_modules/uid-number": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "integrity": "sha512-c461FXIljswCuscZn67xq9PpszkPT6RjheWFQTgCyabJrTUozElanb0YEqv2UGgk247YpcJkFBuSGNvBlpXM9w==", "dev": true, "engines": { "node": "*" @@ -11137,18 +12006,18 @@ "node_modules/umask": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", - "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", + "integrity": "sha512-lE/rxOhmiScJu9L6RTNVgB/zZbF+vGC0/p6D3xnkAePI2o0sMyFG966iR5Ki50OI/0mNi2yaRnxfLsPmEZF/JA==", "dev": true }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -11158,7 +12027,8 @@ "node_modules/underscore": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", - "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" + "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==", + "dev": true }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "1.0.4", @@ -11239,6 +12109,32 @@ "yarn": "*" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -11257,7 +12153,7 @@ "node_modules/util-promisify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", - "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "integrity": "sha512-K+5eQPYs14b3+E+hmE2J6gCZ4JmMl9DbYS6BeP2CHq6WMuNxErxf5B/n0fz85L8zUuoO6rIzNNmIQDu/j+1OcA==", "dev": true, "dependencies": { "object.getownpropertydescriptors": "^2.0.3" @@ -11273,6 +12169,20 @@ "uuid": "bin/uuid" } }, + "node_modules/v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -11286,7 +12196,7 @@ "node_modules/validate-npm-package-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dev": true, "dependencies": { "builtins": "^1.0.3" @@ -11295,7 +12205,7 @@ "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "engines": [ "node >=0.6.0" @@ -11309,25 +12219,25 @@ "node_modules/verror/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=", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, "node_modules/vite": { - "version": "2.9.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.9.tgz", - "integrity": "sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", + "integrity": "sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==", "dev": true, "dependencies": { - "esbuild": "^0.14.27", - "postcss": "^8.4.13", - "resolve": "^1.22.0", - "rollup": "^2.59.0" + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": ">=12.2.0" + "node": "^14.18.0 || >=16.0.0" }, "optionalDependencies": { "fsevents": "~2.3.2" @@ -11335,7 +12245,9 @@ "peerDependencies": { "less": "*", "sass": "*", - "stylus": "*" + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" }, "peerDependenciesMeta": { "less": { @@ -11346,14 +12258,122 @@ }, "stylus": { "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true } } }, + "node_modules/vitest": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.21.1.tgz", + "integrity": "sha512-WBIxuFmIDPuK47GO6Lu9eNeRMqHj/FWL3dk73OHH3eyPPWPiu+UB3QHLkLK2PEggCqJW4FaWoWg8R68S7p9+9Q==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.3", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "tinypool": "^0.2.4", + "tinyspy": "^1.0.0", + "vite": "^2.9.12 || ^3.0.0-0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "c8": "*", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "c8": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vitest/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==", + "dev": true + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, "node_modules/w3c-keyname": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" }, + "node_modules/w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/walk-back": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-5.1.0.tgz", @@ -11366,12 +12386,26 @@ "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "dependencies": { "defaults": "^1.0.3" } }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/WebDirt": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/dktr0/WebDirt.git#425dc8fd023440d9c61ffdb8642e44e2710faea0", + "license": "ISC" + }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -11381,12 +12415,29 @@ "node": ">=10.4" } }, - "node_modules/webmidi": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/webmidi/-/webmidi-2.5.3.tgz", - "integrity": "sha512-PyMGvKcDGpvbQUfnmBORQJciyG3VAZ4aHlGy1iRZ3uEs4kG4HCvI7KRthUpM1vuHDPL98lidRIUaoRomkJtWtg==", + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, "engines": { - "node": ">0.6.x" + "node": ">=12" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12" } }, "node_modules/whatwg-url": { @@ -11447,7 +12498,6 @@ "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==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -11480,12 +12530,6 @@ "node": ">=0.10.0" } }, - "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -11503,33 +12547,11 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -11563,6 +12585,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/write-json-file/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/write-pkg": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", @@ -11580,21 +12611,12 @@ "node_modules/write-pkg/node_modules/detect-indent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, "engines": { "node": ">=4" } }, - "node_modules/write-pkg/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/write-pkg/node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -11629,7 +12651,7 @@ "node_modules/write-pkg/node_modules/sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, "dependencies": { "is-plain-obj": "^1.0.0" @@ -11676,9 +12698,9 @@ } }, "node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", + "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", "engines": { "node": ">=10.0.0" }, @@ -11695,10 +12717,30 @@ } } }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "dev": true }, "node_modules/xtend": { "version": "4.0.2", @@ -11760,44 +12802,6 @@ "node": ">=10" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -11810,42 +12814,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yoctodelay": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/yoctodelay/-/yoctodelay-1.2.0.tgz", - "integrity": "sha512-12y/P9MSig9/5BEhBgylss+fkHiCRZCvYR81eH35NW9uw801cvJt31EAV+WOLcwZRZbLiIQl/hxcdXXXFmGvXg==", - "engines": { - "node": ">=4" - } - }, "packages/core": { "name": "@strudel.cycles/core", - "version": "0.1.0", + "version": "0.3.2", "license": "AGPL-3.0-or-later", "dependencies": { "bjork": "^0.0.1", "fraction.js": "^4.2.0" - }, - "devDependencies": { - "mocha": "^9.2.2" } }, "packages/embed": { "name": "@strudel.cycles/embed", - "version": "0.1.0", + "version": "0.2.0", "license": "AGPL-3.0-or-later" }, "packages/eval": { "name": "@strudel.cycles/eval", - "version": "0.1.1", + "version": "0.3.2", "license": "AGPL-3.0-or-later", "dependencies": { - "@strudel.cycles/core": "^0.1.0", + "@strudel.cycles/core": "^0.3.2", "estraverse": "^5.3.0", - "shift-ast": "^6.1.0", - "shift-codegen": "^7.0.3", - "shift-parser": "^7.0.3", - "shift-spec": "^2018.0.2", + "shift-ast": "^7.0.0", + "shift-codegen": "^8.1.0", + "shift-parser": "^8.0.0", + "shift-spec": "^2019.0.0", "shift-traverser": "^1.0.0" } }, @@ -11864,30 +12857,47 @@ }, "packages/midi": { "name": "@strudel.cycles/midi", - "version": "0.1.1", + "version": "0.3.3", "license": "AGPL-3.0-or-later", "dependencies": { - "@strudel.cycles/tone": "^0.1.1", + "@strudel.cycles/tone": "^0.3.3", "tone": "^14.7.77", - "webmidi": "^2.5.2" + "webmidi": "^3.0.21" + } + }, + "packages/midi/node_modules/webmidi": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/webmidi/-/webmidi-3.0.21.tgz", + "integrity": "sha512-SStCLo099908jR0duYUTstVHNlKh9A/WvXIF5ED2ShGnE2MAy28UhrdzgjLsyDzOiBn8Od3ngT8g/MVa2TC5hg==", + "dependencies": { + "djipevents": "^2.0.5" + }, + "engines": { + "node": ">=8.5" + }, + "optionalDependencies": { + "jzz": "^1.4.5" } }, "packages/mini": { "name": "@strudel.cycles/mini", - "version": "0.1.1", + "version": "0.3.3", "license": "AGPL-3.0-or-later", "dependencies": { - "@strudel.cycles/core": "^0.1.0", - "@strudel.cycles/eval": "^0.1.1", - "@strudel.cycles/tone": "^0.1.1" + "@strudel.cycles/core": "^0.3.2", + "@strudel.cycles/eval": "^0.3.2", + "@strudel.cycles/tone": "^0.3.3" + }, + "devDependencies": { + "peggy": "^2.0.1" } }, "packages/osc": { "name": "@strudel.cycles/osc", - "version": "0.1.0", + "version": "0.2.0", "license": "AGPL-3.0-or-later", "dependencies": { - "osc-js": "^2.3.2" + "osc-js": "^2.4.0" }, "devDependencies": { "pkg": "^5.7.0" @@ -11895,58 +12905,59 @@ }, "packages/react": { "name": "@strudel.cycles/react", - "version": "0.1.2", + "version": "0.3.3", "license": "AGPL-3.0-or-later", - "peer": true, "dependencies": { - "@codemirror/lang-javascript": "^0.19.0", - "@strudel.cycles/core": "*", - "@strudel.cycles/eval": "^0.1.1", - "@strudel.cycles/tone": "^0.1.1", - "react-codemirror6": "^1.1.0", + "@codemirror/lang-javascript": "^6.1.1", + "@strudel.cycles/core": "^0.3.2", + "@strudel.cycles/eval": "^0.3.2", + "@strudel.cycles/tone": "^0.3.3", + "@uiw/codemirror-themes": "^4.12.4", + "@uiw/react-codemirror": "^4.12.4", "react-hook-inview": "^4.5.0" }, "devDependencies": { "@types/react": "^17.0.2", "@types/react-dom": "^17.0.2", - "@vitejs/plugin-react": "^1.3.0", + "@vitejs/plugin-react": "^2.2.0", "autoprefixer": "^10.4.7", - "postcss": "^8.4.13", + "postcss": "^8.4.18", "react": "^17.0.2", "react-dom": "^17.0.2", "tailwindcss": "^3.0.24", - "vite": "^2.9.9" + "vite": "^3.2.2" }, "peerDependencies": { "react": "^17.0.2", "react-dom": "^17.0.2" } }, - "packages/react/node_modules/@types/react": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.45.tgz", - "integrity": "sha512-YfhQ22Lah2e3CHPsb93tRwIGNiSwkuz1/blk4e6QrWS0jQzCSNbGLtOEYhPg02W0yGTTmpajp7dCTbBAMN3qsg==", - "dev": true, + "packages/react/node_modules/@uiw/react-codemirror": { + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.12.4.tgz", + "integrity": "sha512-92TAvN2z5snPjPtJDLmbqrqsXXYFYlBnWraXZuDc1XGaw80tB26ZkdEW79CD2QM4Y9LhFIt+sauwlmiAVDs/5A==", "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "packages/react/node_modules/@types/react-dom": { - "version": "17.0.17", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.17.tgz", - "integrity": "sha512-VjnqEmqGnasQKV0CWLevqMTXBYG9GbwuE6x3VetERLh0cq2LTptFE73MrQi2S7GkKXCf2GgwItB/melLnxfnsg==", - "dev": true, - "dependencies": { - "@types/react": "^17" + "@babel/runtime": "^7.18.6", + "@codemirror/commands": "^6.1.0", + "@codemirror/state": "^6.1.1", + "@codemirror/theme-one-dark": "^6.0.0", + "@uiw/codemirror-extensions-basic-setup": "4.12.4", + "codemirror": "^6.0.0" + }, + "peerDependencies": { + "@babel/runtime": ">=7.11.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/theme-one-dark": ">=6.0.0", + "@codemirror/view": ">=6.0.0", + "codemirror": ">=6.0.0", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, "packages/react/node_modules/react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -11959,7 +12970,6 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dev": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -11971,26 +12981,58 @@ }, "packages/serial": { "name": "@strudel.cycles/serial", - "version": "0.1.0", + "version": "0.1.3", "license": "AGPL-3.0-or-later" }, + "packages/soundfonts": { + "name": "@strudel.cycles/soundfonts", + "version": "0.3.3", + "license": "AGPL-3.0-or-later", + "dependencies": { + "@strudel.cycles/core": "^0.3.2", + "@strudel.cycles/webaudio": "^0.3.3", + "sfumato": "^0.1.2", + "soundfont2": "^0.4.0" + }, + "devDependencies": { + "node-fetch": "^3.2.6" + } + }, + "packages/soundfonts/node_modules/node-fetch": { + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", + "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "packages/tonal": { "name": "@strudel.cycles/tonal", - "version": "0.1.1", + "version": "0.3.3", "license": "AGPL-3.0-or-later", "dependencies": { - "@strudel.cycles/core": "^0.1.0", + "@strudel.cycles/core": "^0.3.2", "@tonaljs/tonal": "^4.6.5", - "webmidi": "^3.0.15" + "chord-voicings": "^0.0.1", + "webmidi": "^3.0.21" } }, "packages/tonal/node_modules/webmidi": { - "version": "3.0.19", - "resolved": "https://registry.npmjs.org/webmidi/-/webmidi-3.0.19.tgz", - "integrity": "sha512-cCBrasUmTMa8bUN/kJxfTEJABP8wUgf1ZqTu84ix89yx94pg+uSVvIoUKv0/VqZnQXCGdCvFZy2E6euZ5LybmQ==", + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/webmidi/-/webmidi-3.0.21.tgz", + "integrity": "sha512-SStCLo099908jR0duYUTstVHNlKh9A/WvXIF5ED2ShGnE2MAy28UhrdzgjLsyDzOiBn8Od3ngT8g/MVa2TC5hg==", "dependencies": { - "@rollup/plugin-babel": "^5.3.0", - "djipevents": "^2.0.4" + "djipevents": "^2.0.5" }, "engines": { "node": ">=8.5" @@ -12001,69 +13043,103 @@ }, "packages/tone": { "name": "@strudel.cycles/tone", - "version": "0.1.1", + "version": "0.3.3", "license": "AGPL-3.0-or-later", "dependencies": { - "@strudel.cycles/core": "^0.1.0", - "@tonejs/piano": "^0.2.1", - "chord-voicings": "^0.0.1", + "@strudel.cycles/core": "^0.3.2", "tone": "^14.7.77" } }, + "packages/transpiler": { + "name": "@strudel.cycles/transpiler", + "version": "0.3.2", + "license": "AGPL-3.0-or-later", + "dependencies": { + "@strudel.cycles/core": "^0.3.2", + "acorn": "^8.8.1", + "escodegen": "^2.0.0", + "estree-walker": "^3.0.1" + } + }, + "packages/transpiler/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" + } + }, "packages/webaudio": { "name": "@strudel.cycles/webaudio", - "version": "0.1.1", + "version": "0.3.3", "license": "AGPL-3.0-or-later", "dependencies": { - "@strudel.cycles/core": "^0.1.0" + "@strudel.cycles/core": "^0.3.2" + } + }, + "packages/webdirt": { + "name": "@strudel.cycles/webdirt", + "version": "0.3.2", + "license": "AGPL-3.0-or-later", + "dependencies": { + "@strudel.cycles/core": "^0.3.2", + "WebDirt": "github:dktr0/WebDirt" } }, "packages/xen": { "name": "@strudel.cycles/xen", - "version": "0.1.1", + "version": "0.3.2", "license": "AGPL-3.0-or-later", "dependencies": { - "@strudel.cycles/core": "^0.1.0" + "@strudel.cycles/core": "^0.3.2" } } }, "dependencies": { "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==" + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", + "dev": true }, "@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", + "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -12074,143 +13150,174 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "@babel/generator": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", - "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.2.tgz", + "integrity": "sha512-SD75PMIK6i9H8G/tfGvB4KKl4Nw6Ssos9nGgYwxbgyTP0iX/Z55DveoH86rmUB/YHTQQ+ZC0F7xxaY8l2OF44Q==", + "dev": true, "requires": { - "@babel/types": "^7.17.10", - "@jridgewell/gen-mapping": "^0.1.0", + "@babel/types": "^7.20.2", + "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } } }, "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", + "dev": true, "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", + "@babel/compat-data": "^7.20.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "requires": { - "@babel/types": "^7.16.7" - } + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true }, "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" } }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", + "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" } }, "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true }, "@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, "requires": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.20.2" } }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true }, "@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", + "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" } }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -12219,6 +13326,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -12227,6 +13335,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -12237,6 +13346,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -12244,22 +13354,20 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -12267,324 +13375,227 @@ } }, "@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.2.tgz", + "integrity": "sha512-afk318kh2uKbo7BEj2QtEi8HVCGrwHUffrYDy7dgVcSa2j9lY3LDjPzcyGdpX7xgm35aWqvciZJ4WKmdF/SxYg==", + "dev": true }, "@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", + "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.19.0" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.16.7" + "@babel/plugin-transform-react-jsx": "^7.18.6" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", - "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-react-jsx-source": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", - "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.0.tgz", - "integrity": "sha512-etcO/ohMNaNA2UBdaXBBSX/3aEzFMRrVfaPv8Ptc0k+cWpWW0QFiGZ2XnVqQZI1Cf734LbPGmqBKWESfW4x/dQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" } }, "@babel/traverse": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", - "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", + "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.10", - "@babel/types": "^7.17.10", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.1", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", + "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, - "@codemirror/autocomplete": { - "version": "0.19.15", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-0.19.15.tgz", - "integrity": "sha512-GQWzvvuXxNUyaEk+5gawbAD8s51/v2Chb++nx0e2eGWrphWk42isBtzOMdc3DxrxrZtPZ55q2ldNp+6G8KJLIQ==", - "requires": { - "@codemirror/language": "^0.19.0", - "@codemirror/state": "^0.19.4", - "@codemirror/text": "^0.19.2", - "@codemirror/tooltip": "^0.19.12", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.0" - } + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, - "@codemirror/closebrackets": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/closebrackets/-/closebrackets-0.19.2.tgz", - "integrity": "sha512-ClMPzPcPP0eQiDcVjtVPl6OLxgdtZSYDazsvT0AKl70V1OJva0eHgl4/6kCW3RZ0pb2n34i9nJz4eXCmK+TYDA==", + "@codemirror/autocomplete": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.1.0.tgz", + "integrity": "sha512-wtO4O5WDyXhhCd4q4utDIDZxnQfmJ++3dGBCG9LMtI79+92OcA1DVk/n7BEupKmjIr8AzvptDz7YQ9ud6OkU+A==", "requires": { - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.2", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.44" + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" } }, "@codemirror/commands": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-0.19.8.tgz", - "integrity": "sha512-65LIMSGUGGpY3oH6mzV46YWRrgao6NmfJ+AuC7jNz3K5NPnH6GCV1H5I6SwOFyVbkiygGyd0EFwrWqywTBD1aw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.1.2.tgz", + "integrity": "sha512-sO3jdX1s0pam6lIdeSJLMN3DQ6mPEbM4yLvyKkdqtmd/UDwhXA5+AwFJ89rRXm6vTeOXBsE5cAmlos/t7MJdgg==", "requires": { - "@codemirror/language": "^0.19.0", - "@codemirror/matchbrackets": "^0.19.0", - "@codemirror/state": "^0.19.2", - "@codemirror/text": "^0.19.6", - "@codemirror/view": "^0.19.22", - "@lezer/common": "^0.15.0" - } - }, - "@codemirror/comment": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/comment/-/comment-0.19.1.tgz", - "integrity": "sha512-uGKteBuVWAC6fW+Yt8u27DOnXMT/xV4Ekk2Z5mRsiADCZDqYvryrJd6PLL5+8t64BVyocwQwNfz1UswYS2CtFQ==", - "requires": { - "@codemirror/state": "^0.19.9", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "@codemirror/fold": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@codemirror/fold/-/fold-0.19.4.tgz", - "integrity": "sha512-0SNSkRSOa6gymD6GauHa3sxiysjPhUC0SRVyTlvL52o0gz9GHdc8kNqNQskm3fBtGGOiSriGwF/kAsajRiGhVw==", - "requires": { - "@codemirror/gutter": "^0.19.0", - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.22" - } - }, - "@codemirror/gutter": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/gutter/-/gutter-0.19.9.tgz", - "integrity": "sha512-PFrtmilahin1g6uL27aG5tM/rqR9DZzZYZsIrCXA5Uc2OFTFqx4owuhoU9hqfYxHp5ovfvBwQ+txFzqS4vog6Q==", - "requires": { - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.23" - } - }, - "@codemirror/highlight": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@codemirror/highlight/-/highlight-0.19.8.tgz", - "integrity": "sha512-v/lzuHjrYR8MN2mEJcUD6fHSTXXli9C1XGYpr+ElV6fLBIUhMTNKR3qThp611xuWfXfwDxeL7ppcbkM/MzPV3A==", - "requires": { - "@codemirror/language": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.3", - "@codemirror/view": "^0.19.39", - "@lezer/common": "^0.15.0", - "style-mod": "^4.0.0" - } - }, - "@codemirror/history": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/history/-/history-0.19.2.tgz", - "integrity": "sha512-unhP4t3N2smzmHoo/Yio6ueWi+il8gm9VKrvi6wlcdGH5fOfVDNkmjHQ495SiR+EdOG35+3iNebSPYww0vN7ow==", - "requires": { - "@codemirror/state": "^0.19.2", - "@codemirror/view": "^0.19.0" + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" } }, "@codemirror/lang-javascript": { - "version": "0.19.7", - "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-0.19.7.tgz", - "integrity": "sha512-DL9f3JLqOEHH9cIwEqqjnP5bkjdVXeECksLtV+/MbPm+l4H+AG+PkwZaJQ2oR1GfPZKh8MVSIE94aGWNkJP8WQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.1.1.tgz", + "integrity": "sha512-F4+kiuC5d5dUSJmff96tJQwpEXs/tX/4bapMRnZWW6bHKK1Fx6MunTzopkCUWRa9bF87GPmb9m7Qtg7Yv8f3uQ==", "requires": { - "@codemirror/autocomplete": "^0.19.0", - "@codemirror/highlight": "^0.19.7", - "@codemirror/language": "^0.19.0", - "@codemirror/lint": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/javascript": "^0.15.1" + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/javascript": "^1.0.0" } }, "@codemirror/language": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-0.19.10.tgz", - "integrity": "sha512-yA0DZ3RYn2CqAAGW62VrU8c4YxscMQn45y/I9sjBlqB1e2OTQLg4CCkMBuMSLXk4xaqjlsgazeOQWaJQOKfV8Q==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.2.1.tgz", + "integrity": "sha512-MC3svxuvIj0MRpFlGHxLS6vPyIdbTr2KKPEW46kCoCXw2ktb4NTkpkPBI/lSP/FoNXLCBJ0mrnUi1OoZxtpW1Q==", "requires": { - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.5", - "@lezer/lr": "^0.15.0" + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" } }, "@codemirror/lint": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-0.19.6.tgz", - "integrity": "sha512-Pbw1Y5kHVs2J+itQ0uez3dI4qY9ApYVap7eNfV81x1/3/BXgBkKfadaw0gqJ4h4FDG7OnJwb0VbPsjJQllHjaA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.0.0.tgz", + "integrity": "sha512-nUUXcJW1Xp54kNs+a1ToPLK8MadO0rMTnJB8Zk4Z8gBdrN0kqV7uvUraU/T2yqg+grDNR38Vmy/MrhQN/RgwiA==", "requires": { - "@codemirror/gutter": "^0.19.4", - "@codemirror/panel": "^0.19.0", - "@codemirror/rangeset": "^0.19.1", - "@codemirror/state": "^0.19.4", - "@codemirror/tooltip": "^0.19.16", - "@codemirror/view": "^0.19.22", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", "crelt": "^1.0.5" } }, - "@codemirror/matchbrackets": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@codemirror/matchbrackets/-/matchbrackets-0.19.4.tgz", - "integrity": "sha512-VFkaOKPNudAA5sGP1zikRHCEKU0hjYmkKpr04pybUpQvfTvNJXlReCyP0rvH/1iEwAGPL990ZTT+QrLdu4MeEA==", - "requires": { - "@codemirror/language": "^0.19.0", - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0", - "@lezer/common": "^0.15.0" - } - }, - "@codemirror/panel": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@codemirror/panel/-/panel-0.19.1.tgz", - "integrity": "sha512-sYeOCMA3KRYxZYJYn5PNlt9yNsjy3zTNTrbYSfVgjgL9QomIVgOJWPO5hZ2sTN8lufO6lw0vTBsIPL9MSidmBg==", - "requires": { - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0" - } - }, - "@codemirror/rangeset": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/rangeset/-/rangeset-0.19.9.tgz", - "integrity": "sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ==", - "requires": { - "@codemirror/state": "^0.19.0" - } - }, - "@codemirror/rectangular-selection": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@codemirror/rectangular-selection/-/rectangular-selection-0.19.2.tgz", - "integrity": "sha512-AXK/p5eGwFJ9GJcLfntqN4dgY+XiIF7eHfXNQJX5HhQLSped2wJE6WuC1rMEaOlcpOqlb9mrNi/ZdUjSIj9mbA==", - "requires": { - "@codemirror/state": "^0.19.0", - "@codemirror/text": "^0.19.4", - "@codemirror/view": "^0.19.48" - } - }, "@codemirror/search": { - "version": "0.19.10", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-0.19.10.tgz", - "integrity": "sha512-qjubm69HJixPBWzI6HeEghTWOOD8NXiHOTRNvdizqs8xWRuFChq9zkjD3XiAJ7GXSTzCuQJnAP9DBBGCLq4ZIA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.2.2.tgz", + "integrity": "sha512-2pWY599zXk+lSoJ2iv9EuTO4gB7lhgBPLPwFb/zTbimFH4NmZSaKzJSV51okjABZ7/Rj0DYy5klWbIgaJh2LoQ==", "requires": { - "@codemirror/panel": "^0.19.0", - "@codemirror/rangeset": "^0.19.0", - "@codemirror/state": "^0.19.3", - "@codemirror/text": "^0.19.0", - "@codemirror/view": "^0.19.34", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", "crelt": "^1.0.5" } }, "@codemirror/state": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-0.19.9.tgz", - "integrity": "sha512-psOzDolKTZkx4CgUqhBQ8T8gBc0xN5z4gzed109aF6x7D7umpDRoimacI/O6d9UGuyl4eYuDCZmDFr2Rq7aGOw==", - "requires": { - "@codemirror/text": "^0.19.0" - } + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.1.tgz", + "integrity": "sha512-2s+aXsxmAwnR3Rd+JDHPG/1lw0YsA9PEwl7Re88gHJHGfxyfEzKBmsN4rr53RyPIR4lzbbhJX0DCq0WlqlBIRw==" }, - "@codemirror/text": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@codemirror/text/-/text-0.19.6.tgz", - "integrity": "sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA==" - }, - "@codemirror/tooltip": { - "version": "0.19.16", - "resolved": "https://registry.npmjs.org/@codemirror/tooltip/-/tooltip-0.19.16.tgz", - "integrity": "sha512-zxKDHryUV5/RS45AQL+wOeN+i7/l81wK56OMnUPoTSzCWNITfxHn7BToDsjtrRKbzHqUxKYmBnn/4hPjpZ4WJQ==", + "@codemirror/theme-one-dark": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.0.0.tgz", + "integrity": "sha512-jTCfi1I8QT++3m21Ui6sU8qwu3F/hLv161KLxfvkV1cYWSBwyUanmQFs89ChobQjBHi2x7s2k71wF9WYvE8fdw==", "requires": { - "@codemirror/state": "^0.19.0", - "@codemirror/view": "^0.19.0" + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/highlight": "^1.0.0" } }, "@codemirror/view": { - "version": "0.19.48", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-0.19.48.tgz", - "integrity": "sha512-0eg7D2Nz4S8/caetCTz61rK0tkHI17V/d15Jy0kLOT8dTLGGNJUponDnW28h2B6bERmPlVHKh8MJIr5OCp1nGw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.2.0.tgz", + "integrity": "sha512-3emW1symh+GoteFMBPsltjmF790U/trouLILATh3JodbF/z98HvcQh2g3+H6dfNIHx16uNonsAF4mNzVr1TJNA==", "requires": { - "@codemirror/rangeset": "^0.19.5", - "@codemirror/state": "^0.19.3", - "@codemirror/text": "^0.19.0", + "@codemirror/state": "^6.0.0", "style-mod": "^4.0.0", "w3c-keyname": "^2.2.4" } }, + "@esbuild/android-arm": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", + "integrity": "sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz", + "integrity": "sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==", + "dev": true, + "optional": true + }, "@gar/promisify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", - "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, "@hutson/parse-repository-url": { @@ -12593,37 +13604,48 @@ "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true }, "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@lerna/add": { @@ -13086,58 +14108,6 @@ "npm-package-arg": "^8.1.0", "npm-registry-fetch": "^9.0.0", "npmlog": "^4.1.2" - }, - "dependencies": { - "make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - } - }, - "npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", - "dev": true, - "requires": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } - }, - "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - } - } } }, "@lerna/npm-install": { @@ -13331,58 +14301,6 @@ "p-pipe": "^3.1.0", "pacote": "^11.2.6", "semver": "^7.3.4" - }, - "dependencies": { - "make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - } - }, - "npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", - "dev": true, - "requires": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } - }, - "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - } - } } }, "@lerna/pulse-till-done": { @@ -13550,24 +14468,33 @@ } }, "@lezer/common": { - "version": "0.15.12", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", - "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.0.tgz", + "integrity": "sha512-ohydQe+Hb+w4oMDvXzs8uuJd2NoA3D8YDcLiuDsLqH+yflDTPEpgCsWI3/6rH5C3BAedtH1/R51dxENldQceEA==" + }, + "@lezer/highlight": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.0.0.tgz", + "integrity": "sha512-nsCnNtim90UKsB5YxoX65v3GEIw3iCHw9RM2DtdgkiqAbKh9pCdvi8AWNwkYf10Lu6fxNhXPpkpHbW6mihhvJA==", + "requires": { + "@lezer/common": "^1.0.0" + } }, "@lezer/javascript": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-0.15.3.tgz", - "integrity": "sha512-8jA2NpOfpWwSPZxRhd9BxK2ZPvGd7nLE3LFTJ5AbMhXAzMHeMjneV6GEVd7dAIee85dtap0jdb6bgOSO0+lfwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.0.2.tgz", + "integrity": "sha512-IjOVeIRhM8IuafWNnk+UzRz7p4/JSOKBNINLYLsdSGuJS9Ju7vFdc82AlTt0jgtV5D8eBZf4g0vK4d3ttBNz7A==", "requires": { - "@lezer/lr": "^0.15.0" + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" } }, "@lezer/lr": { - "version": "0.15.8", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", - "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.2.1.tgz", + "integrity": "sha512-RpHRs+Q+5tPsXtobSfSeRFRAnTRD0e4bApDvo74O+JiaWq9812x5S8WgftNX67owdaTQXCB5E8XZGALo4Wt77A==", "requires": { - "@lezer/common": "^0.15.0" + "@lezer/common": "^1.0.0" } }, "@nodelib/fs.scandir": { @@ -13603,9 +14530,9 @@ "dev": true }, "@npmcli/fs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.0.tgz", - "integrity": "sha512-VhP1qZLXcrXRIaPoqb4YA55JQxLNF3jNR4T55IdOJa3+IFJKNYHtPvtXx8slmeMavj37vCzCfrqQM1vWLsYKLA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, "requires": { "@gar/promisify": "^1.0.1", @@ -13673,6 +14600,35 @@ "@npmcli/promise-spawn": "^1.3.2", "node-gyp": "^7.1.0", "read-package-json-fast": "^2.0.1" + }, + "dependencies": { + "node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + } } }, "@octokit/auth-token": { @@ -13722,9 +14678,9 @@ } }, "@octokit/openapi-types": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", - "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", "dev": true }, "@octokit/plugin-enterprise-rest": { @@ -13734,12 +14690,12 @@ "dev": true }, "@octokit/plugin-paginate-rest": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", - "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "version": "2.21.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", + "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", "dev": true, "requires": { - "@octokit/types": "^6.34.0" + "@octokit/types": "^6.40.0" } }, "@octokit/plugin-request-log": { @@ -13750,12 +14706,12 @@ "requires": {} }, "@octokit/plugin-rest-endpoint-methods": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", - "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", + "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", "dev": true, "requires": { - "@octokit/types": "^6.34.0", + "@octokit/types": "^6.39.0", "deprecation": "^2.3.1" } }, @@ -13797,39 +14753,25 @@ } }, "@octokit/types": { - "version": "6.34.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", - "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", "dev": true, "requires": { - "@octokit/openapi-types": "^11.2.0" + "@octokit/openapi-types": "^12.11.0" } }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - } + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true }, "@strudel.cycles/core": { "version": "file:packages/core", "requires": { "bjork": "^0.0.1", - "fraction.js": "^4.2.0", - "mocha": "^9.2.2" + "fraction.js": "^4.2.0" } }, "@strudel.cycles/embed": { @@ -13838,83 +14780,88 @@ "@strudel.cycles/eval": { "version": "file:packages/eval", "requires": { - "@strudel.cycles/core": "^0.1.0", + "@strudel.cycles/core": "^0.3.2", "estraverse": "^5.3.0", - "shift-ast": "^6.1.0", - "shift-codegen": "^7.0.3", - "shift-parser": "^7.0.3", - "shift-spec": "^2018.0.2", + "shift-ast": "^7.0.0", + "shift-codegen": "^8.1.0", + "shift-parser": "^8.0.0", + "shift-spec": "^2019.0.0", "shift-traverser": "^1.0.0" } }, "@strudel.cycles/midi": { "version": "file:packages/midi", "requires": { - "@strudel.cycles/tone": "^0.1.1", + "@strudel.cycles/tone": "^0.3.3", "tone": "^14.7.77", - "webmidi": "^2.5.2" + "webmidi": "^3.0.21" + }, + "dependencies": { + "webmidi": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/webmidi/-/webmidi-3.0.21.tgz", + "integrity": "sha512-SStCLo099908jR0duYUTstVHNlKh9A/WvXIF5ED2ShGnE2MAy28UhrdzgjLsyDzOiBn8Od3ngT8g/MVa2TC5hg==", + "requires": { + "djipevents": "^2.0.5", + "jzz": "^1.4.5" + } + } } }, "@strudel.cycles/mini": { "version": "file:packages/mini", "requires": { - "@strudel.cycles/core": "^0.1.0", - "@strudel.cycles/eval": "^0.1.1", - "@strudel.cycles/tone": "^0.1.1" + "@strudel.cycles/core": "^0.3.2", + "@strudel.cycles/eval": "^0.3.2", + "@strudel.cycles/tone": "^0.3.3", + "peggy": "^2.0.1" } }, "@strudel.cycles/osc": { "version": "file:packages/osc", "requires": { - "osc-js": "^2.3.2", + "osc-js": "^2.4.0", "pkg": "^5.7.0" } }, "@strudel.cycles/react": { "version": "file:packages/react", "requires": { - "@codemirror/lang-javascript": "^0.19.0", - "@strudel.cycles/core": "*", - "@strudel.cycles/eval": "^0.1.1", - "@strudel.cycles/tone": "^0.1.1", + "@codemirror/lang-javascript": "^6.1.1", + "@strudel.cycles/core": "^0.3.2", + "@strudel.cycles/eval": "^0.3.2", + "@strudel.cycles/tone": "^0.3.3", "@types/react": "^17.0.2", "@types/react-dom": "^17.0.2", - "@vitejs/plugin-react": "^1.3.0", + "@uiw/codemirror-themes": "^4.12.4", + "@uiw/react-codemirror": "^4.12.4", + "@vitejs/plugin-react": "^2.2.0", "autoprefixer": "^10.4.7", - "postcss": "^8.4.13", + "postcss": "^8.4.18", "react": "^17.0.2", - "react-codemirror6": "^1.1.0", "react-dom": "^17.0.2", "react-hook-inview": "^4.5.0", "tailwindcss": "^3.0.24", - "vite": "^2.9.9" + "vite": "^3.2.2" }, "dependencies": { - "@types/react": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.45.tgz", - "integrity": "sha512-YfhQ22Lah2e3CHPsb93tRwIGNiSwkuz1/blk4e6QrWS0jQzCSNbGLtOEYhPg02W0yGTTmpajp7dCTbBAMN3qsg==", - "dev": true, + "@uiw/react-codemirror": { + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.12.4.tgz", + "integrity": "sha512-92TAvN2z5snPjPtJDLmbqrqsXXYFYlBnWraXZuDc1XGaw80tB26ZkdEW79CD2QM4Y9LhFIt+sauwlmiAVDs/5A==", "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "17.0.17", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.17.tgz", - "integrity": "sha512-VjnqEmqGnasQKV0CWLevqMTXBYG9GbwuE6x3VetERLh0cq2LTptFE73MrQi2S7GkKXCf2GgwItB/melLnxfnsg==", - "dev": true, - "requires": { - "@types/react": "^17" + "@babel/runtime": "^7.18.6", + "@codemirror/commands": "^6.1.0", + "@codemirror/state": "^6.1.1", + "@codemirror/theme-one-dark": "^6.0.0", + "@uiw/codemirror-extensions-basic-setup": "4.12.4", + "codemirror": "^6.0.0" } }, "react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -13924,7 +14871,6 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -13936,21 +14882,44 @@ "@strudel.cycles/serial": { "version": "file:packages/serial" }, + "@strudel.cycles/soundfonts": { + "version": "file:packages/soundfonts", + "requires": { + "@strudel.cycles/core": "^0.3.2", + "@strudel.cycles/webaudio": "^0.3.3", + "node-fetch": "^3.2.6", + "sfumato": "^0.1.2", + "soundfont2": "^0.4.0" + }, + "dependencies": { + "node-fetch": { + "version": "3.2.10", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.2.10.tgz", + "integrity": "sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + } + } + }, "@strudel.cycles/tonal": { "version": "file:packages/tonal", "requires": { - "@strudel.cycles/core": "^0.1.0", + "@strudel.cycles/core": "^0.3.2", "@tonaljs/tonal": "^4.6.5", - "webmidi": "^3.0.15" + "chord-voicings": "^0.0.1", + "webmidi": "^3.0.21" }, "dependencies": { "webmidi": { - "version": "3.0.19", - "resolved": "https://registry.npmjs.org/webmidi/-/webmidi-3.0.19.tgz", - "integrity": "sha512-cCBrasUmTMa8bUN/kJxfTEJABP8wUgf1ZqTu84ix89yx94pg+uSVvIoUKv0/VqZnQXCGdCvFZy2E6euZ5LybmQ==", + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/webmidi/-/webmidi-3.0.21.tgz", + "integrity": "sha512-SStCLo099908jR0duYUTstVHNlKh9A/WvXIF5ED2ShGnE2MAy28UhrdzgjLsyDzOiBn8Od3ngT8g/MVa2TC5hg==", "requires": { - "@rollup/plugin-babel": "^5.3.0", - "djipevents": "^2.0.4", + "djipevents": "^2.0.5", "jzz": "^1.4.5" } } @@ -13959,22 +14928,43 @@ "@strudel.cycles/tone": { "version": "file:packages/tone", "requires": { - "@strudel.cycles/core": "^0.1.0", - "@tonejs/piano": "^0.2.1", - "chord-voicings": "^0.0.1", + "@strudel.cycles/core": "^0.3.2", "tone": "^14.7.77" } }, + "@strudel.cycles/transpiler": { + "version": "file:packages/transpiler", + "requires": { + "@strudel.cycles/core": "^0.3.2", + "acorn": "^8.8.1", + "escodegen": "^2.0.0", + "estree-walker": "^3.0.1" + }, + "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + } + } + }, "@strudel.cycles/webaudio": { "version": "file:packages/webaudio", "requires": { - "@strudel.cycles/core": "^0.1.0" + "@strudel.cycles/core": "^0.3.2" + } + }, + "@strudel.cycles/webdirt": { + "version": "file:packages/webdirt", + "requires": { + "@strudel.cycles/core": "^0.3.2", + "WebDirt": "github:dktr0/WebDirt" } }, "@strudel.cycles/xen": { "version": "file:packages/xen", "requires": { - "@strudel.cycles/core": "^0.1.0" + "@strudel.cycles/core": "^0.3.2" } }, "@tonaljs/abc-notation": { @@ -14176,41 +15166,68 @@ "@tonaljs/time-signature": "^4.6.2" } }, - "@tonejs/piano": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@tonejs/piano/-/piano-0.2.1.tgz", - "integrity": "sha512-JIwZ91RSFR7Rt16o7cA7O7G30wenFl0lY5yhTsuwZmn48MO9KV+X7kyXE98Bqvs/dCBVg9PoAJ1GKMabPOW4yQ==", - "requires": { - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "optional": true, + "peer": true + }, + "@types/chai": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", "dev": true }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + "@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true }, "@types/linkify-it": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", + "dev": true }, "@types/markdown-it": { "version": "12.2.3", "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dev": true, "requires": { "@types/linkify-it": "*", "@types/mdurl": "*" @@ -14219,7 +15236,8 @@ "@types/mdurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "dev": true }, "@types/minimatch": { "version": "3.0.5", @@ -14233,6 +15251,12 @@ "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, + "@types/node": { + "version": "18.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz", + "integrity": "sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg==", + "dev": true + }, "@types/normalize-package-data": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", @@ -14251,6 +15275,34 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", "dev": true }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true, + "optional": true, + "peer": true + }, + "@types/react": { + "version": "17.0.52", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.52.tgz", + "integrity": "sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "17.0.18", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.18.tgz", + "integrity": "sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw==", + "dev": true, + "requires": { + "@types/react": "^17" + } + }, "@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", @@ -14263,46 +15315,62 @@ "integrity": "sha512-sfS0A5IryqmBrUpcGPipEPeFdpqmZzP6b6lZFxHKgz5n2Vhzh4yJ5P2TvoDUhDjqJyv0Y25ng0Qodgo2Vu08ug==", "optional": true }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true + "@uiw/codemirror-extensions-basic-setup": { + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.12.4.tgz", + "integrity": "sha512-owSCcRBtS2wYjxgBFkuIjfjWJHsR8AxgsQtqPpHB/6U0zCLuzKS/OM5ZRS2T3rdOizg0hCPztVvmshWeKjF+qw==", + "requires": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "@uiw/codemirror-themes": { + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/@uiw/codemirror-themes/-/codemirror-themes-4.12.4.tgz", + "integrity": "sha512-ekySMFlXaJ4u0TCz/caHG8HqJPT0+viUA2ZQ4yZ+F1z2Lk9HgMS/1YfRj8vHuEUPNXc9Fsy5qxwTp7I1hEanEg==", + "requires": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } }, "@vitejs/plugin-react": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.3.2.tgz", - "integrity": "sha512-aurBNmMo0kz1O4qRoY+FM4epSA39y3ShWGuqfLRA/3z0oEJAdtoSfgA3aO98/PCCHAqMaduLxIxErWrVKIFzXA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.2.0.tgz", + "integrity": "sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==", "dev": true, "requires": { - "@babel/core": "^7.17.10", - "@babel/plugin-transform-react-jsx": "^7.17.3", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-jsx-self": "^7.16.7", - "@babel/plugin-transform-react-jsx-source": "^7.16.7", - "@rollup/pluginutils": "^4.2.1", - "react-refresh": "^0.13.0", - "resolve": "^1.22.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - } + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-jsx": "^7.19.0", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.26.7", + "react-refresh": "^0.14.0" } }, + "@vitest/ui": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.21.1.tgz", + "integrity": "sha512-e+AZdMG6NvrYhxB99LGxW1GkoTpqSDPKpL+wghsApWhocNwALBOBzvgsDr/WN6D6YWRXf18rsJ1kY/KaIspRdg==", + "dev": true, + "requires": { + "sirv": "^2.0.2" + } + }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true, + "optional": true, + "peer": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -14315,6 +15383,18 @@ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, "acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", @@ -14335,7 +15415,7 @@ "add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", "dev": true }, "agent-base": { @@ -14348,9 +15428,9 @@ } }, "agentkeepalive": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.0.tgz", - "integrity": "sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -14380,11 +15460,6 @@ "uri-js": "^4.2.2" } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, "ansi-escape-sequences": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz", @@ -14437,9 +15512,9 @@ } }, "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "are-we-there-yet": { @@ -14453,15 +15528,16 @@ } }, "arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "array-back": { "version": "6.2.2", @@ -14478,7 +15554,7 @@ "array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true }, "array-union": { @@ -14493,10 +15569,23 @@ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true }, + "array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true }, "asap": { @@ -14517,7 +15606,13 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, "async": { @@ -14551,13 +15646,13 @@ } }, "autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "dev": true, "requires": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -14567,7 +15662,7 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true }, "aws4": { @@ -14579,7 +15674,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "base64-js": { "version": "1.5.1", @@ -14590,24 +15686,16 @@ "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, "requires": { "tweetnacl": "^0.14.3" } }, - "beeper": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-2.1.0.tgz", - "integrity": "sha512-85+CcymhlP0jM4fs4ZMiMRl58VthoN9NRdvi+knXiQpP2UggkSre+A9rOZ0c2g2Vh+pEF5ZAlT+k8dsJNoanAA==", - "requires": { - "yoctodelay": "^1.1.0" - } - }, "before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true }, "binary-extensions": { @@ -14648,12 +15736,14 @@ "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14668,22 +15758,24 @@ "fill-range": "^7.0.1" } }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true, + "optional": true, + "peer": true }, "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" } }, "buffer": { @@ -14705,13 +15797,13 @@ "builtins": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", "dev": true }, "byline": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", + "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", "dev": true }, "byte-size": { @@ -14720,6 +15812,34 @@ "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", "dev": true }, + "c8": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", + "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "dependencies": { + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, "cacache": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", @@ -14782,9 +15902,9 @@ "dev": true }, "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "camelcase-css": { @@ -14804,12 +15924,6 @@ "quick-lru": "^4.0.1" }, "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "quick-lru": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", @@ -14819,9 +15933,10 @@ } }, "caniuse-lite": { - "version": "1.0.30001341", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", - "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==" + "version": "1.0.30001430", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz", + "integrity": "sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg==", + "dev": true }, "caseless": { "version": "0.12.0", @@ -14833,10 +15948,26 @@ "version": "0.9.0", "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dev": true, "requires": { "lodash": "^4.17.15" } }, + "chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -14845,17 +15976,6 @@ "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "chardet": { @@ -14864,6 +15984,12 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -14930,31 +16056,12 @@ "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } } }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true }, "clone-deep": { @@ -14991,9 +16098,23 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true }, + "codemirror": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", + "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "requires": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, "collect-all": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.4.tgz", @@ -15153,7 +16274,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "2.0.0", @@ -15210,7 +16332,7 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "conventional-changelog-angular": { @@ -15320,6 +16442,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, "requires": { "safe-buffer": "~5.1.1" }, @@ -15327,7 +16450,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true } } }, @@ -15366,12 +16490,49 @@ "which": "^2.0.1" } }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "optional": true, + "peer": true + }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, + "optional": true, + "peer": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "optional": true, + "peer": true + } + } + }, "csstype": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", @@ -15387,12 +16548,64 @@ "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, + "data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true + }, + "data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "optional": true, + "peer": true + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, "dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -15403,6 +16616,7 @@ "version": "4.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, "requires": { "ms": "2.1.2" }, @@ -15410,67 +16624,70 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, "debuglog": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", "dev": true }, "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "requires": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" }, "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true } } }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true, + "optional": true, + "peer": true + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", "dev": true }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -15480,31 +16697,37 @@ "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==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "requires": { "clone": "^1.0.2" } }, + "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==", + "dev": true + }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", "dev": true }, "delayed-stream": { @@ -15516,13 +16739,13 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true }, "deprecation": { @@ -15544,20 +16767,20 @@ "dev": true }, "detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dev": true, "requires": { - "acorn-node": "^1.6.1", + "acorn-node": "^1.8.2", "defined": "^1.0.0", - "minimist": "^1.1.1" + "minimist": "^1.2.6" } }, "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, "requires": { "asap": "^2.0.0", @@ -15570,12 +16793,6 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -15586,12 +16803,11 @@ } }, "djipevents": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/djipevents/-/djipevents-2.0.4.tgz", - "integrity": "sha512-ozscQ0QQaPIqx0gEMI6BIEMGWlEVuFZb+R3ER0TYrCugdEipAb38ddAXmytMOM7bnvToAzZU0RItaHcBSi6TYA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/djipevents/-/djipevents-2.0.6.tgz", + "integrity": "sha512-2vS7/OVdqocBAIVPbxhk36swE4HnjUL1muoibrkoaCaEAEAF/ww8QbYm55PqlzMp51pvD01wHr/CkZmKZdrI/g==", "requires": { - "@babel/runtime": "^7.16.3", - "gulp-jsdoc3": "^3.0.0" + "@babel/runtime": "^7.17.9" } }, "dlv": { @@ -15620,56 +16836,24 @@ "walk-back": "^5.1.0" } }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "optional": true, + "peer": true, "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "webidl-conversions": "^7.0.0" }, "dependencies": { - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "requires": { - "domelementtype": "^2.0.1" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "dependencies": { - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "optional": true, + "peer": true } } }, @@ -15691,7 +16875,7 @@ "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, "requires": { "jsbn": "~0.1.0", @@ -15699,9 +16883,10 @@ } }, "electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==" + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true }, "email-addresses": { "version": "3.1.0", @@ -15737,7 +16922,8 @@ "entities": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true }, "env-paths": { "version": "2.2.1", @@ -15767,33 +16953,43 @@ } }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" } }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -15806,189 +17002,191 @@ } }, "esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.13.tgz", + "integrity": "sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==", "dev": true, "requires": { - "esbuild-android-64": "0.14.39", - "esbuild-android-arm64": "0.14.39", - "esbuild-darwin-64": "0.14.39", - "esbuild-darwin-arm64": "0.14.39", - "esbuild-freebsd-64": "0.14.39", - "esbuild-freebsd-arm64": "0.14.39", - "esbuild-linux-32": "0.14.39", - "esbuild-linux-64": "0.14.39", - "esbuild-linux-arm": "0.14.39", - "esbuild-linux-arm64": "0.14.39", - "esbuild-linux-mips64le": "0.14.39", - "esbuild-linux-ppc64le": "0.14.39", - "esbuild-linux-riscv64": "0.14.39", - "esbuild-linux-s390x": "0.14.39", - "esbuild-netbsd-64": "0.14.39", - "esbuild-openbsd-64": "0.14.39", - "esbuild-sunos-64": "0.14.39", - "esbuild-windows-32": "0.14.39", - "esbuild-windows-64": "0.14.39", - "esbuild-windows-arm64": "0.14.39" + "@esbuild/android-arm": "0.15.13", + "@esbuild/linux-loong64": "0.15.13", + "esbuild-android-64": "0.15.13", + "esbuild-android-arm64": "0.15.13", + "esbuild-darwin-64": "0.15.13", + "esbuild-darwin-arm64": "0.15.13", + "esbuild-freebsd-64": "0.15.13", + "esbuild-freebsd-arm64": "0.15.13", + "esbuild-linux-32": "0.15.13", + "esbuild-linux-64": "0.15.13", + "esbuild-linux-arm": "0.15.13", + "esbuild-linux-arm64": "0.15.13", + "esbuild-linux-mips64le": "0.15.13", + "esbuild-linux-ppc64le": "0.15.13", + "esbuild-linux-riscv64": "0.15.13", + "esbuild-linux-s390x": "0.15.13", + "esbuild-netbsd-64": "0.15.13", + "esbuild-openbsd-64": "0.15.13", + "esbuild-sunos-64": "0.15.13", + "esbuild-windows-32": "0.15.13", + "esbuild-windows-64": "0.15.13", + "esbuild-windows-arm64": "0.15.13" } }, "esbuild-android-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", - "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz", + "integrity": "sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==", "dev": true, "optional": true }, "esbuild-android-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", - "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz", + "integrity": "sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz", + "integrity": "sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", - "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz", + "integrity": "sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", - "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz", + "integrity": "sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", - "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz", + "integrity": "sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", - "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz", + "integrity": "sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", - "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz", + "integrity": "sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", - "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz", + "integrity": "sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", - "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz", + "integrity": "sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", - "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz", + "integrity": "sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", - "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz", + "integrity": "sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==", "dev": true, "optional": true }, "esbuild-linux-riscv64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", - "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz", + "integrity": "sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==", "dev": true, "optional": true }, "esbuild-linux-s390x": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", - "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz", + "integrity": "sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", - "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz", + "integrity": "sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", - "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz", + "integrity": "sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", - "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz", + "integrity": "sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==", "dev": true, "optional": true }, "esbuild-windows-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", - "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz", + "integrity": "sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", - "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz", + "integrity": "sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", - "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz", + "integrity": "sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==", "dev": true, "optional": true }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "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==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, "requires": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -16000,8 +17198,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "estraverse": { "version": "5.3.0", @@ -16009,9 +17206,9 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.1.tgz", + "integrity": "sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==" }, "esutils": { "version": "2.0.3", @@ -16084,7 +17281,7 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true }, "fast-deep-equal": { @@ -16094,9 +17291,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -16115,8 +17312,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fastq": { "version": "1.13.0", @@ -16127,6 +17323,16 @@ "reusify": "^1.0.4" } }, + "fetch-blob": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.5.tgz", + "integrity": "sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg==", + "dev": true, + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -16134,14 +17340,6 @@ "dev": true, "requires": { "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, "file-set": { @@ -16191,7 +17389,7 @@ "filter-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", "dev": true }, "find-cache-dir": { @@ -16232,16 +17430,20 @@ "path-exists": "^4.0.0" } }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + } }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true }, "form-data": { @@ -16255,6 +17457,15 @@ "mime-types": "^2.1.12" } }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "requires": { + "fetch-blob": "^3.1.2" + } + }, "fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", @@ -16306,12 +17517,14 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "optional": true }, "function-bind": { @@ -16320,10 +17533,28 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "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==", + "dev": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", "dev": true, "requires": { "aproba": "^1.0.3", @@ -16339,13 +17570,39 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -16356,7 +17613,8 @@ "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true }, "get-caller-file": { "version": "2.0.5", @@ -16364,15 +17622,21 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true + }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.3" } }, "get-pkg-repo": { @@ -16424,7 +17688,7 @@ "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, "requires": { "assert-plus": "^1.0.0" @@ -16511,7 +17775,7 @@ "git-remote-origin-url": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, "requires": { "gitconfiglocal": "^1.0.0", @@ -16558,7 +17822,7 @@ "gitconfiglocal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, "requires": { "ini": "^1.3.2" @@ -16574,6 +17838,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16595,7 +17860,8 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true }, "globby": { "version": "11.1.0", @@ -16617,45 +17883,6 @@ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "gulp-jsdoc3": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-jsdoc3/-/gulp-jsdoc3-3.0.0.tgz", - "integrity": "sha512-rE2jAwCPA8XFi9g4V3Z3LPhZNjxuMTIYQVMjdqZAQpRfJITLVaUK3xfmiiNTMc7j+fT7pL8Q5yj7ZPRdwCJWNg==", - "requires": { - "ansi-colors": "^4.1.1", - "beeper": "^2.0.0", - "debug": "^4.1.1", - "fancy-log": "^1.3.3", - "ink-docstrap": "^1.3.2", - "jsdoc": "^3.6.3", - "map-stream": "0.0.7", - "tmp": "0.1.0" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "requires": { - "rimraf": "^2.6.3" - } - } - } - }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -16669,10 +17896,37 @@ "wordwrap": "^1.0.0" } }, + "happy-dom": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-6.0.4.tgz", + "integrity": "sha512-b+ID23Ms0BY08UNLymsOMG7EI2jSlwEt4cbJs938GZfeNAg+fqgkSO3TokQMgSOFoHznpjWmpVjBUL5boJ9PWw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "css.escape": "^1.5.1", + "he": "^1.2.0", + "node-fetch": "^2.x.x", + "sync-request": "^6.1.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "optional": true, + "peer": true + } + } + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true }, "har-validator": { @@ -16701,9 +17955,9 @@ } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, "has-flag": { @@ -16712,6 +17966,15 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "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==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -16730,14 +17993,16 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true + "dev": true, + "optional": true, + "peer": true }, "hosted-git-info": { "version": "4.1.0", @@ -16748,15 +18013,51 @@ "lru-cache": "^6.0.0" } }, - "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "optional": true, + "peer": true, "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" + "whatwg-encoding": "^2.0.0" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + } } }, "http-cache-semantics": { @@ -16766,20 +18067,43 @@ "dev": true }, "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "optional": true, + "peer": true, "requires": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/node": "^10.0.3" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true, + "optional": true, + "peer": true + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -16788,9 +18112,9 @@ } }, "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "requires": { "agent-base": "6", @@ -16806,7 +18130,7 @@ "humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "requires": { "ms": "^2.0.0" @@ -16874,7 +18198,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "indent-string": { @@ -16893,6 +18217,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -16901,7 +18226,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.8", @@ -16938,15 +18264,6 @@ } } }, - "ink-docstrap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ink-docstrap/-/ink-docstrap-1.3.2.tgz", - "integrity": "sha512-STx5orGQU1gfrkoI/fMU7lX6CSP7LBGO10gXNgOZhwKhUqbtNjCkYSewJtNnLmWP1tAGN6oyEpG1HFPw5vpa5Q==", - "requires": { - "moment": "^2.14.1", - "sanitize-html": "^1.13.0" - } - }, "inquirer": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", @@ -16966,25 +18283,6 @@ "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } } }, "internal-slot": { @@ -17009,15 +18307,15 @@ } }, "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "is-bigint": { @@ -17049,9 +18347,9 @@ } }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-ci": { @@ -17064,9 +18362,9 @@ } }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "requires": { "has": "^1.0.3" @@ -17081,6 +18379,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -17088,13 +18392,10 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-glob": { "version": "4.0.3", @@ -17108,7 +18409,7 @@ "is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, "is-negative-zero": { @@ -17124,9 +18425,9 @@ "dev": true }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -17139,9 +18440,9 @@ "dev": true }, "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true }, "is-plain-object": { @@ -17150,6 +18451,14 @@ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "optional": true, + "peer": true + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -17161,18 +18470,21 @@ } }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true - }, - "is-ssh": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.3.tgz", - "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", + "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==", "dev": true, "requires": { - "protocols": "^1.1.0" + "call-bind": "^1.0.2" + } + }, + "is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "dev": true, + "requires": { + "protocols": "^2.0.1" } }, "is-stream": { @@ -17202,7 +18514,7 @@ "is-text-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "requires": { "text-extensions": "^1.0.0" @@ -17211,13 +18523,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "is-weakref": { @@ -17229,6 +18535,15 @@ "call-bind": "^1.0.2" } }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -17244,15 +18559,42 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, "jazz-midi": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/jazz-midi/-/jazz-midi-1.7.5.tgz", @@ -17264,19 +18606,11 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "js2xmlparser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dev": true, "requires": { "xmlcreate": "^2.0.4" } @@ -17284,13 +18618,14 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, "jsdoc": { - "version": "3.6.10", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.10.tgz", - "integrity": "sha512-IdQ8ppSo5LKZ9o3M+LKIIK8i00DIe5msDvG3G81Km+1dhy0XrOWD0Ji8H61ElgyEj/O9KRLokgKbAM9XX9CJAg==", + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", + "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", + "dev": true, "requires": { "@babel/parser": "^7.9.4", "@types/markdown-it": "^12.2.3", @@ -17298,7 +18633,7 @@ "catharsis": "^0.9.0", "escape-string-regexp": "^2.0.0", "js2xmlparser": "^4.0.2", - "klaw": "^4.0.1", + "klaw": "^3.0.0", "markdown-it": "^12.3.2", "markdown-it-anchor": "^8.4.1", "marked": "^4.0.10", @@ -17312,7 +18647,8 @@ "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true } } }, @@ -17368,10 +18704,123 @@ "walk-back": "^5.1.0" } }, + "jsdom": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz", + "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "abab": "^2.0.6", + "acorn": "^8.7.1", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "^7.0.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.8.0", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "optional": true, + "peer": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "optional": true, + "peer": true + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "optional": true, + "peer": true + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true }, "json-parse-better-errors": { "version": "1.0.2", @@ -17400,13 +18849,14 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true }, "jsonfile": { "version": "6.1.0", @@ -17421,7 +18871,7 @@ "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, "JSONStream": { @@ -17463,9 +18913,13 @@ "dev": true }, "klaw": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-4.0.1.tgz", - "integrity": "sha512-pgsE40/SvC7st04AHiISNewaIMUbY5V/K8b21ekiPiFoYs/EYSdsGa+FJArB1d441uq4Q8zZyIxvAzkGNlBdRw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } }, "lerna": { "version": "4.0.0", @@ -17496,8 +18950,7 @@ "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -17515,11 +18968,71 @@ "npm-registry-fetch": "^11.0.0" }, "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } } } }, @@ -17534,12 +19047,80 @@ "npm-registry-fetch": "^11.0.0", "semver": "^7.1.3", "ssri": "^8.0.1" + }, + "dependencies": { + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + } } }, "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", "dev": true }, "lines-and-columns": { @@ -17552,6 +19133,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, "requires": { "uc.micro": "^1.0.1" } @@ -17576,6 +19158,12 @@ } } }, + "local-pkg": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "dev": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -17588,12 +19176,13 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", "dev": true }, "lodash.camelcase": { @@ -17605,7 +19194,7 @@ "lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true }, "lodash.omit": { @@ -17645,25 +19234,23 @@ "lodash._reinterpolate": "^3.0.0" } }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, "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==", - "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -17673,6 +19260,15 @@ "yallist": "^4.0.0" } }, + "magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -17691,13 +19287,13 @@ } }, "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", "dev": true, "requires": { "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", + "cacache": "^15.0.5", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", @@ -17708,10 +19304,28 @@ "minipass-fetch": "^1.3.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", + "socks-proxy-agent": "^5.0.0", "ssri": "^8.0.0" + }, + "dependencies": { + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + } } }, "map-obj": { @@ -17720,15 +19334,11 @@ "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, - "map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=" - }, "markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, "requires": { "argparse": "^2.0.1", "entities": "~2.1.0", @@ -17741,17 +19351,20 @@ "version": "8.6.2", "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.2.tgz", "integrity": "sha512-JNaekTlIwwyYGBN3zifZDxgz4bSL8sbEj58fdTZGmPSMMGXBZapFjcZk2I33Jy79c1fvCKHpF7MA/67FOTjvzA==", + "dev": true, "requires": {} }, "marked": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.14.tgz", - "integrity": "sha512-HL5sSPE/LP6U9qKgngIIPTthuxC0jrfxpYMZ3LdGDD3vTnLs59m2Z7r6+LNDR3ToqEQdkKd6YaaEfJhodJmijQ==" + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.17.tgz", + "integrity": "sha512-Wfk0ATOK5iPxM4ptrORkFemqroz0ZDxp5MWfYA7H/F+wO17NRWV5Ypxi6p3g2Xmw2bKeiYOl6oVnLHKxBA0VhA==", + "dev": true }, "mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true }, "meow": { "version": "8.1.2", @@ -17923,12 +19536,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true - }, "min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -17939,6 +19546,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -17958,20 +19566,12 @@ "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" - }, - "dependencies": { - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - } } }, "minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -18048,7 +19648,8 @@ "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "mkdirp-classic": { "version": "0.5.3", @@ -18073,59 +19674,17 @@ "integrity": "sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==", "dev": true }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, "modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true }, - "moment": { - "version": "2.29.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", - "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==" + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true }, "ms": { "version": "2.1.3", @@ -18189,9 +19748,9 @@ "dev": true }, "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "dev": true }, "napi-build-utils": { @@ -18212,22 +19771,11 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "dev": true, - "requires": { - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true }, "node-fetch": { "version": "2.6.7", @@ -18263,35 +19811,128 @@ } }, "node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", + "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", "dev": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "requires": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, "node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true }, "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "dev": true, "requires": { - "abbrev": "1" + "abbrev": "1", + "osenv": "^0.1.4" } }, "normalize-package-data": { @@ -18358,114 +19999,12 @@ "which": "^1.3.1" }, "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "node-gyp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", - "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.12", - "which": "^1.3.1" - } - }, - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, "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==", "dev": true }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dev": true, - "requires": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - } - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -18474,12 +20013,6 @@ "requires": { "isexe": "^2.0.0" } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true } } }, @@ -18525,12 +20058,14 @@ } }, "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", "dev": true, "requires": { - "make-fetch-happen": "^9.0.1", + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", "minipass": "^3.1.3", "minipass-fetch": "^1.3.0", "minipass-json-stream": "^1.0.1", @@ -18562,9 +20097,17 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true }, + "nwsapi": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", + "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", + "dev": true, + "optional": true, + "peer": true + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -18589,9 +20132,9 @@ "dev": true }, "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true }, "object-keys": { @@ -18607,32 +20150,34 @@ "dev": true }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, "object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", + "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", "dev": true, "requires": { + "array.prototype.reduce": "^1.0.4", "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -18646,11 +20191,21 @@ "mimic-fn": "^2.1.0" } }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -18663,21 +20218,21 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true }, "osc-js": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/osc-js/-/osc-js-2.3.2.tgz", - "integrity": "sha512-9i7J4u1hH+glooGMh+ki1ni0JGqKmylT8r0nXKugHbRK63rR+kl4O+5tGW6+/EszjbCju3KV+eXQQzFDdGrmhg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/osc-js/-/osc-js-2.4.0.tgz", + "integrity": "sha512-9cvB8m6zt/iCsmeDdFJaD4mjC8preB1Gio+NVmjT0S3qxiejTfJ8vGudyTQciL9yqQHEuINNYS5Kb94+Ceqekg==", "requires": { - "ws": "^8.5.0" + "ws": "^8.9.0" } }, "osenv": { @@ -18693,7 +20248,7 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true }, "p-is-promise": { @@ -18806,6 +20361,74 @@ "rimraf": "^3.0.2", "ssri": "^8.0.1", "tar": "^6.1.0" + }, + "dependencies": { + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + } } }, "parent-module": { @@ -18817,6 +20440,14 @@ "callsites": "^3.0.0" } }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true, + "optional": true, + "peer": true + }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -18830,9 +20461,9 @@ } }, "parse-path": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.3.tgz", - "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.4.tgz", + "integrity": "sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw==", "dev": true, "requires": { "is-ssh": "^1.3.0", @@ -18841,10 +20472,16 @@ "query-string": "^6.13.8" }, "dependencies": { + "protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + }, "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -18852,21 +20489,45 @@ } } }, - "parse-srcset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=" - }, "parse-url": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.0.tgz", - "integrity": "sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.5.tgz", + "integrity": "sha512-e35AeLTSIlkw/5GFq70IN7po8fmDUjpDPY1rIK+VubRfsUvBonjQ+PBZG+vWMACnQSmNlvl524IucoDmcioMxA==", "dev": true, "requires": { "is-ssh": "^1.3.0", "normalize-url": "^6.1.0", "parse-path": "^4.0.0", "protocols": "^1.4.0" + }, + "dependencies": { + "protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + } + } + }, + "parse5": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", + "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "entities": "^4.3.0" + }, + "dependencies": { + "entities": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", + "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", + "dev": true, + "optional": true, + "peer": true + } } }, "path-exists": { @@ -18878,7 +20539,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "3.1.1", @@ -18898,21 +20560,47 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "peggy": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/peggy/-/peggy-2.0.1.tgz", + "integrity": "sha512-mBqfmdUAOVn7RILpXTbcRBhLfTR4Go0SresSnivGDdRylBOyVFJncFiVyCNNpPWq8HmgeRleXHs/Go4o8kQVXA==", + "dev": true, + "requires": { + "commander": "^9.3.0", + "source-map-generator": "0.8.0" + }, + "dependencies": { + "commander": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "dev": true + } + } + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true }, "pify": { "version": "2.3.0", @@ -19022,22 +20710,25 @@ } }, "postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "dev": true, "requires": { - "nanoid": "^3.3.3", + "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" - }, - "dependencies": { - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - } + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" } }, "postcss-js": { @@ -19060,12 +20751,12 @@ } }, "postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.6" + "postcss-selector-parser": "^6.0.10" } }, "postcss-selector-parser": { @@ -19108,8 +20799,7 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "process-nextick-args": { "version": "2.0.1", @@ -19117,16 +20807,21 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "asap": "~2.0.6" + } }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true }, "promise-retry": { @@ -19142,7 +20837,7 @@ "promzard": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", + "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", "dev": true, "requires": { "read": "1" @@ -19151,13 +20846,13 @@ "proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, "protocols": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", - "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true }, "psl": { @@ -19185,7 +20880,7 @@ "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true }, "qs": { @@ -19218,80 +20913,44 @@ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, "react": { "version": "file:packages/react", "requires": { - "@codemirror/lang-javascript": "^0.19.0", - "@strudel.cycles/core": "*", - "@strudel.cycles/eval": "^0.1.1", - "@strudel.cycles/tone": "^0.1.1", + "@codemirror/lang-javascript": "^6.1.1", + "@strudel.cycles/core": "^0.3.2", + "@strudel.cycles/eval": "^0.3.2", + "@strudel.cycles/tone": "^0.3.3", "@types/react": "^17.0.2", "@types/react-dom": "^17.0.2", - "@vitejs/plugin-react": "^1.3.0", + "@uiw/codemirror-themes": "^4.12.4", + "@uiw/react-codemirror": "^4.12.4", + "@vitejs/plugin-react": "^2.2.0", "autoprefixer": "^10.4.7", - "postcss": "^8.4.13", + "postcss": "^8.4.18", "react": "^17.0.2", - "react-codemirror6": "^1.1.0", "react-dom": "^17.0.2", "react-hook-inview": "^4.5.0", "tailwindcss": "^3.0.24", - "vite": "^2.9.9" + "vite": "^3.2.2" }, "dependencies": { - "@types/react": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.45.tgz", - "integrity": "sha512-YfhQ22Lah2e3CHPsb93tRwIGNiSwkuz1/blk4e6QrWS0jQzCSNbGLtOEYhPg02W0yGTTmpajp7dCTbBAMN3qsg==", - "dev": true, + "@uiw/react-codemirror": { + "version": "4.12.4", + "resolved": "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.12.4.tgz", + "integrity": "sha512-92TAvN2z5snPjPtJDLmbqrqsXXYFYlBnWraXZuDc1XGaw80tB26ZkdEW79CD2QM4Y9LhFIt+sauwlmiAVDs/5A==", "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "17.0.17", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.17.tgz", - "integrity": "sha512-VjnqEmqGnasQKV0CWLevqMTXBYG9GbwuE6x3VetERLh0cq2LTptFE73MrQi2S7GkKXCf2GgwItB/melLnxfnsg==", - "dev": true, - "requires": { - "@types/react": "^17" + "@babel/runtime": "^7.18.6", + "@codemirror/commands": "^6.1.0", + "@codemirror/state": "^6.1.1", + "@codemirror/theme-one-dark": "^6.0.0", + "@uiw/codemirror-extensions-basic-setup": "4.12.4", + "codemirror": "^6.0.0" } }, "react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -19301,7 +20960,6 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -19310,29 +20968,6 @@ } } }, - "react-codemirror6": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/react-codemirror6/-/react-codemirror6-1.1.0.tgz", - "integrity": "sha512-xoXBMrnD4ZikGc3pJSXvjcy8HXuFHMOID1CTf3oJZzfh25MtkLaJxSd3gBz/hqy3rqlGXJH3BMVYDsFsfnHwQQ==", - "requires": { - "@babel/runtime": "^7.14.8", - "@codemirror/autocomplete": "^0.19.15", - "@codemirror/closebrackets": "^0.19.1", - "@codemirror/commands": "^0.19.8", - "@codemirror/comment": "^0.19.1", - "@codemirror/fold": "^0.19.3", - "@codemirror/gutter": "^0.19.9", - "@codemirror/highlight": "^0.19.8", - "@codemirror/history": "^0.19.2", - "@codemirror/language": "^0.19.10", - "@codemirror/lint": "^0.19.6", - "@codemirror/matchbrackets": "^0.19.4", - "@codemirror/rectangular-selection": "^0.19.2", - "@codemirror/search": "^0.19.9", - "@codemirror/state": "^0.19.9", - "@codemirror/view": "^0.19.48" - } - }, "react-hook-inview": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/react-hook-inview/-/react-hook-inview-4.5.0.tgz", @@ -19340,20 +20975,29 @@ "requires": {} }, "react-refresh": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.13.0.tgz", - "integrity": "sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, "requires": { "mute-stream": "~0.0.4" } }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, "read-cmd-shim": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", @@ -19434,7 +21078,7 @@ "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "requires": { "load-json-file": "^4.0.0", @@ -19451,7 +21095,7 @@ "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -19475,7 +21119,7 @@ "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "requires": { "error-ex": "^1.3.1", @@ -19494,7 +21138,7 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true }, "semver": { @@ -19506,7 +21150,7 @@ "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true } } @@ -19514,7 +21158,7 @@ "read-pkg-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, "requires": { "find-up": "^2.0.0", @@ -19524,7 +21168,7 @@ "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "requires": { "locate-path": "^2.0.0" @@ -19533,7 +21177,7 @@ "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "requires": { "p-locate": "^2.0.0", @@ -19552,7 +21196,7 @@ "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "requires": { "p-limit": "^1.1.0" @@ -19561,13 +21205,13 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true } } @@ -19703,6 +21347,17 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -19741,17 +21396,18 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", + "dev": true, "requires": { "lodash": "^4.17.14" } }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -19784,7 +21440,7 @@ "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true }, "reusify": { @@ -19803,13 +21459,54 @@ } }, "rollup": { - "version": "2.70.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", - "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, "requires": { "fsevents": "~2.3.2" } }, + "rollup-plugin-visualizer": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.8.3.tgz", + "integrity": "sha512-QGJk4Bqe4AOat5AjipOh8esZH1nck5X2KFpf4VytUdSUuuuSwvIQZjMGgjcxe/zXexltqaXp5Vx1V3LmnQH15Q==", + "dev": true, + "requires": { + "open": "^8.4.0", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -19848,73 +21545,66 @@ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "sanitize-html": { - "version": "1.27.5", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.27.5.tgz", - "integrity": "sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A==", + "saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "optional": true, + "peer": true, "requires": { - "htmlparser2": "^4.1.0", - "lodash": "^4.17.15", - "parse-srcset": "^1.0.2", - "postcss": "^7.0.27" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - } + "xmlchars": "^2.2.0" } }, "scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" } }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "sfumato": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/sfumato/-/sfumato-0.1.2.tgz", + "integrity": "sha512-j2s5BLUS5VUNtaK1l+v+yal3XjjV7JXCQIwE5Xs4yiQ3HJ+2Fc/dd3IkkrVHn0AJO2epShSWVoP3GnE0TvPdMg==", + "requires": { + "soundfont2": "^0.4.0" + } + }, "shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -19940,57 +21630,43 @@ "dev": true }, "shift-ast": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.1.0.tgz", - "integrity": "sha512-Vj4XUIJIFPIh6VcBGJ1hjH/kM88XGer94Pr7Rvxa+idEylDsrwtLw268HoxGo5xReL6T3DdRl/9/Pr1XihZ/8Q==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-7.0.0.tgz", + "integrity": "sha512-O0INwsZa1XH/lMSf52udGnjNOxKBLxFiZHt0Ys3i6bqtwuGEA3eDR4+e0qJELIsCy8+BiTtlTgQzP76K1ehipQ==" }, "shift-codegen": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/shift-codegen/-/shift-codegen-7.0.3.tgz", - "integrity": "sha512-dfCVVdBF0qZ6pkajQ3bjxRdNEltyxEITVe7tBJkQt2eCI3znUkSxq0VSe/tTWq1LKHeAS4HuOiqYEuHMFkSq9w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/shift-codegen/-/shift-codegen-8.1.0.tgz", + "integrity": "sha512-hV48SiFM0pgTLCueh0iwqbvqElXPtZL69nb+3eXOU3iZZnLP+AlBQSLKKvHSPr/Onmk0lcUEkAM7RA6V6Wj1GQ==", "requires": { "esutils": "^2.0.2", "object-assign": "^4.1.0", - "shift-reducer": "6.0.0" + "shift-reducer": "7.0.0" } }, "shift-parser": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/shift-parser/-/shift-parser-7.0.3.tgz", - "integrity": "sha512-uYX2ORyZfKZrUc4iKKkO9KOhzUSxCrSBk7QK6ZmShId+BOo1gh1IwecVy97ynyOTpmhPWUttjC8BzsnQl65Zew==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/shift-parser/-/shift-parser-8.0.0.tgz", + "integrity": "sha512-IShW1wGhvA5e+SPNVQ+Dwi/Be6651F2jZc6wwYHbYW7PiswAYfvR/v3Q+CjjxsVCna5L6J5OtR6y+tkkCzvCfw==", "requires": { "multimap": "^1.0.2", - "shift-ast": "6.0.0", - "shift-reducer": "6.0.0", - "shift-regexp-acceptor": "2.0.3" - }, - "dependencies": { - "shift-ast": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.0.0.tgz", - "integrity": "sha512-XXxDcEBWVBzqWXfNYJlLyJ1/9kMvOXVRXiqPjkOrTCC5qRsBvEMJMRLLFhU3tn8ue56Y7IZyBE6bexFum5QLUw==" - } + "shift-ast": "7.0.0", + "shift-reducer": "7.0.0", + "shift-regexp-acceptor": "3.0.0" } }, "shift-reducer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/shift-reducer/-/shift-reducer-6.0.0.tgz", - "integrity": "sha512-2rJraRP8drIOjvaE/sALa+0tGJmMVUzlmS3wIJerJbaYuCjpFAiF0WjkTOFVtz1144Nm/ECmqeG+7yRhuMVsMg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/shift-reducer/-/shift-reducer-7.0.0.tgz", + "integrity": "sha512-9igIDMHzp1+CkQZITGHM1sAd9jqMPV0vhqHuh8jlYumHSMIwsYcrDeo1tlpzNRUnfbEq1nLyh8Bf1YU8HGUE7g==", "requires": { - "shift-ast": "6.0.0" - }, - "dependencies": { - "shift-ast": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.0.0.tgz", - "integrity": "sha512-XXxDcEBWVBzqWXfNYJlLyJ1/9kMvOXVRXiqPjkOrTCC5qRsBvEMJMRLLFhU3tn8ue56Y7IZyBE6bexFum5QLUw==" - } + "shift-ast": "7.0.0" } }, "shift-regexp-acceptor": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/shift-regexp-acceptor/-/shift-regexp-acceptor-2.0.3.tgz", - "integrity": "sha512-sxL7e5JNUFxm+gutFRXktX2D6KVgDAHNuDsk5XHB9Z+N5yXooZG6pdZ1GEbo3Jz6lF7ETYLBC4WAjIFm2RKTmA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shift-regexp-acceptor/-/shift-regexp-acceptor-3.0.0.tgz", + "integrity": "sha512-98UKizBjHY6SjjLUr51YYw4rtR+vxjGFm8znqNsoahesAI8Y9+WVAyiBCxxkov1KSDhW0Wz8FwwUqHnlFnjdUg==", "requires": { "unicode-match-property-ecmascript": "1.0.4", "unicode-match-property-value-ecmascript": "1.0.2", @@ -19998,9 +21674,9 @@ } }, "shift-spec": { - "version": "2018.0.2", - "resolved": "https://registry.npmjs.org/shift-spec/-/shift-spec-2018.0.2.tgz", - "integrity": "sha512-5CP/cKDEim4rZ6ViCSipTLY2U7HJr8q/kpDuCBmebFqbx/0DeozWO+9ienHmYjgGLDfHrqj+LBAN67FRK2vE6w==" + "version": "2019.0.0", + "resolved": "https://registry.npmjs.org/shift-spec/-/shift-spec-2019.0.0.tgz", + "integrity": "sha512-vYfKl+afWPUj/wfr5T/+mdYvWx0nn8LY6hVdfZmFENdGEBpAfQyOTo4/5i+rs8mj+Jz4+0MnsP4vXagjEoHfEw==" }, "shift-traverser": { "version": "1.0.0", @@ -20035,26 +21711,20 @@ } }, "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true - }, - "simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "sirv": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", "dev": true, "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" } }, "slash": { @@ -20066,7 +21736,7 @@ "slide": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", "dev": true }, "smart-buffer": { @@ -20076,24 +21746,24 @@ "dev": true }, "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" } }, "socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", "dev": true, "requires": { "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" + "debug": "4", + "socks": "^2.3.3" } }, "sort-array": { @@ -20127,12 +21797,32 @@ "dev": true, "requires": { "is-plain-obj": "^2.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } } }, + "soundfont2": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/soundfont2/-/soundfont2-0.4.0.tgz", + "integrity": "sha512-537WiurDBRbDLVhJMxXLE06D6yWxJCidfPClnibZ0f8dKMDpv+0fIfwCQ8pELE0JqKX05SOJosNJgKzQobaAEA==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true + }, + "source-map-generator": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/source-map-generator/-/source-map-generator-0.8.0.tgz", + "integrity": "sha512-psgxdGMwl5MZM9S3FWee4EgsEaIjahYV5AzGnwUvPhWeITz/j6rKpysQHlQ4USdxvINlb8lKfWGIXwfkrgtqkA==", + "dev": true }, "source-map-js": { "version": "1.0.2", @@ -20140,6 +21830,12 @@ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -20167,9 +21863,9 @@ } }, "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", "dev": true }, "split": { @@ -20283,7 +21979,7 @@ "strict-uri-encode": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", "dev": true }, "string_decoder": { @@ -20304,51 +22000,36 @@ } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" } }, "strip-ansi": { @@ -20384,7 +22065,8 @@ "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==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, "strip-outer": { "version": "1.0.1", @@ -20393,14 +22075,6 @@ "dev": true, "requires": { "escape-string-regexp": "^1.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, "strong-log-transformer": { @@ -20420,9 +22094,9 @@ "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==" }, "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -20434,6 +22108,48 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "optional": true, + "peer": true + }, + "sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "get-port": "^3.1.0" + }, + "dependencies": { + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "optional": true, + "peer": true + } + } + }, "table-layout": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz", @@ -20461,35 +22177,38 @@ "taffydb": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=" + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true }, "tailwindcss": { - "version": "3.0.24", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", - "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.2.tgz", + "integrity": "sha512-c2GtSdqg+harR4QeoTmex0Ngfg8IIHNeLQH5yr2B9uZbZR1Xt1rYbjWOWTcj3YLTZhrmZnPowoQDbSRFyZHQ5Q==", "dev": true, "requires": { - "arg": "^5.0.1", + "arg": "^5.0.2", "chokidar": "^3.5.3", "color-name": "^1.1.4", - "detective": "^5.2.0", + "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.11", + "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "lilconfig": "^2.0.5", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.12", + "postcss": "^8.4.18", + "postcss-import": "^14.1.0", "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", + "postcss-nested": "6.0.0", "postcss-selector-parser": "^6.0.10", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "resolve": "^1.22.0" + "resolve": "^1.22.1" }, "dependencies": { "glob-parent": { @@ -20504,9 +22223,9 @@ } }, "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", + "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -20566,7 +22285,7 @@ "temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true }, "temp-path": { @@ -20588,6 +22307,17 @@ "uuid": "^3.3.2" } }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, "test-value": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", @@ -20615,10 +22345,55 @@ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, + "then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true, + "optional": true, + "peer": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + } + } + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "through2": { @@ -20643,6 +22418,18 @@ } } }, + "tinypool": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.2.4.tgz", + "integrity": "sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==", + "dev": true + }, + "tinyspy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.0.tgz", + "integrity": "sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw==", + "dev": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -20655,7 +22442,8 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true }, "to-regex-range": { "version": "5.0.1", @@ -20675,6 +22463,12 @@ "tslib": "^2.0.1" } }, + "totalist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "dev": true + }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -20707,25 +22501,17 @@ "dev": true, "requires": { "escape-string-regexp": "^1.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - } } }, "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "requires": { "safe-buffer": "^5.0.1" @@ -20734,18 +22520,23 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "requires": { "prelude-ls": "~1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", @@ -20776,7 +22567,8 @@ "uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true }, "uglify-js": { "version": "3.15.3", @@ -20788,31 +22580,32 @@ "uid-number": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "integrity": "sha512-c461FXIljswCuscZn67xq9PpszkPT6RjheWFQTgCyabJrTUozElanb0YEqv2UGgk247YpcJkFBuSGNvBlpXM9w==", "dev": true }, "umask": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", - "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", + "integrity": "sha512-lE/rxOhmiScJu9L6RTNVgB/zZbF+vGC0/p6D3xnkAePI2o0sMyFG966iR5Ki50OI/0mNi2yaRnxfLsPmEZF/JA==", "dev": true }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, "underscore": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", - "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" + "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==", + "dev": true }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", @@ -20874,6 +22667,16 @@ "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -20892,7 +22695,7 @@ "util-promisify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", - "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "integrity": "sha512-K+5eQPYs14b3+E+hmE2J6gCZ4JmMl9DbYS6BeP2CHq6WMuNxErxf5B/n0fz85L8zUuoO6rIzNNmIQDu/j+1OcA==", "dev": true, "requires": { "object.getownpropertydescriptors": "^2.0.3" @@ -20904,6 +22707,17 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, + "v8-to-istanbul": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -20917,7 +22731,7 @@ "validate-npm-package-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dev": true, "requires": { "builtins": "^1.0.3" @@ -20926,7 +22740,7 @@ "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -20937,22 +22751,67 @@ "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=", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true } } }, "vite": { - "version": "2.9.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.9.tgz", - "integrity": "sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", + "integrity": "sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==", "dev": true, "requires": { - "esbuild": "^0.14.27", + "esbuild": "^0.15.9", "fsevents": "~2.3.2", - "postcss": "^8.4.13", - "resolve": "^1.22.0", - "rollup": "^2.59.0" + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + } + }, + "vitest": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.21.1.tgz", + "integrity": "sha512-WBIxuFmIDPuK47GO6Lu9eNeRMqHj/FWL3dk73OHH3eyPPWPiu+UB3QHLkLK2PEggCqJW4FaWoWg8R68S7p9+9Q==", + "dev": true, + "requires": { + "@types/chai": "^4.3.3", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "tinypool": "^0.2.4", + "tinyspy": "^1.0.0", + "vite": "^2.9.12 || ^3.0.0-0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "browser-process-hrtime": "^1.0.0" } }, "w3c-keyname": { @@ -20960,6 +22819,17 @@ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.4.tgz", "integrity": "sha512-tOhfEwEzFLJzf6d1ZPkYfGj+FWhIpBux9ppoP3rlclw3Z0BZv3N7b7030Z1kYth+6rDuAsXUFr+d0VE6Ed1ikw==" }, + "w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "xml-name-validator": "^4.0.0" + } + }, "walk-back": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-5.1.0.tgz", @@ -20969,22 +22839,46 @@ "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "requires": { "defaults": "^1.0.3" } }, + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true + }, + "WebDirt": { + "version": "git+ssh://git@github.com/dktr0/WebDirt.git#425dc8fd023440d9c61ffdb8642e44e2710faea0", + "from": "WebDirt@github:dktr0/WebDirt" + }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, - "webmidi": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/webmidi/-/webmidi-2.5.3.tgz", - "integrity": "sha512-PyMGvKcDGpvbQUfnmBORQJciyG3VAZ4aHlGy1iRZ3uEs4kG4HCvI7KRthUpM1vuHDPL98lidRIUaoRomkJtWtg==" + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "iconv-lite": "0.6.3" + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "optional": true, + "peer": true }, "whatwg-url": { "version": "8.7.0", @@ -21031,8 +22925,7 @@ "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==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wordwrap": { "version": "1.0.0", @@ -21058,12 +22951,6 @@ } } }, - "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -21073,31 +22960,13 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "3.0.3", @@ -21123,6 +22992,14 @@ "make-dir": "^3.0.0", "sort-keys": "^4.0.0", "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } } }, "write-pkg": { @@ -21139,13 +23016,7 @@ "detect-indent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true }, "make-dir": { @@ -21173,7 +23044,7 @@ "sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, "requires": { "is-plain-obj": "^1.0.0" @@ -21213,15 +23084,32 @@ } }, "ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz", + "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==", "requires": {} }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "optional": true, + "peer": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "optional": true, + "peer": true + }, "xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "dev": true }, "xtend": { "version": "4.0.2", @@ -21260,25 +23148,6 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } } }, "yargs-parser": { @@ -21287,28 +23156,11 @@ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, "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==", "dev": true - }, - "yoctodelay": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/yoctodelay/-/yoctodelay-1.2.0.tgz", - "integrity": "sha512-12y/P9MSig9/5BEhBgylss+fkHiCRZCvYR81eH35NW9uw801cvJt31EAV+WOLcwZRZbLiIQl/hxcdXXXFmGvXg==" } } } diff --git a/package.json b/package.json index df264d03..c299daf1 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,21 @@ { "name": "@strudel.cycles/monorepo", - "version": "0.0.1", + "version": "0.0.4", "private": true, "description": "Port of tidalcycles to javascript", "scripts": { - "test": "npm run test --workspaces --if-present && cd repl && npm run test", + "pretest": "cd tutorial && npm run jsdoc-json", + "test": "vitest run --version", + "test-ui": "vitest --ui", + "test-coverage": "vitest --coverage", "bootstrap": "lerna bootstrap", - "setup": "npm i && npm run bootstrap && cd repl && npm i", + "setup": "npm i && npm run bootstrap && cd repl && npm i && cd ../tutorial && npm i", + "snapshot": "cd repl && npm run snapshot", "repl": "cd repl && npm run dev", "osc": "cd packages/osc && npm run server", "build": "rm -rf out && cd repl && npm run build && cd ../tutorial && npm run build", "preview": "npx serve ./out", - "deploy": "gh-pages -d out", + "deploy": "NODE_DEBUG=gh-pages gh-pages -d out", "jsdoc": "jsdoc packages/ -c jsdoc.config.json", "jsdoc-json": "jsdoc packages/ --template ./node_modules/jsdoc-json --destination doc.json -c jsdoc.config.json" }, @@ -36,12 +40,15 @@ }, "homepage": "https://strudel.tidalcycles.org", "devDependencies": { + "@vitest/ui": "^0.21.1", + "c8": "^7.12.0", "events": "^3.3.0", "gh-pages": "^4.0.0", "jsdoc": "^3.6.10", "jsdoc-json": "^2.0.2", "jsdoc-to-markdown": "^7.1.1", "lerna": "^4.0.0", - "mocha": "^9.1.4" + "rollup-plugin-visualizer": "^5.8.1", + "vitest": "^0.21.1" } } diff --git a/packages/README.md b/packages/README.md new file mode 100644 index 00000000..5eaa07c6 --- /dev/null +++ b/packages/README.md @@ -0,0 +1,15 @@ +# Packages + +Each folder represents one of the @strudel.cycles/* packages [published to npm](https://www.npmjs.com/org/strudel.cycles). + +To understand how those pieces connect, refer to the [Technical Manual](https://github.com/tidalcycles/strudel/wiki/Technical-Manual) or the individual READMEs. + +This is a graphical view of all the packages: [full screen](https://raw.githubusercontent.com/tidalcycles/strudel/main/dependencies.svg) + +![dependencies](https://raw.githubusercontent.com/tidalcycles/strudel/main/dependencies.svg) + +Generated with + +```sh +npx depcruise --include-only "^packages" -X "node_modules" --output-type dot packages | dot -T svg > dependencygraph.svg +``` diff --git a/packages/core/.npmignore b/packages/core/.npmignore new file mode 100644 index 00000000..b7265688 --- /dev/null +++ b/packages/core/.npmignore @@ -0,0 +1 @@ +examples \ No newline at end of file diff --git a/packages/core/controls.mjs b/packages/core/controls.mjs index e59d4cc7..fec6c39a 100644 --- a/packages/core/controls.mjs +++ b/packages/core/controls.mjs @@ -11,7 +11,7 @@ const generic_params = [ /** * Select a sound / sample by name. * - *
+ *
* show all sounds * * 808 (6) 808bd (25) 808cy (25) 808hc (5) 808ht (5) 808lc (5) 808lt (5) 808mc (5) 808mt (5) 808oh (5) 808sd (25) 909 (1) ab (12) ade (10) ades2 (9) ades3 (7) ades4 (6) alex (2) alphabet (26) amencutup (32) armora (7) arp (2) arpy (11) auto (11) baa (7) baa2 (7) bass (4) bass0 (3) bass1 (30) bass2 (5) bass3 (11) bassdm (24) bassfoo (3) battles (2) bd (24) bend (4) bev (2) bin (2) birds (10) birds3 (19) bleep (13) blip (2) blue (2) bottle (13) breaks125 (2) breaks152 (1) breaks157 (1) breaks165 (1) breath (1) bubble (8) can (14) casio (3) cb (1) cc (6) chin (4) circus (3) clak (2) click (4) clubkick (5) co (4) coins (1) control (2) cosmicg (15) cp (2) cr (6) crow (4) d (4) db (13) diphone (38) diphone2 (12) dist (16) dork2 (4) dorkbot (2) dr (42) dr2 (6) dr55 (4) dr_few (8) drum (6) drumtraks (13) e (8) east (9) electro1 (13) em2 (6) erk (1) f (1) feel (7) feelfx (8) fest (1) fire (1) flick (17) fm (17) foo (27) future (17) gab (10) gabba (4) gabbaloud (4) gabbalouder (4) glasstap (3) glitch (8) glitch2 (8) gretsch (24) gtr (3) h (7) hand (17) hardcore (12) hardkick (6) haw (6) hc (6) hh (13) hh27 (13) hit (6) hmm (1) ho (6) hoover (6) house (8) ht (16) if (5) ifdrums (3) incoming (8) industrial (32) insect (3) invaders (18) jazz (8) jungbass (20) jungle (13) juno (12) jvbass (13) kicklinn (1) koy (2) kurt (7) latibro (8) led (1) less (4) lighter (33) linnhats (6) lt (16) made (7) made2 (1) mash (2) mash2 (4) metal (10) miniyeah (4) monsterb (6) moog (7) mouth (15) mp3 (4) msg (9) mt (16) mute (28) newnotes (15) noise (1) noise2 (8) notes (15) numbers (9) oc (4) odx (15) off (1) outdoor (6) pad (3) padlong (1) pebbles (1) perc (6) peri (15) pluck (17) popkick (10) print (11) proc (2) procshort (8) psr (30) rave (8) rave2 (4) ravemono (2) realclaps (4) reverbkick (1) rm (2) rs (1) sax (22) sd (2) seawolf (3) sequential (8) sf (18) sheffield (1) short (5) sid (12) sine (6) sitar (8) sn (52) space (18) speakspell (12) speech (7) speechless (10) speedupdown (9) stab (23) stomp (10) subroc3d (11) sugar (2) sundance (6) tabla (26) tabla2 (46) tablex (3) tacscan (22) tech (13) techno (7) tink (5) tok (4) toys (13) trump (11) ul (10) ulgab (5) uxay (3) v (6) voodoo (5) wind (10) wobble (1) world (3) xmas (1) yeah (31) @@ -23,7 +23,7 @@ const generic_params = [ * @name s * @param {string | Pattern} sound The sound / pattern of sounds to pick * @example - * s("bd hh").osc() + * s("bd hh") * */ ['s', 's', 'sound'], @@ -40,11 +40,6 @@ const generic_params = [ * @example * n("0 1 2 3").s('east').osc() */ - // TODO: nOut does not work - // TODO: notes don't work as expected - // current "workaround" for notes: - // s('superpiano').n(""._asNumber()).osc() - // -> .n or .osc (or .superdirt) would need to convert note strings to numbers // also see https://github.com/tidalcycles/strudel/pull/63 ['f', 'n', 'The note or sample number to choose for a synth or sampleset'], ['f', 'note', 'The note or pitch to play a sound or synth with'], @@ -62,12 +57,12 @@ const generic_params = [ */ ['f', 'accelerate', 'a pattern of numbers that speed up (or slow down) samples while they play.'], /** - * Like {@link amp}, but exponential. + * Controls the gain by an exponential amount. * * @name gain * @param {number | Pattern} amount gain. * @example - * s("bd*8").gain(".7*2 1 .7*2 1 .7 1").osc() + * s("hh*8").gain(".4!2 1 .4!2 1 .4 1") * */ [ @@ -100,6 +95,18 @@ const generic_params = [ 'attack', 'a pattern of numbers to specify the attack time (in seconds) of an envelope applied to each sample.', ], + + /** + * Select the sound bank to use. To be used together with `s`. The bank name (+ "_") will be prepended to the value of `s`. + * + * @name bank + * @param {string | Pattern} bank the name of the bank + * @example + * s("bd sd").bank('RolandTR909') // = s("RolandTR909_bd RolandTR909_sd") + * + */ + ['f', 'bank', 'selects sound bank to use'], + // TODO: find out how this works? /* * Envelope decay time = the time it takes after the attack time to reach the sustain level. @@ -129,7 +136,7 @@ const generic_params = [ * @name bandf * @param {number | Pattern} frequency center frequency * @example - * s("bd sd").bandf("<1000 2000 4000 8000>").osc() + * s("bd sd,hh*3").bandf("<1000 2000 4000 8000>") * */ ['f', 'bandf', 'A pattern of numbers from 0 to 1. Sets the center frequency of the band-pass filter.'], @@ -140,17 +147,19 @@ const generic_params = [ * @name bandq * @param {number | Pattern} q q factor * @example - * s("bd sd").bandf(2000).bandq("<.2 .9>").osc() + * s("bd sd").bandf(500).bandq("<0 1 2 3>") * */ ['f', 'bandq', 'a pattern of anumbers from 0 to 1. Sets the q-factor of the band-pass filter.'], /** * a pattern of numbers from 0 to 1. Skips the beginning of each sample, e.g. `0.25` to cut off the first quarter from each sample. * + * @memberof Pattern * @name begin * @param {number | Pattern} amount between 0 and 1, where 1 is the length of the sample * @example - * s("rave").begin("<0 .25 .5 .75>").osc() + * samples({ rave: 'rave/AREUREADY.wav' }, 'github:tidalcycles/Dirt-Samples/master/') + * s("rave").begin("<0 .25 .5 .75>") * */ [ @@ -159,12 +168,13 @@ const generic_params = [ 'a pattern of numbers from 0 to 1. Skips the beginning of each sample, e.g. `0.25` to cut off the first quarter from each sample.', ], /** - * The same as {@link begin}, but cuts off the end off each sample. + * The same as .begin, but cuts off the end off each sample. * + * @memberof Pattern * @name end * @param {number | Pattern} length 1 = whole sample, .5 = half sample, .25 = quarter sample etc.. * @example - * s("bd*2,ho*4").end("<.1 .2 .5 1>").osc() + * s("bd*2,oh*4").end("<.1 .2 .5 1>") * */ [ @@ -202,7 +212,7 @@ const generic_params = [ * @name crush * @param {number | Pattern} depth between 1 (for drastic reduction in bit-depth) to 16 (for barely no reduction). * @example - * s(",hh*3,jvbass*2").fast(2).crush("<16 8 7 6 5 4 3 2>").osc() + * s(",hh*3").fast(2).crush("<16 8 7 6 5 4 3 2>") * */ [ @@ -211,12 +221,12 @@ const generic_params = [ 'bit crushing, a pattern of numbers from 1 (for drastic reduction in bit-depth) to 16 (for barely no reduction).', ], /** - * fake-resampling for lowering the sample rate + * fake-resampling for lowering the sample rate. Caution: This effect seems to only work in chromium based browsers * * @name coarse * @param {number | Pattern} factor 1 for original 2 for half, 3 for a third and so on. * @example - * s("xmas").coarse("<1 4 8 16 32>").osc() + * s("bd sd,hh*4").coarse("<1 4 8 16 32>") * */ [ @@ -253,7 +263,7 @@ const generic_params = [ * @name cutoff * @param {number | Pattern} frequency audible between 0 and 20000 * @example - * s("bd,hh*2,<~ sd>").fast(2).cutoff("<4000 2000 1000 500 200 100>").osc() + * s("bd sd,hh*3").cutoff("<4000 2000 1000 500 200 100>") * */ // TODO: add lpf synonym @@ -264,7 +274,7 @@ const generic_params = [ * @name hcutoff * @param {number | Pattern} frequency audible between 0 and 20000 * @example - * s("bd,hh*2,<~ sd>").fast(2).hcutoff("<4000 2000 1000 500 200 100>").osc() + * s("bd sd,hh*4").hcutoff("<4000 2000 1000 500 200 100>") * */ // TODO: add hpf synonym @@ -274,12 +284,12 @@ const generic_params = [ 'a pattern of numbers from 0 to 1. Applies the cutoff frequency of the high-pass filter. Also has alias @hpf@', ], /** - * Applies the cutoff frequency of the high-pass filter. + * Applies the resonance of the high-pass filter. * * @name hresonance - * @param {number | Pattern} q resonance factor between 0 and 1 + * @param {number | Pattern} q resonance factor between 0 and 50 * @example - * s("bd,hh*2,<~ sd>").fast(2).hcutoff(2000).hresonance("<0 .2 .4 .6>").osc() + * s("bd sd,hh*4").hcutoff(2000).hresonance("<0 10 20 30>") * */ [ @@ -292,15 +302,15 @@ const generic_params = [ * Applies the cutoff frequency of the low-pass filter. * * @name resonance - * @param {number | Pattern} q resonance factor between 0 and 1 + * @param {number | Pattern} q resonance factor between 0 and 50 * @example - * s("bd,hh*2,<~ sd>").fast(2).cutoff(2000).resonance("<0 .2 .4 .6>").osc() + * s("bd sd,hh*4").cutoff(2000).resonance("<0 10 20 30>") * */ ['f', 'resonance', 'a pattern of numbers from 0 to 1. Specifies the resonance of the low-pass filter.'], // TODO: add lpq synonym? /** - * Set detune of oscillators. Works only with some synths, see tidal doc + * DJ filter, below 0.5 is low pass filter, above is high pass filter. * * @name djf * @param {number | Pattern} cutoff below 0.5 is low pass filter, above is high pass filter @@ -368,7 +378,7 @@ const generic_params = [ * @name fadeTime * @param {number | Pattern} time between 0 and 1 * @example - * s("ho*4").end(.1).fadeTime("<0 .2 .4 .8>").osc() + * s("oh*4").end(.1).fadeTime("<0 .2 .4 .8>").osc() * */ [ @@ -493,7 +503,7 @@ const generic_params = [ * @name pan * @param {number | Pattern} pan between 0 and 1, from left to right (assuming stereo), once round a circle (assuming multichannel) * @example - * s("[bd hh]*2").pan("<.5 1 .5 0>").osc() + * s("[bd hh]*2").pan("<.5 1 .5 0>") * */ [ @@ -581,6 +591,11 @@ const generic_params = [ 'size', 'a pattern of numbers from 0 to 1. Sets the perceptual size (reverb time) of the `room` to be used in reverb.', ], + [ + 'f', + 'roomsize', + 'a pattern of numbers from 0 to 1. Sets the perceptual size (reverb time) of the `room` to be used in reverb.', + ], // ['f', 'sagogo', ''], // ['f', 'sclap', ''], // ['f', 'sclaves', ''], @@ -591,7 +606,7 @@ const generic_params = [ * @name shape * @param {number | Pattern} distortion between 0 and 1 * @example - * s("bd sd").shape("<0 .2 .4 .6 .8 1>").osc() + * s("bd sd,hh*4").shape("<0 .2 .4 .6 .8>") * */ [ @@ -648,16 +663,16 @@ const generic_params = [ // ['f', 'tomdecay', ''], // ['f', 'vcfegint', ''], // ['f', 'vcoegint', ''], + // TODO: Use a rest (~) to override the effect <- vowel /** * * Formant filter to make things sound like vowels. * * @name vowel - * @param {string | Pattern} vowel You can use a e i o u. Use a rest (~) to override the effect + * @param {string | Pattern} vowel You can use a e i o u. * @example - * vowel("a e i [o u]").slow(2) - * .n("<[0,7]!4 [2,7]!4>") - * .s('supersquare').osc() + * note("c2 >").s('sawtooth') + * .vowel(">") * */ [ @@ -744,20 +759,34 @@ const generic_params = [ ['f', 'uid', ''], ['f', 'val', ''], ['f', 'cps', ''], + ['f', 'clip', ''], ]; // TODO: slice / splice https://www.youtube.com/watch?v=hKhPdO0RKDQ&list=PL2lW1zNIIwj3bDkh-Y3LUGDuRcoUigoDs&index=13 const _name = (name, ...pats) => sequence(...pats).withValue((x) => ({ [name]: x })); -const _setter = (func) => +const _setter = (func, name) => function (...pats) { + if (!pats.length) { + return this.fmap((value) => ({ [name]: value })); + } return this.set(func(...pats)); }; generic_params.forEach(([type, name, description]) => { controls[name] = (...pats) => _name(name, ...pats); - Pattern.prototype[name] = _setter(controls[name]); + Pattern.prototype[name] = _setter(controls[name], name); }); +// create custom param +controls.createParam = (name) => { + const func = (...pats) => _name(name, ...pats); + Pattern.prototype[name] = _setter(func, name); + return (...pats) => _name(name, ...pats); +}; + +controls.createParams = (...names) => + names.reduce((acc, name) => Object.assign(acc, { [name]: createParam(name) }), {}); + export default controls; diff --git a/packages/core/cyclist.mjs b/packages/core/cyclist.mjs new file mode 100644 index 00000000..66105d0a --- /dev/null +++ b/packages/core/cyclist.mjs @@ -0,0 +1,81 @@ +/* +cyclist.mjs - +Copyright (C) 2022 Strudel contributors - see +This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . +*/ + +import createClock from './zyklus.mjs'; + +export class Cyclist { + worker; + pattern; + started = false; + cps = 1; // TODO + getTime; + phase = 0; + constructor({ interval, onTrigger, onError, getTime, latency = 0.1 }) { + this.getTime = getTime; + const round = (x) => Math.round(x * 1000) / 1000; + this.clock = createClock( + getTime, + (phase, duration, tick) => { + if (tick === 0) { + this.origin = phase; + } + const begin = round(phase - this.origin); + this.phase = begin - latency; + const end = round(begin + duration); + const time = getTime(); + try { + const haps = this.pattern.queryArc(begin, end); // get Haps + // console.log('haps', haps.map((hap) => hap.value.n).join(' ')); + haps.forEach((hap) => { + // console.log('hap', hap.value.n, hap.part.begin); + if (hap.part.begin.equals(hap.whole.begin)) { + const deadline = hap.whole.begin + this.origin - time + latency; + const duration = hap.duration * 1; + onTrigger?.(hap, deadline, duration); + } + }); + } catch (e) { + console.warn('scheduler error', e); + onError?.(e); + } + }, // called slightly before each cycle + interval, // duration of each cycle + ); + } + getPhase() { + return this.phase; + } + start() { + if (!this.pattern) { + throw new Error('Scheduler: no pattern set! call .setPattern first.'); + } + this.clock.start(); + this.started = true; + } + pause() { + this.clock.stop(); + delete this.origin; + this.started = false; + } + stop() { + delete this.origin; + this.clock.stop(); + this.started = false; + } + setPattern(pat, autostart = false) { + this.pattern = pat; + if (autostart && !this.started) { + this.start(); + } + } + setCps(cps = 1) { + this.cps = cps; + } + log(begin, end, haps) { + const onsets = haps.filter((h) => h.hasOnset()); + console.log(`${begin.toFixed(4)} - ${end.toFixed(4)} ${Array(onsets.length).fill('I').join('')}`); + } +} diff --git a/packages/core/drawLine.mjs b/packages/core/drawLine.mjs index da424236..91b86b4a 100644 --- a/packages/core/drawLine.mjs +++ b/packages/core/drawLine.mjs @@ -21,6 +21,7 @@ import Fraction, { gcd } from './fraction.mjs'; * @example * const line = drawLine("0 [1 2 3]", 10); // |0--123|0--123 * console.log(line); + * silence; */ function drawLine(pat, chars = 60) { let cycle = 0; diff --git a/packages/core/euclid.mjs b/packages/core/euclid.mjs index c95b3409..45a59783 100644 --- a/packages/core/euclid.mjs +++ b/packages/core/euclid.mjs @@ -25,61 +25,70 @@ const euclid = (pulses, steps, rotation = 0) => { * describe a large number of rhythms used in the most important music world traditions. * * @memberof Pattern + * @name euclid * @param {number} pulses the number of onsets / beats * @param {number} steps the number of steps to fill * @param {number} rotation (optional) offset in steps * @returns Pattern - * @example // The Cuban tresillo pattern. - * "c3".euclid(3,8) + * @example + * // The Cuban tresillo pattern. + * note("c3").euclid(3,8) + */ + +/** * @example // A thirteenth century Persian rhythm called Khafif-e-ramal. - * "c3".euclid(2,5) + * note("c3").euclid(2,5) * @example // The archetypal pattern of the Cumbia from Colombia, as well as a Calypso rhythm from Trinidad. - * "c3".euclid(3,4) + * note("c3").euclid(3,4) * @example // Another thirteenth century Persian rhythm by the name of Khafif-e-ramal, as well as a Rumanian folk-dance rhythm. - * "c3".euclid(3,5,2) + * note("c3").euclid(3,5,2) * @example // A Ruchenitza rhythm used in a Bulgarian folk-dance. - * "c3".euclid(3,7) + * note("c3").euclid(3,7) * @example // The Cuban tresillo pattern. - * "c3".euclid(3,8) + * note("c3").euclid(3,8) * @example // Another Ruchenitza Bulgarian folk-dance rhythm. - * "c3".euclid(4,7) + * note("c3").euclid(4,7) * @example // The Aksak rhythm of Turkey. - * "c3".euclid(4,9) + * note("c3").euclid(4,9) * @example // The metric pattern used by Frank Zappa in his piece titled Outside Now. - * "c3".euclid(4,11) + * note("c3").euclid(4,11) * @example // Yields the York-Samai pattern, a popular Arab rhythm. - * "c3".euclid(5,6) + * note("c3").euclid(5,6) * @example // The Nawakhat pattern, another popular Arab rhythm. - * "c3".euclid(5,7) + * note("c3").euclid(5,7) * @example // The Cuban cinquillo pattern. - * "c3".euclid(5,8) + * note("c3").euclid(5,8) * @example // A popular Arab rhythm called Agsag-Samai. - * "c3".euclid(5,9) + * note("c3").euclid(5,9) * @example // The metric pattern used by Moussorgsky in Pictures at an Exhibition. - * "c3".euclid(5,11) + * note("c3").euclid(5,11) * @example // The Venda clapping pattern of a South African children’s song. - * "c3".euclid(5,12) + * note("c3").euclid(5,12) * @example // The Bossa-Nova rhythm necklace of Brazil. - * "c3".euclid(5,16) + * note("c3").euclid(5,16) * @example // A typical rhythm played on the Bendir (frame drum). - * "c3".euclid(7,8) + * note("c3").euclid(7,8) * @example // A common West African bell pattern. - * "c3".euclid(7,12) + * note("c3").euclid(7,12) * @example // A Samba rhythm necklace from Brazil. - * "c3".euclid(7,16,14) + * note("c3").euclid(7,16,14) * @example // A rhythm necklace used in the Central African Republic. - * "c3".euclid(9,16) + * note("c3").euclid(9,16) * @example // A rhythm necklace of the Aka Pygmies of Central Africa. - * "c3".euclid(11,24,14) + * note("c3").euclid(11,24,14) * @example // Another rhythm necklace of the Aka Pygmies of the upper Sangha. - * "c3".euclid(13,24,5) + * note("c3").euclid(13,24,5) */ Pattern.prototype.euclid = function (pulses, steps, rotation = 0) { return this.struct(euclid(pulses, steps, rotation)); }; /** - * Similar to {@link Pattern#euclid}, but each pulse is held until the next pulse, so there will be no gaps. + * Similar to `.euclid`, but each pulse is held until the next pulse, so there will be no gaps. + * @name euclidLegato + * @memberof Pattern + * @example + * n("g2").decay(.1).sustain(.3).euclidLegato(3,8) */ Pattern.prototype.euclidLegato = function (pulses, steps, rotation = 0) { const bin_pat = euclid(pulses, steps, rotation); diff --git a/packages/core/evaluate.mjs b/packages/core/evaluate.mjs new file mode 100644 index 00000000..eea5a90b --- /dev/null +++ b/packages/core/evaluate.mjs @@ -0,0 +1,55 @@ +/* +evaluate.mjs - +Copyright (C) 2022 Strudel contributors - see +This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . +*/ + +import * as strudel from '@strudel.cycles/core'; + +const { isPattern, Pattern } = strudel; + +let scoped = false; +export const evalScope = async (...args) => { + if (scoped) { + console.warn('evalScope was called more than once.'); + } + scoped = true; + const results = await Promise.allSettled(args); + const modules = results.filter((result) => result.status === 'fulfilled').map((r) => r.value); + results.forEach((result, i) => { + if (result.status === 'rejected') { + console.warn(`evalScope: module with index ${i} could not be loaded:`, result.reason); + } + }); + Object.assign(globalThis, ...modules, Pattern.prototype.bootstrap()); +}; + +function safeEval(str, options = {}) { + const { wrapExpression = true, wrapAsync = true } = options; + if (wrapExpression) { + str = `{${str}}`; + } + if (wrapAsync) { + str = `(async ()=>${str})()`; + } + const body = `"use strict";return (${str})`; + return Function(body)(); +} + +export const evaluate = async (code, transpiler) => { + if (!scoped) { + await evalScope(); // at least scope Pattern.prototype.boostrap + } + if (transpiler) { + code = transpiler(code); // transform syntactically correct js code to semantically usable code + } + // if no transpiler is given, we expect a single instruction (!wrapExpression) + const options = { wrapExpression: !!transpiler }; + let evaluated = await safeEval(code, options); + if (!isPattern(evaluated)) { + console.log('evaluated', evaluated); + const message = `got "${typeof evaluated}" instead of pattern`; + throw new Error(message + (typeof evaluated === 'function' ? ', did you forget to call a function?' : '.')); + } + return { mode: 'javascript', pattern: evaluated }; +}; diff --git a/packages/core/examples/repl.html b/packages/core/examples/repl.html new file mode 100644 index 00000000..cc8dd2f5 --- /dev/null +++ b/packages/core/examples/repl.html @@ -0,0 +1,90 @@ +
+ + + + +
+ + + diff --git a/packages/core/examples/scheduled.html b/packages/core/examples/scheduled.html new file mode 100644 index 00000000..e27db1d0 --- /dev/null +++ b/packages/core/examples/scheduled.html @@ -0,0 +1,44 @@ + + +
+ diff --git a/packages/core/examples/vanilla.html b/packages/core/examples/vanilla.html new file mode 100644 index 00000000..1f9b1281 --- /dev/null +++ b/packages/core/examples/vanilla.html @@ -0,0 +1,96 @@ + + + + + + Buildless Vanilla Strudel REPL + + +
+ +
+ +
+ + + diff --git a/packages/core/examples/vite-vanilla-repl/.gitignore b/packages/core/examples/vite-vanilla-repl/.gitignore new file mode 100644 index 00000000..586e3d7a --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/.gitignore @@ -0,0 +1 @@ +!dist \ No newline at end of file diff --git a/packages/core/examples/vite-vanilla-repl/README.md b/packages/core/examples/vite-vanilla-repl/README.md new file mode 100644 index 00000000..ac2ed20f --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/README.md @@ -0,0 +1,10 @@ +# vite-vanilla-repl + +This folder demonstrates how to set up a strudel repl using vite and vanilla JS. Run it using: + +```sh +npm i +npm run dev +``` + +or view it [live on githack](https://rawcdn.githack.com/tidalcycles/strudel/5fb36acb046ead7cd6ad3cd10f532e7f585f536a/packages/core/examples/vite-vanilla-repl/dist/index.html) diff --git a/packages/core/examples/vite-vanilla-repl/dist/assets/index.211bbc68.js b/packages/core/examples/vite-vanilla-repl/dist/assets/index.211bbc68.js new file mode 100644 index 00000000..c71a2c36 --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/dist/assets/index.211bbc68.js @@ -0,0 +1 @@ +import{b as s,h as i,m,a as n,c as p,p as t}from"./index.4cbc0a10.js";export{s as SyntaxError,i as h,m as mini,n as minify,p as parse,t as patternifyAST}; diff --git a/packages/core/examples/vite-vanilla-repl/dist/assets/index.4cbc0a10.js b/packages/core/examples/vite-vanilla-repl/dist/assets/index.4cbc0a10.js new file mode 100644 index 00000000..d34a6d2d --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/dist/assets/index.4cbc0a10.js @@ -0,0 +1,24 @@ +var tn=Object.defineProperty;var rn=(r,t,e)=>t in r?tn(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var K=(r,t,e)=>(rn(r,typeof t!="symbol"?t+"":t,e),e);const strudel=Object.freeze(Object.defineProperty({__proto__:null,get Fraction(){return fraction},get controls(){return controls},get drawLine(){return drawLine},get gist(){return gist},get Hap(){return Hap},get setStringParser(){return setStringParser},get Pattern(){return Pattern$3},get polyrhythm(){return polyrhythm},get pr(){return pr},get silence(){return silence$1},get pure(){return pure$1},get isPattern(){return isPattern$1},get reify(){return reify$2},get stack(){return stack$1},get slowcat(){return slowcat$1},get slowcatPrime(){return slowcatPrime},get fastcat(){return fastcat},get cat(){return cat},get timeCat(){return timeCat$1},get sequence(){return sequence$1},get seq(){return seq},get polymeterSteps(){return polymeterSteps},get polymeter(){return polymeter},get pm(){return pm},get add(){return add},get chop(){return chop},get chunk(){return chunk},get chunkBack(){return chunkBack},get div(){return div},get early(){return early},get echo(){return echo},get every(){return every},get fast(){return fast},get inv(){return inv},get invert(){return invert},get iter(){return iter},get iterBack(){return iterBack},get jux(){return jux},get juxBy(){return juxBy},get late(){return late},get linger(){return linger},get mask(){return mask},get mul(){return mul},get off(){return off},get ply(){return ply},get range(){return range},get rangex(){return rangex},get range2(){return range2},get rev(){return rev},get slow(){return slow},get struct(){return struct},get sub(){return sub},get superimpose(){return superimpose},get set(){return set},get when(){return when},get makeComposable(){return makeComposable},get patternify2(){return patternify2},get patternify3(){return patternify3},get patternify4(){return patternify4},get steady(){return steady},get signal(){return signal},get isaw(){return isaw},get isaw2(){return isaw2},get saw(){return saw},get saw2(){return saw2},get sine2(){return sine2},get sine(){return sine},get cosine(){return cosine},get cosine2(){return cosine2},get square(){return square},get square2(){return square2},get tri(){return tri},get tri2(){return tri2},get time(){return time},get rand(){return rand},get rand2(){return rand2},get _brandBy(){return _brandBy},get brandBy(){return brandBy},get brand(){return brand},get _irand(){return _irand},get irand(){return irand},get __chooseWith(){return __chooseWith},get chooseWith(){return chooseWith},get chooseInWith(){return chooseInWith},get choose(){return choose},get chooseCycles(){return chooseCycles},get randcat(){return randcat},get wchoose(){return wchoose},get wchooseCycles(){return wchooseCycles},get perlinWith(){return perlinWith},get perlin(){return perlin},get State(){return State},get TimeSpan(){return TimeSpan},get isNote(){return isNote},get tokenizeNote(){return tokenizeNote},get toMidi(){return toMidi},get fromMidi(){return fromMidi},get getFreq(){return getFreq},get midi2note(){return midi2note},get mod(){return mod},get getPlayableNoteValue(){return getPlayableNoteValue},get getFrequency(){return getFrequency},get rotate(){return rotate},get pipe(){return pipe},get compose(){return compose},get removeUndefineds(){return removeUndefineds},get flatten(){return flatten},get id(){return id},get constant(){return constant},get listRange(){return listRange},get curry(){return curry},get parseNumeral(){return parseNumeral},get mapArgs(){return mapArgs},get numeralArgs(){return numeralArgs},get parseFractional(){return parseFractional},get fractionalArgs(){return fractionalArgs},get evalScope(){return evalScope},get evaluate(){return evaluate$1},get repl(){return repl}},Symbol.toStringTag,{value:"Module"}));(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const f of i.addedNodes)f.tagName==="LINK"&&f.rel==="modulepreload"&&o(f)}).observe(document,{childList:!0,subtree:!0});function e(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerpolicy&&(i.referrerPolicy=s.referrerpolicy),s.crossorigin==="use-credentials"?i.credentials="include":s.crossorigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function o(s){if(s.ep)return;s.ep=!0;const i=e(s);fetch(s.href,i)}})();const scriptRel="modulepreload",assetsURL=function(r){return"/tidalcycles/strudel/use-acorn/packages/core/examples/vite-vanilla-repl/dist/"+r},seen={},__vitePreload=function(t,e,o){if(!e||e.length===0)return t();const s=document.getElementsByTagName("link");return Promise.all(e.map(i=>{if(i=assetsURL(i),i in seen)return;seen[i]=!0;const f=i.endsWith(".css"),l=f?'[rel="stylesheet"]':"";if(!!o)for(let y=s.length-1;y>=0;y--){const $=s[y];if($.href===i&&(!f||$.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${l}`))return;const w=document.createElement("link");if(w.rel=f?"stylesheet":scriptRel,f||(w.as="script",w.crossOrigin=""),w.href=i,document.head.appendChild(w),f)return new Promise((y,$)=>{w.addEventListener("load",y),w.addEventListener("error",()=>$(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t())};var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}function getAugmentedNamespace(r){var t=r.default;if(typeof t=="function"){var e=function(){return t.apply(this,arguments)};e.prototype=t.prototype}else e={};return Object.defineProperty(e,"__esModule",{value:!0}),Object.keys(r).forEach(function(o){var s=Object.getOwnPropertyDescriptor(r,o);Object.defineProperty(e,o,s.get?s:{enumerable:!0,get:function(){return r[o]}})}),e}var fraction$1={exports:{}};/** + * @license Fraction.js v4.2.0 05/03/2022 + * https://www.xarg.org/2014/03/rational-numbers-in-javascript/ + * + * Copyright (c) 2021, Robert Eisele (robert@xarg.org) + * Dual licensed under the MIT or GPL Version 2 licenses. + **/(function(r,t){(function(e){var o=2e3,s={s:1,n:0,d:1};function i(p,d){if(isNaN(p=parseInt(p,10)))throw C.InvalidParameter;return p*d}function f(p,d){if(d===0)throw C.DivisionByZero;var m=Object.create(C.prototype);m.s=p<0?-1:1,p=p<0?-p:p;var b=S(p,d);return m.n=p/b,m.d=d/b,m}function l(p){for(var d={},m=p,b=2,I=4;I<=m;){for(;m%b===0;)m/=b,d[b]=(d[b]||0)+1;I+=1+2*b++}return m!==p?m>1&&(d[m]=(d[m]||0)+1):d[p]=(d[p]||0)+1,d}var g=function(p,d){var m=0,b=1,I=1,T=0,G=0,Y=0,D=1,W=1,P=0,B=1,z=1,O=1,Z=1e7,L;if(p!=null)if(d!==void 0){if(m=p,b=d,I=m*b,m%1!==0||b%1!==0)throw C.NonIntegerParameter}else switch(typeof p){case"object":{if("d"in p&&"n"in p)m=p.n,b=p.d,"s"in p&&(m*=p.s);else if(0 in p)m=p[0],1 in p&&(b=p[1]);else throw C.InvalidParameter;I=m*b;break}case"number":{if(p<0&&(I=p,p=-p),p%1===0)m=p;else if(p>0){for(p>=1&&(W=Math.pow(10,Math.floor(1+Math.log(p)/Math.LN10)),p/=W);B<=Z&&O<=Z;)if(L=(P+z)/(B+O),p===L){B+O<=Z?(m=P+z,b=B+O):O>B?(m=z,b=O):(m=P,b=B);break}else p>L?(P+=z,B+=O):(z+=P,O+=B),B>Z?(m=z,b=O):(m=P,b=B);m*=W}else(isNaN(p)||isNaN(d))&&(b=m=NaN);break}case"string":{if(B=p.match(/\d+|./g),B===null)throw C.InvalidParameter;if(B[P]==="-"?(I=-1,P++):B[P]==="+"&&P++,B.length===P+1?G=i(B[P++],I):B[P+1]==="."||B[P]==="."?(B[P]!=="."&&(T=i(B[P++],I)),P++,(P+1===B.length||B[P+1]==="("&&B[P+3]===")"||B[P+1]==="'"&&B[P+3]==="'")&&(G=i(B[P],I),D=Math.pow(10,B[P].length),P++),(B[P]==="("&&B[P+2]===")"||B[P]==="'"&&B[P+2]==="'")&&(Y=i(B[P+1],I),W=Math.pow(10,B[P+1].length)-1,P+=3)):B[P+1]==="/"||B[P+1]===":"?(G=i(B[P],I),D=i(B[P+2],1),P+=3):B[P+3]==="/"&&B[P+1]===" "&&(T=i(B[P],I),G=i(B[P+2],I),D=i(B[P+4],1),P+=5),B.length<=P){b=D*W,I=m=Y+b*T+W*G;break}}default:throw C.InvalidParameter}if(b===0)throw C.DivisionByZero;s.s=I<0?-1:1,s.n=Math.abs(m),s.d=Math.abs(b)};function w(p,d,m){for(var b=1;d>0;p=p*p%m,d>>=1)d&1&&(b=b*p%m);return b}function y(p,d){for(;d%2===0;d/=2);for(;d%5===0;d/=5);if(d===1)return 0;for(var m=10%d,b=1;m!==1;b++)if(m=m*10%d,b>o)return 0;return b}function $(p,d,m){for(var b=1,I=w(10,m,d),T=0;T<300;T++){if(b===I)return T;b=b*10%d,I=I*10%d}return 0}function S(p,d){if(!p)return d;if(!d)return p;for(;;){if(p%=d,!p)return d;if(d%=p,!d)return p}}function C(p,d){if(g(p,d),this instanceof C)p=S(s.d,s.n),this.s=s.s,this.n=s.n/p,this.d=s.d/p;else return f(s.s*s.n,s.d)}C.DivisionByZero=new Error("Division by Zero"),C.InvalidParameter=new Error("Invalid argument"),C.NonIntegerParameter=new Error("Parameters must be integer"),C.prototype={s:1,n:0,d:1,abs:function(){return f(this.n,this.d)},neg:function(){return f(-this.s*this.n,this.d)},add:function(p,d){return g(p,d),f(this.s*this.n*s.d+s.s*this.d*s.n,this.d*s.d)},sub:function(p,d){return g(p,d),f(this.s*this.n*s.d-s.s*this.d*s.n,this.d*s.d)},mul:function(p,d){return g(p,d),f(this.s*s.s*this.n*s.n,this.d*s.d)},div:function(p,d){return g(p,d),f(this.s*s.s*this.n*s.d,this.d*s.n)},clone:function(){return f(this.s*this.n,this.d)},mod:function(p,d){if(isNaN(this.n)||isNaN(this.d))return new C(NaN);if(p===void 0)return f(this.s*this.n%this.d,1);if(g(p,d),s.n===0&&this.d===0)throw C.DivisionByZero;return f(this.s*(s.d*this.n)%(s.n*this.d),s.d*this.d)},gcd:function(p,d){return g(p,d),f(S(s.n,this.n)*S(s.d,this.d),s.d*this.d)},lcm:function(p,d){return g(p,d),s.n===0&&this.n===0?f(0,1):f(s.n*this.n,S(s.n,this.n)*S(s.d,this.d))},ceil:function(p){return p=Math.pow(10,p||0),isNaN(this.n)||isNaN(this.d)?new C(NaN):f(Math.ceil(p*this.s*this.n/this.d),p)},floor:function(p){return p=Math.pow(10,p||0),isNaN(this.n)||isNaN(this.d)?new C(NaN):f(Math.floor(p*this.s*this.n/this.d),p)},round:function(p){return p=Math.pow(10,p||0),isNaN(this.n)||isNaN(this.d)?new C(NaN):f(Math.round(p*this.s*this.n/this.d),p)},inverse:function(){return f(this.s*this.d,this.n)},pow:function(p,d){if(g(p,d),s.d===1)return s.s<0?f(Math.pow(this.s*this.d,s.n),Math.pow(this.n,s.n)):f(Math.pow(this.s*this.n,s.n),Math.pow(this.d,s.n));if(this.s<0)return null;var m=l(this.n),b=l(this.d),I=1,T=1;for(var G in m)if(G!=="1"){if(G==="0"){I=0;break}if(m[G]*=s.n,m[G]%s.d===0)m[G]/=s.d;else return null;I*=Math.pow(G,m[G])}for(var G in b)if(G!=="1"){if(b[G]*=s.n,b[G]%s.d===0)b[G]/=s.d;else return null;T*=Math.pow(G,b[G])}return s.s<0?f(T,I):f(I,T)},equals:function(p,d){return g(p,d),this.s*this.n*s.d===s.s*s.n*this.d},compare:function(p,d){g(p,d);var m=this.s*this.n*s.d-s.s*s.n*this.d;return(0=0;T--)I=I.inverse().add(m[T]);if(I.sub(d).abs().valueOf()0&&(m+=d,m+=" ",b%=I),m+=b,m+="/",m+=I),m},toLatex:function(p){var d,m="",b=this.n,I=this.d;return this.s<0&&(m+="-"),I===1?m+=b:(p&&(d=Math.floor(b/I))>0&&(m+=d,b%=I),m+="\\frac{",m+=b,m+="}{",m+=I,m+="}"),m},toContinued:function(){var p,d=this.n,m=this.d,b=[];if(isNaN(d)||isNaN(m))return b;do b.push(Math.floor(d/m)),p=d%m,d=m,m=p;while(d!==1);return b},toString:function(p){var d=this.n,m=this.d;if(isNaN(d)||isNaN(m))return"NaN";p=p||15;var b=y(d,m),I=$(d,m,b),T=this.s<0?"-":"";if(T+=d/m|0,d%=m,d*=10,d&&(T+="."),b){for(var G=I;G--;)T+=d/m|0,d%=m,d*=10;T+="(";for(var G=b;G--;)T+=d/m|0,d%=m,d*=10;T+=")"}else for(var G=p;d&&G--;)T+=d/m|0,d%=m,d*=10;return T}},Object.defineProperty(C,"__esModule",{value:!0}),C.default=C,C.Fraction=C,r.exports=C})()})(fraction$1);const Fraction$1=getDefaultExportFromCjs(fraction$1.exports);Fraction$1.prototype.sam=function(){return this.floor()};Fraction$1.prototype.nextSam=function(){return this.sam().add(1)};Fraction$1.prototype.wholeCycle=function(){return new TimeSpan(this.sam(),this.nextSam())};Fraction$1.prototype.cyclePos=function(){return this.sub(this.sam())};Fraction$1.prototype.lt=function(r){return this.compare(r)<0};Fraction$1.prototype.gt=function(r){return this.compare(r)>0};Fraction$1.prototype.lte=function(r){return this.compare(r)<=0};Fraction$1.prototype.gte=function(r){return this.compare(r)>=0};Fraction$1.prototype.eq=function(r){return this.compare(r)==0};Fraction$1.prototype.max=function(r){return this.gt(r)?this:r};Fraction$1.prototype.min=function(r){return this.lt(r)?this:r};Fraction$1.prototype.show=function(){return this.s*this.n+"/"+this.d};Fraction$1.prototype.or=function(r){return this.eq(0)?r:this};const fraction=r=>(typeof r=="number"&&(r=String(r)),Fraction$1(r)),gcd=(...r)=>r.reduce((t,e)=>t.gcd(e),fraction(1));fraction._original=Fraction$1;class TimeSpan{constructor(t,e){this.begin=fraction(t),this.end=fraction(e)}get spanCycles(){const t=[];var e=this.begin;const o=this.end,s=o.sam();if(e.equals(o))return[new TimeSpan(e,o)];for(;o.gt(e);){if(e.sam().equals(s)){t.push(new TimeSpan(e,this.end));break}const i=e.nextSam();t.push(new TimeSpan(e,i)),e=i}return t}get duration(){return this.end.sub(this.begin)}cycleArc(){const t=this.begin.cyclePos(),e=t.add(this.duration);return new TimeSpan(t,e)}withTime(t){return new TimeSpan(t(this.begin),t(this.end))}withEnd(t){return new TimeSpan(this.begin,t(this.end))}withCycle(t){const e=this.begin.sam(),o=e.add(t(this.begin.sub(e))),s=e.add(t(this.end.sub(e)));return new TimeSpan(o,s)}intersection(t){const e=this.begin.max(t.begin),o=this.end.min(t.end);if(!e.gt(o)&&!(e.equals(o)&&(e.equals(this.end)&&this.begin.lt(this.end)||e.equals(t.end)&&t.begin.lt(t.end))))return new TimeSpan(e,o)}intersection_e(t){const e=this.intersection(t);if(e==null)throw"TimeSpans do not intersect";return e}midpoint(){return this.begin.add(this.duration.div(fraction(2)))}equals(t){return this.begin.equals(t.begin)&&this.end.equals(t.end)}show(){return this.begin.show()+" -> "+this.end.show()}}class Hap{constructor(t,e,o,s={},i=!1){this.whole=t,this.part=e,this.value=o,this.context=s,this.stateful=i,i&&console.assert(typeof this.value=="function","Stateful values must be functions")}get duration(){return this.whole.end.sub(this.whole.begin)}wholeOrPart(){return this.whole?this.whole:this.part}withSpan(t){const e=this.whole?t(this.whole):void 0;return new Hap(e,t(this.part),this.value,this.context)}withValue(t){return new Hap(this.whole,this.part,t(this.value),this.context)}hasOnset(){return this.whole!=null&&this.whole.begin.equals(this.part.begin)}resolveState(t){if(this.stateful&&this.hasOnset()){console.log("stateful");const e=this.value,[o,s]=e(t);return[o,new Hap(this.whole,this.part,s,this.context,!1)]}return[t,this]}spanEquals(t){return this.whole==null&&t.whole==null||this.whole.equals(t.whole)}equals(t){return this.spanEquals(t)&&this.part.equals(t.part)&&this.value===t.value}show(){return"("+(this.whole==null?"~":this.whole.show())+", "+this.part.show()+", "+this.value+")"}showWhole(){return`${this.whole==null?"~":this.whole.show()}: ${typeof this.value=="object"?JSON.stringify(this.value):this.value}`}combineContext(t){const e=this;return{...e.context,...t.context,locations:(e.context.locations||[]).concat(t.context.locations||[])}}setContext(t){return new Hap(this.whole,this.part,this.value,t)}}class State{constructor(t,e={}){this.span=t,this.controls=e}setSpan(t){return new State(t,this.controls)}withSpan(t){return this.setSpan(t(this.span))}setControls(t){return new State(this.span,t)}}const isNote=r=>/^[a-gA-G][#b]*[0-9]$/.test(r),tokenizeNote=r=>{var s;if(typeof r!="string")return[];const[t,e="",o]=((s=r.match(/^([a-gA-G])([#bs]*)([0-9])?$/))==null?void 0:s.slice(1))||[];return t?[t,e,o?Number(o):void 0]:[]},toMidi=r=>{const[t,e,o]=tokenizeNote(r);if(!t)throw new Error('not a note: "'+r+'"');const s={c:0,d:2,e:4,f:5,g:7,a:9,b:11}[t.toLowerCase()],i=(e==null?void 0:e.split("").reduce((f,l)=>f+{"#":1,b:-1,s:1}[l],0))||0;return(Number(o)+1)*12+s+i},fromMidi=r=>Math.pow(2,(r-69)/12)*440,getFreq=r=>fromMidi(typeof r=="number"?r:toMidi(r)),midi2note=r=>{const t=Math.floor(r/12)-1;return["C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"][r%12]+t},mod=(r,t)=>(r%t+t)%t,getPlayableNoteValue=r=>{let{value:t,context:e}=r;if(typeof t=="object"&&!Array.isArray(t)&&(t=t.note||t.n||t.value),typeof t=="number"&&e.type!=="frequency")t=fromMidi(r.value);else if(typeof t=="number"&&e.type==="frequency")t=r.value;else if(typeof t!="string"||!isNote(t))throw new Error("not a note: "+JSON.stringify(t));return t},getFrequency=r=>{let{value:t,context:e}=r;if(typeof t=="object")return t.freq?t.freq:getFreq(t.note||t.n||t.value);if(typeof t=="number"&&e.type!=="frequency")t=fromMidi(r.value);else if(typeof t=="string"&&isNote(t))t=fromMidi(toMidi(r.value));else if(typeof t!="number")throw new Error("not a note or frequency: "+t);return t},rotate=(r,t)=>r.slice(t).concat(r.slice(0,t)),pipe=(...r)=>r.reduce((t,e)=>(...o)=>t(e(...o)),t=>t),compose=(...r)=>pipe(...r.reverse()),removeUndefineds=r=>r.filter(t=>t!=null),flatten=r=>[].concat(...r),id=r=>r,constant=(r,t)=>r,listRange=(r,t)=>Array.from({length:t-r+1},(e,o)=>o+r);function curry(r,t){const e=function o(...s){if(s.length>=r.length)return r.apply(this,s);{const i=function(...f){return o.apply(this,s.concat(f))};return t&&t(i,s),i}};return t&&t(e,[]),e}function parseNumeral(r){const t=Number(r);if(!isNaN(t))return t;if(isNote(r))return toMidi(r);throw new Error(`cannot parse as numeral: "${r}"`)}function mapArgs(r,t){return(...e)=>r(...e.map(t))}function numeralArgs(r){return mapArgs(r,parseNumeral)}function parseFractional(r){const t=Number(r);if(!isNaN(t))return t;const e={pi:Math.PI,w:1,h:.5,q:.25,e:.125,s:.0625,t:1/3,f:.2,x:1/6}[r];if(typeof e<"u")return e;throw new Error(`cannot parse as fractional: "${r}"`)}const fractionalArgs=r=>mapArgs(r,parseFractional);function unionWithObj(r,t,e){const o=Object.keys(r).filter(s=>Object.keys(t).includes(s));return Object.assign({},r,t,Object.fromEntries(o.map(s=>[s,e(r[s],t[s])])))}curry((r,t)=>r*t);curry((r,t)=>t.map(r));function drawLine(r,t=60){let e=0,o=fraction(0),s=[""],i="";for(;s[0].lengthy.hasOnset()).map(y=>y.duration),g=gcd(...l),w=g.inverse();s=s.map(y=>y+"|"),i+="|";for(let y=0;yd.whole.begin.lte($)&&d.whole.end.gte(S)),p=C.length-s.length;p>0&&(s=s.concat(Array(p).fill(i))),s=s.map((d,m)=>{const b=C[m];if(b){const T=b.whole.begin.eq($)?""+b.value:"-";return d+T}return d+"."}),i+=".",o=o.add(g)}e++}return s.join(` +`)}let stringParser;const setStringParser=r=>stringParser=r;class Pattern$3{constructor(t){K(this,"_Pattern",!0);this.query=t}queryArc(t,e){return this.query(new State(new TimeSpan(t,e)))}_splitQueries(){const t=this,e=o=>flatten(o.span.spanCycles.map(s=>t.query(o.setSpan(s))));return new Pattern$3(e)}withQuerySpan(t){return new Pattern$3(e=>this.query(e.withSpan(t)))}withQuerySpanMaybe(t){const e=this;return new Pattern$3(o=>{const s=o.withSpan(t);return s.span?e.query(s):[]})}withQueryTime(t){return new Pattern$3(e=>this.query(e.withSpan(o=>o.withTime(t))))}withHapSpan(t){return new Pattern$3(e=>this.query(e).map(o=>o.withSpan(t)))}withHapTime(t){return this.withHapSpan(e=>e.withTime(t))}_withHaps(t){return new Pattern$3(e=>t(this.query(e)))}_withHap(t){return this._withHaps(e=>e.map(t))}_setContext(t){return this._withHap(e=>e.setContext(t))}_withContext(t){return this._withHap(e=>e.setContext(t(e.context)))}_stripContext(){return this._withHap(t=>t.setContext({}))}withLocation(t,e){const o={start:{line:t[0],column:t[1],offset:t[2]},end:{line:e[0],column:e[1],offset:e[2]}};return this._withContext(s=>{const i=(s.locations||[]).concat([o]);return{...s,locations:i}})}withMiniLocation(t,e){const o={start:{line:t[0],column:t[1],offset:t[2]},end:{line:e[0],column:e[1],offset:e[2]}};return this._withContext(s=>{let i=s.locations||[];return i=i.map(({start:f,end:l})=>{const g=f.line===1?o.start.column:0;return{start:{...f,line:f.line-1+(o.start.line-1)+1,column:f.column-1+g},end:{...l,line:l.line-1+(o.start.line-1)+1,column:l.column-1+g}}}),{...s,locations:i}})}withValue(t){return new Pattern$3(e=>this.query(e).map(o=>o.withValue(t)))}fmap(t){return this.withValue(t)}_filterHaps(t){return new Pattern$3(e=>this.query(e).filter(t))}_filterValues(t){return new Pattern$3(e=>this.query(e).filter(o=>t(o.value)))}_removeUndefineds(){return this._filterValues(t=>t!=null)}onsetsOnly(){return this._filterHaps(t=>t.hasOnset())}discreteOnly(){return this._filterHaps(t=>t.whole)}_appWhole(t,e){const o=this,s=function(i){const f=o.query(i),l=e.query(i),g=function(w,y){const $=w.part.intersection(y.part);if($!=null)return new Hap(t(w.whole,y.whole),$,w.value(y.value),y.combineContext(w))};return flatten(f.map(w=>removeUndefineds(l.map(y=>g(w,y)))))};return new Pattern$3(s)}appBoth(t){const e=function(o,s){if(!(o==null||s==null))return o.intersection_e(s)};return this._appWhole(e,t)}appLeft(t){const e=this,o=function(s){const i=[];for(const f of e.query(s)){const l=t.query(s.setSpan(f.wholeOrPart()));for(const g of l){const w=f.whole,y=f.part.intersection(g.part);if(y){const $=f.value(g.value),S=g.combineContext(f),C=new Hap(w,y,$,S);i.push(C)}}}return i};return new Pattern$3(o)}appRight(t){const e=this,o=function(s){const i=[];for(const f of t.query(s)){const l=e.query(s.setSpan(f.wholeOrPart()));for(const g of l){const w=f.whole,y=g.part.intersection(f.part);if(y){const $=g.value(f.value),S=f.combineContext(g),C=new Hap(w,y,$,S);i.push(C)}}}return i};return new Pattern$3(o)}firstCycle(t=!1){var e=this;return t||(e=e._stripContext()),e.query(new State(new TimeSpan(fraction(0),fraction(1))))}get _firstCycleValues(){return this.firstCycle().map(t=>t.value)}get _showFirstCycle(){return this.firstCycle().map(t=>`${t.value}: ${t.whole.begin.toFraction()} - ${t.whole.end.toFraction()}`)}_sortHapsByPart(){return this._withHaps(t=>t.sort((e,o)=>e.part.begin.sub(o.part.begin).or(e.part.end.sub(o.part.end)).or(e.whole.begin.sub(o.whole.begin).or(e.whole.end.sub(o.whole.end)))))}_opIn(t,e){return this.fmap(e).appLeft(reify$2(t))}_opOut(t,e){return this.fmap(e).appRight(reify$2(t))}_opMix(t,e){return this.fmap(e).appBoth(reify$2(t))}_opSqueeze(t,e){const o=reify$2(t);return this.fmap(s=>o.fmap(i=>e(s)(i)))._squeezeJoin()}_opSqueezeOut(t,e){const o=this;return reify$2(t).fmap(i=>o.fmap(f=>e(f)(i)))._squeezeJoin()}_opTrig(t,e){return reify$2(t).fmap(s=>this.fmap(i=>e(i)(s)))._trigJoin()}_opTrigzero(t,e){return reify$2(t).fmap(s=>this.fmap(i=>e(i)(s)))._TrigzeroJoin()}_asNumber(){return this.fmap(parseNumeral)}round(){return this._asNumber().fmap(t=>Math.round(t))}floor(){return this._asNumber().fmap(t=>Math.floor(t))}ceil(){return this._asNumber().fmap(t=>Math.ceil(t))}_toBipolar(){return this.fmap(t=>t*2-1)}_fromBipolar(){return this.fmap(t=>(t+1)/2)}_range(t,e){return this.mul(e-t).add(t)}_rangex(t,e){return this._range(Math.log(t),Math.log(e)).fmap(Math.exp)}_range2(t,e){return this._fromBipolar()._range(t,e)}_bindWhole(t,e){const o=this,s=function(i){const f=function(g,w){return new Hap(t(g.whole,w.whole),w.part,w.value,Object.assign({},g.context,w.context,{locations:(g.context.locations||[]).concat(w.context.locations||[])}))},l=function(g){return e(g.value).query(i.setSpan(g.part)).map(w=>f(g,w))};return flatten(o.query(i).map(g=>l(g)))};return new Pattern$3(s)}bind(t){const e=function(o,s){if(!(o==null||s==null))return o.intersection_e(s)};return this._bindWhole(e,t)}join(){return this.bind(id)}outerBind(t){return this._bindWhole((e,o)=>e,t)}outerJoin(){return this.outerBind(id)}innerBind(t){return this._bindWhole((e,o)=>o,t)}innerJoin(){return this.innerBind(id)}_trigJoin(t=!1){const e=this;return new Pattern$3(o=>e.discreteOnly().query(o).map(s=>s.value.late(t?s.whole.begin:s.whole.begin.cyclePos()).query(o).map(i=>new Hap(i.whole?i.whole.intersection(s.whole):void 0,i.part.intersection(s.part),i.value).setContext(s.combineContext(i))).filter(i=>i.part)).flat())}_TrigzeroJoin(){return this._trigJoin(!0)}_squeezeJoin(){const t=this;function e(o){const s=t.discreteOnly().query(o);function i(l){const w=l.value._focusSpan(l.wholeOrPart()).query(o.setSpan(l.part));function y($,S){let C;if(S.whole&&$.whole&&(C=S.whole.intersection($.whole),!C))return;const p=S.part.intersection($.part);if(!p)return;const d=S.combineContext($);return new Hap(C,p,S.value,d)}return w.map($=>y(l,$))}return flatten(s.map(i)).filter(l=>l)}return new Pattern$3(e)}_squeezeBind(t){return this.fmap(t)._squeezeJoin()}_apply(t){return t(this)}layer(...t){return stack$1(...t.map(e=>e(this)))}_patternify(t){const e=this;return function(...s){return s=s.map(f=>isPattern$1(f)?f.fmap(l=>l.value||l):f),sequence$1(...s).fmap(f=>t.call(e,f)).innerJoin()}}_fastGap(t){const e=function(s){const i=s.begin.sam(),f=s.begin.sub(i).mul(t).min(1),l=s.end.sub(i).mul(t).min(1);if(!(f>=1))return new TimeSpan(i.add(f),i.add(l))},o=function(s){const i=s.part.begin,f=s.part.end,l=i.sam(),g=i.sub(l).div(t).min(1),w=f.sub(l).div(t).min(1),y=new TimeSpan(l.add(g),l.add(w)),$=s.whole?new TimeSpan(y.begin.sub(i.sub(s.whole.begin).div(t)),y.end.add(s.whole.end.sub(f).div(t))):void 0;return new Hap($,y,s.value,s.context)};return this.withQuerySpanMaybe(e)._withHap(o)._splitQueries()}_compress(t,e){return t.gt(e)||t.gt(1)||e.gt(1)||t.lt(0)||e.lt(0)?silence$1:this._fastGap(fraction(1).div(e.sub(t)))._late(t)}_compressSpan(t){return this._compress(t.begin,t.end)}_focus(t,e){return this._fast(fraction(1).div(e.sub(t))).late(t.cyclePos())}_focusSpan(t){return this._focus(t.begin,t.end)}_fast(t){return this.withQueryTime(o=>o.mul(t)).withHapTime(o=>o.div(t))}_slow(t){return this._fast(fraction(1).div(t))}_inside(t,e){return e(this._slow(t))._fast(t)}_outside(t,e){return e(this._fast(t))._slow(t)}_ply(t){return this.fmap(e=>pure$1(e)._fast(t))._squeezeJoin()}_chop(t){const o=Array.from({length:t},(i,f)=>f).map(i=>({begin:i/t,end:(i+1)/t})),s=function(i){return sequence$1(o.map(f=>Object.assign({},i,f)))};return this._squeezeBind(s)}_striate(t){const o=Array.from({length:t},(i,f)=>f).map(i=>({begin:i/t,end:(i+1)/t})),s=slowcat$1(...o);return this.set(s)._fast(t)}_cpm(t){return this._fast(t/60)}_early(t){return t=fraction(t),this.withQueryTime(e=>e.add(t)).withHapTime(e=>e.sub(t))}_late(t){return t=fraction(t),this._early(fraction(0).sub(t))}_zoom(t,e){e=fraction(e),t=fraction(t);const o=e.sub(t);return this.withQuerySpan(s=>s.withCycle(i=>i.mul(o).add(t))).withHapSpan(s=>s.withCycle(i=>i.sub(t).div(o)))._splitQueries()}_zoomArc(t){return this.zoom(t.begin,t.end)}_linger(t){return t==0?silence$1:t<0?this._zoom(t.add(1),1)._slow(t):this._zoom(0,t)._slow(t)}_color(t){return this._withContext(e=>({...e,color:t}))}log(){return this._withHap(t=>{var e;return t.setContext({...t.context,logs:(((e=t.context)==null?void 0:e.logs)||[]).concat([t.show()])})})}drawLine(){return console.log(drawLine(this)),this}_segment(t){return this.struct(pure$1(!0)._fast(t))}invert(){return this.fmap(t=>!t)}inv(){return this.invert()}when(t,e){const o=t._filterValues(id),s=t._filterValues(l=>!l),i=o.fmap(l=>g=>g).appRight(e(this)),f=s.fmap(l=>g=>g).appRight(this);return stack$1(i,f)}off(t,e){return stack$1(this,e(this.late(t)))}every(t,e){const o=this,s=Array(t-1).fill(o);return s.push(e(o)),slowcatPrime(...s)}every(t,e){const o=this,s=Array(t-1).fill(o);return s.unshift(e(o)),slowcatPrime(...s)}each(t,e){const o=this,s=Array(t-1).fill(o);return s.push(e(o)),slowcatPrime(...s)}brak(){return this.when(slowcat$1(!1,!0),t=>fastcat(t,silence$1)._late(.25))}rev(){const t=this,e=function(o){const s=o.span,i=s.begin.sam(),f=s.begin.nextSam(),l=function(w){const y=w.withTime(S=>i.add(f.sub(S))),$=y.begin;return y.begin=y.end,y.end=$,y};return t.query(o.setSpan(l(s))).map(w=>w.withSpan(l))};return new Pattern$3(e)._splitQueries()}palindrome(){return this.every(2,rev)}juxBy(t,e){t/=2;const o=function(f,l,g){return l in f?f[l]:g},s=this.withValue(f=>Object.assign({},f,{pan:o(f,"pan",.5)-t})),i=this.withValue(f=>Object.assign({},f,{pan:o(f,"pan",.5)+t}));return stack$1(s,e(i))}_jux(t){return this.juxBy(1,t)}stack(...t){return stack$1(this,...t)}sequence(...t){return sequence$1(this,...t)}seq(...t){return sequence$1(this,...t)}cat(...t){return cat(this,...t)}fastcat(...t){return fastcat(this,...t)}slowcat(...t){return slowcat$1(this,...t)}superimpose(...t){return this.stack(...t.map(e=>e(this)))}stutWith(t,e,o){return stack$1(...listRange(0,t-1).map(s=>o(this.late(fraction(e).mul(s)),s)))}stut(t,e,o){return this.stutWith(t,o,(s,i)=>s.velocity(Math.pow(e,i)))}_echoWith(t,e,o){return stack$1(...listRange(0,t-1).map(s=>o(this.late(fraction(e).mul(s)),s)))}_echo(t,e,o){return this._echoWith(t,e,(s,i)=>s.velocity(Math.pow(o,i)))}iter(t,e=!1){return slowcat$1(...listRange(0,t-1).map(o=>e?this.late(o/t):this.early(o/t)))}iterBack(t){return this.iter(t,!0)}_chunk(t,e,o=!1){const s=Array(t-1).fill(!1);s.unshift(!0);const i=sequence$1(...s).iter(t,o);return this.when(i,e)}_chunkBack(t,e){return this._chunk(t,e,!0)}_bypass(t){return t=Boolean(parseInt(t)),t?silence$1:this}hush(){return silence$1}_duration(t){return this.withHapSpan(e=>new TimeSpan(e.begin,e.begin.add(t)))}_legato(t){return this.withHapSpan(e=>new TimeSpan(e.begin,e.begin.add(e.end.sub(e.begin).mul(t))))}_velocity(t){return this._withContext(e=>({...e,velocity:(e.velocity||1)*t}))}_loopAt(t,e=1){return this.speed(1/t*e).unit("c").slow(t)}onTrigger(t){return this._withHap(e=>e.setContext({...e.context,onTrigger:t}))}log(t=id){return this._withHap(e=>e.setContext({...e.context,onTrigger:(...o)=>{e.context.onTrigger&&e.context.onTrigger(...o),console.log(t(...o))}}))}logValues(t=id){return this.log((e,o)=>t(o.value))}}function _composeOp(r,t,e){function o(s){return s instanceof Object&&!(s instanceof Function)}return o(r)||o(t)?(o(r)||(r={value:r}),o(t)||(t={value:t}),unionWithObj(r,t,e)):e(r,t)}(function(){const r={set:[(t,e)=>e],keep:[(t,e)=>t],keepif:[(t,e)=>e?t:void 0],add:[numeralArgs((t,e)=>t+e)],sub:[numeralArgs((t,e)=>t-e)],mul:[numeralArgs((t,e)=>t*e)],div:[numeralArgs((t,e)=>t/e)],mod:[numeralArgs(mod)],pow:[numeralArgs(Math.pow)],_and:[numeralArgs((t,e)=>t&e)],_or:[numeralArgs((t,e)=>t|e)],_xor:[numeralArgs((t,e)=>t^e)],_lshift:[numeralArgs((t,e)=>t<t>>e)],lt:[(t,e)=>tt>e],lte:[(t,e)=>t<=e],gte:[(t,e)=>t>=e],eq:[(t,e)=>t==e],eqt:[(t,e)=>t===e],ne:[(t,e)=>t!=e],net:[(t,e)=>t!==e],and:[(t,e)=>t&&e],or:[(t,e)=>t||e],func:[(t,e)=>e(t)]};for(const[t,[e,o]]of Object.entries(r))for(const s of["In","Out","Mix","Squeeze","SqueezeOut","Trig","Trigzero"])Pattern$3.prototype[t+s]=function(...i){var f=this;i=sequence$1(i),o&&(f=o(f),i=o(i));var l;return t==="keepif"?(l=f["_op"+s](i,g=>w=>e(g,w)),l=l._removeUndefineds()):l=f["_op"+s](i,g=>w=>_composeOp(g,w,e)),l},s==="Squeeze"&&(Pattern$3.prototype[t+"SqueezeIn"]=Pattern$3.prototype[t+s]),s==="In"?Pattern$3.prototype[t]=Pattern$3.prototype[t+s]:t==="set"&&(Pattern$3.prototype[s.toLowerCase()]=Pattern$3.prototype[t+s]);Pattern$3.prototype.struct=Pattern$3.prototype.keepifOut,Pattern$3.prototype.structAll=Pattern$3.prototype.keepOut,Pattern$3.prototype.mask=Pattern$3.prototype.keepifIn,Pattern$3.prototype.maskAll=Pattern$3.prototype.keepIn,Pattern$3.prototype.reset=Pattern$3.prototype.keepifTrig,Pattern$3.prototype.resetAll=Pattern$3.prototype.keepTrig,Pattern$3.prototype.restart=Pattern$3.prototype.keepifTrigzero,Pattern$3.prototype.restartAll=Pattern$3.prototype.keepTrigzero})();Pattern$3.prototype.patternified=["apply","chop","color","cpm","duration","early","fast","jux","late","legato","linger","ply","segment","striate","slow","velocity"];const polyrhythm=stack$1,pr=stack$1;Pattern$3.prototype.factories={pure:pure$1,stack:stack$1,slowcat:slowcat$1,fastcat,cat,timeCat:timeCat$1,sequence:sequence$1,seq,polymeter,pm,polyrhythm,pr};const silence$1=new Pattern$3(r=>[]);function pure$1(r){function t(e){return e.span.spanCycles.map(o=>new Hap(fraction(o.begin).wholeCycle(),o,r))}return new Pattern$3(t)}function isPattern$1(r){const t=r instanceof Pattern$3||(r==null?void 0:r._Pattern);return!r instanceof Pattern$3&&console.warn(`Found Pattern that fails "instanceof Pattern" check. + This may happen if you are using multiple versions of @strudel.cycles/core. + Please check by running "npm ls @strudel.cycles/core".`),t}function reify$2(r){return isPattern$1(r)?r:stringParser&&typeof r=="string"?stringParser(r):pure$1(r)}function stack$1(...r){r=r.map(e=>Array.isArray(e)?sequence$1(...e):reify$2(e));const t=e=>flatten(r.map(o=>o.query(e)));return new Pattern$3(t)}function slowcat$1(...r){r=r.map(e=>Array.isArray(e)?sequence$1(...e):reify$2(e));const t=function(e){const o=e.span,s=mod(o.begin.sam(),r.length),i=r[s];if(!i)return[];const f=o.begin.floor().sub(o.begin.div(r.length).floor());return i.withHapTime(l=>l.add(f)).query(e.setSpan(o.withTime(l=>l.sub(f))))};return new Pattern$3(t)._splitQueries()}function slowcatPrime(...r){r=r.map(reify$2);const t=function(e){const o=Math.floor(e.span.begin)%r.length,s=r[o];return(s==null?void 0:s.query(e))||[]};return new Pattern$3(t)._splitQueries()}function fastcat(...r){return slowcat$1(...r)._fast(r.length)}function cat(...r){return slowcat$1(...r)}function timeCat$1(...r){const t=r.map(s=>s[0]).reduce((s,i)=>s.add(i),fraction(0));let e=fraction(0);const o=[];for(const[s,i]of r){const f=e.add(s);o.push(reify$2(i)._compress(e.div(t),f.div(t))),e=f}return stack$1(...o)}function sequence$1(...r){return fastcat(...r)}function seq(...r){return fastcat(...r)}function _sequenceCount(r){return Array.isArray(r)?r.length==0?[silence$1,0]:r.length==1?_sequenceCount(r[0]):[fastcat(...r.map(t=>_sequenceCount(t)[0])),r.length]:[reify$2(r),1]}function polymeterSteps(r,...t){const e=t.map(s=>_sequenceCount(s));if(e.length==0)return silence$1;r==0&&(r=e[0][1]);const o=[];for(const s of e)s[1]==0&&next,r==s[1]?o.push(s[0]):o.push(s[0]._fast(fraction(r).div(fraction(s[1]))));return stack$1(...o)}function polymeter(...r){return polymeterSteps(0,...r)}function pm(...r){polymeter(...r)}const add=curry((r,t)=>t.add(r)),chop=curry((r,t)=>t.chop(r)),chunk=curry((r,t)=>t.chunk(r)),chunkBack=curry((r,t)=>t.chunkBack(r)),div=curry((r,t)=>t.div(r)),early=curry((r,t)=>t.early(r)),echo=curry((r,t,e,o)=>o.echo(r,t,e)),every=curry((r,t,e)=>e.every(r,t)),fast=curry((r,t)=>t.fast(r)),inv=r=>r.inv(),invert=r=>r.invert(),iter=curry((r,t)=>t.iter(r)),iterBack=curry((r,t)=>t.iter(r)),jux=curry((r,t)=>t.jux(r)),juxBy=curry((r,t,e)=>e.juxBy(r,t)),late=curry((r,t)=>t.late(r)),linger=curry((r,t)=>t.linger(r)),mask=curry((r,t)=>t.mask(r)),mul=curry((r,t)=>t.mul(r)),off=curry((r,t,e)=>e.off(r,t)),ply=curry((r,t)=>t.ply(r)),range=curry((r,t,e)=>e.range(r,t)),rangex=curry((r,t,e)=>e.rangex(r,t)),range2=curry((r,t,e)=>e.range2(r,t)),rev=r=>r.rev(),slow=curry((r,t)=>t.slow(r)),struct=curry((r,t)=>t.struct(r)),sub=curry((r,t)=>t.sub(r)),superimpose=curry((r,t)=>t.superimpose(...r)),set=curry((r,t)=>t.set(r)),when=curry((r,t,e)=>e.when(r,t));Pattern$3.prototype.composable={fast,slow,early,late,superimpose};function makeComposable(r){return Object.entries(Pattern$3.prototype.composable).forEach(([t,e])=>{r[t]=(...o)=>{const s=compose(r,e(...o));return makeComposable(s)}}),r}const patternify2=r=>(t,e,o)=>t.fmap(s=>i=>r.call(o,s,i)).appLeft(e).innerJoin(),patternify3=r=>(t,e,o,s)=>t.fmap(i=>f=>l=>r.call(s,i,f,l)).appLeft(e).appLeft(o).innerJoin(),patternify4=r=>(t,e,o,s,i)=>t.fmap(f=>l=>g=>w=>r.call(i,f,l,g,w)).appLeft(e).appLeft(o).appLeft(s).innerJoin();Pattern$3.prototype.echo=function(...r){return r=r.map(reify$2),patternify3(Pattern$3.prototype._echo)(...r,this)};Pattern$3.prototype.echoWith=function(...r){return r=r.map(reify$2),patternify3(Pattern$3.prototype._echoWith)(...r,this)};Pattern$3.prototype.chunk=function(...r){return r=r.map(reify$2),patternify2(Pattern$3.prototype._chunk)(...r,this)};Pattern$3.prototype.chunkBack=function(...r){return r=r.map(reify$2),patternify2(Pattern$3.prototype._chunkBack)(...r,this)};Pattern$3.prototype.loopAt=function(...r){return r=r.map(reify$2),patternify2(Pattern$3.prototype._loopAt)(...r,this)};Pattern$3.prototype.zoom=function(...r){return r=r.map(reify$2),patternify2(Pattern$3.prototype._zoom)(...r,this)};Pattern$3.prototype.compress=function(...r){return r=r.map(reify$2),patternify2(Pattern$3.prototype._compress)(...r,this)};Pattern$3.prototype.outside=function(...r){return r=r.map(reify$2),patternify2(Pattern$3.prototype._outside)(...r,this)};Pattern$3.prototype.inside=function(...r){return r=r.map(reify$2),patternify2(Pattern$3.prototype._inside)(...r,this)};Pattern$3.prototype.range=function(...r){return r=r.map(reify$2),patternify2(Pattern$3.prototype._range)(...r,this)};Pattern$3.prototype.rangex=function(...r){return r=r.map(reify$2),patternify2(Pattern$3.prototype._rangex)(...r,this)};Pattern$3.prototype.range2=function(...r){return r=r.map(reify$2),patternify2(Pattern$3.prototype._range2)(...r,this)};Pattern$3.prototype.bootstrap=function(){const r=Object.fromEntries(Object.entries(Pattern$3.prototype.composable).map(([t,e])=>(Pattern$3.prototype[t]&&(Pattern$3.prototype[t]=makeComposable(Pattern$3.prototype[t])),[t,curry(e,makeComposable)])));return this.patternified.forEach(t=>{Pattern$3.prototype[t]=function(...e){return this._patternify(Pattern$3.prototype["_"+t])(...e)}}),r};Pattern$3.prototype.define=(r,t,e={})=>{e.composable&&(Pattern$3.prototype.composable[r]=t),e.patternified&&(Pattern$3.prototype.patternified=Pattern$3.prototype.patternified.concat([r])),Pattern$3.prototype.bootstrap()};Pattern$3.prototype.define("hush",r=>r.hush(),{patternified:!1,composable:!0});Pattern$3.prototype.define("bypass",r=>r.bypass(on),{patternified:!0,composable:!0});const controls={},generic_params=[["s","s","sound"],["f","n","The note or sample number to choose for a synth or sampleset"],["f","note","The note or pitch to play a sound or synth with"],["f","accelerate","a pattern of numbers that speed up (or slow down) samples while they play."],["f","gain","a pattern of numbers that specify volume. Values less than 1 make the sound quieter. Values greater than 1 make the sound louder. For the linear equivalent, see @amp@."],["f","amp","like @gain@, but linear."],["f","attack","a pattern of numbers to specify the attack time (in seconds) of an envelope applied to each sample."],["f","bank","selects sound bank to use"],["f","decay",""],["f","sustain",""],["f","release","a pattern of numbers to specify the release time (in seconds) of an envelope applied to each sample."],["f","hold","a pattern of numbers to specify the hold time (in seconds) of an envelope applied to each sample. Only takes effect if `attack` and `release` are also specified."],["f","bandf","A pattern of numbers from 0 to 1. Sets the center frequency of the band-pass filter."],["f","bandq","a pattern of anumbers from 0 to 1. Sets the q-factor of the band-pass filter."],["f","begin","a pattern of numbers from 0 to 1. Skips the beginning of each sample, e.g. `0.25` to cut off the first quarter from each sample."],["f","end","the same as `begin`, but cuts the end off samples, shortening them; e.g. `0.75` to cut off the last quarter of each sample."],["f","loop","loops the sample (from `begin` to `end`) the specified number of times."],["f","legato","controls the amount of overlap between two adjacent sounds"],["f","crush","bit crushing, a pattern of numbers from 1 (for drastic reduction in bit-depth) to 16 (for barely no reduction)."],["f","coarse","fake-resampling, a pattern of numbers for lowering the sample rate, i.e. 1 for original 2 for half, 3 for a third and so on."],["i","channel","choose the channel the pattern is sent to in superdirt"],["i","cut","In the style of classic drum-machines, `cut` will stop a playing sample as soon as another samples with in same cutgroup is to be played. An example would be an open hi-hat followed by a closed one, essentially muting the open."],["f","cutoff","a pattern of numbers from 0 to 1. Applies the cutoff frequency of the low-pass filter."],["f","hcutoff","a pattern of numbers from 0 to 1. Applies the cutoff frequency of the high-pass filter. Also has alias @hpf@"],["f","hresonance","a pattern of numbers from 0 to 1. Applies the resonance of the high-pass filter. Has alias @hpq@"],["f","resonance","a pattern of numbers from 0 to 1. Specifies the resonance of the low-pass filter."],["f","djf","DJ filter, below 0.5 is low pass filter, above is high pass filter."],["f","delay","a pattern of numbers from 0 to 1. Sets the level of the delay signal."],["f","delayfeedback","a pattern of numbers from 0 to 1. Sets the amount of delay feedback."],["f","delaytime","a pattern of numbers from 0 to 1. Sets the length of the delay."],["f","lock","A pattern of numbers. Specifies whether delaytime is calculated relative to cps. When set to 1, delaytime is a direct multiple of a cycle."],["f","detune",""],["f","dry","when set to `1` will disable all reverb for this pattern. See `room` and `size` for more information about reverb."],["f","fadeTime","Used when using begin/end or chop/striate and friends, to change the fade out time of the 'grain' envelope."],["f","fadeInTime","As with fadeTime, but controls the fade in time of the grain envelope. Not used if the grain begins at position 0 in the sample."],["f","freq",""],["f","gate",""],["f","leslie",""],["f","lrate",""],["f","lsize",""],["f","degree",""],["f","mtranspose",""],["f","ctranspose",""],["f","harmonic",""],["f","stepsPerOctave",""],["f","octaveR",""],["f","nudge","Nudges events into the future by the specified number of seconds. Negative numbers work up to a point as well (due to internal latency)"],["i","octave",""],["f","offset",""],["i","orbit","a pattern of numbers. An `orbit` is a global parameter context for patterns. Patterns with the same orbit will share hardware output bus offset and global effects, e.g. reverb and delay. The maximum number of orbits is specified in the superdirt startup, numbers higher than maximum will wrap around."],["f","overgain",""],["f","overshape",""],["f","pan","a pattern of numbers between 0 and 1, from left to right (assuming stereo), once round a circle (assuming multichannel)"],["f","panspan","a pattern of numbers between -inf and inf, which controls how much multichannel output is fanned out (negative is backwards ordering)"],["f","pansplay","a pattern of numbers between 0.0 and 1.0, which controls the multichannel spread range (multichannel only)"],["f","panwidth","a pattern of numbers between 0.0 and inf, which controls how much each channel is distributed over neighbours (multichannel only)"],["f","panorient","a pattern of numbers between -1.0 and 1.0, which controls the relative position of the centre pan in a pair of adjacent speakers (multichannel only)"],["f","rate","used in SuperDirt softsynths as a control rate or 'speed'"],["f","slide",""],["f","semitone",""],["f","velocity",""],["f","voice",""],["f","room","a pattern of numbers from 0 to 1. Sets the level of reverb."],["f","size","a pattern of numbers from 0 to 1. Sets the perceptual size (reverb time) of the `room` to be used in reverb."],["f","roomsize","a pattern of numbers from 0 to 1. Sets the perceptual size (reverb time) of the `room` to be used in reverb."],["f","shape","wave shaping distortion, a pattern of numbers from 0 for no distortion up to 1 for loads of distortion."],["f","speed","a pattern of numbers which changes the speed of sample playback, i.e. a cheap way of changing pitch. Negative values will play the sample backwards!"],["s","unit",'used in conjunction with `speed`, accepts values of "r" (rate, default behavior), "c" (cycles), or "s" (seconds). Using `unit "c"` means `speed` will be interpreted in units of cycles, e.g. `speed "1"` means samples will be stretched to fill a cycle. Using `unit "s"` means the playback speed will be adjusted so that the duration is the number of seconds specified by `speed`.'],["f","squiz",""],["f","stutterdepth",""],["f","stuttertime",""],["f","timescale",""],["f","timescalewin",""],["s","vowel","formant filter to make things sound like vowels, a pattern of either `a`, `e`, `i`, `o` or `u`. Use a rest (`~`) for no effect."],["f","waveloss",""],["f","dur",""],["f","expression",""],["f","sustainpedal",""],["f","tremolodepth","Tremolo Audio DSP effect | params are 'tremolorate' and 'tremolodepth'"],["f","tremolorate","Tremolo Audio DSP effect | params are 'tremolorate' and 'tremolodepth'"],["f","phaserdepth","Phaser Audio DSP effect | params are 'phaserrate' and 'phaserdepth'"],["f","phaserrate","Phaser Audio DSP effect | params are 'phaserrate' and 'phaserdepth'"],["f","fshift","frequency shifter"],["f","fshiftnote","frequency shifter"],["f","fshiftphase","frequency shifter"],["f","triode","tube distortion"],["f","krush","shape/bass enhancer"],["f","kcutoff",""],["f","octer","octaver effect"],["f","octersub","octaver effect"],["f","octersubsub","octaver effect"],["f","ring","ring modulation"],["f","ringf","ring modulation"],["f","ringdf","ring modulation"],["f","distort","noisy fuzzy distortion"],["f","freeze","Spectral freeze"],["f","xsdelay",""],["f","tsdelay",""],["f","real","Spectral conform"],["f","imag",""],["f","enhance","Spectral enhance"],["f","partials",""],["f","comb","Spectral comb"],["f","smear","Spectral smear"],["f","scram","Spectral scramble"],["f","binshift","Spectral binshift"],["f","hbrick","High pass sort of spectral filter"],["f","lbrick","Low pass sort of spectral filter"],["f","midichan",""],["f","control",""],["f","ccn",""],["f","ccv",""],["f","polyTouch",""],["f","midibend",""],["f","miditouch",""],["f","ctlNum",""],["f","frameRate",""],["f","frames",""],["f","hours",""],["s","midicmd",""],["f","minutes",""],["f","progNum",""],["f","seconds",""],["f","songPtr",""],["f","uid",""],["f","val",""],["f","cps",""],["f","clip",""]],_name=(r,...t)=>sequence$1(...t).withValue(e=>({[r]:e})),_setter=(r,t)=>function(...e){return e.length?this.set(r(...e)):this.fmap(o=>({[t]:o}))};generic_params.forEach(([r,t,e])=>{controls[t]=(...o)=>_name(t,...o),Pattern$3.prototype[t]=_setter(controls[t],t)});controls.createParam=r=>{const t=(...e)=>_name(r,...e);return Pattern$3.prototype[r]=_setter(t,r),(...e)=>_name(r,...e)};controls.createParams=(...r)=>r.reduce((t,e)=>Object.assign(t,{[e]:createParam(e)}),{});function bjorklund(r,t){for(var e=[],o=[],s=[t],i=r-t,f=0,l=function(g){if(g==-1)e.push(0);else if(g==-2)e.push(1);else{for(var w=0;w1;)o.push(Math.floor(i/s[f])),s.push(i%s[f]),i=s[f],f++;return o.push(i),l(f),e.reverse()}var bjork=function(r,t){return r>t?bjorklund(r,t):bjorklund(t,r)};const euclid=(r,t,e=0)=>{const o=bjork(t,r);return e?rotate(o,-e):o};Pattern$3.prototype.euclid=function(r,t,e=0){return this.struct(euclid(r,t,e))};Pattern$3.prototype.euclidLegato=function(r,t,e=0){const o=euclid(r,t,e),s=o.indexOf(1),i=rotate(o,s).join("").split("1").slice(1).map(f=>[f.length+1,!0]);return this.struct(timeCat$1(...i)).late(fraction(s).div(t))};function steady(r){return new Pattern$3(t=>[new Hap(void 0,t.span,r)])}const signal=r=>{const t=e=>[new Hap(void 0,e.span,r(e.span.midpoint()))];return new Pattern$3(t)},isaw=signal(r=>1-r%1),isaw2=isaw._toBipolar(),saw=signal(r=>r%1),saw2=saw._toBipolar(),sine2=signal(r=>Math.sin(Math.PI*2*r)),sine=sine2._fromBipolar(),cosine=sine._early(fraction(1).div(4)),cosine2=sine2._early(fraction(1).div(4)),square=signal(r=>Math.floor(r*2%2)),square2=square._toBipolar(),tri=fastcat(isaw,saw),tri2=fastcat(isaw2,saw2),time=signal(id),xorwise=r=>{const t=r<<13^r,e=t>>17^t;return e<<5^e},_frac=r=>r-Math.trunc(r),timeToIntSeed=r=>xorwise(Math.trunc(_frac(r/300)*536870912)),intSeedToRand=r=>r%536870912/536870912,timeToRand=r=>Math.abs(intSeedToRand(timeToIntSeed(r))),rand=signal(timeToRand),rand2=rand._toBipolar(),_brandBy=r=>rand.fmap(t=>treify$2(r).fmap(_brandBy).innerJoin(),brand=_brandBy(.5),_irand=r=>rand.fmap(t=>Math.trunc(t*r)),irand=r=>reify$2(r).fmap(_irand).innerJoin(),__chooseWith=(r,t)=>(t=t.map(reify$2),t.length==0?silence$1:r.range(0,t.length).fmap(e=>t[Math.floor(e)])),chooseWith=(r,t)=>__chooseWith(r,t).outerJoin(),chooseInWith=(r,t)=>__chooseWith(r,t).innerJoin(),choose=(...r)=>chooseWith(rand,r);Pattern$3.prototype.choose=function(...r){return chooseWith(this,r)};Pattern$3.prototype.choose2=function(...r){return chooseWith(this._fromBipolar(),r)};const chooseCycles=(...r)=>chooseInWith(rand.segment(1),r),randcat=chooseCycles,_wchooseWith=function(r,...t){const e=t.map(l=>reify$2(l[0])),o=[];let s=0;for(const l of t)s+=l[1],o.push(s);const i=s,f=function(l){const g=l*i;return e[o.findIndex(w=>w>g,o)]};return r.fmap(f)},wchooseWith=(...r)=>_wchooseWith(...r).outerJoin(),wchoose=(...r)=>wchooseWith(rand,...r),wchooseCycles=(...r)=>_wchooseWith(rand,...r).innerJoin(),perlinWith=r=>{const t=r.fmap(Math.floor),e=r.fmap(i=>Math.floor(i)+1),o=i=>6*i**5-15*i**4+10*i**3,s=i=>f=>l=>f+o(i)*(l-f);return r.sub(t).fmap(s).appBoth(t.fmap(timeToRand)).appBoth(e.fmap(timeToRand))},perlin=perlinWith(time.fmap(r=>Number(r)));Pattern$3.prototype._degradeByWith=function(r,t){return this.fmap(e=>o=>e).appLeft(r._filterValues(e=>e>t))};Pattern$3.prototype._degradeBy=function(r){return this._degradeByWith(rand,r)};Pattern$3.prototype.degrade=function(){return this._degradeBy(.5)};Pattern$3.prototype._undegradeBy=function(r){return this._degradeByWith(rand.fmap(t=>1-t),r)};Pattern$3.prototype.undegrade=function(){return this._undegradeBy(.5)};Pattern$3.prototype._sometimesBy=function(r,t){return stack$1(this._degradeBy(r),t(this._undegradeBy(1-r)))};Pattern$3.prototype.sometimesBy=function(r,t){const e=this;return reify$2(r).fmap(o=>e._sometimesBy(o,t)).innerJoin()};Pattern$3.prototype._sometimesByPre=function(r,t){return stack$1(this._degradeBy(r),t(this).undegradeBy(1-r))};Pattern$3.prototype.sometimesByPre=function(r,t){const e=this;return reify$2(r).fmap(o=>e._sometimesByPre(o,t)).innerJoin()};Pattern$3.prototype.sometimes=function(r){return this._sometimesBy(.5,r)};Pattern$3.prototype.sometimesPre=function(r){return this._sometimesByPre(.5,r)};Pattern$3.prototype._someCyclesBy=function(r,t){return stack$1(this._degradeByWith(rand._segment(1),r),t(this._degradeByWith(rand.fmap(e=>1-e)._segment(1),1-r)))};Pattern$3.prototype.someCyclesBy=function(r,t){const e=this;return reify$2(r).fmap(o=>e._someCyclesBy(o,t)).innerJoin()};Pattern$3.prototype.someCycles=function(r){return this._someCyclesBy(.5,r)};Pattern$3.prototype.often=function(r){return this.sometimesBy(.75,r)};Pattern$3.prototype.rarely=function(r){return this.sometimesBy(.25,r)};Pattern$3.prototype.almostNever=function(r){return this.sometimesBy(.1,r)};Pattern$3.prototype.almostAlways=function(r){return this.sometimesBy(.9,r)};Pattern$3.prototype.never=function(r){return this};Pattern$3.prototype.always=function(r){return r(this)};Pattern$3.prototype.patternified.push("degradeBy","undegradeBy");let synth;try{synth=window==null?void 0:window.speechSynthesis}catch{console.warn("cannot use window: not in browser?")}let allVoices=synth==null?void 0:synth.getVoices();function speak(r,t,e){synth.cancel();const o=new SpeechSynthesisUtterance(r);o.lang=t,allVoices=synth.getVoices();const s=allVoices.filter(i=>i.lang.includes(t));typeof e=="number"?o.voice=s[e%s.length]:typeof e=="string"&&(o.voice=s.find(i=>i.name===i)),speechSynthesis.speak(o)}Pattern$3.prototype._speak=function(r,t){return this._withHap(e=>{const o=(s,i)=>{speak(i.value,r,t)};return e.setContext({...e.context,onTrigger:o})})};Pattern$3.prototype.speak=function(r,t){return patternify2(Pattern$3.prototype._speak)(reify(r),reify(t),this)};const{isPattern,Pattern:Pattern$2}=strudel;let scoped=!1;const evalScope=async(...r)=>{scoped&&console.warn("evalScope was called more than once."),scoped=!0;const t=await Promise.allSettled(r),e=t.filter(o=>o.status==="fulfilled").map(o=>o.value);t.forEach((o,s)=>{o.status==="rejected"&&console.warn(`evalScope: module with index ${s} could not be loaded:`,o.reason)}),Object.assign(globalThis,...e,Pattern$2.prototype.bootstrap())};function safeEval(r,t={}){const{wrapExpression:e=!0,wrapAsync:o=!0}=t;e&&(r=`{${r}}`),o&&(r=`(async ()=>${r})()`);const s=`"use strict";return (${r})`;return Function(s)()}const evaluate$1=async(r,t)=>{scoped||await evalScope(),t&&(r=t(r));let o=await safeEval(r,{wrapExpression:!!t});if(!isPattern(o)){console.log("evaluated",o);const s=`got "${typeof o}" instead of pattern`;throw new Error(s+(typeof o=="function"?", did you forget to call a function?":"."))}return{mode:"javascript",pattern:o}};function createClock(r,t,e=.05,o=.1,s=.1){let i=0,f=0,l=10**4,g=.01;const w=b=>e=b(e);s=s||o/2;const y=()=>{const b=r(),I=b+o+s;for(f===0&&(f=b+g);f=b&&t(f,e,i),f{y(),$=setInterval(y,o*1e3)},C=()=>clearInterval($);return{setDuration:w,start:S,stop:()=>{i=0,f=0,C()},pause:()=>C(),duration:e,getPhase:()=>f}}class Cyclist{constructor({interval:t,onTrigger:e,onError:o,getTime:s,latency:i=.1}){K(this,"worker");K(this,"pattern");K(this,"started",!1);K(this,"cps",1);K(this,"getTime");K(this,"phase",0);this.getTime=s;const f=l=>Math.round(l*1e3)/1e3;this.clock=createClock(s,(l,g,w)=>{w===0&&(this.origin=l);const y=f(l-this.origin);this.phase=y-i;const $=f(y+g),S=s();try{this.pattern.queryArc(y,$).forEach(p=>{if(p.part.begin.equals(p.whole.begin)){const d=p.whole.begin+this.origin-S+i,m=p.duration*1;e==null||e(p,d,m)}})}catch(C){console.warn("scheduler error",C),o==null||o(C)}},t)}getPhase(){return this.phase}start(){if(!this.pattern)throw new Error("Scheduler: no pattern set! call .setPattern first.");this.clock.start(),this.started=!0}pause(){this.clock.stop(),delete this.origin,this.started=!1}stop(){delete this.origin,this.clock.stop(),this.started=!1}setPattern(t,e=!1){this.pattern=t,e&&!this.started&&this.start()}setCps(t=1){this.cps=t}log(t,e,o){const s=o.filter(i=>i.hasOnset());console.log(`${t.toFixed(4)} - ${e.toFixed(4)} ${Array(s.length).fill("I").join("")}`)}}function repl({interval:r,defaultOutput:t,onSchedulerError:e,onEvalError:o,onEval:s,getTime:i,transpiler:f}){const l=new Cyclist({interval:r,onTrigger:t,onError:e,getTime:i});return{scheduler:l,evaluate:async w=>{if(!w)throw new Error("no code to evaluate");try{const{pattern:y}=await evaluate$1(w,f);l.setPattern(y,!0),s==null||s({pattern:y,code:w})}catch(y){console.warn(`eval error: ${y.message}`),o==null||o(y)}}}}const gist=(route,cache=!0)=>fetch(`https://gist.githubusercontent.com/${route}?cachebust=${cache?"":Date.now()}`).then(r=>r.text()).then(code=>eval(code));console.log("%c // \u{1F300} @strudel.cycles/core loaded \u{1F300}","background-color: black;color:white;padding:4px;border-radius:15px");globalThis._strudelLoaded&&console.warn(`@strudel.cycles/core was loaded more than once... +This might happen when you have multiple versions of strudel installed. +Please check with "npm ls @strudel.cycles/core".`);globalThis._strudelLoaded=!0;function peg$subclass(r,t){function e(){this.constructor=r}e.prototype=t.prototype,r.prototype=new e}function peg$SyntaxError(r,t,e,o){var s=Error.call(this,r);return Object.setPrototypeOf&&Object.setPrototypeOf(s,peg$SyntaxError.prototype),s.expected=t,s.found=e,s.location=o,s.name="SyntaxError",s}peg$subclass(peg$SyntaxError,Error);function peg$padEnd(r,t,e){return e=e||" ",r.length>t?r:(t-=r.length,e+=e.repeat(t),r+e.slice(0,t))}peg$SyntaxError.prototype.format=function(r){var t="Error: "+this.message;if(this.location){var e=null,o;for(o=0;o `+i+` +`+l+` | +`+s.line+" | "+g+` +`+l+" | "+peg$padEnd("",s.column-1," ")+peg$padEnd("",y,"^")}else t+=` + at `+i}return t};peg$SyntaxError.buildMessage=function(r,t){var e={literal:function(w){return'"'+s(w.text)+'"'},class:function(w){var y=w.parts.map(function($){return Array.isArray($)?i($[0])+"-"+i($[1]):i($)});return"["+(w.inverted?"^":"")+y.join("")+"]"},any:function(){return"any character"},end:function(){return"end of input"},other:function(w){return w.description}};function o(w){return w.charCodeAt(0).toString(16).toUpperCase()}function s(w){return w.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(y){return"\\x0"+o(y)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(y){return"\\x"+o(y)})}function i(w){return w.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(y){return"\\x0"+o(y)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(y){return"\\x"+o(y)})}function f(w){return e[w.type](w)}function l(w){var y=w.map(f),$,S;if(y.sort(),y.length>0){for($=1,S=1;$",D="@",W="!",P="(",B=")",z="/",O="*",Z="%",L="?",fe="struct",we="target",be="euclid",te="slow",le="rotL",pe="rotR",he="fast",ve="scale",de="//",$e="cat",F="$",Q="setcps",ge="setbpm",me="hush",M=/^[1-9]/,U=/^[eE]/,ye=/^[0-9]/,J=/^[ \n\r\t]/,ee=/^[0-9a-zA-Z~]/,R=/^[^\n]/,X=He("number"),re=x(".",!1),Pe=ne([["1","9"]],!1,!1),Be=ne(["e","E"],!1,!1),Te=x("-",!1),Ze=x("+",!1),Le=x("0",!1),Je=ne([["0","9"]],!1,!1),Ke=He("whitespace"),Ge=ne([" ",` +`,"\r"," "],!1,!1),Ye=x(",",!1),Qe=x("|",!1),Ue=x('"',!1),et=x("'",!1),tt=ne([["0","9"],["a","z"],["A","Z"],"~"],!1,!1),rt=x("#",!1),nt=x("^",!1),st=x("_",!1),ot=x(":",!1),Re=x("[",!1),je=x("]",!1),it=x("<",!1),at=x(">",!1),ct=x("@",!1),ut=x("!",!1),ft=x("(",!1),lt=x(")",!1),pt=x("/",!1),ht=x("*",!1),dt=x("%",!1),gt=x("?",!1),mt=x("struct",!1),yt=x("target",!1),wt=x("euclid",!1),bt=x("slow",!1),vt=x("rotL",!1),$t=x("rotR",!1),_t=x("fast",!1),Ct=x("scale",!1),At=x("//",!1),Fe=ne([` +`],!0,!1),It=x("cat",!1),Pt=x("$",!1),Bt=x("setcps",!1),St=x("setbpm",!1),kt=x("hush",!1),Nt=function(){return parseFloat(ur())},xt=function(n){return n.join("")},qt=function(n){return n},Tt=function(n){return n.arguments_.alignment="t",n},Gt=function(n){return{weight:n}},Rt=function(n){return{replicate:n}},jt=function(n,c,u){return{operator:{type_:"bjorklund",arguments_:{pulse:n,step:c,rotation:u||0}}}},Ft=function(n){return{operator:{type_:"stretch",arguments_:{amount:n}}}},Mt=function(n){return{operator:{type_:"stretch",arguments_:{amount:"1/"+n}}}},Ht=function(n){return{operator:{type_:"fixed-step",arguments_:{amount:n}}}},Ot=function(n){return{operator:{type_:"degradeBy",arguments_:{amount:n||.5}}}},Wt=function(n,c){return new en(n,c)},Vt=function(n){return new xe(n,"h")},zt=function(n){return{alignment:"v",list:n}},Xt=function(n){return{alignment:"r",list:n}},Et=function(n,c){return c&&c.list.length>0?new xe([n,...c.list],c.alignment):n},Dt=function(n){return n},Zt=function(n){return{name:"struct",args:{sequence:n}}},Lt=function(n){return{name:"target",args:{name:n}}},Jt=function(n,c,u){return{name:"bjorklund",args:{pulse:parseInt(n),step:parseInt(c)}}},Kt=function(n){return{name:"stretch",args:{amount:n}}},Yt=function(n){return{name:"shift",args:{amount:"-"+n}}},Qt=function(n){return{name:"shift",args:{amount:n}}},Ut=function(n){return{name:"stretch",args:{amount:"1/"+n}}},er=function(n){return{name:"scale",args:{scale:n.join("")}}},Me=function(n,c){return c},tr=function(n,c){return c.unshift(n),new xe(c,"t")},rr=function(n){return n},nr=function(n,c){return new Ur(n.name,n.args,c)},sr=function(n){return n},or=function(n){return n},ir=function(n){return new qe("setcps",{value:n})},ar=function(n){return new qe("setcps",{value:n/120/2})},cr=function(){return new qe("hush")},a=0,q=0,_e=[{line:1,column:1}],E=0,Se=[],_=0,Ce;if("startRule"in t){if(!(t.startRule in s))throw new Error(`Can't start parsing from rule "`+t.startRule+'".');i=s[t.startRule]}function ur(){return r.substring(q,a)}function fr(){return ke(q,a)}function x(n,c){return{type:"literal",text:n,ignoreCase:c}}function ne(n,c,u){return{type:"class",parts:n,inverted:c,ignoreCase:u}}function lr(){return{type:"end"}}function He(n){return{type:"other",description:n}}function Oe(n){var c=_e[n],u;if(c)return c;for(u=n-1;!_e[u];)u--;for(c=_e[u],c={line:c.line,column:c.column};uE&&(E=a,Se=[]),Se.push(n))}function hr(n,c,u){return new peg$SyntaxError(peg$SyntaxError.buildMessage(n,c),n,c,u)}function We(){var n;return n=Qr(),n}function H(){var n,c;return _++,n=a,Ve(),c=Ae(),c!==e?(wr(),yr(),q=n,n=Nt()):(a=n,n=e),_--,n===e&&_===0&&A(X),n}function dr(){var n;return r.charCodeAt(a)===46?(n=f,a++):(n=e,_===0&&A(re)),n}function gr(){var n;return M.test(r.charAt(a))?(n=r.charAt(a),a++):(n=e,_===0&&A(Pe)),n}function mr(){var n;return U.test(r.charAt(a))?(n=r.charAt(a),a++):(n=e,_===0&&A(Be)),n}function yr(){var n,c,u,v,k;if(n=a,c=mr(),c!==e){if(u=Ve(),u===e&&(u=br()),u===e&&(u=null),v=[],k=se(),k!==e)for(;k!==e;)v.push(k),k=se();else v=e;v!==e?(c=[c,u,v],n=c):(a=n,n=e)}else a=n,n=e;return n}function wr(){var n,c,u,v;if(n=a,c=dr(),c!==e){if(u=[],v=se(),v!==e)for(;v!==e;)u.push(v),v=se();else u=e;u!==e?(c=[c,u],n=c):(a=n,n=e)}else a=n,n=e;return n}function Ae(){var n,c,u,v;if(n=vr(),n===e)if(n=a,c=gr(),c!==e){for(u=[],v=se();v!==e;)u.push(v),v=se();c=[c,u],n=c}else a=n,n=e;return n}function Ve(){var n;return r.charCodeAt(a)===45?(n=l,a++):(n=e,_===0&&A(Te)),n}function br(){var n;return r.charCodeAt(a)===43?(n=g,a++):(n=e,_===0&&A(Ze)),n}function vr(){var n;return r.charCodeAt(a)===48?(n=w,a++):(n=e,_===0&&A(Le)),n}function se(){var n;return ye.test(r.charAt(a))?(n=r.charAt(a),a++):(n=e,_===0&&A(Je)),n}function N(){var n,c;for(_++,n=[],J.test(r.charAt(a))?(c=r.charAt(a),a++):(c=e,_===0&&A(Ge));c!==e;)n.push(c),J.test(r.charAt(a))?(c=r.charAt(a),a++):(c=e,_===0&&A(Ge));return _--,c=e,_===0&&A(Ke),n}function oe(){var n,c,u,v;return n=a,c=N(),r.charCodeAt(a)===44?(u=y,a++):(u=e,_===0&&A(Ye)),u!==e?(v=N(),c=[c,u,v],n=c):(a=n,n=e),n}function ze(){var n,c,u,v;return n=a,c=N(),r.charCodeAt(a)===124?(u=$,a++):(u=e,_===0&&A(Qe)),u!==e?(v=N(),c=[c,u,v],n=c):(a=n,n=e),n}function ie(){var n;return r.charCodeAt(a)===34?(n=S,a++):(n=e,_===0&&A(Ue)),n===e&&(r.charCodeAt(a)===39?(n=C,a++):(n=e,_===0&&A(et))),n}function Ie(){var n;return ee.test(r.charAt(a))?(n=r.charAt(a),a++):(n=e,_===0&&A(tt)),n===e&&(r.charCodeAt(a)===45?(n=l,a++):(n=e,_===0&&A(Te)),n===e&&(r.charCodeAt(a)===35?(n=p,a++):(n=e,_===0&&A(rt)),n===e&&(r.charCodeAt(a)===46?(n=f,a++):(n=e,_===0&&A(re)),n===e&&(r.charCodeAt(a)===94?(n=d,a++):(n=e,_===0&&A(nt)),n===e&&(r.charCodeAt(a)===95?(n=m,a++):(n=e,_===0&&A(st)),n===e&&(r.charCodeAt(a)===58?(n=b,a++):(n=e,_===0&&A(ot)))))))),n}function Xe(){var n,c,u;if(n=a,N(),c=[],u=Ie(),u!==e)for(;u!==e;)c.push(u),u=Ie();else c=e;return c!==e?(u=N(),q=n,n=xt(c)):(a=n,n=e),n}function $r(){var n,c,u,v;return n=a,N(),r.charCodeAt(a)===91?(c=I,a++):(c=e,_===0&&A(Re)),c!==e?(N(),u=De(),u!==e?(N(),r.charCodeAt(a)===93?(v=T,a++):(v=e,_===0&&A(je)),v!==e?(N(),q=n,n=qt(u)):(a=n,n=e)):(a=n,n=e)):(a=n,n=e),n}function _r(){var n,c,u,v;return n=a,N(),r.charCodeAt(a)===60?(c=G,a++):(c=e,_===0&&A(it)),c!==e?(N(),u=ae(),u!==e?(N(),r.charCodeAt(a)===62?(v=Y,a++):(v=e,_===0&&A(at)),v!==e?(N(),q=n,n=Tt(u)):(a=n,n=e)):(a=n,n=e)):(a=n,n=e),n}function Cr(){var n;return n=Xe(),n===e&&(n=$r(),n===e&&(n=_r())),n}function Ar(){var n;return n=Ir(),n===e&&(n=Br(),n===e&&(n=Sr(),n===e&&(n=kr(),n===e&&(n=Nr(),n===e&&(n=Pr(),n===e&&(n=xr())))))),n}function Ir(){var n,c,u;return n=a,r.charCodeAt(a)===64?(c=D,a++):(c=e,_===0&&A(ct)),c!==e?(u=H(),u!==e?(q=n,n=Gt(u)):(a=n,n=e)):(a=n,n=e),n}function Pr(){var n,c,u;return n=a,r.charCodeAt(a)===33?(c=W,a++):(c=e,_===0&&A(ut)),c!==e?(u=H(),u!==e?(q=n,n=Rt(u)):(a=n,n=e)):(a=n,n=e),n}function Br(){var n,c,u,v,k,j,V;return n=a,r.charCodeAt(a)===40?(c=P,a++):(c=e,_===0&&A(ft)),c!==e?(N(),u=H(),u!==e?(N(),v=oe(),v!==e?(N(),k=H(),k!==e?(N(),oe(),N(),j=H(),j===e&&(j=null),N(),r.charCodeAt(a)===41?(V=B,a++):(V=e,_===0&&A(lt)),V!==e?(q=n,n=jt(u,k,j)):(a=n,n=e)):(a=n,n=e)):(a=n,n=e)):(a=n,n=e)):(a=n,n=e),n}function Sr(){var n,c,u;return n=a,r.charCodeAt(a)===47?(c=z,a++):(c=e,_===0&&A(pt)),c!==e?(u=H(),u!==e?(q=n,n=Ft(u)):(a=n,n=e)):(a=n,n=e),n}function kr(){var n,c,u;return n=a,r.charCodeAt(a)===42?(c=O,a++):(c=e,_===0&&A(ht)),c!==e?(u=H(),u!==e?(q=n,n=Mt(u)):(a=n,n=e)):(a=n,n=e),n}function Nr(){var n,c,u;return n=a,r.charCodeAt(a)===37?(c=Z,a++):(c=e,_===0&&A(dt)),c!==e?(u=H(),u!==e?(q=n,n=Ht(u)):(a=n,n=e)):(a=n,n=e),n}function xr(){var n,c,u;return n=a,r.charCodeAt(a)===63?(c=L,a++):(c=e,_===0&&A(gt)),c!==e?(u=H(),u===e&&(u=null),q=n,n=Ot(u)):(a=n,n=e),n}function Ee(){var n,c,u;return n=a,c=Cr(),c!==e?(u=Ar(),u===e&&(u=null),q=n,n=Wt(c,u)):(a=n,n=e),n}function ae(){var n,c,u;if(n=a,c=[],u=Ee(),u!==e)for(;u!==e;)c.push(u),u=Ee();else c=e;return c!==e&&(q=n,c=Vt(c)),n=c,n}function qr(){var n,c,u,v,k;if(n=a,c=[],u=a,v=oe(),v!==e?(k=ae(),k!==e?u=k:(a=u,u=e)):(a=u,u=e),u!==e)for(;u!==e;)c.push(u),u=a,v=oe(),v!==e?(k=ae(),k!==e?u=k:(a=u,u=e)):(a=u,u=e);else c=e;return c!==e&&(q=n,c=zt(c)),n=c,n}function Tr(){var n,c,u,v,k;if(n=a,c=[],u=a,v=ze(),v!==e?(k=ae(),k!==e?u=k:(a=u,u=e)):(a=u,u=e),u!==e)for(;u!==e;)c.push(u),u=a,v=ze(),v!==e?(k=ae(),k!==e?u=k:(a=u,u=e)):(a=u,u=e);else c=e;return c!==e&&(q=n,c=Xt(c)),n=c,n}function De(){var n,c,u;return n=a,c=ae(),c!==e?(u=qr(),u===e&&(u=Tr()),u===e&&(u=null),q=n,n=Et(c,u)):(a=n,n=e),n}function Gr(){var n,c,u,v;return n=a,N(),c=ie(),c!==e?(u=De(),u!==e?(v=ie(),v!==e?(q=n,n=Dt(u)):(a=n,n=e)):(a=n,n=e)):(a=n,n=e),n}function Rr(){var n;return n=zr(),n===e&&(n=Hr(),n===e&&(n=Vr(),n===e&&(n=Fr(),n===e&&(n=Mr(),n===e&&(n=jr(),n===e&&(n=Wr(),n===e&&(n=Or()))))))),n}function jr(){var n,c,u;return n=a,r.substr(a,6)===fe?(c=fe,a+=6):(c=e,_===0&&A(mt)),c!==e?(N(),u=ce(),u!==e?(q=n,n=Zt(u)):(a=n,n=e)):(a=n,n=e),n}function Fr(){var n,c,u,v,k;return n=a,r.substr(a,6)===we?(c=we,a+=6):(c=e,_===0&&A(yt)),c!==e?(N(),u=ie(),u!==e?(v=Xe(),v!==e?(k=ie(),k!==e?(q=n,n=Lt(v)):(a=n,n=e)):(a=n,n=e)):(a=n,n=e)):(a=n,n=e),n}function Mr(){var n,c,u,v;return n=a,r.substr(a,6)===be?(c=be,a+=6):(c=e,_===0&&A(wt)),c!==e?(N(),u=Ae(),u!==e?(N(),v=Ae(),v!==e?(N(),Ae(),q=n,n=Jt(u,v)):(a=n,n=e)):(a=n,n=e)):(a=n,n=e),n}function Hr(){var n,c,u;return n=a,r.substr(a,4)===te?(c=te,a+=4):(c=e,_===0&&A(bt)),c!==e?(N(),u=H(),u!==e?(q=n,n=Kt(u)):(a=n,n=e)):(a=n,n=e),n}function Or(){var n,c,u;return n=a,r.substr(a,4)===le?(c=le,a+=4):(c=e,_===0&&A(vt)),c!==e?(N(),u=H(),u!==e?(q=n,n=Yt(u)):(a=n,n=e)):(a=n,n=e),n}function Wr(){var n,c,u;return n=a,r.substr(a,4)===pe?(c=pe,a+=4):(c=e,_===0&&A($t)),c!==e?(N(),u=H(),u!==e?(q=n,n=Qt(u)):(a=n,n=e)):(a=n,n=e),n}function Vr(){var n,c,u;return n=a,r.substr(a,4)===he?(c=he,a+=4):(c=e,_===0&&A(_t)),c!==e?(N(),u=H(),u!==e?(q=n,n=Ut(u)):(a=n,n=e)):(a=n,n=e),n}function zr(){var n,c,u,v,k;if(n=a,r.substr(a,5)===ve?(c=ve,a+=5):(c=e,_===0&&A(Ct)),c!==e)if(N(),u=ie(),u!==e){if(v=[],k=Ie(),k!==e)for(;k!==e;)v.push(k),k=Ie();else v=e;v!==e?(k=ie(),k!==e?(q=n,n=er(v)):(a=n,n=e)):(a=n,n=e)}else a=n,n=e;else a=n,n=e;return n}function Ne(){var n,c,u,v;if(n=a,r.substr(a,2)===de?(c=de,a+=2):(c=e,_===0&&A(At)),c!==e){for(u=[],R.test(r.charAt(a))?(v=r.charAt(a),a++):(v=e,_===0&&A(Fe));v!==e;)u.push(v),R.test(r.charAt(a))?(v=r.charAt(a),a++):(v=e,_===0&&A(Fe));c=[c,u],n=c}else a=n,n=e;return n}function Xr(){var n,c,u,v,k,j,V,ue;if(n=a,r.substr(a,3)===$e?(c=$e,a+=3):(c=e,_===0&&A(It)),c!==e)if(N(),r.charCodeAt(a)===91?(u=I,a++):(u=e,_===0&&A(Re)),u!==e)if(N(),v=ce(),v!==e){for(k=[],j=a,V=oe(),V!==e?(ue=ce(),ue!==e?(q=j,j=Me(v,ue)):(a=j,j=e)):(a=j,j=e);j!==e;)k.push(j),j=a,V=oe(),V!==e?(ue=ce(),ue!==e?(q=j,j=Me(v,ue)):(a=j,j=e)):(a=j,j=e);j=N(),r.charCodeAt(a)===93?(V=T,a++):(V=e,_===0&&A(je)),V!==e?(q=n,n=tr(v,k)):(a=n,n=e)}else a=n,n=e;else a=n,n=e;else a=n,n=e;return n}function Er(){var n;return n=Xr(),n===e&&(n=Gr()),n}function ce(){var n,c,u,v,k;if(n=a,c=Er(),c!==e){for(N(),u=[],v=Ne();v!==e;)u.push(v),v=Ne();q=n,n=rr(c)}else a=n,n=e;return n===e&&(n=a,c=Rr(),c!==e?(N(),r.charCodeAt(a)===36?(u=F,a++):(u=e,_===0&&A(Pt)),u!==e?(v=N(),k=ce(),k!==e?(q=n,n=nr(c,k)):(a=n,n=e)):(a=n,n=e)):(a=n,n=e)),n}function Dr(){var n,c;return n=a,c=ce(),c!==e&&(q=n,c=sr(c)),n=c,n===e&&(n=Ne()),n}function Zr(){var n;return n=Dr(),n}function Lr(){var n,c;return n=a,N(),c=Jr(),c===e&&(c=Kr(),c===e&&(c=Yr())),c!==e?(N(),q=n,n=or(c)):(a=n,n=e),n}function Jr(){var n,c,u;return n=a,r.substr(a,6)===Q?(c=Q,a+=6):(c=e,_===0&&A(Bt)),c!==e?(N(),u=H(),u!==e?(q=n,n=ir(u)):(a=n,n=e)):(a=n,n=e),n}function Kr(){var n,c,u;return n=a,r.substr(a,6)===ge?(c=ge,a+=6):(c=e,_===0&&A(St)),c!==e?(N(),u=H(),u!==e?(q=n,n=ar(u)):(a=n,n=e)):(a=n,n=e),n}function Yr(){var n,c;return n=a,r.substr(a,4)===me?(c=me,a+=4):(c=e,_===0&&A(kt)),c!==e&&(q=n,c=cr()),n=c,n}function Qr(){var n;return n=Zr(),n===e&&(n=Lr()),n}var xe=function(n,c){this.type_="pattern",this.arguments_={alignment:c},this.source_=n},Ur=function(n,c,u){this.type_=n,this.arguments_=c,this.source_=u},en=function(n,c){this.type_="element",this.source_=n,this.options_=c,this.location_=fr()},qe=function(n,c){this.type_="command",this.name_=n,this.options_=c};if(Ce=i(),Ce!==e&&a===r.length)return Ce;throw Ce!==e&&a(t,e)=>{const s=r.source_[e].options_,i=s==null?void 0:s.operator;if(i){switch(i.type_){case"stretch":const l=Fraction(i.arguments_.amount).inverse();return reify$1(t).fast(l);case"bjorklund":return t.euclid(i.arguments_.pulse,i.arguments_.step,i.arguments_.rotation);case"degradeBy":return reify$1(t)._degradeByWith(rand.early(randOffset*_nextSeed()).segment(1),i.arguments_.amount)}console.warn(`operator "${i.type_}" not implemented`)}if(s!=null&&s.weight)return t;const f=Object.keys(s||{}).filter(l=>l!=="operator");return f.length&&console.warn(`option${f.length>1?"s":""} ${f.map(l=>`"${l}"`).join(", ")} not implemented`),t};function resolveReplications(r){r.source_=r.source_.map(t=>{const{replicate:e,...o}=t.options_||{};return e?{...t,options_:{...o,weight:e},source_:{type_:"pattern",arguments_:{alignment:"h"},source_:[{type_:"element",source_:t.source_,location_:t.location_,options_:{operator:{type_:"stretch",arguments_:{amount:Fraction(e).inverse().toString()}}}}]}}:t})}function patternifyAST(r){switch(r.type_){case"pattern":resolveReplications(r);const t=r.source_.map(patternifyAST).map(applyOptions(r)),e=r.arguments_.alignment;if(e==="v")return stack(...t);if(e==="r")return chooseInWith(rand.early(randOffset*_nextSeed()).segment(1),t);const o=r.source_.some(s=>{var i;return!!((i=s.options_)!=null&&i.weight)});if(!o&&e==="t")return slowcat(...t);if(o){const s=timeCat(...r.source_.map((i,f)=>{var l;return[((l=i.options_)==null?void 0:l.weight)||1,t[f]]}));if(e==="t"){const i=r.source_.reduce((f,l)=>{var g;return f+(((g=l.options_)==null?void 0:g.weight)||1)},0);return s._slow(i)}return s}return sequence(...t);case"element":if(r.source_==="~")return silence;if(typeof r.source_!="object"){if(!r.location_)return console.warn("no location for",r),r.source_;const{start:s,end:i}=r.location_,f=isNaN(Number(r.source_))?r.source_:Number(r.source_);return pure(f).withLocation([s.line,s.column,s.offset],[i.line,i.column,i.offset])}return patternifyAST(r.source_);case"stretch":return patternifyAST(r.source_).slow(r.arguments_.amount);default:return console.warn(`node type "${r.type_}" not implemented -> returning silence`),silence}}const mini=(...r)=>{const t=r.map(e=>{const o=peg$parse(`"${e}"`);return patternifyAST(o)});return sequence(...t)},h=r=>{const t=peg$parse(r);return patternifyAST(t)};Pattern$1.prototype.define("mini",mini,{composable:!0});Pattern$1.prototype.define("m",mini,{composable:!0});Pattern$1.prototype.define("h",h,{composable:!0});function minify(r){return typeof r=="string"?mini(r):reify$1(r)}if(typeof DelayNode<"u"){class r extends DelayNode{constructor(e,o,s,i){super(e),o=Math.abs(o),this.delayTime.value=s;const f=e.createGain();f.gain.value=Math.min(Math.abs(i),.995),this.feedback=f.gain;const l=e.createGain();return l.gain.value=o,this.delayGain=l,this.connect(f),this.connect(l),f.connect(this),this.connect=g=>l.connect(g),this}start(e){this.delayGain.gain.setValueAtTime(this.delayGain.gain.value,e+this.delayTime.value)}}AudioContext.prototype.createFeedbackDelay=function(t,e,o){return new r(this,t,e,o)}}typeof AudioContext<"u"&&(AudioContext.prototype.impulseResponse=function(r,t=1){const e=this.sampleRate*r,o=this.createBuffer(t,e,this.sampleRate),s=o.getChannelData(0);for(let i=0;i(t.buffer=this.impulseResponse(e),t.duration=r,t),t.setDuration(r),t});const bufferCache={},loadCache={},getCachedBuffer=r=>bufferCache[r],loadBuffer=(r,t)=>(loadCache[r]||(loadCache[r]=fetch(r).then(e=>e.arrayBuffer()).then(async e=>{const o=await t.decodeAudioData(e);return bufferCache[r]=o,o})),loadCache[r]);function reverseBuffer(r){const t=getAudioContext(),e=t.createBuffer(r.numberOfChannels,r.length,t.sampleRate);for(let o=0;obufferCache[r],githubCache={};let sampleCache={current:void 0};const loadGithubSamples=async(r,t)=>{const e="loadGithubSamples "+r,o=localStorage.getItem(e);if(o&&(console.log("[sampler]: loaded sample list from localstorage",r),githubCache[r]=JSON.parse(o)),githubCache[r])return sampleCache.current=githubCache[r],githubCache[r];console.log("[sampler]: fetching sample list from github",r);try{const[s,i,...f]=r.split("/"),l=`https://api.github.com/repos/${s}/${i}/contents`,g=await fetch(`${l}/${f.join("/")}`).then(w=>w.json());githubCache[r]=(await Promise.all(g.map(async({name:w,path:y})=>({name:w,content:await fetch(`${l}/${y}`).then($=>$.json()).catch($=>{console.error("could not load path",$)})})))).filter(({content:w})=>!!w).reduce((w,{name:y,content:$})=>({...w,[(t==null?void 0:t(y))||y]:$.map(({download_url:S})=>S)}),{})}catch(s){console.error("[sampler]: failed to fetch sample list from github",s);return}return sampleCache.current=githubCache[r],localStorage.setItem(e,JSON.stringify(sampleCache.current)),console.log("[sampler]: loaded samples:",sampleCache.current),githubCache[r]},samples=async(r,t=r._base||"")=>{if(typeof r=="string"){if(r.startsWith("github:")){const[o,s]=r.split("github:");r=`https://raw.githubusercontent.com/${s}/strudel.json`}if(typeof fetch!="function")return;const e=r.split("/").slice(0,-1).join("/");return typeof fetch>"u"?void 0:fetch(r).then(o=>o.json()).then(o=>samples(o,t||o._base||e)).catch(o=>{throw console.error(o),new Error(`error loading "${r}"`)})}sampleCache.current={...sampleCache.current,...Object.fromEntries(Object.entries(r).map(([e,o])=>{if(typeof o=="string"&&(o=[o]),typeof o!="object")throw new Error("wrong sample map format for "+e);t=o._base||t;const s=i=>(t+i).replace("github:","https://raw.githubusercontent.com/");return Array.isArray(o)?[e,o.map(s)]:[e,Object.fromEntries(Object.entries(o).map(([i,f])=>[i,(typeof f=="string"?[f]:f).map(s)]))]}))}},resetLoadedSamples=()=>{sampleCache.current=void 0},getLoadedSamples$1=()=>sampleCache.current;var vowelFormant={a:{freqs:[660,1120,2750,3e3,3350],gains:[1,.5012,.0708,.0631,.0126],qs:[80,90,120,130,140]},e:{freqs:[440,1800,2700,3e3,3300],gains:[1,.1995,.1259,.1,.1],qs:[70,80,100,120,120]},i:{freqs:[270,1850,2900,3350,3590],gains:[1,.0631,.0631,.0158,.0158],qs:[40,90,100,120,120]},o:{freqs:[430,820,2700,3e3,3300],gains:[1,.3162,.0501,.0794,.01995],qs:[40,80,100,120,120]},u:{freqs:[370,630,2750,3e3,3400],gains:[1,.1,.0708,.0316,.01995],qs:[40,60,100,120,120]}};if(typeof GainNode<"u"){class r extends GainNode{constructor(e,o){if(super(e),!vowelFormant[o])throw new Error("vowel: unknown vowel "+o);const{gains:s,qs:i,freqs:f}=vowelFormant[o],l=e.createGain();for(let g=0;g<5;g++){const w=e.createGain();w.gain.value=s[g];const y=e.createBiquadFilter();y.type="bandpass",y.Q.value=i[g],y.frequency.value=f[g],this.connect(y),y.connect(w),w.connect(l)}return l.gain.value=8,this.connect=g=>l.connect(g),this}}AudioContext.prototype.createVowelFilter=function(t){return new r(this,t)}}const workletsUrl="data:application/javascript;base64,Ly8gTElDRU5TRSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2My4wIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZGt0cjAvV2ViRGlydC9ibG9iL21haW4vTElDRU5TRQovLyBhbGwgdGhlIGNyZWRpdCBnb2VzIHRvIGRrdHIwJ3Mgd2ViZGlydDogaHR0cHM6Ly9naXRodWIuY29tL2RrdHIwL1dlYkRpcnQvYmxvYi81Y2UzZDY5ODM2MmM1NGQ2ZTFiNjhhY2M0N2ViMjk1NWFjNjJjNzkzL2Rpc3QvQXVkaW9Xb3JrbGV0cy5qcwovLyA8MwoKY2xhc3MgQ29hcnNlUHJvY2Vzc29yIGV4dGVuZHMgQXVkaW9Xb3JrbGV0UHJvY2Vzc29yIHsKICBzdGF0aWMgZ2V0IHBhcmFtZXRlckRlc2NyaXB0b3JzKCkgewogICAgcmV0dXJuIFt7IG5hbWU6ICdjb2Fyc2UnLCBkZWZhdWx0VmFsdWU6IDEgfV07CiAgfQoKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKCk7CiAgICB0aGlzLm5vdFN0YXJ0ZWQgPSB0cnVlOwogIH0KCiAgcHJvY2VzcyhpbnB1dHMsIG91dHB1dHMsIHBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IGlucHV0ID0gaW5wdXRzWzBdOwogICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXTsKICAgIGNvbnN0IGNvYXJzZSA9IHBhcmFtZXRlcnMuY29hcnNlOwogICAgY29uc3QgYmxvY2tTaXplID0gMTI4OwogICAgY29uc3QgaGFzSW5wdXQgPSAhKGlucHV0WzBdID09PSB1bmRlZmluZWQpOwogICAgaWYgKGhhc0lucHV0KSB7CiAgICAgIHRoaXMubm90U3RhcnRlZCA9IGZhbHNlOwogICAgICBvdXRwdXRbMF1bMF0gPSBpbnB1dFswXVswXTsKICAgICAgZm9yIChsZXQgbiA9IDE7IG4gPCBibG9ja1NpemU7IG4rKykgewogICAgICAgIGZvciAobGV0IG8gPSAwOyBvIDwgb3V0cHV0Lmxlbmd0aDsgbysrKSB7CiAgICAgICAgICBvdXRwdXRbb11bbl0gPSBuICUgY29hcnNlID09IDAgPyBpbnB1dFswXVtuXSA6IG91dHB1dFtvXVtuIC0gMV07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGhpcy5ub3RTdGFydGVkIHx8IGhhc0lucHV0OwogIH0KfQoKcmVnaXN0ZXJQcm9jZXNzb3IoJ2NvYXJzZS1wcm9jZXNzb3InLCBDb2Fyc2VQcm9jZXNzb3IpOwoKY2xhc3MgQ3J1c2hQcm9jZXNzb3IgZXh0ZW5kcyBBdWRpb1dvcmtsZXRQcm9jZXNzb3IgewogIHN0YXRpYyBnZXQgcGFyYW1ldGVyRGVzY3JpcHRvcnMoKSB7CiAgICByZXR1cm4gW3sgbmFtZTogJ2NydXNoJywgZGVmYXVsdFZhbHVlOiAwIH1dOwogIH0KCiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlcigpOwogICAgdGhpcy5ub3RTdGFydGVkID0gdHJ1ZTsKICB9CgogIHByb2Nlc3MoaW5wdXRzLCBvdXRwdXRzLCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCBpbnB1dCA9IGlucHV0c1swXTsKICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbMF07CiAgICBjb25zdCBjcnVzaCA9IHBhcmFtZXRlcnMuY3J1c2g7CiAgICBjb25zdCBibG9ja1NpemUgPSAxMjg7CiAgICBjb25zdCBoYXNJbnB1dCA9ICEoaW5wdXRbMF0gPT09IHVuZGVmaW5lZCk7CiAgICBpZiAoaGFzSW5wdXQpIHsKICAgICAgdGhpcy5ub3RTdGFydGVkID0gZmFsc2U7CiAgICAgIGlmIChjcnVzaC5sZW5ndGggPT09IDEpIHsKICAgICAgICBjb25zdCB4ID0gTWF0aC5wb3coMiwgY3J1c2hbMF0gLSAxKTsKICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJsb2NrU2l6ZTsgbisrKSB7CiAgICAgICAgICBjb25zdCB2YWx1ZSA9IE1hdGgucm91bmQoaW5wdXRbMF1bbl0gKiB4KSAvIHg7CiAgICAgICAgICBmb3IgKGxldCBvID0gMDsgbyA8IG91dHB1dC5sZW5ndGg7IG8rKykgewogICAgICAgICAgICBvdXRwdXRbb11bbl0gPSB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBibG9ja1NpemU7IG4rKykgewogICAgICAgICAgbGV0IHggPSBNYXRoLnBvdygyLCBjcnVzaFtuXSAtIDEpOwogICAgICAgICAgY29uc3QgdmFsdWUgPSBNYXRoLnJvdW5kKGlucHV0WzBdW25dICogeCkgLyB4OwogICAgICAgICAgZm9yIChsZXQgbyA9IDA7IG8gPCBvdXRwdXQubGVuZ3RoOyBvKyspIHsKICAgICAgICAgICAgb3V0cHV0W29dW25dID0gdmFsdWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGhpcy5ub3RTdGFydGVkIHx8IGhhc0lucHV0OwogIH0KfQpyZWdpc3RlclByb2Nlc3NvcignY3J1c2gtcHJvY2Vzc29yJywgQ3J1c2hQcm9jZXNzb3IpOwoKY2xhc3MgU2hhcGVQcm9jZXNzb3IgZXh0ZW5kcyBBdWRpb1dvcmtsZXRQcm9jZXNzb3IgewogIHN0YXRpYyBnZXQgcGFyYW1ldGVyRGVzY3JpcHRvcnMoKSB7CiAgICByZXR1cm4gW3sgbmFtZTogJ3NoYXBlJywgZGVmYXVsdFZhbHVlOiAwIH1dOwogIH0KCiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlcigpOwogICAgdGhpcy5ub3RTdGFydGVkID0gdHJ1ZTsKICB9CgogIHByb2Nlc3MoaW5wdXRzLCBvdXRwdXRzLCBwYXJhbWV0ZXJzKSB7CiAgICBjb25zdCBpbnB1dCA9IGlucHV0c1swXTsKICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbMF07CiAgICBjb25zdCBzaGFwZTAgPSBwYXJhbWV0ZXJzLnNoYXBlWzBdOwogICAgY29uc3Qgc2hhcGUxID0gc2hhcGUwIDwgMSA/IHNoYXBlMCA6IDEuMCAtIDRlLTEwOwogICAgY29uc3Qgc2hhcGUgPSAoMi4wICogc2hhcGUxKSAvICgxLjAgLSBzaGFwZTEpOwogICAgY29uc3QgYmxvY2tTaXplID0gMTI4OwogICAgY29uc3QgaGFzSW5wdXQgPSAhKGlucHV0WzBdID09PSB1bmRlZmluZWQpOwogICAgaWYgKGhhc0lucHV0KSB7CiAgICAgIHRoaXMubm90U3RhcnRlZCA9IGZhbHNlOwogICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGJsb2NrU2l6ZTsgbisrKSB7CiAgICAgICAgY29uc3QgdmFsdWUgPSAoKDEgKyBzaGFwZSkgKiBpbnB1dFswXVtuXSkgLyAoMSArIHNoYXBlICogTWF0aC5hYnMoaW5wdXRbMF1bbl0pKTsKICAgICAgICBmb3IgKGxldCBvID0gMDsgbyA8IG91dHB1dC5sZW5ndGg7IG8rKykgewogICAgICAgICAgb3V0cHV0W29dW25dID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdGhpcy5ub3RTdGFydGVkIHx8IGhhc0lucHV0OwogIH0KfQoKcmVnaXN0ZXJQcm9jZXNzb3IoJ3NoYXBlLXByb2Nlc3NvcicsIFNoYXBlUHJvY2Vzc29yKTsK",{Pattern}=strudel;let audioContext;const getAudioContext$1=()=>(audioContext||(audioContext=new AudioContext),audioContext);let destination;const getDestination=()=>{const r=getAudioContext$1();return destination||(destination=r.createGain(),destination.connect(r.destination)),destination},panic=()=>{getDestination().gain.linearRampToValueAtTime(0,getAudioContext$1().currentTime+.01),destination=null},getFilter=(r,t,e)=>{const o=getAudioContext$1().createBiquadFilter();return o.type=r,o.frequency.value=t,o.Q.value=e,o},getADSR=(r,t,e,o,s,i,f)=>{const l=getAudioContext$1().createGain();return l.gain.setValueAtTime(0,i),l.gain.linearRampToValueAtTime(s,i+r),l.gain.linearRampToValueAtTime(e*s,i+r+t),l.gain.setValueAtTime(e*s,f),l.gain.linearRampToValueAtTime(0,f+o),l},getOscillator=({s:r,freq:t,t:e,duration:o,release:s})=>{const i=getAudioContext$1().createOscillator();return i.type=r||"triangle",i.frequency.value=Number(t),i.start(e),i.stop(e+o+s),i},getSoundfontKey=r=>{var o,s,i,f;if(!globalThis.soundfontList)return!1;if((s=(o=globalThis.soundfontList)==null?void 0:o.instruments)!=null&&s.includes(r))return r;const t=(f=(i=globalThis.soundfontList)==null?void 0:i.instrumentNames)==null?void 0:f.indexOf(r),e=t<10?`00${t}`:t<100?`0${t}`:t;if(t!==-1)return globalThis.soundfontList.instruments.find(l=>l.startsWith(e))},getSampleBufferSource=async(r,t,e,o)=>{let s=0,i=typeof e=="string"?toMidi(e):e||36;s=i-36;const f=getAudioContext$1(),l=getLoadedSamples();if(!l)throw new Error("no samples loaded");const g=l==null?void 0:l[r];if(!g)throw new Error(`sample not found: "${r}", try one of ${Object.keys(l).map(C=>`"${C}"`).join(", ")}.`);if(typeof g!="object")throw new Error("wrong format for sample bank:",r);let w;if(Array.isArray(g))w=g[t%g.length];else{const C=d=>toMidi(d)-i,p=Object.keys(g).filter(d=>!d.startsWith("_")).reduce((d,m,b)=>!d||Math.abs(C(m)){if(!r.includes(":"))return[r,t];let[e,o]=r.split(":");return isNaN(Number(o))?[r,t]:[e,o]};let workletsLoading;function loadWorklets(){return workletsLoading||(workletsLoading=getAudioContext$1().audioWorklet.addModule(workletsUrl),workletsLoading)}function getWorklet(r,t,e){const o=new AudioWorkletNode(r,t);return Object.entries(e).forEach(([s,i])=>{o.parameters.get(s).value=i}),o}if(typeof window<"u")try{loadWorklets()}catch(r){console.warn("could not load AudioWorklet effects coarse, crush and shape",r)}function gainNode(r){const t=getAudioContext$1().createGain();return t.gain.value=r,t}const cutGroups=[];let delays={};function getDelay(r,t,e,o){if(!delays[r]){const i=getAudioContext$1().createFeedbackDelay(1,t,e);i.start(o),i.connect(getDestination()),delays[r]=i}return delays[r].delayTime.value!==t&&delays[r].delayTime.setValueAtTime(t,o),delays[r].feedback.value!==e&&delays[r].feedback.setValueAtTime(e,o),delays[r]}let reverbs={};function getReverb(r,t=2){if(!reverbs[r]){const o=getAudioContext$1().createReverb(t);o.connect(getDestination()),reverbs[r]=o}return reverbs[r].duration!==t&&(reverbs[r]=reverbs[r].setDuration(t),reverbs[r].duration=t),reverbs[r]}function effectSend(r,t,e){const o=gainNode(e);return r.connect(o),o.connect(t),o}const webaudioOutput=async(r,t,e)=>{var o;try{const s=getAudioContext$1();if(typeof r.value!="object")throw new Error(`hap.value ${r.value} is not supported by webaudio output. Hint: append .note() or .s() to the end`);let i=s.currentTime+t,{freq:f,s:l,bank:g,sf:w,clip:y=0,n:$=0,note:S,gain:C=.8,cutoff:p,resonance:d=1,hcutoff:m,hresonance:b=1,bandf:I,bandq:T=1,coarse:G,crush:Y,shape:D,pan:W,speed:P=1,begin:B=0,end:z=1,vowel:O,delay:Z=0,delayfeedback:L=.5,delaytime:fe=.25,unit:we,nudge:be=0,cut:te,loop:le,orbit:pe=1,room:he,size:ve=2,roomsize:de=ve}=r.value;const{velocity:$e=1}=r.context;C*=$e;const F=[];if(g&&l&&(l=`${g}_${l}`),typeof l=="string"&&([l,$]=splitSN(l,$)),typeof S=="string"&&([S,$]=splitSN(S,$)),!l||["sine","square","triangle","sawtooth"].includes(l)){const{attack:M=.001,decay:U=.05,sustain:ye=.6,release:J=.01}=r.value;$=S||$||36,typeof $=="string"&&($=toMidi($)),!f&&typeof $=="number"&&(f=fromMidi($));const ee=getOscillator({t:i,s:l,freq:f,duration:e,release:J});F.push(ee),F.push(gainNode(.3));const R=getADSR(M,U,ye,J,1,i,i+e);F.push(R)}else{const{attack:M=.001,decay:U=.001,sustain:ye=1,release:J=.001}=r.value;if(P===0)return;if(!l){console.warn("no sample specified");return}const ee=getSoundfontKey(l);let R;try{ee?R=await globalThis.getFontBufferSource(ee,S||$,s):R=await getSampleBufferSource(l,$,S,P)}catch(Be){console.warn(Be);return}if(s.currentTime>i){console.warn("sample still loading:",l,$);return}if(!R){console.warn("no buffer source");return}R.playbackRate.value=Math.abs(P)*R.playbackRate.value,we==="c"&&(R.playbackRate.value=R.playbackRate.value*R.buffer.duration);let X=ee||y?e:R.buffer.duration/R.playbackRate.value;const re=B*X*R.playbackRate.value;X=(z-B)*X,le&&(R.loop=!0,R.loopStart=re,R.loopEnd=re+X,X=le*X),i+=be,R.start(i,re),te!==void 0&&((o=cutGroups[te])==null||o.stop(i),cutGroups[te]=R),F.push(R),R.stop(i+X+J);const Pe=getADSR(M,U,ye,J,1,i,i+X);F.push(Pe)}if(F.push(gainNode(C)),p!==void 0&&F.push(getFilter("lowpass",p,d)),m!==void 0&&F.push(getFilter("highpass",m,b)),I!==void 0&&F.push(getFilter("bandpass",I,T)),O!==void 0&&F.push(s.createVowelFilter(O)),G!==void 0&&F.push(getWorklet(s,"coarse-processor",{coarse:G})),Y!==void 0&&F.push(getWorklet(s,"crush-processor",{crush:Y})),D!==void 0&&F.push(getWorklet(s,"shape-processor",{shape:D})),W!==void 0){const M=s.createStereoPanner();M.pan.value=2*W-1,F.push(M)}const Q=gainNode(1);F.push(Q),Q.connect(getDestination());let ge;if(Z>0&&fe>0&&L>0){const M=getDelay(pe,fe,L,i);ge=effectSend(Q,M,Z)}let me;if(he>0&&de>0){const M=getReverb(pe,de);me=effectSend(Q,M,he)}F.slice(1).reduce((M,U)=>M.connect(U),F[0]),F[0].onended=()=>F.concat([ge,me]).forEach(M=>M==null?void 0:M.disconnect())}catch(s){console.warn(".out error:",s)}},webaudioOutputTrigger=(r,t,e,o)=>webaudioOutput(t,r-e,t.duration/o);Pattern.prototype.out=function(){return this.onTrigger(webaudioOutputTrigger)};const tune=`stack( + n("c3 [eb3,g3]") + .delay("<0 .5>") + .delaytime(".16 | .33") + .delayfeedback(".6 | .8") +).sometimes(x=>x.speed("-1"))`,ctx=getAudioContext$1(),input=document.getElementById("text");input.innerHTML=tune;evalScope(controls,__vitePreload(()=>Promise.resolve().then(()=>strudel),void 0),__vitePreload(()=>import("./index.211bbc68.js"),[]),__vitePreload(()=>import("./index.ecddf978.js"),[]),__vitePreload(()=>import("./index.63aa02b5.js"),[]));setStringParser(mini);const{evaluate}=repl({defaultOutput:webaudioOutput,getTime:()=>ctx.currentTime});document.getElementById("start").addEventListener("click",()=>{ctx.resume(),evaluate(input.value)});export{Hap as H,Pattern$3 as P,minify as a,peg$SyntaxError as b,peg$parse as c,panic as d,webaudioOutputTrigger as e,getCachedBuffer as f,getAudioContext$1 as g,h,getLoadedBuffer as i,loadGithubSamples as j,resetLoadedSamples as k,loadBuffer as l,mini as m,getLoadedSamples$1 as n,mod as o,patternifyAST as p,getAugmentedNamespace as q,reverseBuffer as r,samples as s,commonjsGlobal as t,getDefaultExportFromCjs as u,reify$2 as v,webaudioOutput as w,stack$1 as x}; diff --git a/packages/core/examples/vite-vanilla-repl/dist/assets/index.63aa02b5.js b/packages/core/examples/vite-vanilla-repl/dist/assets/index.63aa02b5.js new file mode 100644 index 00000000..dfde3ae1 --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/dist/assets/index.63aa02b5.js @@ -0,0 +1 @@ +import{P as _,o as Lt,q as Ut,t as Y,u as Xt,v as Kt,H as Qt,x as Yt}from"./index.4cbc0a10.js";const C=(n,t)=>Array(Math.abs(t)+1).join(n);function g(n,t,e){return function(...o){return console.warn(`${n} is deprecated. Use ${t}.`),e.apply(this,o)}}function z(n){return n!==null&&typeof n=="object"&&typeof n.name=="string"}function q(n){return n!==null&&typeof n=="object"&&typeof n.step=="number"&&typeof n.alt=="number"}const Qn=[0,2,4,-1,1,3,5],Yn=Qn.map(n=>Math.floor(n*7/12));function en(n){const{step:t,alt:e,oct:o,dir:r=1}=n,i=Qn[t]+7*e;if(o===void 0)return[r*i];const a=o-Yn[t]-4*e;return[r*i,r*a]}const Zt=[3,0,4,1,5,2,6];function on(n){const[t,e,o]=n,r=Zt[Jt(t)],i=Math.floor((t+1)/7);if(e===void 0)return{step:r,alt:i,dir:o};const a=e+4*i+Yn[r];return{step:r,alt:i,oct:a,dir:o}}function Jt(n){const t=(n+1)%7;return t<0?7+t:t}const Zn={empty:!0,name:"",pc:"",acc:""},Dn=new Map,vn=n=>"CDEFGAB".charAt(n),E=n=>n<0?C("b",-n):C("#",n),G=n=>n[0]==="b"?-n.length:n.length;function m(n){const t=Dn.get(n);if(t)return t;const e=typeof n=="string"?te(n):q(n)?m(ee(n)):z(n)?m(n.name):Zn;return Dn.set(n,e),e}const Wt=/^([a-gA-G]?)(#{1,}|b{1,}|x{1,}|)(-?\d*)\s*(.*)$/;function rn(n){const t=Wt.exec(n);return[t[1].toUpperCase(),t[2].replace(/x/g,"##"),t[3],t[4]]}function F(n){return m(on(n))}const ne=(n,t)=>(n%t+t)%t,pn=[0,2,4,5,7,9,11];function te(n){const t=rn(n);if(t[0]===""||t[3]!=="")return Zn;const e=t[0],o=t[1],r=t[2],i=(e.charCodeAt(0)+3)%7,a=G(o),s=r.length?+r:void 0,c=en({step:i,alt:a,oct:s}),l=e+o+r,u=e+o,d=(pn[i]+a+120)%12,M=s===void 0?ne(pn[i]+a,12)-12*99:pn[i]+a+12*(s+1),h=M>=0&&M<=127?M:null,A=s===void 0?null:Math.pow(2,(M-69)/12)*440;return{empty:!1,acc:o,alt:a,chroma:d,coord:c,freq:A,height:M,letter:e,midi:h,name:l,oct:s,pc:u,step:i}}function ee(n){const{step:t,alt:e,oct:o}=n,r=vn(t);if(!r)return"";const i=r+E(e);return o||o===0?i+o:i}const yn={empty:!0,name:"",acc:""},oe="([-+]?\\d+)(d{1,4}|m|M|P|A{1,4})",re="(AA|A|P|M|m|d|dd)([-+]?\\d+)",ie=new RegExp("^"+oe+"|"+re+"$");function $n(n){const t=ie.exec(`${n}`);return t===null?["",""]:t[1]?[t[1],t[2]]:[t[4],t[3]]}const Rn={};function f(n){return typeof n=="string"?Rn[n]||(Rn[n]=ae(n)):q(n)?f(ce(n)):z(n)?f(n.name):yn}const kn=[0,2,4,5,7,9,11],Jn="PMMPPMM";function ae(n){const t=$n(n);if(t[0]==="")return yn;const e=+t[0],o=t[1],r=(Math.abs(e)-1)%7,i=Jn[r];if(i==="M"&&o==="P")return yn;const a=i==="M"?"majorable":"perfectable",s=""+e+o,c=e<0?-1:1,l=e===8||e===-8?e:c*(r+1),u=se(a,o),d=Math.floor((Math.abs(e)-1)/7),M=c*(kn[r]+u+12*d),h=(c*(kn[r]+u)%12+12)%12,A=en({step:r,alt:u,oct:d,dir:c});return{empty:!1,name:s,num:e,q:o,step:r,alt:u,dir:c,type:a,simple:l,semitones:M,chroma:h,coord:A,oct:d}}function B(n,t){const[e,o=0]=n,r=e*7+o*12<0,i=t||r?[-e,-o,-1]:[e,o,1];return f(on(i))}function se(n,t){return t==="M"&&n==="majorable"||t==="P"&&n==="perfectable"?0:t==="m"&&n==="majorable"?-1:/^A+$/.test(t)?t.length:/^d+$/.test(t)?-1*(n==="perfectable"?t.length:t.length+1):0}function ce(n){const{step:t,alt:e,oct:o=0,dir:r}=n;if(!r)return"";const i=t+1+7*o,a=i===0?t+1:i,s=r<0?"-":"",c=Jn[t]==="M"?"majorable":"perfectable";return s+a+me(c,e)}function me(n,t){return t===0?n==="majorable"?"M":"P":t===-1&&n==="majorable"?"m":t>0?C("A",t):C("d",n==="perfectable"?t:t+1)}function P(n,t){const e=m(n),o=f(t);if(e.empty||o.empty)return"";const r=e.coord,i=o.coord,a=r.length===1?[r[0]+i[0]]:[r[0]+i[0],r[1]+i[1]];return F(a).name}function D(n,t){const e=m(n),o=m(t);if(e.empty||o.empty)return"";const r=e.coord,i=o.coord,a=i[0]-r[0],s=r.length===2&&i.length===2?i[1]-r[1]:-Math.floor(a*7/12),c=o.height===e.height&&o.midi!==null&&e.midi!==null&&e.step>o.step;return B([a,s],c).name}const Wn=Object.freeze(Object.defineProperty({__proto__:null,accToAlt:G,altToAcc:E,coordToInterval:B,coordToNote:F,decode:on,deprecate:g,distance:D,encode:en,fillStr:C,interval:f,isNamed:z,isPitch:q,note:m,stepToLetter:vn,tokenizeInterval:$n,tokenizeNote:rn,transpose:P},Symbol.toStringTag,{value:"Module"})),On=(n,t)=>Array(t+1).join(n),ue=/^(_{1,}|=|\^{1,}|)([abcdefgABCDEFG])([,']*)$/;function nt(n){const t=ue.exec(n);return t?[t[1],t[2],t[3]]:["","",""]}function W(n){const[t,e,o]=nt(n);if(e==="")return"";let r=4;for(let a=0;a96?e.toUpperCase()+i+(r+1):e+i+r}function tt(n){const t=m(n);if(t.empty||!t.oct&&t.oct!==0)return"";const{letter:e,acc:o,oct:r}=t,i=o[0]==="b"?o.replace(/b/g,"_"):o.replace(/#/g,"^"),a=r>4?e.toLowerCase():e,s=r===5?"":r>4?On("'",r-5):On(",",4-r);return i+a+s}function le(n,t){return tt(P(W(n),t))}function de(n,t){return D(W(n),W(t))}var Me={abcToScientificNotation:W,scientificToAbcNotation:tt,tokenize:nt,transpose:le,distance:de};function fe(n,t){const e=[];for(;t--;e[t]=t+n);return e}function Pe(n,t){const e=[];for(;t--;e[t]=n-t);return e}function pe(n,t){return nt===0||t)}function et(n){return n.map(e=>m(e)).filter(e=>!e.empty).sort((e,o)=>e.height-o.height).map(e=>e.name)}function ge(n){return et(n).filter((t,e,o)=>e===0||t!==o[e-1])}function be(n,t=Math.random){let e,o,r=n.length;for(;r;)e=Math.floor(t()*r--),o=n[r],n[r]=n[e],n[e]=o;return n}function ot(n){return n.length===0?[[]]:ot(n.slice(1)).reduce((t,e)=>t.concat(n.map((o,r)=>{const i=e.slice();return i.splice(r,0,n[0]),i})),[])}const Ae=Object.freeze(Object.defineProperty({__proto__:null,compact:ye,permutations:ot,range:pe,rotate:he,shuffle:be,sortedNoteNames:et,sortedUniqNoteNames:ge},Symbol.toStringTag,{value:"Module"}));function ve(n,t){const e=[];for(;t--;e[t]=t+n);return e}function $e(n,t){const e=[];for(;t--;e[t]=n-t);return e}function an(n,t){return nt===0||t)}function Ne(n,t=Math.random){let e,o,r=n.length;for(;r;)e=Math.floor(t()*r--),o=n[r],n[r]=n[e],n[e]=o;return n}function rt(n){return n.length===0?[[]]:rt(n.slice(1)).reduce((t,e)=>t.concat(n.map((o,r)=>{const i=e.slice();return i.splice(r,0,n[0]),i})),[])}var Ie={compact:Nn,permutations:rt,range:an,rotate:H,shuffle:Ne};const T={empty:!0,name:"",setNum:0,chroma:"000000000000",normalized:"000000000000",intervals:[]},In=n=>Number(n).toString(2),Fn=n=>parseInt(n,2),je=/^[01]{12}$/;function it(n){return je.test(n)}const Se=n=>typeof n=="number"&&n>=0&&n<=4095,Te=n=>n&&it(n.chroma),zn={[T.chroma]:T};function p(n){const t=it(n)?n:Se(n)?In(n):Array.isArray(n)?ze(n):Te(n)?n.chroma:T.chroma;return zn[t]=zn[t]||Fe(t)}const Ve=g("Pcset.pcset","Pcset.get",p),_e=n=>p(n).chroma,Ce=n=>p(n).intervals,we=n=>p(n).setNum,xe=["1P","2m","2M","3m","3M","4P","5d","5P","6m","6M","7m","7M"];function Ee(n){const t=[];for(let e=0;e<12;e++)n.charAt(e)==="1"&&t.push(xe[e]);return t}function De(){return an(2048,4095).map(In)}function jn(n,t=!0){const o=p(n).chroma.split("");return Nn(o.map((r,i)=>{const a=H(i,o);return t&&a[0]==="0"?null:a.join("")}))}function Re(n,t){return p(n).setNum===p(t).setNum}function sn(n){const t=p(n).setNum;return e=>{const o=p(e).setNum;return t&&t!==o&&(o&t)===o}}function cn(n){const t=p(n).setNum;return e=>{const o=p(e).setNum;return t&&t!==o&&(o|t)===o}}function at(n){const t=p(n);return e=>{const o=m(e);return t&&!o.empty&&t.chroma.charAt(o.chroma)==="1"}}function ke(n){const t=at(n);return e=>e.filter(t)}var st={get:p,chroma:_e,num:we,intervals:Ce,chromas:De,isSupersetOf:cn,isSubsetOf:sn,isNoteIncludedIn:at,isEqual:Re,filter:ke,modes:jn,pcset:Ve};function Oe(n){const t=n.split("");return t.map((e,o)=>H(o,t).join(""))}function Fe(n){const t=Fn(n),e=Oe(n).map(Fn).filter(i=>i>=2048).sort()[0],o=In(e),r=Ee(n);return{empty:!1,name:"",setNum:t,chroma:n,normalized:o,intervals:r}}function ze(n){if(n.length===0)return T.chroma;let t;const e=[0,0,0,0,0,0,0,0,0,0,0,0];for(let o=0;on.name).filter(n=>n)}function Le(){return R.map(n=>n.aliases[0]).filter(n=>n)}function Ue(){return Object.keys(j)}function k(){return R.slice()}const Xe=g("ChordType.entries","ChordType.all",k);function Ke(){R=[],j={}}function ct(n,t,e){const o=Ye(n),r={...p(n),name:e||"",quality:o,intervals:n,aliases:t};R.push(r),r.name&&(j[r.name]=r),j[r.setNum]=r,j[r.chroma]=r,r.aliases.forEach(i=>Qe(r,i))}function Qe(n,t){j[t]=n}function Ye(n){const t=e=>n.indexOf(e)!==-1;return t("5A")?"Augmented":t("3M")?"Major":t("5d")?"Diminished":t("3m")?"Minor":"Unknown"}qe.forEach(([n,t,e])=>ct(n.split(" "),e.split(" "),t));R.sort((n,t)=>n.setNum-t.setNum);var mt={names:He,symbols:Le,get:Sn,all:k,add:ct,removeAll:Ke,keys:Ue,entries:Xe,chordType:Be};const Ze=n=>{const t=n.reduce((e,o)=>{const r=m(o).chroma;return r!==void 0&&(e[r]=e[r]||m(o).name),e},{});return e=>t[e]};function Je(n){const t=n.map(o=>m(o).pc).filter(o=>o);return m.length===0?[]:We(t,1).filter(o=>o.weight).sort((o,r)=>r.weight-o.weight).map(o=>o.name)}function We(n,t){const e=n[0],o=m(e).chroma,r=Ze(n),i=jn(n,!1),a=[];return i.forEach((s,c)=>{k().filter(u=>u.chroma===s).forEach(u=>{const d=u.aliases[0],M=r(c);c!==o?a.push({weight:.5*t,name:`${M}${d}/${e}`}):a.push({weight:1*t,name:`${M}${d}`})})}),a}const no=[["1P 2M 3M 5P 6M","major pentatonic","pentatonic"],["1P 3M 4P 5P 7M","ionian pentatonic"],["1P 3M 4P 5P 7m","mixolydian pentatonic","indian"],["1P 2M 4P 5P 6M","ritusen"],["1P 2M 4P 5P 7m","egyptian"],["1P 3M 4P 5d 7m","neopolitan major pentatonic"],["1P 3m 4P 5P 6m","vietnamese 1"],["1P 2m 3m 5P 6m","pelog"],["1P 2m 4P 5P 6m","kumoijoshi"],["1P 2M 3m 5P 6m","hirajoshi"],["1P 2m 4P 5d 7m","iwato"],["1P 2m 4P 5P 7m","in-sen"],["1P 3M 4A 5P 7M","lydian pentatonic","chinese"],["1P 3m 4P 6m 7m","malkos raga"],["1P 3m 4P 5d 7m","locrian pentatonic","minor seven flat five pentatonic"],["1P 3m 4P 5P 7m","minor pentatonic","vietnamese 2"],["1P 3m 4P 5P 6M","minor six pentatonic"],["1P 2M 3m 5P 6M","flat three pentatonic","kumoi"],["1P 2M 3M 5P 6m","flat six pentatonic"],["1P 2m 3M 5P 6M","scriabin"],["1P 3M 5d 6m 7m","whole tone pentatonic"],["1P 3M 4A 5A 7M","lydian #5P pentatonic"],["1P 3M 4A 5P 7m","lydian dominant pentatonic"],["1P 3m 4P 5P 7M","minor #7M pentatonic"],["1P 3m 4d 5d 7m","super locrian pentatonic"],["1P 2M 3m 4P 5P 7M","minor hexatonic"],["1P 2A 3M 5P 5A 7M","augmented"],["1P 2M 3m 3M 5P 6M","major blues"],["1P 2M 4P 5P 6M 7m","piongio"],["1P 2m 3M 4A 6M 7m","prometheus neopolitan"],["1P 2M 3M 4A 6M 7m","prometheus"],["1P 2m 3M 5d 6m 7m","mystery #1"],["1P 2m 3M 4P 5A 6M","six tone symmetric"],["1P 2M 3M 4A 5A 7m","whole tone","messiaen's mode #1"],["1P 2m 4P 4A 5P 7M","messiaen's mode #5"],["1P 3m 4P 5d 5P 7m","minor blues","blues"],["1P 2M 3M 4P 5d 6m 7m","locrian major","arabian"],["1P 2m 3M 4A 5P 6m 7M","double harmonic lydian"],["1P 2M 3m 4P 5P 6m 7M","harmonic minor"],["1P 2m 2A 3M 4A 6m 7m","altered","super locrian","diminished whole tone","pomeroy"],["1P 2M 3m 4P 5d 6m 7m","locrian #2","half-diminished","aeolian b5"],["1P 2M 3M 4P 5P 6m 7m","mixolydian b6","melodic minor fifth mode","hindu"],["1P 2M 3M 4A 5P 6M 7m","lydian dominant","lydian b7","overtone"],["1P 2M 3M 4A 5P 6M 7M","lydian"],["1P 2M 3M 4A 5A 6M 7M","lydian augmented"],["1P 2m 3m 4P 5P 6M 7m","dorian b2","phrygian #6","melodic minor second mode"],["1P 2M 3m 4P 5P 6M 7M","melodic minor"],["1P 2m 3m 4P 5d 6m 7m","locrian"],["1P 2m 3m 4d 5d 6m 7d","ultralocrian","superlocrian bb7","superlocrian diminished"],["1P 2m 3m 4P 5d 6M 7m","locrian 6","locrian natural 6","locrian sharp 6"],["1P 2A 3M 4P 5P 5A 7M","augmented heptatonic"],["1P 2M 3m 4A 5P 6M 7m","dorian #4","ukrainian dorian","romanian minor","altered dorian"],["1P 2M 3m 4A 5P 6M 7M","lydian diminished"],["1P 2m 3m 4P 5P 6m 7m","phrygian"],["1P 2M 3M 4A 5A 7m 7M","leading whole tone"],["1P 2M 3M 4A 5P 6m 7m","lydian minor"],["1P 2m 3M 4P 5P 6m 7m","phrygian dominant","spanish","phrygian major"],["1P 2m 3m 4P 5P 6m 7M","balinese"],["1P 2m 3m 4P 5P 6M 7M","neopolitan major"],["1P 2M 3m 4P 5P 6m 7m","aeolian","minor"],["1P 2M 3M 4P 5P 6m 7M","harmonic major"],["1P 2m 3M 4P 5P 6m 7M","double harmonic major","gypsy"],["1P 2M 3m 4P 5P 6M 7m","dorian"],["1P 2M 3m 4A 5P 6m 7M","hungarian minor"],["1P 2A 3M 4A 5P 6M 7m","hungarian major"],["1P 2m 3M 4P 5d 6M 7m","oriental"],["1P 2m 3m 3M 4A 5P 7m","flamenco"],["1P 2m 3m 4A 5P 6m 7M","todi raga"],["1P 2M 3M 4P 5P 6M 7m","mixolydian","dominant"],["1P 2m 3M 4P 5d 6m 7M","persian"],["1P 2M 3M 4P 5P 6M 7M","major","ionian"],["1P 2m 3M 5d 6m 7m 7M","enigmatic"],["1P 2M 3M 4P 5A 6M 7M","major augmented","major #5","ionian augmented","ionian #5"],["1P 2A 3M 4A 5P 6M 7M","lydian #9"],["1P 2m 2M 4P 4A 5P 6m 7M","messiaen's mode #4"],["1P 2m 3M 4P 4A 5P 6m 7M","purvi raga"],["1P 2m 3m 3M 4P 5P 6m 7m","spanish heptatonic"],["1P 2M 3M 4P 5P 6M 7m 7M","bebop"],["1P 2M 3m 3M 4P 5P 6M 7m","bebop minor"],["1P 2M 3M 4P 5P 5A 6M 7M","bebop major"],["1P 2m 3m 4P 5d 5P 6m 7m","bebop locrian"],["1P 2M 3m 4P 5P 6m 7m 7M","minor bebop"],["1P 2M 3m 4P 5d 6m 6M 7M","diminished","whole-half diminished"],["1P 2M 3M 4P 5d 5P 6M 7M","ichikosucho"],["1P 2M 3m 4P 5P 6m 6M 7M","minor six diminished"],["1P 2m 3m 3M 4A 5P 6M 7m","half-whole diminished","dominant diminished","messiaen's mode #2"],["1P 3m 3M 4P 5P 6M 7m 7M","kafi raga"],["1P 2M 3M 4P 4A 5A 6A 7M","messiaen's mode #6"],["1P 2M 3m 3M 4P 5d 5P 6M 7m","composite blues"],["1P 2M 3m 3M 4A 5P 6m 7m 7M","messiaen's mode #3"],["1P 2m 2M 3m 4P 4A 5P 6m 6M 7M","messiaen's mode #7"],["1P 2m 2M 3m 3M 4P 5d 5P 6m 6M 7m 7M","chromatic"]],to={...T,intervals:[],aliases:[]};let mn=[],S={};function ut(){return mn.map(n=>n.name)}function un(n){return S[n]||to}const eo=g("ScaleDictionary.scaleType","ScaleType.get",un);function L(){return mn.slice()}const oo=g("ScaleDictionary.entries","ScaleType.all",L);function ro(){return Object.keys(S)}function io(){mn=[],S={}}function lt(n,t,e=[]){const o={...p(n),name:t,intervals:n,aliases:e};return mn.push(o),S[o.name]=o,S[o.setNum]=o,S[o.chroma]=o,o.aliases.forEach(r=>ao(o,r)),o}function ao(n,t){S[t]=n}no.forEach(([n,t,...e])=>lt(n.split(" "),t,e));var dt={names:ut,get:un,all:L,add:lt,removeAll:io,keys:ro,entries:oo,scaleType:eo};const gn={empty:!0,name:"",symbol:"",root:"",rootDegree:0,type:"",tonic:null,setNum:NaN,quality:"Unknown",chroma:"",normalized:"",aliases:[],notes:[],intervals:[]},so=/^(6|64|7|9|11|13)$/;function ln(n){const[t,e,o,r]=rn(n);return t===""?["",n]:t==="A"&&r==="ug"?["","aug"]:!r&&(o==="4"||o==="5")?[t+e,o]:so.test(o)?[t+e,o+r]:[t+e+o,r]}function U(n){if(n==="")return gn;if(Array.isArray(n)&&n.length===2)return Z(n[1],n[0]);{const[t,e]=ln(n),o=Z(e,t);return o.empty?Z(n):o}}function Z(n,t,e){const o=Sn(n),r=m(t||""),i=m(e||"");if(o.empty||t&&r.empty||e&&i.empty)return gn;const a=D(r.pc,i.pc),s=o.intervals.indexOf(a)+1;if(!i.empty&&!s)return gn;const c=Array.from(o.intervals);for(let M=1;MP(r,M));n=o.aliases.indexOf(n)!==-1?n:o.aliases[0];const u=`${r.empty?"":r.pc}${n}${i.empty||s<=1?"":"/"+i.pc}`,d=`${t?r.pc+" ":""}${o.name}${s>1&&e?" over "+i.pc:""}`;return{...o,name:d,symbol:u,type:o.name,root:i.name,intervals:c,rootDegree:s,tonic:r.name,notes:l}}const co=g("Chord.chord","Chord.get",U);function mo(n,t){const[e,o]=ln(n);return e?P(e,t)+o:n}function uo(n){const t=U(n),e=cn(t.chroma);return L().filter(o=>e(o.chroma)).map(o=>o.name)}function lo(n){const t=U(n),e=cn(t.chroma);return k().filter(o=>e(o.chroma)).map(o=>t.tonic+o.aliases[0])}function Mo(n){const t=U(n),e=sn(t.chroma);return k().filter(o=>e(o.chroma)).map(o=>t.tonic+o.aliases[0])}var fo={getChord:Z,get:U,detect:Je,chordScales:uo,extended:lo,reduced:Mo,tokenize:ln,transpose:mo,chord:co};const Po=[[.125,"dl",["large","duplex longa","maxima","octuple","octuple whole"]],[.25,"l",["long","longa"]],[.5,"d",["double whole","double","breve"]],[1,"w",["whole","semibreve"]],[2,"h",["half","minim"]],[4,"q",["quarter","crotchet"]],[8,"e",["eighth","quaver"]],[16,"s",["sixteenth","semiquaver"]],[32,"t",["thirty-second","demisemiquaver"]],[64,"sf",["sixty-fourth","hemidemisemiquaver"]],[128,"h",["hundred twenty-eighth"]],[256,"th",["two hundred fifty-sixth"]]],dn=[];Po.forEach(([n,t,e])=>$o(n,t,e));const po={empty:!0,name:"",value:0,fraction:[0,0],shorthand:"",dots:"",names:[]};function ho(){return dn.reduce((n,t)=>(t.names.forEach(e=>n.push(e)),n),[])}function yo(){return dn.map(n=>n.shorthand)}const go=/^([^.]+)(\.*)$/;function Tn(n){const[t,e,o]=go.exec(n)||[],r=dn.find(s=>s.shorthand===e||s.names.includes(e));if(!r)return po;const i=No(r.fraction,o.length),a=i[0]/i[1];return{...r,name:n,dots:o,value:a,fraction:i}}const bo=n=>Tn(n).value,Ao=n=>Tn(n).fraction;var vo={names:ho,shorthands:yo,get:Tn,value:bo,fraction:Ao};function $o(n,t,e){dn.push({empty:!1,dots:"",name:"",value:1/n,fraction:n<1?[1/n,1]:[1,n],shorthand:t,names:e})}function No(n,t){const e=Math.pow(2,t);let o=n[0]*e,r=n[1]*e;const i=o;for(let a=0;af(n).name,So=n=>f(n).semitones,To=n=>f(n).q,Vo=n=>f(n).num;function ft(n){const t=f(n);return t.empty?"":t.simple+t.q}function _o(n){const t=f(n);if(t.empty)return"";const e=(7-t.step)%7,o=t.type==="perfectable"?-t.alt:-(t.alt+1);return f({step:e,alt:o,oct:t.oct,dir:t.dir}).name}const Co=[1,2,2,3,3,4,5,5,6,6,7,7],wo="P m M m M P d P m M m M".split(" ");function xo(n){const t=n<0?-1:1,e=Math.abs(n),o=e%12,r=Math.floor(e/12);return t*(Co[o]+7*r)+wo[o]}const Eo=D,Pt=ht((n,t)=>[n[0]+t[0],n[1]+t[1]]),Do=n=>t=>Pt(n,t),Ro=ht((n,t)=>[n[0]-t[0],n[1]-t[1]]);function pt(n,t){const e=Mt(n);if(e.empty)return"";const[o,r,i]=e.coord;return B([o+t,r,i]).name}var bn={names:Io,get:Mt,name:jo,num:Vo,semitones:So,quality:To,fromSemitones:xo,distance:Eo,invert:_o,simplify:ft,add:Pt,addTo:Do,substract:Ro,transposeFifths:pt};function ht(n){return(t,e)=>{const o=f(t).coord,r=f(e).coord;if(o&&r){const i=n(o,r);return B(i).name}}}function yt(n){return+n>=0&&+n<=127}function gt(n){if(yt(n))return+n;const t=m(n);return t.empty?null:t.midi}function ko(n,t=440){return Math.pow(2,(n-69)/12)*t}const Oo=Math.log(2),Fo=Math.log(440);function Vn(n){const t=12*(Math.log(n)-Fo)/Oo+69;return Math.round(t*100)/100}const zo="C C# D D# E F F# G G# A A# B".split(" "),qo="C Db D Eb E F Gb G Ab A Bb B".split(" ");function I(n,t={}){if(isNaN(n)||n===-1/0||n===1/0)return"";n=Math.round(n);const o=(t.sharps===!0?zo:qo)[n%12];if(t.pitchClass)return o;const r=Math.floor(n/12)-1;return o+r}var Go={isMidi:yt,toMidi:gt,midiToFreq:ko,midiToNoteName:I,freqToMidi:Vn};const Bo=["C","D","E","F","G","A","B"],bt=n=>n.name,At=n=>n.map(m).filter(t=>!t.empty);function Ho(n){return n===void 0?Bo.slice():Array.isArray(n)?At(n).map(bt):[]}const y=m,Lo=n=>y(n).name,Uo=n=>y(n).pc,Xo=n=>y(n).acc,Ko=n=>y(n).oct,Qo=n=>y(n).midi,Yo=n=>y(n).freq,Zo=n=>y(n).chroma;function vt(n){return I(n)}function Jo(n){return I(Vn(n))}function Wo(n){return I(Vn(n),{sharps:!0})}function nr(n){return I(n,{sharps:!0})}const _n=P,tr=P,$t=n=>t=>_n(t,n),er=$t,Nt=n=>t=>_n(n,t),or=Nt;function nn(n,t){const e=y(n);if(e.empty)return"";const[o,r]=e.coord;return F(r===void 0?[o+t]:[o+t,r]).name}const rr=nn,Cn=(n,t)=>n.height-t.height,ir=(n,t)=>t.height-n.height;function It(n,t){return t=t||Cn,At(n).sort(t).map(bt)}function jt(n){return It(n,Cn).filter((t,e,o)=>e===0||t!==o[e-1])}const ar=n=>{const t=y(n);return t.empty?"":I(t.midi||t.chroma,{sharps:t.alt>0,pitchClass:t.midi===null})};function St(n,t){const e=y(n);if(e.empty)return"";const o=y(t||I(e.midi||e.chroma,{sharps:e.alt<0,pitchClass:!0}));if(o.empty||o.chroma!==e.chroma)return"";if(e.oct===void 0)return o.pc;const r=e.chroma-e.alt,i=o.chroma-o.alt,a=r>11||i<0?-1:r<0||i>11?1:0,s=e.oct+a;return o.pc+s}var w={names:Ho,get:y,name:Lo,pitchClass:Uo,accidentals:Xo,octave:Ko,midi:Qo,ascending:Cn,descending:ir,sortedNames:It,sortedUniqNames:jt,fromMidi:vt,fromMidiSharps:nr,freq:Yo,fromFreq:Jo,fromFreqSharps:Wo,chroma:Zo,transpose:_n,tr,transposeBy:$t,trBy:er,transposeFrom:Nt,trFrom:or,transposeFifths:nn,trFifths:rr,simplify:ar,enharmonic:St};const Tt={empty:!0,name:"",chordType:""},qn={};function $(n){return typeof n=="string"?qn[n]||(qn[n]=Mr(n)):typeof n=="number"?$(Mn[n]||""):q(n)?mr(n):z(n)?$(n.name):Tt}const sr=g("RomanNumeral.romanNumeral","RomanNumeral.get",$);function cr(n=!0){return(n?Mn:dr).slice()}function mr(n){return $(E(n.alt)+Mn[n.step])}const ur=/^(#{1,}|b{1,}|x{1,}|)(IV|I{1,3}|VI{0,2}|iv|i{1,3}|vi{0,2})([^IViv]*)$/;function lr(n){return ur.exec(n)||["","","",""]}const Vt="I II III IV V VI VII",Mn=Vt.split(" "),dr=Vt.toLowerCase().split(" ");function Mr(n){const[t,e,o,r]=lr(n);if(!o)return Tt;const i=o.toUpperCase(),a=Mn.indexOf(i),s=G(e),c=1;return{empty:!1,name:t,roman:o,interval:f({step:a,alt:s,dir:c}).name,acc:e,chordType:r,alt:s,step:a,major:o===i,oct:0,dir:c}}var fr={names:cr,get:$,romanNumeral:sr};const b=Object.freeze([]),_t={type:"major",tonic:"",alteration:0,keySignature:""},J={tonic:"",grades:b,intervals:b,scale:b,chords:b,chordsHarmonicFunction:b,chordScales:b},Pr={..._t,...J,type:"major",minorRelative:"",scale:b,secondaryDominants:b,secondaryDominantsMinorRelative:b,substituteDominants:b,substituteDominantsMinorRelative:b},pr={..._t,type:"minor",relativeMajor:"",natural:J,harmonic:J,melodic:J},Gn=(n,t,e="")=>t.map((o,r)=>`${n[r]}${e}${o}`);function fn(n,t,e,o){return r=>{const i=n.map(s=>$(s).interval||""),a=i.map(s=>P(r,s));return{tonic:r,grades:n,intervals:i,scale:a,chords:Gn(a,t),chordsHarmonicFunction:e.slice(),chordScales:Gn(a,o," ")}}}const Ct=(n,t)=>{const e=m(n),o=m(t);return e.empty||o.empty?0:o.coord[0]-e.coord[0]},hr=fn("I II III IV V VI VII".split(" "),"maj7 m7 m7 maj7 7 m7 m7b5".split(" "),"T SD T SD D T D".split(" "),"major,dorian,phrygian,lydian,mixolydian,minor,locrian".split(",")),yr=fn("I II bIII IV V bVI bVII".split(" "),"m7 m7b5 maj7 m7 m7 maj7 7".split(" "),"T SD T SD D SD SD".split(" "),"minor,locrian,major,dorian,phrygian,lydian,mixolydian".split(",")),gr=fn("I II bIII IV V bVI VII".split(" "),"mMaj7 m7b5 +maj7 m7 7 maj7 o7".split(" "),"T SD T SD D SD D".split(" "),"harmonic minor,locrian 6,major augmented,lydian diminished,phrygian dominant,lydian #9,ultralocrian".split(",")),br=fn("I II bIII IV V VI VII".split(" "),"m6 m7 +maj7 7 7 m7b5 m7b5".split(" "),"T SD T SD D ".split(" "),"melodic minor,dorian b2,lydian augmented,lydian dominant,mixolydian b6,locrian #2,altered".split(","));function Ar(n){const t=m(n).pc;if(!t)return Pr;const e=hr(t),o=Ct("C",t),r=i=>{const a=$(i);return a.empty?"":P(n,a.interval)+a.chordType};return{...e,type:"major",minorRelative:P(t,"-3m"),alteration:o,keySignature:E(o),secondaryDominants:"- VI7 VII7 I7 II7 III7 -".split(" ").map(r),secondaryDominantsMinorRelative:"- IIIm7b5 IV#m7 Vm7 VIm7 VIIm7b5 -".split(" ").map(r),substituteDominants:"- bIII7 IV7 bV7 bVI7 bVII7 -".split(" ").map(r),substituteDominantsMinorRelative:"- IIIm7 Im7 IIbm7 VIm7 IVm7 -".split(" ").map(r)}}function vr(n){const t=m(n).pc;if(!t)return pr;const e=Ct("C",t)-3;return{type:"minor",tonic:t,relativeMajor:P(t,"3m"),alteration:e,keySignature:E(e),natural:yr(t),harmonic:gr(t),melodic:br(t)}}function $r(n){return typeof n=="number"?nn("C",n):typeof n=="string"&&/^b+|#+$/.test(n)?nn("C",G(n)):null}var Nr={majorKey:Ar,majorTonicFromKeySignature:$r,minorKey:vr};const wn=[[0,2773,0,"ionian","","Maj7","major"],[1,2902,2,"dorian","m","m7"],[2,3418,4,"phrygian","m","m7"],[3,2741,-1,"lydian","","Maj7"],[4,2774,1,"mixolydian","","7"],[5,2906,3,"aeolian","m","m7","minor"],[6,3434,5,"locrian","dim","m7b5"]],Bn={...T,name:"",alt:0,modeNum:NaN,triad:"",seventh:"",aliases:[]},xn=wn.map(Tr),An={};xn.forEach(n=>{An[n.name]=n,n.aliases.forEach(t=>{An[t]=n})});function V(n){return typeof n=="string"?An[n.toLowerCase()]||Bn:n&&n.name?V(n.name):Bn}const Ir=g("Mode.mode","Mode.get",V);function wt(){return xn.slice()}const jr=g("Mode.mode","Mode.all",wt);function Sr(){return xn.map(n=>n.name)}function Tr(n){const[t,e,o,r,i,a,s]=n,c=s?[s]:[],l=Number(e).toString(2);return{empty:!1,intervals:un(r).intervals,modeNum:t,chroma:l,normalized:l,name:r,setNum:e,alt:o,triad:i,seventh:a,aliases:c}}function Vr(n,t){return V(n).intervals.map(e=>P(t,e))}function xt(n){return(t,e)=>{const o=V(t);if(o.empty)return[];const r=H(o.modeNum,n),i=o.intervals.map(a=>P(e,a));return r.map((a,s)=>i[s]+a)}}const _r=xt(wn.map(n=>n[4])),Cr=xt(wn.map(n=>n[5]));function Et(n,t){const e=V(t),o=V(n);return e.empty||o.empty?"":ft(pt("1P",o.alt-e.alt))}function wr(n,t,e){return P(e,Et(n,t))}var xr={get:V,names:Sr,all:wt,distance:Et,relativeTonic:wr,notes:Vr,triads:_r,seventhChords:Cr,entries:jr,mode:Ir};function Er(n,t){return t.map($).map(o=>P(n,f(o))+o.chordType)}function Dr(n,t){return t.map(e=>{const[o,r]=ln(e),i=D(n,o);return $(f(i)).name+r})}var Rr={fromRomanNumerals:Er,toRomanNumerals:Dr};function Dt(n){const t=Nn(n.map(gt));return!n.length||t.length!==n.length?[]:t.reduce((e,o)=>{const r=e[e.length-1];return e.concat(an(r,o).slice(1))},[t[0]])}function kr(n,t){return Dt(n).map(e=>I(e,t))}var Or={numeric:Dt,chromatic:kr};const Fr={empty:!0,name:"",type:"",tonic:null,setNum:NaN,chroma:"",normalized:"",aliases:[],notes:[],intervals:[]};function Rt(n){if(typeof n!="string")return["",""];const t=n.indexOf(" "),e=m(n.substring(0,t));if(e.empty){const r=m(n);return r.empty?["",n]:[r.name,""]}const o=n.substring(e.name.length+1);return[e.name,o.length?o:""]}const zr=ut;function N(n){const t=Array.isArray(n)?n:Rt(n),e=m(t[0]).name,o=un(t[1]);if(o.empty)return Fr;const r=o.name,i=e?o.intervals.map(s=>P(e,s)):[],a=e?e+" "+r:r;return{...o,name:a,type:r,tonic:e,notes:i}}const qr=g("Scale.scale","Scale.get",N);function Gr(n){const t=N(n),e=sn(t.chroma);return k().filter(o=>e(o.chroma)).map(o=>o.aliases[0])}function Br(n){const t=N(n),e=cn(t.chroma);return L().filter(o=>e(o.chroma)).map(o=>o.name)}function Hr(n){const t=sn(N(n).chroma);return L().filter(e=>t(e.chroma)).map(e=>e.name)}function kt(n){const t=n.map(r=>m(r).pc).filter(r=>r),e=t[0],o=jt(t);return H(o.indexOf(e),o)}function Lr(n){const t=N(n);if(t.empty)return[];const e=t.tonic?t.notes:t.intervals;return jn(t.chroma).map((o,r)=>{const i=N(o).name;return i?[e[r],i]:["",""]}).filter(o=>o[0])}function Ur(n){const t=Array.isArray(n)?kt(n):N(n).notes,e=t.map(o=>m(o).chroma);return o=>{const r=m(typeof o=="number"?vt(o):o),i=r.height;if(i===void 0)return;const a=i%12,s=e.indexOf(a);if(s!==-1)return St(r.name,t[s])}}function Xr(n){const t=Ur(n);return(e,o)=>{const r=m(e).height,i=m(o).height;return r===void 0||i===void 0?[]:an(r,i).map(t).filter(a=>a)}}var tn={get:N,names:zr,extended:Br,modeNames:Lr,reduced:Hr,scaleChords:Gr,scaleNotes:kt,tokenize:Rt,rangeOf:Xr,scale:qr};const Kr={empty:!0,name:"",upper:void 0,lower:void 0,type:void 0,additive:[]},Qr=["4/4","3/4","2/4","2/2","12/8","9/8","6/8","3/8"];function Yr(){return Qr.slice()}const Zr=/^(\d?\d(?:\+\d)*)\/(\d)$/,Hn=new Map;function Jr(n){const t=Hn.get(n);if(t)return t;const e=ni(En(n));return Hn.set(n,e),e}function En(n){if(typeof n=="string"){const[i,a,s]=Zr.exec(n)||[];return En([a,s])}const[t,e]=n,o=+e;if(typeof t=="number")return[t,o];const r=t.split("+").map(i=>+i);return r.length===1?[r[0],o]:[r,o]}var Wr={names:Yr,parse:En,get:Jr};function ni([n,t]){const e=Array.isArray(n)?n.reduce((s,c)=>s+c,0):n,o=t;if(e===0||o===0)return Kr;const r=Array.isArray(n)?`${n.join("+")}/${t}`:`${n}/${t}`,i=Array.isArray(n)?n:[],a=o===4||o===2?"simple":o===8&&e%3===0?"compound":"irregular";return{empty:!1,name:r,type:a,upper:e,lower:o,additive:i}}const ti=Wn,ei=st,oi=mt,ri=dt,ii=Object.freeze(Object.defineProperty({__proto__:null,Array:Ae,Core:Wn,ChordDictionary:oi,PcSet:ei,ScaleDictionary:ri,Tonal:ti,AbcNotation:Me,Chord:fo,ChordType:mt,Collection:Ie,DurationValue:vo,Interval:bn,Key:Nr,Midi:Go,Mode:xr,Note:w,Pcset:st,Progression:Rr,Range:Or,RomanNumeral:fr,Scale:tn,ScaleType:dt,TimeSignature:Wr,accToAlt:G,altToAcc:E,coordToInterval:B,coordToNote:F,decode:on,deprecate:g,distance:D,encode:en,fillStr:C,interval:f,isNamed:z,isPitch:q,note:m,stepToLetter:vn,tokenizeInterval:$n,tokenizeNote:rn,transpose:P},Symbol.toStringTag,{value:"Module"}));function Ot(n,t,e){let[o,r]=tn.tokenize(n),{notes:i}=tn.get(`${o} ${r}`);if(i=i.map(h=>w.get(h).pc),t=Number(t),isNaN(t))throw new Error(`scale offset "${t}" not a number`);const{pc:a,oct:s=3}=w.get(e),c=i.indexOf(a);if(c===-1)throw new Error(`note "${e}" is not in scale "${n}"`);let l=c,u=s,d=a;const M=Math.sign(t);for(;Math.abs(l-c)0&&d[0]==="C"&&(u+=M)}return d+u}_.prototype._transpose=function(n){return this._withHap(t=>{const e=isNaN(Number(n))?String(n):bn.fromSemitones(n);if(typeof t.value=="number"){const o=typeof e=="string"?bn.semitones(e)||0:e;return t.withValue(()=>t.value+o)}return t.withValue(()=>w.simplify(w.transpose(t.value,e)))})};_.prototype._scaleTranspose=function(n){return this._withHap(t=>{if(!t.context.scale)throw new Error("can only use scaleTranspose after .scale");if(typeof t.value!="string")throw new Error("can only use scaleTranspose with notes");return t.withValue(()=>Ot(t.context.scale,Number(n),t.value))})};_.prototype._scale=function(n){return this._withHap(t=>{let e=t.value;const o=Number(e);if(!isNaN(o)){let[r,i]=tn.tokenize(n);const{pc:a,oct:s=3}=w.get(r);e=Ot(a+" "+i,o,a+s)}return t.withValue(()=>e).setContext({...t.context,scale:n})})};_.prototype.define("transpose",(n,t)=>t.transpose(n),{composable:!0,patternified:!0});_.prototype.define("scale",(n,t)=>t.scale(n),{composable:!0,patternified:!0});_.prototype.define("scaleTranspose",(n,t)=>t.scaleTranspose(n),{composable:!0,patternified:!0});var Ft={},hn={},X={};X.__esModule=!0;X.getBestVoicing=void 0;function ai(n){var t=n.chord,e=n.range,o=n.finder,r=n.picker,i=n.lastVoicing,a=o(t,e);return a.length?r(a,i):[]}X.getBestVoicing=ai;var O={};const zt=Ut(ii);var K={};K.__esModule=!0;K.tokenizeChord=void 0;function si(n){var t=(n||"").match(/^([A-G][b#]*)([^\/]*)[\/]?([A-G][b#]*)?$/);return t?t.slice(1):[]}K.tokenizeChord=si;var Ln;function ci(){if(Ln)return O;Ln=1,O.__esModule=!0,O.voicingsInRange=void 0;var n=zt,t=qt(),e=K;function o(r,i,a){i===void 0&&(i=t.lefthand),a===void 0&&(a=["D3","A4"]);var s=(0,e.tokenizeChord)(r),c=s[0],l=s[1];if(!i[l])return[];var u=i[l].map(function(M){return M.split(" ")}),d=n.Range.chromatic(a);return u.reduce(function(M,h){var A=h.map(function(v){return n.Interval.substract(v,h[0])}),Q=n.Note.transpose(c,h[0]),Gt=d.filter(function(v){return n.Note.chroma(v)===n.Note.chroma(Q)}).filter(function(v){return n.Note.midi(n.Note.transpose(v,A[A.length-1]))<=n.Note.midi(a[1])}).map(function(v){return n.Note.enharmonic(v,Q)}),Bt=Gt.map(function(v){return A.map(function(Ht){return n.Note.transpose(v,Ht)})});return M.concat(Bt)},[])}return O.voicingsInRange=o,O}var Un;function qt(){return Un||(Un=1,function(n){var t=Y&&Y.__assign||function(){return t=Object.assign||function(s){for(var c,l=1,u=arguments.length;lui({chord:n,dictionary:di,range:e,picker:li,lastVoicing:t}),x=_;x.prototype.fmapNested=function(n){return new x(t=>this.query(t).map(e=>Kt(n(e)).query(t).map(o=>new Qt(e.whole,e.part,o.value,o.context))).flat())};x.prototype.voicings=function(n){let t;return n!=null&&n.length||(n=["F3","A4"]),this.fmapNested(e=>(t=Mi(e.value,t,n),Yt(...t)._withContext(()=>({locations:e.context.locations||[]}))))};x.prototype._rootNotes=function(n=2){return this.fmap(t=>{const[e,o]=t.match(/^([a-gA-G][b#]?).*$/);return o+n})};x.prototype.define("voicings",(n,t)=>t.voicings(n),{composable:!0});x.prototype.define("rootNotes",(n,t)=>t.rootNotes(n),{composable:!0,patternified:!0}); diff --git a/packages/core/examples/vite-vanilla-repl/dist/assets/index.ecddf978.js b/packages/core/examples/vite-vanilla-repl/dist/assets/index.ecddf978.js new file mode 100644 index 00000000..7e53038e --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/dist/assets/index.ecddf978.js @@ -0,0 +1 @@ +import{g as s,f as d,i as t,n as r,l as u,j as o,d as f,k as p,r as g,s as i,w as l,e as m}from"./index.4cbc0a10.js";export{s as getAudioContext,d as getCachedBuffer,t as getLoadedBuffer,r as getLoadedSamples,u as loadBuffer,o as loadGithubSamples,f as panic,p as resetLoadedSamples,g as reverseBuffer,i as samples,l as webaudioOutput,m as webaudioOutputTrigger}; diff --git a/packages/core/examples/vite-vanilla-repl/dist/index.html b/packages/core/examples/vite-vanilla-repl/dist/index.html new file mode 100644 index 00000000..614a6b6c --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/dist/index.html @@ -0,0 +1,36 @@ + + + + + + Vite Vanilla Strudel REPL + + + +
+ +
+ +
+ + + diff --git a/packages/core/examples/vite-vanilla-repl/index.html b/packages/core/examples/vite-vanilla-repl/index.html new file mode 100644 index 00000000..df41f55e --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/index.html @@ -0,0 +1,35 @@ + + + + + + Vite Vanilla Strudel REPL + + +
+ +
+ +
+ + + diff --git a/packages/core/examples/vite-vanilla-repl/main.js b/packages/core/examples/vite-vanilla-repl/main.js new file mode 100644 index 00000000..72d80b92 --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/main.js @@ -0,0 +1,29 @@ +import { controls, repl, evalScope, setStringParser } from '@strudel.cycles/core'; +import { mini } from '@strudel.cycles/mini'; +import { getAudioContext, webaudioOutput } from '@strudel.cycles/webaudio'; +// import { transpiler } from '@strudel.cycles/transpiler'; +import tune from './tune.mjs'; + +const ctx = getAudioContext(); +const input = document.getElementById('text'); +input.innerHTML = tune; + +evalScope( + controls, + import('@strudel.cycles/core'), + import('@strudel.cycles/mini'), + import('@strudel.cycles/webaudio'), + import('@strudel.cycles/tonal'), +); + +setStringParser(mini) + +const { evaluate } = repl({ + defaultOutput: webaudioOutput, + getTime: () => ctx.currentTime, + // transpiler, +}); +document.getElementById('start').addEventListener('click', () => { + ctx.resume(); + evaluate(input.value); +}); diff --git a/packages/core/examples/vite-vanilla-repl/package-lock.json b/packages/core/examples/vite-vanilla-repl/package-lock.json new file mode 100644 index 00000000..0d985a7f --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/package-lock.json @@ -0,0 +1,885 @@ +{ + "name": "vite-vanilla-repl", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "vite-vanilla-repl", + "version": "0.0.0", + "devDependencies": { + "vite": "^3.2.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", + "integrity": "sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz", + "integrity": "sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.13.tgz", + "integrity": "sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.13", + "@esbuild/linux-loong64": "0.15.13", + "esbuild-android-64": "0.15.13", + "esbuild-android-arm64": "0.15.13", + "esbuild-darwin-64": "0.15.13", + "esbuild-darwin-arm64": "0.15.13", + "esbuild-freebsd-64": "0.15.13", + "esbuild-freebsd-arm64": "0.15.13", + "esbuild-linux-32": "0.15.13", + "esbuild-linux-64": "0.15.13", + "esbuild-linux-arm": "0.15.13", + "esbuild-linux-arm64": "0.15.13", + "esbuild-linux-mips64le": "0.15.13", + "esbuild-linux-ppc64le": "0.15.13", + "esbuild-linux-riscv64": "0.15.13", + "esbuild-linux-s390x": "0.15.13", + "esbuild-netbsd-64": "0.15.13", + "esbuild-openbsd-64": "0.15.13", + "esbuild-sunos-64": "0.15.13", + "esbuild-windows-32": "0.15.13", + "esbuild-windows-64": "0.15.13", + "esbuild-windows-arm64": "0.15.13" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz", + "integrity": "sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz", + "integrity": "sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz", + "integrity": "sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz", + "integrity": "sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz", + "integrity": "sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz", + "integrity": "sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz", + "integrity": "sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz", + "integrity": "sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz", + "integrity": "sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz", + "integrity": "sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz", + "integrity": "sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz", + "integrity": "sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz", + "integrity": "sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz", + "integrity": "sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz", + "integrity": "sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz", + "integrity": "sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz", + "integrity": "sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz", + "integrity": "sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz", + "integrity": "sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz", + "integrity": "sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "dev": true, + "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/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "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/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/vite": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", + "integrity": "sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==", + "dev": true, + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + } + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", + "integrity": "sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz", + "integrity": "sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==", + "dev": true, + "optional": true + }, + "esbuild": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.13.tgz", + "integrity": "sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.15.13", + "@esbuild/linux-loong64": "0.15.13", + "esbuild-android-64": "0.15.13", + "esbuild-android-arm64": "0.15.13", + "esbuild-darwin-64": "0.15.13", + "esbuild-darwin-arm64": "0.15.13", + "esbuild-freebsd-64": "0.15.13", + "esbuild-freebsd-arm64": "0.15.13", + "esbuild-linux-32": "0.15.13", + "esbuild-linux-64": "0.15.13", + "esbuild-linux-arm": "0.15.13", + "esbuild-linux-arm64": "0.15.13", + "esbuild-linux-mips64le": "0.15.13", + "esbuild-linux-ppc64le": "0.15.13", + "esbuild-linux-riscv64": "0.15.13", + "esbuild-linux-s390x": "0.15.13", + "esbuild-netbsd-64": "0.15.13", + "esbuild-openbsd-64": "0.15.13", + "esbuild-sunos-64": "0.15.13", + "esbuild-windows-32": "0.15.13", + "esbuild-windows-64": "0.15.13", + "esbuild-windows-arm64": "0.15.13" + } + }, + "esbuild-android-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz", + "integrity": "sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz", + "integrity": "sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz", + "integrity": "sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz", + "integrity": "sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz", + "integrity": "sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz", + "integrity": "sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz", + "integrity": "sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz", + "integrity": "sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz", + "integrity": "sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz", + "integrity": "sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz", + "integrity": "sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz", + "integrity": "sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz", + "integrity": "sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz", + "integrity": "sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz", + "integrity": "sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz", + "integrity": "sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz", + "integrity": "sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz", + "integrity": "sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz", + "integrity": "sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz", + "integrity": "sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==", + "dev": true, + "optional": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "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==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "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==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "postcss": { + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true + }, + "vite": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", + "integrity": "sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==", + "dev": true, + "requires": { + "esbuild": "^0.15.9", + "fsevents": "~2.3.2", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + } + } + } +} diff --git a/packages/core/examples/vite-vanilla-repl/package.json b/packages/core/examples/vite-vanilla-repl/package.json new file mode 100644 index 00000000..b1a5f0f6 --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/package.json @@ -0,0 +1,15 @@ +{ + "name": "vite-vanilla-repl", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build-githack": "vite build --base /tidalcycles/strudel/use-acorn/packages/core/examples/vite-vanilla-repl/dist/", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "vite": "^3.2.0" + } +} diff --git a/packages/core/examples/vite-vanilla-repl/tune.mjs b/packages/core/examples/vite-vanilla-repl/tune.mjs new file mode 100644 index 00000000..88e8a7fe --- /dev/null +++ b/packages/core/examples/vite-vanilla-repl/tune.mjs @@ -0,0 +1,39 @@ +/* export default `await samples('github:tidalcycles/Dirt-Samples/master') + +stack( + // amen + n("0 1 2 3 4 5 6 7") + .sometimes(x=>x.ply(2)) + .rarely(x=>x.speed("2 | -2")) + .sometimesBy(.4, x=>x.delay(".5")) + .s("amencutup") + .slow(2) + .room(.5) + , + // bass + sine.add(saw.slow(4)).range(0,7).segment(8) + .superimpose(x=>x.add(.1)) + .scale('G0 minor').note() + .s("sawtooth").decay(.1).sustain(0) + .gain(.4).cutoff(perlin.range(300,3000).slow(8)).resonance(10) + .degradeBy("0 0.1 .5 .1") + .rarely(add(note("12"))) + , + // chord + note("Bb3,D4".superimpose(x=>x.add(.2))) + .s('sawtooth').cutoff(1000).struct("<~@3 [~ x]>") + .decay(.05).sustain(.0).delay(.8).delaytime(.125).room(.8) + , + // alien + s("breath").room(1).shape(.6).chop(16).rev().mask("") + , + n("0 1").s("east").delay(.5).degradeBy(.8).speed(rand.range(.5,1.5)) +).reset("")`; + */ + +export default `stack( + n("c3 [eb3,g3]") + .delay("<0 .5>") + .delaytime(".16 | .33") + .delayfeedback(".6 | .8") +).sometimes(x=>x.speed("-1"))`; diff --git a/packages/core/gist.js b/packages/core/gist.js index 67924762..9df2dda2 100644 --- a/packages/core/gist.js +++ b/packages/core/gist.js @@ -6,7 +6,7 @@ This program is free software: you can redistribute it and/or modify it under th // this is a shortcut to eval code from a gist // why? to be able to shorten strudel code + e.g. be able to change instruments after links have been generated -export default (route) => - fetch(`https://gist.githubusercontent.com/${route}?cachebust=${Date.now()}`) +export default (route, cache = true) => + fetch(`https://gist.githubusercontent.com/${route}?cachebust=${cache ? '' : Date.now()}`) .then((res) => res.text()) .then((code) => eval(code)); diff --git a/packages/core/hap.mjs b/packages/core/hap.mjs index d82ed662..a0107d87 100644 --- a/packages/core/hap.mjs +++ b/packages/core/hap.mjs @@ -86,11 +86,9 @@ export class Hap { } showWhole() { - return `${this.whole == undefined ? '~' : this.whole.show()}: ${this.value}`; - } - - showWhole() { - return `${this.whole == undefined ? '~' : this.whole.show()}: ${this.value}`; + return `${this.whole == undefined ? '~' : this.whole.show()}: ${ + typeof this.value === 'object' ? JSON.stringify(this.value) : this.value + }`; } combineContext(b) { diff --git a/packages/core/index.mjs b/packages/core/index.mjs index 73977401..33a95a77 100644 --- a/packages/core/index.mjs +++ b/packages/core/index.mjs @@ -4,10 +4,10 @@ Copyright (C) 2022 Strudel contributors - see . */ -export * from './controls.mjs'; +import controls from './controls.mjs'; export * from './euclid.mjs'; import Fraction from './fraction.mjs'; -export { Fraction }; +export { Fraction, controls }; export * from './hap.mjs'; export * from './pattern.mjs'; export * from './signal.mjs'; @@ -15,5 +15,22 @@ export * from './state.mjs'; export * from './timespan.mjs'; export * from './util.mjs'; export * from './speak.mjs'; -export * as gist from './gist.js'; -// export * from './value.mjs'; +export * from './evaluate.mjs'; +export * from './repl.mjs'; +export { default as drawLine } from './drawLine.mjs'; +export { default as gist } from './gist.js'; +// below won't work with runtime.mjs (json import fails) +/* import * as p from './package.json'; +export const version = p.version; */ +console.log( + '%c // 🌀 @strudel.cycles/core loaded 🌀', // keep "//" for runnable snapshot source.. + 'background-color: black;color:white;padding:4px;border-radius:15px', +); +if (globalThis._strudelLoaded) { + console.warn( + `@strudel.cycles/core was loaded more than once... +This might happen when you have multiple versions of strudel installed. +Please check with "npm ls @strudel.cycles/core".`, + ); +} +globalThis._strudelLoaded = true; diff --git a/packages/core/package-lock.json b/packages/core/package-lock.json index 100781f5..6ad39336 100644 --- a/packages/core/package-lock.json +++ b/packages/core/package-lock.json @@ -1,13 +1,13 @@ { "name": "@strudel.cycles/core", - "version": "0.1.0", + "version": "0.3.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@strudel.cycles/core", - "version": "0.0.3", - "license": "GPL-3.0-or-later", + "version": "0.1.0", + "license": "AGPL-3.0-or-later", "dependencies": { "bjork": "^0.0.1", "fraction.js": "^4.2.0" diff --git a/packages/core/package.json b/packages/core/package.json index 02a8f121..86a4dbe9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,11 +1,11 @@ { "name": "@strudel.cycles/core", - "version": "0.1.0", + "version": "0.3.2", "description": "Port of Tidal Cycles to JavaScript", "main": "index.mjs", "type": "module", "scripts": { - "test": "mocha --colors" + "test": "vitest run" }, "repository": { "type": "git", @@ -28,8 +28,5 @@ "bjork": "^0.0.1", "fraction.js": "^4.2.0" }, - "devDependencies": { - "mocha": "^9.2.2" - }, "gitHead": "0e26d4e741500f5bae35b023608f062a794905c2" } diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs index f6afb7df..3db6d720 100644 --- a/packages/core/pattern.mjs +++ b/packages/core/pattern.mjs @@ -10,11 +10,18 @@ import Hap from './hap.mjs'; import State from './state.mjs'; import { unionWithObj } from './value.mjs'; -import { isNote, toMidi, compose, removeUndefineds, flatten, id, listRange, curry, mod } from './util.mjs'; +import { compose, removeUndefineds, flatten, id, listRange, curry, mod, numeralArgs, parseNumeral } from './util.mjs'; import drawLine from './drawLine.mjs'; +let stringParser; +// parser is expected to turn a string into a pattern +// if set, the reify function will parse all strings with it +// intended to use with mini to automatically interpret all strings as mini notation +export const setStringParser = (parser) => (stringParser = parser); + /** @class Class representing a pattern. */ export class Pattern { + _Pattern = true; // this property is used to detect if a pattern that fails instanceof Pattern is an instance of another Pattern /** * Create a pattern. As an end user, you will most likely not create a Pattern directly. * @@ -31,8 +38,10 @@ export class Pattern { * @param {Fraction | number} end to time * @returns Hap[] * @example - * const pattern = sequence('a', ['b', 'c']); - * const haps = pattern.queryArc(0, 1); + * const pattern = sequence('a', ['b', 'c']) + * const haps = pattern.queryArc(0, 1) + * console.log(haps) + * silence */ queryArc(begin, end) { return this.query(new State(new TimeSpan(begin, end))); @@ -62,6 +71,17 @@ export class Pattern { return new Pattern((state) => this.query(state.withSpan(func))); } + withQuerySpanMaybe(func) { + const pat = this; + return new Pattern((state) => { + const newState = state.withSpan(func); + if (!newState.span) { + return []; + } + return pat.query(newState); + }); + } + /** * As with {@link Pattern#withQuerySpan}, but the function is applied to both the * begin and end time of the query timespan. @@ -434,40 +454,18 @@ export class Pattern { return otherPat.fmap((b) => this.fmap((a) => func(a)(b)))._TrigzeroJoin(); } - _asNumber(dropfails = false, softfail = false) { - return this._withHap((hap) => { - const asNumber = Number(hap.value); - if (!isNaN(asNumber)) { - return hap.withValue(() => asNumber); - } - const specialValue = { - e: Math.E, - pi: Math.PI, - }[hap.value]; - if (typeof specialValue !== 'undefined') { - return hap.withValue(() => specialValue); - } - if (isNote(hap.value)) { - // set context type to midi to let the player know its meant as midi number and not as frequency - return new Hap(hap.whole, hap.part, toMidi(hap.value), { ...hap.context, type: 'midi' }); - } - if (dropfails) { - // return 'nothing' - return undefined; - } - if (softfail) { - // return original hap - return hap; - } - throw new Error('cannot parse as number: "' + hap.value + '"'); - return hap; - }); + _asNumber() { + return this.fmap(parseNumeral); } /** * Assumes a numerical pattern. Returns a new pattern with all values rounded * to the nearest integer. + * @name round + * @memberof Pattern * @returns Pattern + * @example + * "0.5 1.5 2.5".round().scale('C major').note() */ round() { return this._asNumber().fmap((v) => Math.round(v)); @@ -512,13 +510,16 @@ export class Pattern { } /** - * Assumes a numerical pattern, containing unipolar values in the range 0 .. - * 1. Returns a new pattern with values scaled to the given min/max range. - * @param {Number} min - * @param {Number} max + * Assumes a numerical pattern, containing unipolar values in the range 0 .. 1. + * Returns a new pattern with values scaled to the given min/max range. + * Most useful in combination with continuous patterns. + * @name range + * @memberof Pattern * @returns Pattern + * @example + * s("bd sd,hh*4").cutoff(sine.range(500,2000).slow(4)) */ - range(min, max) { + _range(min, max) { return this.mul(max - min).add(min); } @@ -530,8 +531,8 @@ export class Pattern { * @param {Number} max * @returns Pattern */ - rangex(min, max) { - return this.range(Math.log(min), Math.log(max)).fmap(Math.exp); + _rangex(min, max) { + return this._range(Math.log(min), Math.log(max)).fmap(Math.exp); } /** @@ -541,8 +542,8 @@ export class Pattern { * @param {Number} max * @returns Pattern */ - range2(min, max) { - return this._fromBipolar().range(min, max); + _range2(min, max) { + return this._fromBipolar()._range(min, max); } _bindWhole(choose_whole, func) { @@ -641,13 +642,26 @@ export class Pattern { return this._trigJoin(true); } + // Like the other joins above, joins a pattern of patterns of values, into a flatter + // pattern of values. In this case it takes whole cycles of the inner pattern to fit each event + // in the outer pattern. _squeezeJoin() { + // A pattern of patterns, which we call the 'outer' pattern, with patterns + // as values which we call the 'inner' patterns. const pat_of_pats = this; function query(state) { + // Get the events with the inner patterns. Ignore continuous events (without 'wholes') const haps = pat_of_pats.discreteOnly().query(state); + // A function to map over the events from the outer pattern. function flatHap(outerHap) { - const pat = outerHap.value._compressSpan(outerHap.wholeOrPart().cycleArc()); - const innerHaps = pat.query(state.setSpan(outerHap.part)); + // Get the inner pattern, slowed and shifted so that the 'whole' + // timespan of the outer event corresponds to the first cycle of the + // inner event + const inner_pat = outerHap.value._focusSpan(outerHap.wholeOrPart()); + // Get the inner events, from the timespan of the outer event's part + const innerHaps = inner_pat.query(state.setSpan(outerHap.part)); + // A function to map over the inner events, to combine them with the + // outer event function munge(outer, inner) { let whole = undefined; if (inner.whole && outer.whole) { @@ -678,10 +692,27 @@ export class Pattern { return this.fmap(func)._squeezeJoin(); } + /** + * Like layer, but with a single function: + * @name apply + * @memberof Pattern + * @example + * "".scale('C minor').apply(scaleTranspose("0,2,4")).note() + */ _apply(func) { return func(this); } + /** + * Layers the result of the given function(s). Like {@link superimpose}, but without the original pattern: + * @name layer + * @memberof Pattern + * @returns Pattern + * @example + * "<0 2 4 6 ~ 4 ~ 2 0!3 ~!5>*4" + * .layer(x=>x.add("0,2")) + * .scale('C minor').note() + */ layer(...funcs) { return stack(...funcs.map((func) => func(this))); } @@ -706,21 +737,36 @@ export class Pattern { // // there is no gap.. so maybe revert to _fast? // return this._fast(factor) // } + // A bit fiddly, to drop zero-width queries at the start of the next cycle const qf = function (span) { const cycle = span.begin.sam(); - const begin = cycle.add(span.begin.sub(cycle).mul(factor).min(1)); - const end = cycle.add(span.end.sub(cycle).mul(factor).min(1)); - return new TimeSpan(begin, end); + const bpos = span.begin.sub(cycle).mul(factor).min(1); + const epos = span.end.sub(cycle).mul(factor).min(1); + if (bpos >= 1) { + return undefined; + } + return new TimeSpan(cycle.add(bpos), cycle.add(epos)); }; - const ef = function (span) { - const cycle = span.begin.sam(); - const begin = cycle.add(span.begin.sub(cycle).div(factor).min(1)); - const end = cycle.add(span.end.sub(cycle).div(factor).min(1)); - return new TimeSpan(begin, end); + // Also fiddly, to maintain the right 'whole' relative to the part + const ef = function (hap) { + const begin = hap.part.begin; + const end = hap.part.end; + const cycle = begin.sam(); + const beginPos = begin.sub(cycle).div(factor).min(1); + const endPos = end.sub(cycle).div(factor).min(1); + const newPart = new TimeSpan(cycle.add(beginPos), cycle.add(endPos)); + const newWhole = !hap.whole + ? undefined + : new TimeSpan( + newPart.begin.sub(begin.sub(hap.whole.begin).div(factor)), + newPart.end.add(hap.whole.end.sub(end).div(factor)), + ); + return new Hap(newWhole, newPart, hap.value, hap.context); }; - return this.withQuerySpan(qf).withHapSpan(ef)._splitQueries(); + return this.withQuerySpanMaybe(qf)._withHap(ef)._splitQueries(); } + // Compress each cycle into the given timespan, leaving a gap _compress(b, e) { if (b.gt(e) || b.gt(1) || e.gt(1) || b.lt(0) || e.lt(0)) { return silence; @@ -732,15 +778,25 @@ export class Pattern { return this._compress(span.begin, span.end); } + // Similar to compress, but doesn't leave gaps, and the 'focus' can be + // bigger than a cycle + _focus(b, e) { + return this._fast(Fraction(1).div(e.sub(b))).late(b.cyclePos()); + } + + _focusSpan(span) { + return this._focus(span.begin, span.end); + } + /** - * Speed up a pattern by the given factor. + * Speed up a pattern by the given factor. Used by "*" in mini notation. * * @name fast * @memberof Pattern * @param {number | Pattern} factor speed up factor * @returns Pattern * @example - * seq(e5, b4, d5, c5).fast(2) + * s(" hh").fast(2) // s("[ hh]*2") */ _fast(factor) { const fastQuery = this.withQueryTime((t) => t.mul(factor)); @@ -748,14 +804,14 @@ export class Pattern { } /** - * Slow down a pattern over the given number of cycles. + * Slow down a pattern over the given number of cycles. Like the "/" operator in mini notation. * * @name slow * @memberof Pattern * @param {number | Pattern} factor slow down factor * @returns Pattern * @example - * seq(e5, b4, d5, c5).slow(2) + * s(" hh").slow(2) // s("[ hh]/2") */ _slow(factor) { return this._fast(Fraction(1).div(factor)); @@ -773,6 +829,20 @@ export class Pattern { return this.fmap((x) => pure(x)._fast(factor))._squeezeJoin(); } + /** + * Cuts each sample into the given number of parts, allowing you to explore a technique known as 'granular synthesis'. + * It turns a pattern of samples into a pattern of parts of samples. + * @name chop + * @memberof Pattern + * @returns Pattern + * @example + * samples({ rhodes: 'https://cdn.freesound.org/previews/132/132051_316502-lq.mp3' }) + * s("rhodes") + * .chop(4) + * .rev() // reverse order of chops + * .loopAt(4,1) // fit sample into 4 cycles + * + */ _chop(n) { const slices = Array.from({ length: n }, (x, i) => i); const slice_objects = slices.map((i) => ({ begin: i / n, end: (i + 1) / n })); @@ -794,14 +864,32 @@ export class Pattern { return this._fast(cpm / 60); } + /** + * Nudge a pattern to start earlier in time. Equivalent of Tidal's <~ operator + * + * @name early + * @memberof Pattern + * @param {number | Pattern} cycles number of cycles to nudge left + * @returns Pattern + * @example + * "bd ~".stack("hh ~".early(.1)).s() + */ _early(offset) { - // Equivalent of Tidal's <~ operator offset = Fraction(offset); return this.withQueryTime((t) => t.add(offset)).withHapTime((t) => t.sub(offset)); } + /** + * Nudge a pattern to start later in time. Equivalent of Tidal's ~> operator + * + * @name late + * @memberof Pattern + * @param {number | Pattern} cycles number of cycles to nudge right + * @returns Pattern + * @example + * "bd ~".stack("hh ~".late(.1)).s() + */ _late(offset) { - // Equivalent of Tidal's ~> operator offset = Fraction(offset); return this._early(Fraction(0).sub(offset)); } @@ -828,6 +916,17 @@ export class Pattern { return this._zoom(0, t)._slow(t); } + /** + * Applies the given structure to the pattern: + * + * @name struct + * @memberof Pattern + * @returns Pattern + * @example + * note("c3,eb3,g3") + * .struct("x ~ x ~ ~ x ~ x ~ ~ ~ x ~ x ~ ~") + * .slow(4) + */ // struct(...binary_pats) { // // Re structure the pattern according to a binary pattern (false values are dropped) // const binary_pat = sequence(binary_pats); @@ -875,6 +974,16 @@ export class Pattern { return this.invert(); } + /** + * Applies the given function whenever the given pattern is in a true state. + * @name when + * @memberof Pattern + * @param {Pattern} binary_pat + * @param {function} func + * @returns Pattern + * @example + * "c3 eb3 g3".when("<0 1>/2", x=>x.sub(5)).note() + */ when(binary_pat, func) { //binary_pat = sequence(binary_pat) const true_pat = binary_pat._filterValues(id); @@ -884,10 +993,47 @@ export class Pattern { return stack(with_pat, without_pat); } + /** + * Superimposes the function result on top of the original pattern, delayed by the given time. + * @name off + * @memberof Pattern + * @param {Pattern | number} time offset time + * @param {function} func function to apply + * @returns Pattern + * @example + * "c3 eb3 g3".off(1/8, x=>x.add(7)).note() + */ off(time_pat, func) { return stack(this, func(this.late(time_pat))); } + /** + * Applies the given function every n cycles. + * @name every + * @memberof Pattern + * @param {number} n how many cycles + * @param {function} func function to apply + * @returns Pattern + * @example + * note("c3 d3 e3 g3").every(4, x=>x.rev()) + */ + every(n, func) { + const pat = this; + const pats = Array(n - 1).fill(pat); + // pats.unshift(func(pat)); + pats.push(func(pat)); + return slowcatPrime(...pats); + } + /** + * Applies the given function every n cycles, starting from the first cycle. + * @name every + * @memberof Pattern + * @param {number} n how many cycles + * @param {function} func function to apply + * @returns Pattern + * @example + * note("c3 d3 e3 g3").every(4, x=>x.rev()) + */ every(n, func) { const pat = this; const pats = Array(n - 1).fill(pat); @@ -895,6 +1041,23 @@ export class Pattern { return slowcatPrime(...pats); } + /** + * Applies the given function every n cycles, starting from the last cycle. + * @name each + * @memberof Pattern + * @param {number} n how many cycles + * @param {function} func function to apply + * @returns Pattern + * @example + * note("c3 d3 e3 g3").every(4, x=>x.rev()) + */ + each(n, func) { + const pat = this; + const pats = Array(n - 1).fill(pat); + pats.push(func(pat)); + return slowcatPrime(...pats); + } + /** * Returns a new pattern where every other cycle is played once, twice as * fast, and offset in time by one quarter of a cycle. Creates a kind of @@ -905,6 +1068,15 @@ export class Pattern { return this.when(slowcat(false, true), (x) => fastcat(x, silence)._late(0.25)); } + /** + * Reverse all haps in a pattern + * + * @name rev + * @memberof Pattern + * @returns Pattern + * @example + * note("c3 d3 e3 g3").rev() + */ rev() { const pat = this; const query = function (state) { @@ -947,6 +1119,15 @@ export class Pattern { return this.juxBy(1, func); } + /** + * Stacks the given pattern(s) to the current pattern. + * @name stack + * @memberof Pattern + * @example + * s("hh*2").stack( + * n("c2(3,8)") + * ) + */ stack(...pats) { return stack(this, ...pats); } @@ -955,11 +1136,28 @@ export class Pattern { return sequence(this, ...pats); } - // shorthand for sequence + /** + * Appends the given pattern(s) to the current pattern. Synonyms: .sequence .fastcat + * @name seq + * @memberof Pattern + * @example + * s("hh*2").seq( + * n("c2(3,8)") + * ) + */ seq(...pats) { return sequence(this, ...pats); } + /** + * Appends the given pattern(s) to the next cycle. Synonym: .slowcat + * @name cat + * @memberof Pattern + * @example + * s("hh*2").cat( + * n("c2(3,8)") + * ) + */ cat(...pats) { return cat(this, ...pats); } @@ -972,6 +1170,16 @@ export class Pattern { return slowcat(this, ...pats); } + /** + * Superimposes the result of the given function(s) on top of the original pattern: + * @name superimpose + * @memberof Pattern + * @returns Pattern + * @example + * "<0 2 4 6 ~ 4 ~ 2 0!3 ~!5>*4" + * .superimpose(x=>x.add(2)) + * .scale('C minor').note() + */ superimpose(...funcs) { return this.stack(...funcs.map((func) => func(this))); } @@ -984,24 +1192,70 @@ export class Pattern { return this.stutWith(times, time, (pat, i) => pat.velocity(Math.pow(feedback, i))); } - // these might change with: https://github.com/tidalcycles/Tidal/issues/902 + /** + * Superimpose and offset multiple times, applying the given function each time. + * @name echoWith + * @memberof Pattern + * @returns Pattern + * @param {number} times how many times to repeat + * @param {number} time cycle offset between iterations + * @param {function} func function to apply, given the pattern and the iteration index + * @example + * "<0 [2 4]>" + * .echoWith(4, 1/8, (p,n) => p.add(n*2)) + * .scale('C minor').note().legato(.2) + */ _echoWith(times, time, func) { return stack(...listRange(0, times - 1).map((i) => func(this.late(Fraction(time).mul(i)), i))); } + /** + * Superimpose and offset multiple times, gradually decreasing the velocity + * @name echo + * @memberof Pattern + * @returns Pattern + * @param {number} times how many times to repeat + * @param {number} time cycle offset between iterations + * @param {number} feedback velocity multiplicator for each iteration + * @example + * s("bd sd").echo(3, 1/6, .8) + */ _echo(times, time, feedback) { return this._echoWith(times, time, (pat, i) => pat.velocity(Math.pow(feedback, i))); } + /** + * Divides a pattern into a given number of subdivisions, plays the subdivisions in order, but increments the starting subdivision each cycle. The pattern wraps to the first subdivision after the last subdivision is played. + * @name iter + * @memberof Pattern + * @returns Pattern + * @example + * note("0 1 2 3".scale('A minor')).iter(4) + */ iter(times, back = false) { return slowcat(...listRange(0, times - 1).map((i) => (back ? this.late(i / times) : this.early(i / times)))); } - // known as iter' in tidalcycles + /** + * Like `iter`, but plays the subdivisions in reverse order. Known as iter' in tidalcycles + * @name iterBack + * @memberof Pattern + * @returns Pattern + * @example + * note("0 1 2 3".scale('A minor')).iterBack(4) + */ iterBack(times) { return this.iter(times, true); } + /** + * Divides a pattern into a given number of parts, then cycles through those parts in turn, applying the given function to each part in turn (one part per cycle). + * @name chunk + * @memberof Pattern + * @returns Pattern + * @example + * "0 1 2 3".chunk(4, x=>x.add(7)).scale('A minor').note() + */ _chunk(n, func, back = false) { const binary = Array(n - 1).fill(false); binary.unshift(true); @@ -1009,17 +1263,18 @@ export class Pattern { return this.when(binary_pat, func); } + /** + * Like `chunk`, but cycles through the parts in reverse order. Known as chunk' in tidalcycles + * @name chunkBack + * @memberof Pattern + * @returns Pattern + * @example + * "0 1 2 3".chunkBack(4, x=>x.add(7)).scale('A minor').note() + */ _chunkBack(n, func) { return this._chunk(n, func, true); } - edit(...funcs) { - return stack(...funcs.map((func) => func(this))); - } - pipe(func) { - return func(this); - } - _bypass(on) { on = Boolean(parseInt(on)); return on ? silence : this; @@ -1034,21 +1289,64 @@ export class Pattern { return this.withHapSpan((span) => new TimeSpan(span.begin, span.begin.add(value))); } - // sets hap relative duration of haps + /** + * + * Multiplies the hap duration with the given factor. + * @name legato + * @memberof Pattern + * @example + * note("c3 eb3 g3 c4").legato("<.25 .5 1 2>") + */ _legato(value) { return this.withHapSpan((span) => new TimeSpan(span.begin, span.begin.add(span.end.sub(span.begin).mul(value)))); } + /** + * + * Sets the velocity from 0 to 1. Is multiplied together with gain. + * @name velocity + * @example + * s("hh*8") + * .gain(".4!2 1 .4!2 1 .4 1") + * .velocity(".4 1") + */ _velocity(velocity) { return this._withContext((context) => ({ ...context, velocity: (context.velocity || 1) * velocity })); } - // move this to controls? (speed and unit are controls) + /** + * Makes the sample fit the given number of cycles by changing the speed. + * @name loopAt + * @memberof Pattern + * @returns Pattern + * @example + * samples({ rhodes: 'https://cdn.freesound.org/previews/132/132051_316502-lq.mp3' }) + * s("rhodes").loopAt(4,1) + */ _loopAt(factor, cps = 1) { return this.speed((1 / factor) * cps) .unit('c') .slow(factor); } + onTrigger(onTrigger) { + return this._withHap((hap) => hap.setContext({ ...hap.context, onTrigger })); + } + log(func = id) { + return this._withHap((hap) => + hap.setContext({ + ...hap.context, + onTrigger: (...args) => { + if (hap.context.onTrigger) { + hap.context.onTrigger(...args); + } + console.log(func(...args)); + }, + }), + ); + } + logValues(func = id) { + return this.log((_, hap) => func(hap.value)); + } } // TODO - adopt value.mjs fully.. @@ -1070,9 +1368,6 @@ function _composeOp(a, b, func) { // Make composers (function () { - const num = (pat) => pat._asNumber(); - const numOrString = (pat) => pat._asNumber(false, true); - // pattern composers const composers = { set: [(a, b) => b], @@ -1080,17 +1375,56 @@ function _composeOp(a, b, func) { keepif: [(a, b) => (b ? a : undefined)], // numerical functions - add: [(a, b) => a + b, numOrString], // support string concatenation - sub: [(a, b) => a - b, num], - mul: [(a, b) => a * b, num], - div: [(a, b) => a / b, num], - mod: [mod, num], - pow: [Math.pow, num], - _and: [(a, b) => a & b, num], - _or: [(a, b) => a | b, num], - _xor: [(a, b) => a ^ b, num], - _lshift: [(a, b) => a << b, num], - _rshift: [(a, b) => a >> b, num], + /** + * + * Assumes a pattern of numbers. Adds the given number to each item in the pattern. + * @name add + * @memberof Pattern + * @example + * // Here, the triad 0, 2, 4 is shifted by different amounts + * "0 2 4".add("<0 3 4 0>").scale('C major').note() + * // Without add, the equivalent would be: + * // "<[0 2 4] [3 5 7] [4 6 8] [0 2 4]>".scale('C major').note() + * @example + * // You can also use add with notes: + * "c3 e3 g3".add("<0 5 7 0>").note() + * // Behind the scenes, the notes are converted to midi numbers: + * // "48 52 55".add("<0 5 7 0>").note() + */ + add: [numeralArgs((a, b) => a + b)], // support string concatenation + /** + * + * Like add, but the given numbers are subtracted. + * @name sub + * @memberof Pattern + * @example + * "0 2 4".sub("<0 1 2 3>").scale('C4 minor').note() + * // See add for more information. + */ + sub: [numeralArgs((a, b) => a - b)], + /** + * + * Multiplies each number by the given factor. + * @name mul + * @memberof Pattern + * @example + * "1 1.5 [1.66, <2 2.33>]".mul(150).freq() + */ + mul: [numeralArgs((a, b) => a * b)], + /** + * + * Divides each number by the given factor. + * @name div + * @memberof Pattern + */ + div: [numeralArgs((a, b) => a / b)], + mod: [numeralArgs(mod)], + pow: [numeralArgs(Math.pow)], + _and: [numeralArgs((a, b) => a & b)], + _or: [numeralArgs((a, b) => a | b)], + _xor: [numeralArgs((a, b) => a ^ b)], + _lshift: [numeralArgs((a, b) => a << b)], + _rshift: [numeralArgs((a, b) => a >> b)], // TODO - force numerical comparison if both look like numbers? lt: [(a, b) => a < b], @@ -1118,10 +1452,14 @@ function _composeOp(a, b, func) { pat = preprocess(pat); other = preprocess(other); } - var result = pat['_op' + how](other, (a) => (b) => _composeOp(a, b, op)); + var result; // hack to remove undefs when doing 'keepif' if (what === 'keepif') { + // avoid union, as we want to throw away the value of 'b' completely + result = pat['_op' + how](other, (a) => (b) => op(a, b)); result = result._removeUndefineds(); + } else { + result = pat['_op' + how](other, (a) => (b) => _composeOp(a, b, op)); } return result; }; @@ -1171,6 +1509,11 @@ Pattern.prototype.patternified = [ 'slow', 'velocity', ]; + +// aliases +export const polyrhythm = stack; +export const pr = stack; + // methods that create patterns, which are added to patternified Pattern methods Pattern.prototype.factories = { pure, @@ -1193,12 +1536,11 @@ Pattern.prototype.factories = { // Nothing export const silence = new Pattern((_) => []); -/** A discrete value that repeats once per cycle: +/** A discrete value that repeats once per cycle. * - * @param {any} value - The value to repeat * @returns {Pattern} * @example - * pure('e4') + * pure('e4') // "e4" */ export function pure(value) { function query(state) { @@ -1209,7 +1551,15 @@ export function pure(value) { export function isPattern(thing) { // thing?.constructor?.name !== 'Pattern' // <- this will fail when code is mangled - return thing instanceof Pattern; + const is = thing instanceof Pattern || thing?._Pattern; + if (!thing instanceof Pattern) { + console.warn( + `Found Pattern that fails "instanceof Pattern" check. + This may happen if you are using multiple versions of @strudel.cycles/core. + Please check by running "npm ls @strudel.cycles/core".`, + ); + } + return is; } export function reify(thing) { @@ -1217,15 +1567,17 @@ export function reify(thing) { if (isPattern(thing)) { return thing; } + if (stringParser && typeof thing === 'string') { + return stringParser(thing); + } return pure(thing); } -/** The given items are played at the same time at the same length: +/** The given items are played at the same time at the same length. * - * @param {...any} items - The items to stack * @return {Pattern} * @example - * stack(g3, b3, [e4, d4]) + * stack(g3, b3, [e4, d4]).note() // "g3,b3,[e4,d4]".note() */ export function stack(...pats) { // Array test here is to avoid infinite recursions.. @@ -1238,7 +1590,6 @@ export function stack(...pats) { * * synonyms: {@link cat} * - * @param {...any} items - The items to concatenate * @return {Pattern} * @example * slowcat(e5, b4, [d5, c5]) @@ -1273,8 +1624,8 @@ export function slowcatPrime(...pats) { pats = pats.map(reify); const query = function (state) { const pat_n = Math.floor(state.span.begin) % pats.length; - const pat = pats[pat_n]; - return pat.query(state); + const pat = pats[pat_n]; // can be undefined for same cases e.g. /#cHVyZSg0MikKICAuZXZlcnkoMyxhZGQoNykpCiAgLmxhdGUoLjUp + return pat?.query(state) || []; }; return new Pattern(query)._splitQueries(); } @@ -1294,16 +1645,22 @@ export function fastcat(...pats) { return slowcat(...pats)._fast(pats.length); } -/** See {@link slowcat} */ +/** The given items are con**cat**enated, where each one takes one cycle. Synonym: slowcat + * + * @param {...any} items - The items to concatenate + * @return {Pattern} + * @example + * cat(e5, b4, [d5, c5]).note() // "".note() + * + */ export function cat(...pats) { return slowcat(...pats); } -/** Like {@link fastcat}, but where each step has a temporal weight: - * @param {...Array} items - The items to concatenate +/** Like {@link seq}, but each step has a length, relative to the whole. * @return {Pattern} * @example - * timeCat([3,e3],[1, g3]) + * timeCat([3,e3],[1, g3]).note() // "e3@3 g3".note() */ export function timeCat(...timepats) { const total = timepats.map((a) => a[0]).reduce((a, b) => a.add(b), Fraction(0)); @@ -1322,7 +1679,11 @@ export function sequence(...pats) { return fastcat(...pats); } -/** See {@link fastcat} */ +/** Like **cat**, but the items are crammed into one cycle. Synonyms: fastcat, sequence + * @example + * seq(e5, b4, [d5, c5]).note() // "e5 b4 [d5 c5]".note() + * + */ export function seq(...pats) { return fastcat(...pats); } @@ -1371,21 +1732,8 @@ export function pm(...args) { polymeter(...args); } -export function polyrhythm(...xs) { - const seqs = xs.map((a) => sequence(a)); - - if (seqs.length == 0) { - return silence; - } - return stack(...seqs); -} - -// alias -export function pr(args) { - polyrhythm(args); -} - export const add = curry((a, pat) => pat.add(a)); +export const chop = curry((a, pat) => pat.chop(a)); export const chunk = curry((a, pat) => pat.chunk(a)); export const chunkBack = curry((a, pat) => pat.chunkBack(a)); export const div = curry((a, pat) => pat.div(a)); @@ -1406,6 +1754,7 @@ export const mul = curry((a, pat) => pat.mul(a)); export const off = curry((t, f, pat) => pat.off(t, f)); export const ply = curry((a, pat) => pat.ply(a)); export const range = curry((a, b, pat) => pat.range(a, b)); +export const rangex = curry((a, b, pat) => pat.rangex(a, b)); export const range2 = curry((a, b, pat) => pat.range2(a, b)); export const rev = (pat) => pat.rev(); export const slow = curry((a, pat) => pat.slow(a)); @@ -1492,6 +1841,18 @@ Pattern.prototype.inside = function (...args) { args = args.map(reify); return patternify2(Pattern.prototype._inside)(...args, this); }; +Pattern.prototype.range = function (...args) { + args = args.map(reify); + return patternify2(Pattern.prototype._range)(...args, this); +}; +Pattern.prototype.rangex = function (...args) { + args = args.map(reify); + return patternify2(Pattern.prototype._rangex)(...args, this); +}; +Pattern.prototype.range2 = function (...args) { + args = args.map(reify); + return patternify2(Pattern.prototype._range2)(...args, this); +}; // call this after all Patter.prototype.define calls have been executed! (right before evaluate) Pattern.prototype.bootstrap = function () { diff --git a/packages/core/repl.mjs b/packages/core/repl.mjs new file mode 100644 index 00000000..69a9255d --- /dev/null +++ b/packages/core/repl.mjs @@ -0,0 +1,23 @@ +import { Cyclist } from './cyclist.mjs'; +import { evaluate as _evaluate } from './evaluate.mjs'; + +export function repl({ interval, defaultOutput, onSchedulerError, onEvalError, onEval, getTime, transpiler }) { + const scheduler = new Cyclist({ interval, onTrigger: defaultOutput, onError: onSchedulerError, getTime }); + const evaluate = async (code) => { + if (!code) { + throw new Error('no code to evaluate'); + } + try { + const { pattern } = await _evaluate(code, transpiler); + scheduler.setPattern(pattern, true); + onEval?.({ + pattern, + code, + }); + } catch (err) { + console.warn(`eval error: ${err.message}`); + onEvalError?.(err); + } + }; + return { scheduler, evaluate }; +} diff --git a/packages/core/signal.mjs b/packages/core/signal.mjs index 01fdd768..4369b89e 100644 --- a/packages/core/signal.mjs +++ b/packages/core/signal.mjs @@ -5,7 +5,7 @@ This program is free software: you can redistribute it and/or modify it under th */ import { Hap } from './hap.mjs'; -import { Pattern, fastcat, reify, silence, stack } from './pattern.mjs'; +import { Pattern, fastcat, reify, silence, stack, isPattern } from './pattern.mjs'; import Fraction from './fraction.mjs'; import { id } from './util.mjs'; @@ -22,17 +22,61 @@ export const signal = (func) => { export const isaw = signal((t) => 1 - (t % 1)); export const isaw2 = isaw._toBipolar(); +/** + * A sawtooth signal between 0 and 1. + * + * @return {Pattern} + * @example + * "c3 [eb3,g3] g2 [g3,bb3]".legato(saw.slow(4)).note() + * @example + * saw.range(0,8).segment(8).scale('C major').slow(4).note() + * + */ export const saw = signal((t) => t % 1); export const saw2 = saw._toBipolar(); export const sine2 = signal((t) => Math.sin(Math.PI * 2 * t)); + +/** + * A sine signal between 0 and 1. + * + * @return {Pattern} + * @example + * sine.segment(16).range(0,15).slow(2).scale('C minor').note() + * + */ export const sine = sine2._fromBipolar(); + +/** + * A cosine signal between 0 and 1. + * + * @return {Pattern} + * @example + * stack(sine,cosine).segment(16).range(0,15).slow(2).scale('C minor').note() + * + */ export const cosine = sine._early(Fraction(1).div(4)); export const cosine2 = sine2._early(Fraction(1).div(4)); +/** + * A square signal between 0 and 1. + * + * @return {Pattern} + * @example + * square.segment(2).range(0,7).scale('C minor').note() + * + */ export const square = signal((t) => Math.floor((t * 2) % 2)); export const square2 = square._toBipolar(); +/** + * A triangle signal between 0 and 1. + * + * @return {Pattern} + * @example + * tri.segment(8).range(0,7).scale('C minor').note() + * + */ export const tri = fastcat(isaw, saw); export const tri2 = fastcat(isaw2, saw2); @@ -66,28 +110,112 @@ const timeToRandsPrime = (seed, n) => { const timeToRands = (t, n) => timeToRandsPrime(timeToIntSeed(t), n); +/** + * + */ + +/** + * A continuous pattern of random numbers, between 0 and 1. + * + * @name rand + * @example + * // randomly change the cutoff + * s("bd sd,hh*4").cutoff(rand.range(500,2000)) + * + */ export const rand = signal(timeToRand); +/** + * A continuous pattern of random numbers, between -1 and 1 + */ +export const rand2 = rand._toBipolar(); export const _brandBy = (p) => rand.fmap((x) => x < p); export const brandBy = (pPat) => reify(pPat).fmap(_brandBy).innerJoin(); export const brand = _brandBy(0.5); export const _irand = (i) => rand.fmap((x) => Math.trunc(x * i)); + +/** + * A continuous pattern of random integers, between 0 and n-1. + * + * @name irand + * @param {number} n max value (exclusive) + * @example + * // randomly select scale notes from 0 - 7 (= C to C) + * irand(8).struct("x(3,8)").scale('C minor').note() + * + */ export const irand = (ipat) => reify(ipat).fmap(_irand).innerJoin(); -export const chooseWith = (pat, xs) => { +export const __chooseWith = (pat, xs) => { xs = xs.map(reify); if (xs.length == 0) { return silence; } - return pat - .range(0, xs.length) - .fmap((i) => xs[Math.floor(i)]) - .outerJoin(); + return pat.range(0, xs.length).fmap((i) => xs[Math.floor(i)]); +}; +/** + * Choose from the list of values (or patterns of values) using the given + * pattern of numbers, which should be in the range of 0..1 + * @param {Pattern} pat + * @param {*} xs + * @returns {Pattern} + */ +export const chooseWith = (pat, xs) => { + return __chooseWith(pat, xs).outerJoin(); }; +/** + * As with {chooseWith}, but the structure comes from the chosen values, rather + * than the pattern you're using to choose with. + * @param {Pattern} pat + * @param {*} xs + * @returns {Pattern} + */ +export const chooseInWith = (pat, xs) => { + return __chooseWith(pat, xs).innerJoin(); +}; + +/** + * Chooses randomly from the given list of elements. + * @param {...any} xs values / patterns to choose from. + * @returns {Pattern} - a continuous pattern. + */ export const choose = (...xs) => chooseWith(rand, xs); +/** + * Chooses from the given list of values (or patterns of values), according + * to the pattern that the method is called on. The pattern should be in + * the range 0 .. 1. + * @param {...any} xs + * @returns {Pattern} + */ +Pattern.prototype.choose = function (...xs) { + return chooseWith(this, xs); +}; + +/** + * As with choose, but the pattern that this method is called on should be + * in the range -1 .. 1 + * @param {...any} xs + * @returns {Pattern} + */ +Pattern.prototype.choose2 = function (...xs) { + return chooseWith(this._fromBipolar(), xs); +}; + +/** + * Picks one of the elements at random each cycle. + * @returns {Pattern} + * @example + * chooseCycles("bd", "hh", "sd").s().fast(4) + * @example + * "bd | hh | sd".s().fast(4) + */ +export const chooseCycles = (...xs) => chooseInWith(rand.segment(1), xs); + +export const randcat = chooseCycles; + const _wchooseWith = function (pat, ...pairs) { const values = pairs.map((pair) => reify(pair[0])); const weights = []; @@ -110,6 +238,7 @@ export const wchoose = (...pairs) => wchooseWith(rand, ...pairs); export const wchooseCycles = (...pairs) => _wchooseWith(rand, ...pairs).innerJoin(); +// this function expects pat to be a pattern of floats... export const perlinWith = (pat) => { const pata = pat.fmap(Math.floor); const patb = pat.fmap((t) => Math.floor(t) + 1); @@ -118,20 +247,68 @@ export const perlinWith = (pat) => { return pat.sub(pata).fmap(interp).appBoth(pata.fmap(timeToRand)).appBoth(patb.fmap(timeToRand)); }; -export const perlin = perlinWith(time); +/** + * Generates a continuous pattern of [perlin noise](https://en.wikipedia.org/wiki/Perlin_noise), in the range 0..1. + * + * @name perlin + * @example + * // randomly change the cutoff + * s("bd sd,hh*4").cutoff(perlin.range(500,2000)) + * + */ +export const perlin = perlinWith(time.fmap((v) => Number(v))); Pattern.prototype._degradeByWith = function (withPat, x) { return this.fmap((a) => (_) => a).appLeft(withPat._filterValues((v) => v > x)); }; +/** + * Randomly removes events from the pattern by a given amount. + * 0 = 0% chance of removal + * 1 = 100% chance of removal + * + * @name degradeBy + * @memberof Pattern + * @param {number} amount - a number between 0 and 1 + * @returns Pattern + * @example + * s("hh*8").degradeBy(0.2) + * @example + * s("[hh?0.2]*8") + */ Pattern.prototype._degradeBy = function (x) { return this._degradeByWith(rand, x); }; +/** + * + * Randomly removes 50% of events from the pattern. Shorthand for `.degradeBy(0.5)` + * + * @name degrade + * @memberof Pattern + * @returns Pattern + * @example + * s("hh*8").degrade() + * @example + * s("[hh?]*8") + */ Pattern.prototype.degrade = function () { return this._degradeBy(0.5); }; +/** + * Inverse of {@link Pattern#degradeBy}: Randomly removes events from the pattern by a given amount. + * 0 = 100% chance of removal + * 1 = 0% chance of removal + * Events that would be removed by degradeBy are let through by undegradeBy and vice versa (see second example). + * + * @name undegradeBy + * @memberof Pattern + * @param {number} amount - a number between 0 and 1 + * @returns Pattern + * @example + * s("hh*8").undegradeBy(0.2) + */ Pattern.prototype._undegradeBy = function (x) { return this._degradeByWith( rand.fmap((r) => 1 - r), @@ -147,6 +324,25 @@ Pattern.prototype._sometimesBy = function (x, func) { return stack(this._degradeBy(x), func(this._undegradeBy(1 - x))); }; +// https://github.com/tidalcycles/strudel/discussions/198 +/* Pattern.prototype._sometimesBy = function (x, other) { + other = typeof other === 'function' ? other(this._undegradeBy(1 - x)) : reify(other)._undegradeBy(1 - x); + return stack(this._degradeBy(x), other); +}; */ + +/** + * + * Randomly applies the given function by the given probability. + * Similar to {@link Pattern#someCyclesBy} + * + * @name sometimesBy + * @memberof Pattern + * @param {number | Pattern} probability - a number between 0 and 1 + * @param {function} function - the transformation to apply + * @returns Pattern + * @example + * s("hh(3,8)").sometimesBy(.4, x=>x.speed("0.5")) + */ Pattern.prototype.sometimesBy = function (patx, func) { const pat = this; return reify(patx) @@ -154,6 +350,7 @@ Pattern.prototype.sometimesBy = function (patx, func) { .innerJoin(); }; +// why does this exist? it is identical to sometimesBy Pattern.prototype._sometimesByPre = function (x, func) { return stack(this._degradeBy(x), func(this).undegradeBy(1 - x)); }; @@ -165,6 +362,17 @@ Pattern.prototype.sometimesByPre = function (patx, func) { .innerJoin(); }; +/** + * + * Applies the given function with a 50% chance + * + * @name sometimes + * @memberof Pattern + * @param {function} function - the transformation to apply + * @returns Pattern + * @example + * s("hh*4").sometimes(x=>x.speed("0.5")) + */ Pattern.prototype.sometimes = function (func) { return this._sometimesBy(0.5, func); }; @@ -180,6 +388,19 @@ Pattern.prototype._someCyclesBy = function (x, func) { ); }; +/** + * + * Randomly applies the given function by the given probability on a cycle by cycle basis. + * Similar to {@link Pattern#sometimesBy} + * + * @name someCyclesBy + * @memberof Pattern + * @param {number | Pattern} probability - a number between 0 and 1 + * @param {function} function - the transformation to apply + * @returns Pattern + * @example + * s("hh(3,8)").someCyclesBy(.3, x=>x.speed("0.5")) + */ Pattern.prototype.someCyclesBy = function (patx, func) { const pat = this; return reify(patx) @@ -187,30 +408,100 @@ Pattern.prototype.someCyclesBy = function (patx, func) { .innerJoin(); }; +/** + * + * Shorthand for `.someCyclesBy(0.5, fn)` + * + * @name someCycles + * @memberof Pattern + * @returns Pattern + * @example + * s("hh(3,8)").someCycles(x=>x.speed("0.5")) + */ Pattern.prototype.someCycles = function (func) { return this._someCyclesBy(0.5, func); }; +/** + * + * Shorthand for `.sometimesBy(0.75, fn)` + * + * @name often + * @memberof Pattern + * @returns Pattern + * @example + * s("hh*8").often(x=>x.speed("0.5")) + */ Pattern.prototype.often = function (func) { return this.sometimesBy(0.75, func); }; +/** + * + * Shorthand for `.sometimesBy(0.25, fn)` + * + * @name rarely + * @memberof Pattern + * @returns Pattern + * @example + * s("hh*8").rarely(x=>x.speed("0.5")) + */ Pattern.prototype.rarely = function (func) { return this.sometimesBy(0.25, func); }; +/** + * + * Shorthand for `.sometimesBy(0.1, fn)` + * + * @name almostNever + * @memberof Pattern + * @returns Pattern + * @example + * s("hh*8").almostNever(x=>x.speed("0.5")) + */ Pattern.prototype.almostNever = function (func) { return this.sometimesBy(0.1, func); }; +/** + * + * Shorthand for `.sometimesBy(0.9, fn)` + * + * @name almostAlways + * @memberof Pattern + * @returns Pattern + * @example + * s("hh*8").almostAlways(x=>x.speed("0.5")) + */ Pattern.prototype.almostAlways = function (func) { return this.sometimesBy(0.9, func); }; +/** + * + * Shorthand for `.sometimesBy(0, fn)` (never calls fn) + * + * @name never + * @memberof Pattern + * @returns Pattern + * @example + * s("hh*8").never(x=>x.speed("0.5")) + */ Pattern.prototype.never = function (func) { return this; }; +/** + * + * Shorthand for `.sometimesBy(1, fn)` (always calls fn) + * + * @name always + * @memberof Pattern + * @returns Pattern + * @example + * s("hh*8").always(x=>x.speed("0.5")) + */ Pattern.prototype.always = function (func) { return func(this); }; diff --git a/packages/core/test/drawLine.test.mjs b/packages/core/test/drawLine.test.mjs index 461cd2b3..84359a7c 100644 --- a/packages/core/test/drawLine.test.mjs +++ b/packages/core/test/drawLine.test.mjs @@ -5,52 +5,42 @@ This program is free software: you can redistribute it and/or modify it under th */ import { fastcat, stack, slowcat, silence, pure } from '../pattern.mjs'; -import { strict as assert } from 'assert'; +import { describe, it, expect } from 'vitest'; import drawLine from '../drawLine.mjs'; describe('drawLine', () => { it('supports equal lengths', () => { - assert.equal(drawLine(fastcat(0), 4), '|0|0'); - assert.equal(drawLine(fastcat(0, 1), 4), '|01|01'); - assert.equal(drawLine(fastcat(0, 1, 2), 6), '|012|012'); + expect(drawLine(fastcat(0), 4)).toEqual('|0|0'); + expect(drawLine(fastcat(0, 1), 4)).toEqual('|01|01'); + expect(drawLine(fastcat(0, 1, 2), 6)).toEqual('|012|012'); }); it('supports unequal lengths', () => { - assert.equal(drawLine(fastcat(0, [1, 2]), 10), '|0-12|0-12'); - assert.equal(drawLine(fastcat(0, [1, 2, 3]), 10), '|0--123|0--123'); - assert.equal(drawLine(fastcat(0, 1, [2, 3]), 10), '|0-1-23|0-1-23'); + expect(drawLine(fastcat(0, [1, 2]), 10)).toEqual('|0-12|0-12'); + expect(drawLine(fastcat(0, [1, 2, 3]), 10)).toEqual('|0--123|0--123'); + expect(drawLine(fastcat(0, 1, [2, 3]), 10)).toEqual('|0-1-23|0-1-23'); }); it('supports unequal silence', () => { - assert.equal(drawLine(fastcat(0, silence, [1, 2]), 10), '|0-..12|0-..12'); + expect(drawLine(fastcat(0, silence, [1, 2]), 10)).toEqual('|0-..12|0-..12'); }); it('supports polyrhythms', () => { - '0*2 1*3'; - assert.equal(drawLine(fastcat(pure(0).fast(2), pure(1).fast(3)), 10), '|0--0--1-1-1-'); + // assert.equal(drawLine(fastcat(pure(0).fast(2), pure(1).fast(3)), 10), '|0--0--1-1-1-'); + expect(drawLine(fastcat(pure(0).fast(2), pure(1).fast(3)), 10)).toEqual('|0--0--1-1-1-'); }); it('supports multiple lines', () => { - assert.equal( - drawLine(fastcat(0, stack(1, 2)), 10), - `|01|01|01|01 -|.2|.2|.2|.2`, - ); - assert.equal( - drawLine(fastcat(0, 1, stack(2, 3)), 10), - `|012|012|012 -|..3|..3|..3`, - ); - assert.equal( - drawLine(fastcat(0, stack(1, 2, 3)), 10), - `|01|01|01|01 + expect(drawLine(fastcat(0, stack(1, 2)), 10)).toEqual(`|01|01|01|01 +|.2|.2|.2|.2`); + + expect(drawLine(fastcat(0, 1, stack(2, 3)), 10)).toEqual(`|012|012|012 +|..3|..3|..3`); + + expect(drawLine(fastcat(0, stack(1, 2, 3)), 10)).toEqual(`|01|01|01|01 |.2|.2|.2|.2 -|.3|.3|.3|.3`, - ); - assert.equal( - drawLine(fastcat(0, 1, stack(2, 3, 4)), 10), - `|012|012|012 +|.3|.3|.3|.3`); + expect(drawLine(fastcat(0, 1, stack(2, 3, 4)), 10)).toEqual(`|012|012|012 |..3|..3|..3 -|..4|..4|..4`, - ); +|..4|..4|..4`); }); it('supports unequal cycle lengths', () => { - assert.equal(drawLine(slowcat(0, [1, 2]), 10), `|0|12|0|12`); + expect(drawLine(slowcat(0, [1, 2]), 10)).toEqual(`|0|12|0|12`); }); }); diff --git a/packages/core/test/fraction.test.mjs b/packages/core/test/fraction.test.mjs index 46e83c69..6b710d04 100644 --- a/packages/core/test/fraction.test.mjs +++ b/packages/core/test/fraction.test.mjs @@ -5,11 +5,11 @@ This program is free software: you can redistribute it and/or modify it under th */ import Fraction, { gcd } from '../fraction.mjs'; -import { strict as assert } from 'assert'; +import { describe, it, expect } from 'vitest'; describe('gcd', () => { it('should work', () => { const F = Fraction._original; - assert.equal(gcd(F(1 / 6), F(1 / 4)).toFraction(), '1/12'); + expect(gcd(F(1 / 6), F(1 / 4)).toFraction()).toEqual('1/12'); }); }); diff --git a/packages/core/test/pattern.test.mjs b/packages/core/test/pattern.test.mjs index b37ee286..929581ae 100644 --- a/packages/core/test/pattern.test.mjs +++ b/packages/core/test/pattern.test.mjs @@ -6,7 +6,7 @@ This program is free software: you can redistribute it and/or modify it under th import Fraction from 'fraction.js'; -import { deepStrictEqual, strict as assert } from 'assert'; +import { describe, it, expect } from 'vitest'; import { TimeSpan, @@ -41,15 +41,15 @@ import { tri2, id, ply, - rev + rev, + time, } from '../index.mjs'; import { steady } from '../signal.mjs'; -//import { Time } from 'tone'; -import pkg from 'tone'; -const { Time } = pkg; +import controls from '../controls.mjs'; +const { n } = controls; const st = (begin, end) => new State(ts(begin, end)); const ts = (begin, end) => new TimeSpan(Fraction(begin), Fraction(end)); const hap = (whole, part, value, context = {}) => new Hap(whole, part, value, context); @@ -58,35 +58,35 @@ const third = Fraction(1, 3); const twothirds = Fraction(2, 3); const sameFirst = (a, b) => { - return assert.deepStrictEqual(a._sortHapsByPart().firstCycle(), b._sortHapsByPart().firstCycle()); + return expect(a._sortHapsByPart().firstCycle()).toStrictEqual(b._sortHapsByPart().firstCycle()); }; -describe('TimeSpan', function () { - describe('equals()', function () { - it('Should be equal to the same value', function () { - assert.equal(new TimeSpan(0, 4).equals(new TimeSpan(0, 4)), true); +describe('TimeSpan', () => { + describe('equals()', () => { + it('Should be equal to the same value', () => { + expect(new TimeSpan(0, 4).equals(new TimeSpan(0, 4))).toBe(true); }); }); - describe('splitCycles', function () { - it('Should split two cycles into two', function () { - assert.equal(new TimeSpan(Fraction(0), Fraction(2)).spanCycles.length, 2); + describe('splitCycles', () => { + it('Should split two cycles into two', () => { + expect(new TimeSpan(Fraction(0), Fraction(2)).spanCycles.length).toBe(2); }); }); - describe('intersection_e', function () { + describe('intersection_e', () => { var a = new TimeSpan(Fraction(0), Fraction(2)); var b = new TimeSpan(Fraction(1), Fraction(3)); var c = new TimeSpan(Fraction(1), Fraction(2)); var d = new TimeSpan(Fraction(1), Fraction(2)); - it('Should create an intersection', function () { - assert.equal(a.intersection_e(b).equals(c), true); + it('Should create an intersection', () => { + expect(a.intersection_e(b).equals(c)).toBe(true); }); }); }); -describe('Hap', function () { - describe('hasOnset()', function () { - it('True if part includes onset from whole', function () { - assert.equal(new Hap(new TimeSpan(0, 1), new TimeSpan(0, 1), 'thing').hasOnset(), true); +describe('Hap', () => { + describe('hasOnset()', () => { + it('True if part includes onset from whole', () => { + expect(new Hap(new TimeSpan(0, 1), new TimeSpan(0, 1), 'thing').hasOnset()).toBe(true); }); }); var a = new Hap(new TimeSpan(Fraction(0), Fraction(0.5)), new TimeSpan(Fraction(0), Fraction(0.5)), 'a'); @@ -94,19 +94,19 @@ describe('Hap', function () { var c = new Hap(new TimeSpan(Fraction(0), Fraction(0.25)), new TimeSpan(Fraction(0), Fraction(0.5)), 'c'); var d = new Hap(undefined, new TimeSpan(Fraction(0), Fraction(0.5)), 'd'); var e = new Hap(undefined, new TimeSpan(Fraction(0), Fraction(0.5)), 'e'); - describe('spanEquals', function () { - it('True if two haps have the same whole and part', function () { - assert.equal(a.spanEquals(b), true); + describe('spanEquals', () => { + it('True if two haps have the same whole and part', () => { + expect(a.spanEquals(b)).toBe(true); }); - it("False if two haps don't the same whole and part", function () { - assert.equal(a.spanEquals(c), false); + it("False if two haps don't the same whole and part", () => { + expect(a.spanEquals(c)).toBe(false); }); - it('True if two haps have the same part and undefined wholes', function () { - assert.equal(d.spanEquals(e), true); + it('True if two haps have the same part and undefined wholes', () => { + expect(d.spanEquals(e)).toBe(true); }); }); describe('resolveState()', () => { - it('Can increment some state', function () { + it('Can increment some state', () => { const stateful_value = (state) => { const newValue = state['incrementme']; // TODO Does the state *need* duplicating here? @@ -118,8 +118,8 @@ describe('Hap', function () { const ev1 = new Hap(ts(0, 1), ts(0, 1), stateful_value, {}, true); const [state2, ev2] = ev1.resolveState(state); const [state3, ev3] = ev1.resolveState(state2); - assert.deepStrictEqual(ev3, new Hap(ts(0, 1), ts(0, 1), 11, {}, false)); - assert.deepStrictEqual(state3, { incrementme: 12 }); + expect(ev3).toStrictEqual(new Hap(ts(0, 1), ts(0, 1), 11, {}, false)); + expect(state3).toStrictEqual({ incrementme: 12 }); }); }); describe('wholeOrPart()', () => { @@ -128,42 +128,43 @@ describe('Hap', function () { const continuousHap = new Hap(undefined, ts1, 'hello'); const discreteHap = new Hap(ts1, ts0_5, 'hello'); it('Can pick a whole', () => { - assert.deepStrictEqual(discreteHap.wholeOrPart(), ts1); + expect(discreteHap.wholeOrPart()).toStrictEqual(ts1); }); it('Can pick a part', () => { - assert.deepStrictEqual(continuousHap.wholeOrPart(), ts1); + expect(continuousHap.wholeOrPart()).toStrictEqual(ts1); }); }); }); - -describe('Pattern', function () { - describe('pure', function () { - it('Can make a pattern', function () { - assert.equal(pure('hello').query(st(0.5, 2.5)).length, 3); +describe('Pattern', () => { + describe('pure', () => { + it('Can make a pattern', () => { + expect(pure('hello').query(st(0.5, 2.5)).length).toBe(3); + }); + it('Supports zero-width queries', () => { + expect(pure('hello').queryArc(0, 0).length).toBe(1); }); }); - describe('fmap()', function () { - it('Can add things', function () { - assert.equal( + describe('fmap()', () => { + it('Can add things', () => { + expect( pure(3) .fmap((x) => x + 4) .firstCycle()[0].value, - 7, - ); + ).toBe(7); }); }); - describe('add()', function () { - it('can structure In()', function () { - assert.equal(pure(3).add(pure(4)).query(st(0, 1))[0].value, 7); - assert.equal(pure(3).addIn(pure(4)).query(st(0, 1))[0].value, 7); + describe('add()', () => { + it('can structure In()', () => { + expect(pure(3).add(pure(4)).query(st(0, 1))[0].value).toBe(7); + expect(pure(3).addIn(pure(4)).query(st(0, 1))[0].value).toBe(7); }); it('can structure Out()', () => { sameFirst(sequence(1, 2).addOut(4), sequence(5, 6).struct(true)); }); it('can Mix() structure', () => { - assert.deepStrictEqual(sequence(1, 2).addMix(silence, 5, silence).firstCycle(), [ - hap(ts(1 / 3, 1 / 2), ts(1 / 3, 1 / 2), 6), - hap(ts(1 / 2, 2 / 3), ts(1 / 2, 2 / 3), 7), + expect(sequence(1, 2).addMix(silence, 5, silence).firstCycle()).toStrictEqual([ + new Hap(ts(1 / 3, 1 / 2), ts(1 / 3, 1 / 2), 6), + new Hap(ts(1 / 2, 2 / 3), ts(1 / 2, 2 / 3), 7), ]); }); it('can Trig() structure', () => { @@ -196,19 +197,22 @@ describe('Pattern', function () { sequence([11, [12, 13]], [21, [22, 23]], [31, [32, 33]]), ); }); + it('can add object patterns', () => { + sameFirst(n(sequence(1, [2, 3])).add(n(10)), n(sequence(11, [12, 13]))); + }); }); - describe('keep()', function () { - it('can structure In()', function () { - assert.equal(pure(3).keep(pure(4)).query(st(0, 1))[0].value, 3); - assert.equal(pure(3).keepIn(pure(4)).query(st(0, 1))[0].value, 3); + describe('keep()', () => { + it('can structure In()', () => { + expect(pure(3).keep(pure(4)).query(st(0, 1))[0].value).toBe(3); + expect(pure(3).keepIn(pure(4)).query(st(0, 1))[0].value).toBe(3); }); it('can structure Out()', () => { sameFirst(sequence(1, 2).keepOut(4), sequence(1, 2).struct(true)); }); it('can Mix() structure', () => { - assert.deepStrictEqual(sequence(1, 2).keepMix(silence, 5, silence).firstCycle(), [ - hap(ts(1 / 3, 1 / 2), ts(1 / 3, 1 / 2), 1), - hap(ts(1 / 2, 2 / 3), ts(1 / 2, 2 / 3), 2), + expect(sequence(1, 2).keepMix(silence, 5, silence).firstCycle()).toStrictEqual([ + new Hap(ts(1 / 3, 1 / 2), ts(1 / 3, 1 / 2), 1), + new Hap(ts(1 / 2, 2 / 3), ts(1 / 2, 2 / 3), 2), ]); }); it('can Trig() structure', () => { @@ -239,8 +243,8 @@ describe('Pattern', function () { sameFirst(sequence(1, [2, 3]).keepSqueezeOut(10, 20, 30), sequence([1, [2, 3]], [1, [2, 3]], [1, [2, 3]])); }); }); - describe('keepif()', function () { - it('can structure In()', function () { + describe('keepif()', () => { + it('can structure In()', () => { sameFirst(sequence(3, 4).keepif(true, false), sequence(3, silence)); sameFirst(sequence(3, 4).keepifIn(true, false), sequence(3, silence)); }); @@ -248,9 +252,9 @@ describe('Pattern', function () { sameFirst(pure(1).keepifOut(true, false), sequence(1, silence)); }); it('can Mix() structure', () => { - assert.deepStrictEqual(sequence(1, 2).keepifMix(false, true, false).firstCycle(), [ - hap(ts(1 / 3, 1 / 2), ts(1 / 3, 1 / 2), 1), - hap(ts(1 / 2, 2 / 3), ts(1 / 2, 2 / 3), 2), + expect(sequence(1, 2).keepifMix(false, true, false).firstCycle()).toStrictEqual([ + new Hap(ts(1 / 3, 1 / 2), ts(1 / 3, 1 / 2), 1), + new Hap(ts(1 / 2, 2 / 3), ts(1 / 2, 2 / 3), 2), ]); }); it('can Trig() structure', () => { @@ -281,35 +285,39 @@ describe('Pattern', function () { sameFirst(sequence(1, [2, 3]).keepifSqueezeOut(true, true, false), sequence([1, [2, 3]], [1, [2, 3]], silence)); }); }); - describe('sub()', function () { - it('Can subtract things', function () { - assert.equal(pure(3).sub(pure(4)).query(st(0, 1))[0].value, -1); + describe('sub()', () => { + it('Can subtract things', () => { + expect(pure(3).sub(pure(4)).query(st(0, 1))[0].value).toBe(-1); }); }); - describe('mul()', function () { - it('Can multiply things', function () { - assert.equal(pure(3).mul(pure(2)).firstCycle()[0].value, 6); + describe('mul()', () => { + it('Can multiply things', () => { + expect(pure(3).mul(pure(2)).firstCycle()[0].value).toBe(6); }); }); - describe('div()', function () { - it('Can divide things', function () { - assert.equal(pure(3).div(pure(2)).firstCycle()[0].value, 1.5); + describe('div()', () => { + it('Can divide things', () => { + expect(pure(3).div(pure(2)).firstCycle()[0].value).toBe(1.5); }); }); - describe('set()', function () { - it('Can set things in objects', function () { - assert.deepStrictEqual( + describe('set()', () => { + it('Can set things in objects', () => { + expect( pure({ a: 4, b: 6 }) .set(pure({ c: 7 })) .firstCycle()[0].value, - { a: 4, b: 6, c: 7 }, - ); + ).toStrictEqual({ + a: 4, + b: 6, + c: 7, + }); + sameFirst( sequence({ a: 1, b: 2 }, { a: 2, b: 2 }, { a: 3, b: 2 }).set({ a: 4, c: 5 }), sequence({ a: 4, b: 2, c: 5 }).fast(3), ); }); - it('Can set things with plain values', function () { + it('Can set things with plain values', () => { sameFirst(sequence(1, 2, 3).set(4), sequence(4).fast(3)); }); describe('setOut()', () => { @@ -342,231 +350,228 @@ describe('Pattern', function () { }); }); }); - describe('stack()', function () { - it('Can stack things', function () { - assert.deepStrictEqual( + describe('stack()', () => { + it('Can stack things', () => { + expect( stack(pure('a'), pure('b'), pure('c')) .firstCycle() .map((h) => h.value), - ['a', 'b', 'c'], - ); + ).toStrictEqual(['a', 'b', 'c']); }); - it('Can stack subpatterns', function () { + it('Can stack subpatterns', () => { sameFirst(stack('a', ['b', 'c']), stack('a', sequence('b', 'c'))); }); }); - describe('_fast()', function () { - it('Makes things faster', function () { - assert.equal(pure('a')._fast(2).firstCycle().length, 2); + describe('_fast()', () => { + it('Makes things faster', () => { + expect(pure('a')._fast(2).firstCycle().length).toBe(2); }); }); - describe('_fastGap()', function () { - it('Makes things faster, with a gap', function () { - assert.deepStrictEqual( - sequence('a', 'b', 'c')._fastGap(2).firstCycle(), + describe('_fastGap()', () => { + it('Makes things faster, with a gap', () => { + expect(sequence('a', 'b', 'c')._fastGap(2).firstCycle()).toStrictEqual( sequence(['a', 'b', 'c'], silence).firstCycle(), ); - assert.deepStrictEqual( - sequence('a', 'b', 'c')._fastGap(3).firstCycle(), + expect(sequence('a', 'b', 'c')._fastGap(3).firstCycle()).toStrictEqual( sequence(['a', 'b', 'c'], silence, silence).firstCycle(), ); }); - it('Makes things faster, with a gap, when speeded up further', function () { - assert.deepStrictEqual( - sequence('a', 'b', 'c')._fastGap(2).fast(2).firstCycle(), + it('Makes things faster, with a gap, when speeded up further', () => { + expect(sequence('a', 'b', 'c')._fastGap(2).fast(2).firstCycle()).toStrictEqual( sequence(['a', 'b', 'c'], silence, ['a', 'b', 'c'], silence).firstCycle(), ); }); + it('copes with breaking up events across cycles', () => { + expect(pure('a').slow(2)._fastGap(2)._setContext({}).query(st(0, 2))).toStrictEqual([ + hap(ts(0, 1), ts(0, 0.5), 'a'), + hap(ts(0.5, 1.5), ts(1, 1.5), 'a'), + ]); + }); }); - describe('_compressSpan()', function () { - it('Can squash cycles of a pattern into a given timespan', function () { - assert.deepStrictEqual( - pure('a')._compressSpan(new TimeSpan(0.25, 0.5)).firstCycle(), + describe('_compressSpan()', () => { + it('Can squash cycles of a pattern into a given timespan', () => { + expect(pure('a')._compressSpan(ts(0.25, 0.5)).firstCycle()).toStrictEqual( sequence(silence, 'a', silence, silence).firstCycle(), ); }); }); - describe('fast()', function () { - it('Makes things faster', function () { - assert.equal(pure('a').fast(2).firstCycle().length, 2); + describe('fast()', () => { + it('Makes things faster', () => { + expect(pure('a').fast(2).firstCycle().length).toBe(2); }); - it('Makes things faster, with a pattern of factors', function () { - assert.equal(pure('a').fast(sequence(1, 4)).firstCycle().length, 3); - // .fast(sequence(1,silence) is a quick hack to cut a hap in two.. - assert.deepStrictEqual( - pure('a').fast(sequence(1, 4)).firstCycle(), + it('Makes things faster, with a pattern of factors', () => { + expect(pure('a').fast(sequence(1, 4)).firstCycle().length).toBe(3); + expect(pure('a').fast(sequence(1, 4)).firstCycle()).toStrictEqual( stack(pure('a').fast(sequence(1, silence)), sequence(silence, ['a', 'a'])).firstCycle(), ); }); - it('defaults to accepting sequences', function () { - assert.deepStrictEqual( - sequence(1, 2, 3).fast(sequence(1.5, 2)).firstCycle(), + it('defaults to accepting sequences', () => { + expect(sequence(1, 2, 3).fast(sequence(1.5, 2)).firstCycle()).toStrictEqual( sequence(1, 2, 3).fast(1.5, 2).firstCycle(), ); }); - it('works as a static function', function () { - assert.deepStrictEqual( - sequence(1, 2, 3).fast(1, 2).firstCycle(), + it('works as a static function', () => { + expect(sequence(1, 2, 3).fast(1, 2).firstCycle()).toStrictEqual( fast(sequence(1, 2), sequence(1, 2, 3)).firstCycle(), ); }); - it('works as a curried static function', function () { - assert.deepStrictEqual( - sequence(1, 2, 3).fast(1, 2).firstCycle(), + it('works as a curried static function', () => { + expect(sequence(1, 2, 3).fast(1, 2).firstCycle()).toStrictEqual( fast(sequence(1, 2))(sequence(1, 2, 3)).firstCycle(), ); }); }); - describe('_slow()', function () { - it('Makes things slower', function () { - assert.deepStrictEqual( - pure('a')._slow(2).firstCycle()[0], - new Hap(new TimeSpan(Fraction(0), Fraction(2)), new TimeSpan(Fraction(0), Fraction(1)), 'a'), - ); + + describe('_slow()', () => { + it('Makes things slower', () => { + expect(pure('a')._slow(2).firstCycle()[0]).toStrictEqual(hap(ts(0, 2), ts(0, 1), 'a')); const pat = sequence(pure('c3'), pure('eb3')._slow(2)); // => try mini('c3 eb3/2') in repl - assert.deepStrictEqual(pat.query(st(0, 1))[1], hap(ts(0.5, 1.5), ts(1 / 2, 1), 'eb3')); + + expect(pat.query(st(0, 1))[1]).toStrictEqual(hap(ts(0.5, 1.5), ts(1 / 2, 1), 'eb3')); + // the following test fails - /* assert.deepStrictEqual( - pat.query(ts(1,2))[1], undefined - ) */ + // assert.deepStrictEqual( + // pat.query(ts(1,2))[1], undefined + // ) // expecting [c3 eb3] [c3 ~] // what happens [c3 eb3] [c3 eb3] // notable examples: // mini('[c3 g3]/2 eb3') always plays [c3 eb3] // mini('eb3 [c3 g3]/2 ') always plays [c3 g3] }); + it('Supports zero-length queries', () => { + expect(steady('a')._slow(1).queryArc(0, 0)).toStrictEqual(steady('a').queryArc(0, 0)); + }); + }); + describe('slow()', () => { + it('Supports zero-length queries', () => { + expect(steady('a').slow(1)._setContext({}).queryArc(0, 0)).toStrictEqual( + steady('a')._setContext({}).queryArc(0, 0), + ); + }); }); describe('inside', () => { it('can rev inside a cycle', () => { - sameFirst(sequence('a', 'b', 'c', 'd').inside(2, rev), - sequence('b', 'a', 'd', 'c') - ); + sameFirst(sequence('a', 'b', 'c', 'd').inside(2, rev), sequence('b', 'a', 'd', 'c')); }); }); describe('outside', () => { it('can rev outside a cycle', () => { - sameFirst(sequence('a', 'b', 'c', 'd')._slow(2).outside(2, rev), - sequence('d', 'c') - ); + sameFirst(sequence('a', 'b', 'c', 'd')._slow(2).outside(2, rev), sequence('d', 'c')); }); }); - describe('_filterValues()', function () { - it('Filters true', function () { - assert.equal( + describe('_filterValues()', () => { + it('Filters true', () => { + expect( pure(true) ._filterValues((x) => x) .firstCycle().length, - 1, - ); + ).toBe(1); }); }); - describe('when()', function () { - it('Always faster', function () { - assert.equal( + describe('when()', () => { + it('Always faster', () => { + expect( pure('a') .when(pure(true), (x) => x._fast(2)) .firstCycle().length, - 2, - ); + ).toBe(2); }); - it('Never faster', function () { - assert.equal( + it('Never faster', () => { + expect( pure('a') .when(pure(false), (x) => x._fast(2)) .firstCycle().length, - 1, - ); + ).toBe(1); }); - it('Can alternate', function () { - assert.deepStrictEqual( - pure(10).when(slowcat(true, false), add(3)).fast(4)._sortHapsByPart().firstCycle(), - fastcat(13, 10, 13, 10).firstCycle(), - ); + it('Can alternate', () => { + expect( + pure(10) + .when(slowcat(true, false), (x) => x.add(3)) + .fast(4) + ._sortHapsByPart() + .firstCycle(), + ).toStrictEqual(fastcat(13, 10, 13, 10).firstCycle()); }); }); - describe('fastcat()', function () { - it('Can concatenate two things', function () { - assert.deepStrictEqual( + describe('fastcat()', () => { + it('Can concatenate two things', () => { + expect( fastcat(pure('a'), pure('b')) .firstCycle() .map((x) => x.value), - ['a', 'b'], - ); + ).toStrictEqual(['a', 'b']); }); }); - describe('fastcat()', function () { - it('Can go into negative time', function () { + describe('fastcat()', () => { + it('Can go into negative time', () => { sameFirst(fastcat('a', 'b', 'c').late(1000000), fastcat('a', 'b', 'c')); }); }); - describe('slowcat()', function () { - it('Can concatenate things slowly', function () { - assert.deepStrictEqual( + describe('slowcat()', () => { + it('Can concatenate things slowly', () => { + expect( slowcat('a', 'b') .firstCycle() .map((x) => x.value), - ['a'], - ); - assert.deepStrictEqual( + ).toStrictEqual(['a']); + + expect( slowcat('a', 'b') ._early(1) .firstCycle() .map((x) => x.value), - ['b'], - ); - assert.deepStrictEqual( + ).toStrictEqual(['b']); + + expect( slowcat('a', slowcat('b', 'c')) ._early(1) .firstCycle() .map((x) => x.value), - ['b'], - ); - assert.deepStrictEqual( + ).toStrictEqual(['b']); + + expect( slowcat('a', slowcat('b', 'c')) ._early(3) .firstCycle() .map((x) => x.value), - ['c'], - ); + ).toStrictEqual(['c']); }); it('Can cat subpatterns', () => { sameFirst(slowcat('a', ['b', 'c']).fast(4), sequence('a', ['b', 'c']).fast(2)); }); }); - describe('rev()', function () { - it('Can reverse things', function () { - assert.deepStrictEqual( + describe('rev()', () => { + it('Can reverse things', () => { + expect( fastcat('a', 'b', 'c') .rev() .firstCycle() .sort((a, b) => a.part.begin.sub(b.part.begin)) .map((a) => a.value), - ['c', 'b', 'a'], - ); + ).toStrictEqual(['c', 'b', 'a']); }); }); describe('sequence()', () => { it('Can work like fastcat', () => { - assert.deepStrictEqual(sequence(1, 2, 3).firstCycle(), fastcat(1, 2, 3).firstCycle()); + expect(sequence(1, 2, 3).firstCycle()).toStrictEqual(fastcat(1, 2, 3).firstCycle()); }); }); describe('polyrhythm()', () => { it('Can layer up cycles', () => { - assert.deepStrictEqual( - polyrhythm(['a', 'b'], ['c']).firstCycle(), + expect(polyrhythm(['a', 'b'], ['c']).firstCycle()).toStrictEqual( stack(fastcat(pure('a'), pure('b')), pure('c')).firstCycle(), ); }); }); describe('polymeter()', () => { it('Can layer up cycles, stepwise', () => { - assert.deepStrictEqual( - polymeterSteps(3, ['d', 'e']).firstCycle(), + expect(polymeterSteps(3, ['d', 'e']).firstCycle()).toStrictEqual( fastcat(pure('d'), pure('e'), pure('d')).firstCycle(), ); - assert.deepStrictEqual( - polymeter(['a', 'b', 'c'], ['d', 'e']).fast(2).firstCycle(), + + expect(polymeter(['a', 'b', 'c'], ['d', 'e']).fast(2).firstCycle()).toStrictEqual( stack(sequence('a', 'b', 'c', 'a', 'b', 'c'), sequence('d', 'e', 'd', 'e', 'd', 'e')).firstCycle(), ); }); @@ -574,29 +579,24 @@ describe('Pattern', function () { describe('every()', () => { it('Can apply a function every 3rd time', () => { - assert.deepStrictEqual( + expect( pure('a') .every(3, (x) => x._fast(2)) ._fast(3) .firstCycle(), - sequence(sequence('a', 'a'), 'a', 'a').firstCycle(), - ); + ).toStrictEqual(sequence(sequence('a', 'a'), 'a', 'a').firstCycle()); }); it('works with currying', () => { - assert.deepStrictEqual( - pure('a').every(3, fast(2))._fast(3).firstCycle(), + expect(pure('a').every(3, fast(2))._fast(3).firstCycle()).toStrictEqual( sequence(sequence('a', 'a'), 'a', 'a').firstCycle(), ); - assert.deepStrictEqual( - sequence(3, 4, 5).every(3, add(3)).fast(5).firstCycle(), + expect(sequence(3, 4, 5).every(3, add(3)).fast(5).firstCycle()).toStrictEqual( sequence(6, 7, 8, 3, 4, 5, 3, 4, 5, 6, 7, 8, 3, 4, 5).firstCycle(), ); - assert.deepStrictEqual( - sequence(3, 4, 5).every(2, sub(1)).fast(5).firstCycle(), + expect(sequence(3, 4, 5).every(2, sub(1)).fast(5).firstCycle()).toStrictEqual( sequence(2, 3, 4, 3, 4, 5, 2, 3, 4, 3, 4, 5, 2, 3, 4).firstCycle(), ); - assert.deepStrictEqual( - sequence(3, 4, 5).every(3, add(3)).every(2, sub(1)).fast(2).firstCycle(), + expect(sequence(3, 4, 5).every(3, add(3)).every(2, sub(1)).fast(2).firstCycle()).toStrictEqual( sequence(5, 6, 7, 3, 4, 5).firstCycle(), ); }); @@ -606,98 +606,91 @@ describe('Pattern', function () { sameFirst(sequence('a', 'b').brak()._fast(2), sequence('a', 'b', fastcat(silence, 'a'), fastcat('b', silence))); }); }); - describe('timeCat()', function () { - it('Can concatenate patterns with different relative durations', function () { - assert.deepStrictEqual( - sequence('a', ['a', 'a']).firstCycle(), + describe('timeCat()', () => { + it('Can concatenate patterns with different relative durations', () => { + expect(sequence('a', ['a', 'a']).firstCycle()).toStrictEqual( timeCat([1, 'a'], [0.5, 'a'], [0.5, 'a']).firstCycle(), ); }); }); - describe('struct()', function () { - it('Can restructure a discrete pattern', function () { - assert.deepStrictEqual(sequence('a', 'b').struct(sequence(true, true, true)).firstCycle(), [ + describe('struct()', () => { + it('Can restructure a discrete pattern', () => { + expect(sequence('a', 'b').struct(sequence(true, true, true)).firstCycle()).toStrictEqual([ hap(ts(0, third), ts(0, third), 'a'), hap(ts(third, twothirds), ts(third, 0.5), 'a'), hap(ts(third, twothirds), ts(0.5, twothirds), 'b'), hap(ts(twothirds, 1), ts(twothirds, 1), 'b'), ]); - assert.deepStrictEqual( + + expect( pure('a') .struct(sequence(true, [true, false], true)) .firstCycle(), - sequence('a', ['a', silence], 'a').firstCycle(), - ); - assert.deepStrictEqual( + ).toStrictEqual(sequence('a', ['a', silence], 'a').firstCycle()); + + expect( pure('a') .struct(sequence(true, [true, false], true).invert()) .firstCycle(), - sequence(silence, [silence, 'a'], silence).firstCycle(), - ); - assert.deepStrictEqual( + ).toStrictEqual(sequence(silence, [silence, 'a'], silence).firstCycle()); + + expect( pure('a') .struct(sequence(true, [true, silence], true)) .firstCycle(), - sequence('a', ['a', silence], 'a').firstCycle(), - ); + ).toStrictEqual(sequence('a', ['a', silence], 'a').firstCycle()); }); it('Can structure a continuous pattern', () => { - assert.deepStrictEqual( - steady('a').struct(true, [true, true]).firstCycle(), - sequence('a', ['a', 'a']).firstCycle(), - ); + expect(steady('a').struct(true, [true, true]).firstCycle()).toStrictEqual(sequence('a', ['a', 'a']).firstCycle()); }); }); - describe('mask()', function () { - it('Can fragment a pattern', function () { - assert.deepStrictEqual(sequence('a', 'b').mask(sequence(true, true, true)).firstCycle(), [ + describe('mask()', () => { + it('Can fragment a pattern', () => { + expect(sequence('a', 'b').mask(sequence(true, true, true)).firstCycle()).toStrictEqual([ hap(ts(0, 0.5), ts(0, third), 'a'), hap(ts(0, 0.5), ts(third, 0.5), 'a'), hap(ts(0.5, 1), ts(0.5, twothirds), 'b'), hap(ts(0.5, 1), ts(twothirds, 1), 'b'), ]); }); - it('Can mask off parts of a pattern', function () { - assert.deepStrictEqual( - sequence(['a', 'b'], 'c').mask(sequence(true, false)).firstCycle(), + it('Can mask off parts of a pattern', () => { + expect(sequence(['a', 'b'], 'c').mask(sequence(true, false)).firstCycle()).toStrictEqual( sequence(['a', 'b'], silence).firstCycle(), ); - assert.deepStrictEqual(sequence('a').mask(sequence(true, false)).firstCycle(), [hap(ts(0, 1), ts(0, 0.5), 'a')]); + + expect(sequence('a').mask(sequence(true, false)).firstCycle()).toStrictEqual([hap(ts(0, 1), ts(0, 0.5), 'a')]); }); }); - describe('invert()', function () { - it('Can invert a binary pattern', function () { - assert.deepStrictEqual( - sequence(true, false, [true, false]).invert().firstCycle(), + describe('invert()', () => { + it('Can invert a binary pattern', () => { + expect(sequence(true, false, [true, false]).invert().firstCycle()).toStrictEqual( sequence(false, true, [false, true]).firstCycle(), ); }); }); - describe('signal()', function () { - it('Can make saw/saw2', function () { - assert.deepStrictEqual( - saw.struct(true, true, true, true).firstCycle(), + describe('signal()', () => { + it('Can make saw/saw2', () => { + expect(saw.struct(true, true, true, true).firstCycle()).toStrictEqual( sequence(1 / 8, 3 / 8, 5 / 8, 7 / 8).firstCycle(), ); - assert.deepStrictEqual( - saw2.struct(true, true, true, true).firstCycle(), + + expect(saw2.struct(true, true, true, true).firstCycle()).toStrictEqual( sequence(-3 / 4, -1 / 4, 1 / 4, 3 / 4).firstCycle(), ); }); - it('Can make isaw/isaw2', function () { - assert.deepStrictEqual( - isaw.struct(true, true, true, true).firstCycle(), + it('Can make isaw/isaw2', () => { + expect(isaw.struct(true, true, true, true).firstCycle()).toStrictEqual( sequence(7 / 8, 5 / 8, 3 / 8, 1 / 8).firstCycle(), ); - assert.deepStrictEqual( - isaw2.struct(true, true, true, true).firstCycle(), + + expect(isaw2.struct(true, true, true, true).firstCycle()).toStrictEqual( sequence(3 / 4, 1 / 4, -1 / 4, -3 / 4).firstCycle(), ); }); }); describe('_setContext()', () => { it('Can set the hap context', () => { - assert.deepStrictEqual( + expect( pure('a') ._setContext([ [ @@ -706,20 +699,19 @@ describe('Pattern', function () { ], ]) .firstCycle(true), - [ - hap(ts(0, 1), ts(0, 1), 'a', [ - [ - [0, 1], - [1, 2], - ], - ]), - ], - ); + ).toStrictEqual([ + hap(ts(0, 1), ts(0, 1), 'a', [ + [ + [0, 1], + [1, 2], + ], + ]), + ]); }); }); describe('_withContext()', () => { it('Can update the hap context', () => { - assert.deepStrictEqual( + expect( pure('a') ._setContext([ [ @@ -735,52 +727,49 @@ describe('Pattern', function () { ], ]) .firstCycle(true), - [ - hap(ts(0, 1), ts(0, 1), 'a', [ - [ - [0, 1], - [1, 2], - ], - [ - [3, 4], - [3, 4], - ], - ]), - ], - ); + ).toStrictEqual([ + hap(ts(0, 1), ts(0, 1), 'a', [ + [ + [0, 1], + [1, 2], + ], + [ + [3, 4], + [3, 4], + ], + ]), + ]); }); }); describe('apply', () => { it('Can apply a function', () => { - assert.deepStrictEqual(sequence('a', 'b')._apply(fast(2)).firstCycle(), sequence('a', 'b').fast(2).firstCycle()); + expect(sequence('a', 'b')._apply(fast(2)).firstCycle()).toStrictEqual(sequence('a', 'b').fast(2).firstCycle()); }), it('Can apply a pattern of functions', () => { - assert.deepStrictEqual(sequence('a', 'b').apply(fast(2)).firstCycle(), sequence('a', 'b').fast(2).firstCycle()); - assert.deepStrictEqual( - sequence('a', 'b').apply(fast(2), fast(3)).firstCycle(), + expect(sequence('a', 'b').apply(fast(2)).firstCycle()).toStrictEqual(sequence('a', 'b').fast(2).firstCycle()); + expect(sequence('a', 'b').apply(fast(2), fast(3)).firstCycle()).toStrictEqual( sequence('a', 'b').fast(2, 3).firstCycle(), ); }); }); describe('layer', () => { it('Can layer up multiple functions', () => { - assert.deepStrictEqual( + expect( sequence(1, 2, 3) .layer(fast(2), (pat) => pat.add(3, 4)) .firstCycle(), - stack(sequence(1, 2, 3).fast(2), sequence(1, 2, 3).add(3, 4)).firstCycle(), - ); + ).toStrictEqual(stack(sequence(1, 2, 3).fast(2), sequence(1, 2, 3).add(3, 4)).firstCycle()); }); }); describe('early', () => { it('Can shift a hap earlier', () => { - assert.deepStrictEqual(pure(30)._late(0.25).query(st(1, 2)), [ + expect(pure(30)._late(0.25).query(st(1, 2))).toStrictEqual([ hap(ts(1 / 4, 5 / 4), ts(1, 5 / 4), 30), hap(ts(5 / 4, 9 / 4), ts(5 / 4, 2), 30), ]); }); it('Can shift a hap earlier, into negative time', () => { - assert.deepStrictEqual(pure(30)._late(0.25).query(st(0, 1)), [ + expect(pure(30)._late(0.25).query(st(0, 1))).toStrictEqual([ hap(ts(-3 / 4, 1 / 4), ts(0, 1 / 4), 30), hap(ts(1 / 4, 5 / 4), ts(1 / 4, 1), 30), ]); @@ -788,16 +777,14 @@ describe('Pattern', function () { }); describe('off', () => { it('Can offset a transformed pattern from the original', () => { - assert.deepStrictEqual( - pure(30).off(0.25, add(2)).firstCycle(), + expect(pure(30).off(0.25, add(2)).firstCycle()).toStrictEqual( stack(pure(30), pure(30).late(0.25).add(2)).firstCycle(), ); }); }); describe('jux', () => { it('Can juxtapose', () => { - assert.deepStrictEqual( - pure({ a: 1 }).jux(fast(2))._sortHapsByPart().firstCycle(), + expect(pure({ a: 1 }).jux(fast(2))._sortHapsByPart().firstCycle()).toStrictEqual( stack(pure({ a: 1, pan: 0 }), pure({ a: 1, pan: 1 }).fast(2)) ._sortHapsByPart() .firstCycle(), @@ -806,8 +793,7 @@ describe('Pattern', function () { }); describe('juxBy', () => { it('Can juxtapose by half', () => { - assert.deepStrictEqual( - pure({ a: 1 }).juxBy(0.5, fast(2))._sortHapsByPart().firstCycle(), + expect(pure({ a: 1 }).juxBy(0.5, fast(2))._sortHapsByPart().firstCycle()).toStrictEqual( stack(pure({ a: 1, pan: 0.25 }), pure({ a: 1, pan: 0.75 }).fast(2)) ._sortHapsByPart() .firstCycle(), @@ -816,11 +802,12 @@ describe('Pattern', function () { }); describe('_squeezeJoin', () => { it('Can squeeze', () => { - assert.deepStrictEqual( + expect( sequence('a', ['a', 'a']) .fmap((a) => fastcat('b', 'c')) ._squeezeJoin() .firstCycle(), + ).toStrictEqual( sequence( ['b', 'c'], [ @@ -830,17 +817,24 @@ describe('Pattern', function () { ).firstCycle(), ); }); + it('Squeezes to the correct cycle', () => { + expect( + pure(time.struct(true)) + ._squeezeJoin() + .queryArc(3, 4) + .map((x) => x.value), + ).toStrictEqual([Fraction(3.5)]); + }); }); describe('ply', () => { it('Can ply(3)', () => { - assert.deepStrictEqual( - sequence('a', ['b', 'c']).ply(3).firstCycle(), + expect(sequence('a', ['b', 'c']).ply(3).firstCycle()).toStrictEqual( sequence(pure('a').fast(3), [pure('b').fast(3), pure('c').fast(3)]).firstCycle(), ); }); it('Doesnt drop haps in the 9th cycle', () => { // fixed with https://github.com/tidalcycles/strudel/commit/72eeaf446e3d5e186d63cc0d2276f0723cde017a - assert.equal(sequence(1, 2, 3).ply(2).early(8).firstCycle().length, 6); + expect(sequence(1, 2, 3).ply(2).early(8).firstCycle().length).toBe(6); }); }); describe('striate', () => { @@ -853,8 +847,7 @@ describe('Pattern', function () { }); describe('chop', () => { it('Can _chop(2)', () => { - assert.deepStrictEqual( - sequence({ sound: 'a' }, { sound: 'b' })._chop(2).firstCycle(), + expect(sequence({ sound: 'a' }, { sound: 'b' })._chop(2).firstCycle()).toStrictEqual( sequence( { sound: 'a', begin: 0, end: 0.5 }, { sound: 'a', begin: 0.5, end: 1 }, @@ -864,8 +857,7 @@ describe('Pattern', function () { ); }); it('Can chop(2,3)', () => { - assert.deepStrictEqual( - pure({ sound: 'a' }).fast(2).chop(2, 3)._sortHapsByPart().firstCycle(), + expect(pure({ sound: 'a' }).fast(2).chop(2, 3)._sortHapsByPart().firstCycle()).toStrictEqual( sequence( [ { sound: 'a', begin: 0, end: 0.5 }, @@ -882,18 +874,21 @@ describe('Pattern', function () { ); }); }); + describe('range', () => { + it('Can be patterned', () => { + expect(sequence(0, 0).range(sequence(0, 0.5), 1).firstCycle()).toStrictEqual(sequence(0, 0.5).firstCycle()); + }); + }); describe('range2', () => { it('Can change the range of a bipolar pattern', () => { - assert.deepStrictEqual( - sequence(-1, -0.5, 0, 0.5).range2(1000, 1100).firstCycle(), + expect(sequence(-1, -0.5, 0, 0.5).range2(1000, 1100).firstCycle()).toStrictEqual( sequence(1000, 1025, 1050, 1075).firstCycle(), ); }); }); describe('linger', () => { it('Can linger on the first quarter of a cycle', () => { - assert.deepStrictEqual( - sequence(0, 1, 2, 3, 4, 5, 6, 7).linger(0.25).firstCycle(), + expect(sequence(0, 1, 2, 3, 4, 5, 6, 7).linger(0.25).firstCycle()).toStrictEqual( sequence(0, 1, 0, 1, 0, 1, 0, 1).firstCycle(), ); }); diff --git a/packages/core/test/util.test.mjs b/packages/core/test/util.test.mjs index 4a315ea8..303a3645 100644 --- a/packages/core/test/util.test.mjs +++ b/packages/core/test/util.test.mjs @@ -1,120 +1,224 @@ /* -util.test.mjs - +util.test.mjs - Tests for the core 'util' module Copyright (C) 2022 Strudel contributors - see This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ -import { strict as assert } from 'assert'; import { pure } from '../pattern.mjs'; -import { isNote, tokenizeNote, toMidi, fromMidi, mod, compose, getFrequency } from '../util.mjs'; +import { + isNote, + tokenizeNote, + toMidi, + fromMidi, + mod, + compose, + getFrequency, + getPlayableNoteValue, + parseNumeral, + parseFractional, + numeralArgs, + fractionalArgs, +} from '../util.mjs'; +import { describe, it, expect } from 'vitest'; describe('isNote', () => { it('should recognize notes without accidentals', () => { 'C3 D3 E3 F3 G3 A3 B3 C4 D5 c5 d5 e5'.split(' ').forEach((note) => { - assert.equal(isNote(note), true); + expect(isNote(note)).toBe(true); }); }); it('should recognize notes with accidentals', () => { 'C#3 D##3 Eb3 Fbb3 Bb5'.split(' ').forEach((note) => { - assert.equal(isNote(note), true); + expect(isNote(note)).toBe(true); }); }); it('should not recognize invalid notes', () => { - assert.equal(isNote('H5'), false); - assert.equal(isNote('C'), false); - assert.equal(isNote('X'), false); - assert.equal(isNote(1), false); + expect(isNote('H5')).toBe(false); + expect(isNote('C')).toBe(false); + expect(isNote('X')).toBe(false); + expect(isNote(1)).toBe(false); }); }); describe('isNote', () => { it('should tokenize notes without accidentals', () => { - assert.deepStrictEqual(tokenizeNote('C3'), ['C', '', 3]); - assert.deepStrictEqual(tokenizeNote('D3'), ['D', '', 3]); - assert.deepStrictEqual(tokenizeNote('E3'), ['E', '', 3]); - assert.deepStrictEqual(tokenizeNote('F3'), ['F', '', 3]); - assert.deepStrictEqual(tokenizeNote('G3'), ['G', '', 3]); - assert.deepStrictEqual(tokenizeNote('A3'), ['A', '', 3]); - assert.deepStrictEqual(tokenizeNote('B3'), ['B', '', 3]); - assert.deepStrictEqual(tokenizeNote('C4'), ['C', '', 4]); - assert.deepStrictEqual(tokenizeNote('D5'), ['D', '', 5]); + expect(tokenizeNote('C3')).toStrictEqual(['C', '', 3]); + expect(tokenizeNote('D3')).toStrictEqual(['D', '', 3]); + expect(tokenizeNote('E3')).toStrictEqual(['E', '', 3]); + expect(tokenizeNote('F3')).toStrictEqual(['F', '', 3]); + expect(tokenizeNote('G3')).toStrictEqual(['G', '', 3]); + expect(tokenizeNote('A3')).toStrictEqual(['A', '', 3]); + expect(tokenizeNote('B3')).toStrictEqual(['B', '', 3]); + expect(tokenizeNote('C4')).toStrictEqual(['C', '', 4]); + expect(tokenizeNote('D5')).toStrictEqual(['D', '', 5]); }); it('should tokenize notes with accidentals', () => { - assert.deepStrictEqual(tokenizeNote('C#3'), ['C', '#', 3]); - assert.deepStrictEqual(tokenizeNote('D##3'), ['D', '##', 3]); - assert.deepStrictEqual(tokenizeNote('Eb3'), ['E', 'b', 3]); - assert.deepStrictEqual(tokenizeNote('Fbb3'), ['F', 'bb', 3]); - assert.deepStrictEqual(tokenizeNote('Bb5'), ['B', 'b', 5]); + expect(tokenizeNote('C#3')).toStrictEqual(['C', '#', 3]); + expect(tokenizeNote('D##3')).toStrictEqual(['D', '##', 3]); + expect(tokenizeNote('Eb3')).toStrictEqual(['E', 'b', 3]); + expect(tokenizeNote('Fbb3')).toStrictEqual(['F', 'bb', 3]); + expect(tokenizeNote('Bb5')).toStrictEqual(['B', 'b', 5]); }); it('should tokenize notes without octave', () => { - assert.deepStrictEqual(tokenizeNote('C'), ['C', '', undefined]); - assert.deepStrictEqual(tokenizeNote('C#'), ['C', '#', undefined]); - assert.deepStrictEqual(tokenizeNote('Bb'), ['B', 'b', undefined]); - assert.deepStrictEqual(tokenizeNote('Bbb'), ['B', 'bb', undefined]); + expect(tokenizeNote('C')).toStrictEqual(['C', '', undefined]); + expect(tokenizeNote('C#')).toStrictEqual(['C', '#', undefined]); + expect(tokenizeNote('Bb')).toStrictEqual(['B', 'b', undefined]); + expect(tokenizeNote('Bbb')).toStrictEqual(['B', 'bb', undefined]); }); it('should not tokenize invalid notes', () => { - assert.deepStrictEqual(tokenizeNote('X'), []); - assert.deepStrictEqual(tokenizeNote('asfasf'), []); - assert.deepStrictEqual(tokenizeNote(123), []); + expect(tokenizeNote('X')).toStrictEqual([]); + expect(tokenizeNote('asfasf')).toStrictEqual([]); + expect(tokenizeNote(123)).toStrictEqual([]); }); }); describe('toMidi', () => { it('should turn notes into midi', () => { - assert.equal(toMidi('A4'), 69); - assert.equal(toMidi('C4'), 60); - assert.equal(toMidi('Db4'), 61); - assert.equal(toMidi('C3'), 48); - assert.equal(toMidi('Cb3'), 47); - assert.equal(toMidi('Cbb3'), 46); - assert.equal(toMidi('C#3'), 49); - assert.equal(toMidi('C#3'), 49); - assert.equal(toMidi('C##3'), 50); + expect(toMidi('A4')).toEqual(69); + expect(toMidi('C4')).toEqual(60); + expect(toMidi('Db4')).toEqual(61); + expect(toMidi('C3')).toEqual(48); + expect(toMidi('Cb3')).toEqual(47); + expect(toMidi('Cbb3')).toEqual(46); + expect(toMidi('C#3')).toEqual(49); + expect(toMidi('C#3')).toEqual(49); + expect(toMidi('C##3')).toEqual(50); + }); + it('should throw an error when given a non-note', () => { + expect(() => toMidi('Q')).toThrowError(`not a note: "Q"`); + expect(() => toMidi('Z')).toThrowError(`not a note: "Z"`); }); }); describe('fromMidi', () => { it('should turn midi into frequency', () => { - assert.equal(fromMidi(69), 440); - assert.equal(fromMidi(57), 220); + expect(fromMidi(69)).toEqual(440); + expect(fromMidi(57)).toEqual(220); }); }); describe('getFrequency', () => { + const happify = (val, context = {}) => pure(val).firstCycle()[0].setContext(context); + it('should turn note into frequency', () => { + expect(getFrequency(happify('a4'))).toEqual(440); + expect(getFrequency(happify('a3'))).toEqual(220); + }); it('should turn midi into frequency', () => { - const happify = (val, context = {}) => pure(val).firstCycle()[0].setContext(context); - assert.equal(getFrequency(happify('a4')), 440); - assert.equal(getFrequency(happify('a3')), 220); - assert.equal(getFrequency(happify(440, { type: 'frequency' })), 440); // TODO: migrate when values are objects.. - assert.equal(getFrequency(happify(432, { type: 'frequency' })), 432); + expect(getFrequency(happify(69, { type: 'midi' }))).toEqual(440); + expect(getFrequency(happify(57, { type: 'midi' }))).toEqual(220); + }); + it('should return frequencies unchanged', () => { + expect(getFrequency(happify(440, { type: 'frequency' }))).toEqual(440); + expect(getFrequency(happify(432, { type: 'frequency' }))).toEqual(432); + }); + it('should turn object with a "freq" property into frequency', () => { + expect(getFrequency(happify({ freq: 220 }))).toEqual(220); + expect(getFrequency(happify({ freq: 440 }))).toEqual(440); + }); + it('should throw an error when given a non-note', () => { + expect(() => getFrequency(happify('Q'))).toThrowError(`not a note or frequency: Q`); + expect(() => getFrequency(happify('Z'))).toThrowError(`not a note or frequency: Z`); }); }); describe('mod', () => { it('should work like regular modulo with positive numbers', () => { - assert.equal(mod(0, 3), 0); - assert.equal(mod(1, 3), 1); - assert.equal(mod(2, 3), 2); - assert.equal(mod(3, 3), 0); - assert.equal(mod(4, 3), 1); - assert.equal(mod(4, 2), 0); + expect(mod(0, 3)).toEqual(0); + expect(mod(1, 3)).toEqual(1); + expect(mod(2, 3)).toEqual(2); + expect(mod(3, 3)).toEqual(0); + expect(mod(4, 3)).toEqual(1); + expect(mod(4, 2)).toEqual(0); }); it('should work with negative numbers', () => { - assert.equal(mod(-1, 3), 2); - assert.equal(mod(-2, 3), 1); - assert.equal(mod(-3, 3), 0); - assert.equal(mod(-4, 3), 2); - assert.equal(mod(-5, 3), 1); - assert.equal(mod(-3, 2), 1); + expect(mod(-1, 3)).toEqual(2); + expect(mod(-2, 3)).toEqual(1); + expect(mod(-3, 3)).toEqual(0); + expect(mod(-4, 3)).toEqual(2); + expect(mod(-5, 3)).toEqual(1); + expect(mod(-3, 2)).toEqual(1); }); }); describe('compose', () => { const add1 = (a) => a + 1; it('should compose', () => { - assert.equal(compose(add1, add1)(0), 2); - assert.equal(compose(add1)(0), 1); + expect(compose(add1, add1)(0)).toEqual(2); + expect(compose(add1)(0)).toEqual(1); }); const addS = (s) => (a) => a + s; it('should compose left to right', () => { - assert.equal(compose(addS('a'), addS('b'))(''), 'ab'); - assert.equal(compose(addS('a'), addS('b'))('x'), 'xab'); + expect(compose(addS('a'), addS('b'))('')).toEqual('ab'); + expect(compose(addS('a'), addS('b'))('x')).toEqual('xab'); + }); +}); + +describe('getPlayableNoteValue', () => { + const happify = (val, context = {}) => pure(val).firstCycle()[0].setContext(context); + it('should return object "note" property', () => { + expect(getPlayableNoteValue(happify({ note: 'a4' }))).toEqual('a4'); + }); + it('should return object "n" property', () => { + expect(getPlayableNoteValue(happify({ n: 'a4' }))).toEqual('a4'); + }); + it('should return object "value" property', () => { + expect(getPlayableNoteValue(happify({ value: 'a4' }))).toEqual('a4'); + }); + it('should turn midi into frequency', () => { + expect(getPlayableNoteValue(happify(57, { type: 'midi' }))).toEqual(220); + }); + it('should return frequency value', () => { + expect(getPlayableNoteValue(happify(220, { type: 'frequency' }))).toEqual(220); + }); + it('should throw an error if value is not an object, number, or string', () => { + expect(() => getPlayableNoteValue(happify(false))).toThrowError(`not a note: false`); + expect(() => getPlayableNoteValue(happify(undefined))).toThrowError(`not a note: undefined`); + }); +}); + +describe('parseNumeral', () => { + it('should parse numbers as is', () => { + expect(parseNumeral(4)).toBe(4); + expect(parseNumeral(0)).toBe(0); + expect(parseNumeral(20)).toBe(20); + expect(parseNumeral('20')).toBe(20); + expect(parseNumeral(1.5)).toBe(1.5); + }); + it('should parse notes', () => { + expect(parseNumeral('c4')).toBe(60); + expect(parseNumeral('c#4')).toBe(61); + expect(parseNumeral('db4')).toBe(61); + }); + it('should throw an error for unknown strings', () => { + expect(() => parseNumeral('xyz')).toThrowError('cannot parse as numeral: "xyz"'); + }); +}); + +describe('parseFractional', () => { + it('should parse numbers as is', () => { + expect(parseFractional(4)).toBe(4); + expect(parseFractional(0)).toBe(0); + expect(parseFractional(20)).toBe(20); + expect(parseFractional('20')).toBe(20); + expect(parseFractional(1.5)).toBe(1.5); + }); + it('should parse fractional shorthands values', () => { + expect(parseFractional('w')).toBe(1); + expect(parseFractional('h')).toBe(0.5); + expect(parseFractional('q')).toBe(0.25); + expect(parseFractional('e')).toBe(0.125); + }); + it('should throw an error for unknown strings', () => { + expect(() => parseFractional('xyz')).toThrowError('cannot parse as fractional: "xyz"'); + }); +}); + +describe('numeralArgs', () => { + it('should convert function arguments to numbers', () => { + const add = numeralArgs((a, b) => a + b); + expect(add('c4', 2)).toBe(62); + }); +}); +describe('fractionalArgs', () => { + it('should convert function arguments to numbers', () => { + const add = fractionalArgs((a, b) => a + b); + expect(add('q', 2)).toBe(2.25); }); }); diff --git a/packages/core/test/value.test.mjs b/packages/core/test/value.test.mjs index 35de86b4..ae227e17 100644 --- a/packages/core/test/value.test.mjs +++ b/packages/core/test/value.test.mjs @@ -4,21 +4,21 @@ Copyright (C) 2022 Strudel contributors - see . */ -import { strict as assert } from 'assert'; +import { describe, it, expect } from 'vitest'; import { map, valued, mul } from '../value.mjs'; describe('Value', () => { it('unionWith', () => { const { value } = valued({ freq: 2000, distortion: 1.2 }).unionWith({ distortion: 2 }, mul); - assert.deepStrictEqual(value, { freq: 2000, distortion: 2.4 }); + expect(value).toStrictEqual({ freq: 2000, distortion: 2.4 }); }); it('experiments', () => { - assert.equal(map(mul(5), valued(3)).value, 15); - assert.equal(map(mul(null), valued(3)).value, 0); - assert.equal(map(mul(3), valued(null)).value, null); - assert.equal(valued(3).map(mul).ap(3).value, 9); - assert.equal(valued(mul).ap(3).ap(3).value, 9); - assert.equal(valued(3).mul(3).value, 9); + expect(map(mul(5), valued(3)).value).toEqual(15); + expect(map(mul(null), valued(3)).value).toEqual(0); + expect(map(mul(3), valued(null)).value).toEqual(null); + expect(valued(3).map(mul).ap(3).value).toEqual(9); + expect(valued(mul).ap(3).ap(3).value).toEqual(9); + expect(valued(3).mul(3).value).toEqual(9); }); }); diff --git a/packages/core/timespan.mjs b/packages/core/timespan.mjs index 6cc69bdf..9ae22299 100644 --- a/packages/core/timespan.mjs +++ b/packages/core/timespan.mjs @@ -18,6 +18,11 @@ export class TimeSpan { const end = this.end; const end_sam = end.sam(); + // Support zero-width timespans + if (begin.equals(end)) { + return([new TimeSpan(begin, end)]); + } + while (end.gt(begin)) { // If begin and end are in the same cycle, we're done. if (begin.sam().equals(end_sam)) { diff --git a/packages/core/util.mjs b/packages/core/util.mjs index 35a0d8f4..85b11b90 100644 --- a/packages/core/util.mjs +++ b/packages/core/util.mjs @@ -10,7 +10,7 @@ export const tokenizeNote = (note) => { if (typeof note !== 'string') { return []; } - const [pc, acc = '', oct] = note.match(/^([a-gA-G])([#b]*)([0-9])?$/)?.slice(1) || []; + const [pc, acc = '', oct] = note.match(/^([a-gA-G])([#bs]*)([0-9])?$/)?.slice(1) || []; if (!pc) { return []; } @@ -24,24 +24,48 @@ export const toMidi = (note) => { throw new Error('not a note: "' + note + '"'); } const chroma = { c: 0, d: 2, e: 4, f: 5, g: 7, a: 9, b: 11 }[pc.toLowerCase()]; - const offset = acc?.split('').reduce((o, char) => o + { '#': 1, b: -1 }[char], 0) || 0; + const offset = acc?.split('').reduce((o, char) => o + { '#': 1, b: -1, s: 1 }[char], 0) || 0; return (Number(oct) + 1) * 12 + chroma + offset; }; export const fromMidi = (n) => { return Math.pow(2, (n - 69) / 12) * 440; }; +/** + * @deprecated does not appear to be referenced or invoked anywhere in the codebase + */ +export const getFreq = (noteOrMidi) => { + if (typeof noteOrMidi === 'number') { + return fromMidi(noteOrMidi); + } + return fromMidi(toMidi(noteOrMidi)); +}; + +/** + * @deprecated does not appear to be referenced or invoked anywhere in the codebase + */ +export const midi2note = (n) => { + const oct = Math.floor(n / 12) - 1; + const pc = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B'][n % 12]; + return pc + oct; +}; + // modulo that works with negative numbers e.g. mod(-1, 3) = 2 // const mod = (n: number, m: number): number => (n < 0 ? mod(n + m, m) : n % m); export const mod = (n, m) => ((n % m) + m) % m; export const getPlayableNoteValue = (hap) => { let { value: note, context } = hap; + if (typeof note === 'object' && !Array.isArray(note)) { + note = note.note || note.n || note.value; + } // if value is number => interpret as midi number as long as its not marked as frequency if (typeof note === 'number' && context.type !== 'frequency') { note = fromMidi(hap.value); - } else if (typeof note === 'string' && !isNote(note)) { - throw new Error('not a note: ' + note); + } else if (typeof note === 'number' && context.type === 'frequency') { + note = hap.value; // legacy workaround.. will be removed in the future + } else if (typeof note !== 'string' || !isNote(note)) { + throw new Error('not a note: ' + JSON.stringify(note)); } return note; }; @@ -49,15 +73,18 @@ export const getPlayableNoteValue = (hap) => { export const getFrequency = (hap) => { let { value, context } = hap; // if value is number => interpret as midi number as long as its not marked as frequency - if (typeof value === 'object' && value.freq) { - return value.freq; + if (typeof value === 'object') { + if (value.freq) { + return value.freq; + } + return getFreq(value.note || value.n || value.value); } if (typeof value === 'number' && context.type !== 'frequency') { value = fromMidi(hap.value); } else if (typeof value === 'string' && isNote(value)) { value = fromMidi(toMidi(hap.value)); } else if (typeof value !== 'number') { - throw new Error('not a note or frequency:' + value); + throw new Error('not a note or frequency: ' + value); } return value; }; @@ -106,3 +133,46 @@ export function curry(func, overload) { } return fn; } + +export function parseNumeral(numOrString) { + const asNumber = Number(numOrString); + if (!isNaN(asNumber)) { + return asNumber; + } + if (isNote(numOrString)) { + return toMidi(numOrString); + } + throw new Error(`cannot parse as numeral: "${numOrString}"`); +} + +export function mapArgs(fn, mapFn) { + return (...args) => fn(...args.map(mapFn)); +} + +export function numeralArgs(fn) { + return mapArgs(fn, parseNumeral); +} + +export function parseFractional(numOrString) { + const asNumber = Number(numOrString); + if (!isNaN(asNumber)) { + return asNumber; + } + const specialValue = { + pi: Math.PI, + w: 1, + h: 0.5, + q: 0.25, + e: 0.125, + s: 0.0625, + t: 1 / 3, + f: 0.2, + x: 1 / 6, + }[numOrString]; + if (typeof specialValue !== 'undefined') { + return specialValue; + } + throw new Error(`cannot parse as fractional: "${numOrString}"`); +} + +export const fractionalArgs = (fn) => mapArgs(fn, parseFractional); diff --git a/packages/core/zyklus.mjs b/packages/core/zyklus.mjs new file mode 100644 index 00000000..31a9533f --- /dev/null +++ b/packages/core/zyklus.mjs @@ -0,0 +1,48 @@ +// will move to https://github.com/felixroos/zyklus +// TODO: started flag + +function createClock( + getTime, + callback, // called slightly before each cycle + duration = 0.05, // duration of each cycle + interval = 0.1, // interval between callbacks + overlap = 0.1, // overlap between callbacks +) { + let tick = 0; // counts callbacks + let phase = 0; // next callback time + let precision = 10 ** 4; // used to round phase + let minLatency = 0.01; + const setDuration = (setter) => (duration = setter(duration)); + overlap = overlap || interval / 2; + const onTick = () => { + const t = getTime(); + const lookahead = t + interval + overlap; // the time window for this tick + if (phase === 0) { + phase = t + minLatency; + } + // callback as long as we're inside the lookahead + while (phase < lookahead) { + phase = Math.round(phase * precision) / precision; + phase >= t && callback(phase, duration, tick); + phase < t && console.log('TOO LATE', phase); // what if latency is added from outside? + phase += duration; // increment phase by duration + tick++; + } + }; + let intervalID; + const start = () => { + onTick(); + intervalID = setInterval(onTick, interval * 1000); + }; + const clear = () => clearInterval(intervalID); + const pause = () => clear(); + const stop = () => { + tick = 0; + phase = 0; + clear(); + }; + const getPhase = () => phase; + // setCallback + return { setDuration, start, stop, pause, duration, getPhase }; +} +export default createClock; diff --git a/packages/embed/README.md b/packages/embed/README.md index c3b7f3ee..f293c931 100644 --- a/packages/embed/README.md +++ b/packages/embed/README.md @@ -10,16 +10,22 @@ Either install with `npm i @strudel.cycles/embed` or just use a cdn to import th ``` diff --git a/packages/embed/example.html b/packages/embed/example.html index 820422b4..4470210b 100644 --- a/packages/embed/example.html +++ b/packages/embed/example.html @@ -2,15 +2,21 @@ diff --git a/packages/embed/package.json b/packages/embed/package.json index 35f5e816..ccf8652d 100644 --- a/packages/embed/package.json +++ b/packages/embed/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/embed", - "version": "0.1.0", + "version": "0.2.0", "description": "Embeddable Web Component to load a Strudel REPL into an iframe", "main": "embed.js", "type": "module", diff --git a/packages/eval/README.md b/packages/eval/README.md index 6b11cb84..466ae2f8 100644 --- a/packages/eval/README.md +++ b/packages/eval/README.md @@ -11,13 +11,14 @@ npm i @strudel.cycles/eval --save ## Example - - ```js -import { evaluate, extend } from '@strudel.cycles/eval'; -import * as strudel from '@strudel.cycles/core'; +import { evalScope } from '@strudel.cycles/core'; +import { evaluate } from '@strudel.cycles/eval'; -extend(strudel); // add strudel to eval scope +evalScope( + import('@strudel.cycles/core'), + // import other strudel packages here +); // add strudel to eval scope async function run(code) { const { pattern } = await evaluate(code); diff --git a/packages/eval/evaluate.mjs b/packages/eval/evaluate.mjs index 3db93b6d..23132225 100644 --- a/packages/eval/evaluate.mjs +++ b/packages/eval/evaluate.mjs @@ -4,46 +4,9 @@ Copyright (C) 2022 Strudel contributors - see . */ +import { evaluate as _evaluate } from '@strudel.cycles/core'; import shapeshifter from './shapeshifter.mjs'; -import * as strudel from '@strudel.cycles/core'; - -const { isPattern, Pattern } = strudel; - -export const extend = (...args) => { - console.warn('@strudel.cycles/eval extend is deprecated, please use evalScope instead'); - Object.assign(globalThis, ...args); -}; - -let scoped = false; -export const evalScope = async (...args) => { - if (scoped) { - console.warn('@strudel.cycles/eval evalScope was called more than once.'); - } - scoped = true; - const results = await Promise.allSettled(args); - const modules = results.filter((result) => result.status === 'fulfilled').map((r) => r.value); - results.forEach((result, i) => { - if (result.status === 'rejected') { - console.warn(`evalScope: module with index ${i} could not be loaded:`, result.reason); - } - }); - Object.assign(globalThis, ...modules, Pattern.prototype.bootstrap()); -}; - -function safeEval(str) { - return Function('"use strict";return (' + str + ')')(); -} export const evaluate = async (code) => { - if (!scoped) { - await evalScope(); // at least scope Pattern.prototype.boostrap - } - const shapeshifted = shapeshifter(code); // transform syntactically correct js code to semantically usable code - let evaluated = await safeEval(shapeshifted); - if (!isPattern(evaluated)) { - console.log('evaluated', evaluated); - const message = `got "${typeof evaluated}" instead of pattern`; - throw new Error(message + (typeof evaluated === 'function' ? ', did you forget to call a function?' : '.')); - } - return { mode: 'javascript', pattern: evaluated }; + return _evaluate(code, shapeshifter); }; diff --git a/packages/eval/package-lock.json b/packages/eval/package-lock.json index 9dcd5027..9041ffb7 100644 --- a/packages/eval/package-lock.json +++ b/packages/eval/package-lock.json @@ -1,13 +1,13 @@ { "name": "@strudel.cycles/eval", - "version": "0.1.1", + "version": "0.3.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@strudel.cycles/eval", - "version": "0.0.3", - "license": "GPL-3.0-or-later", + "version": "0.1.1", + "license": "AGPL-3.0-or-later", "dependencies": { "estraverse": "^5.3.0", "shift-ast": "^6.1.0", diff --git a/packages/eval/package.json b/packages/eval/package.json index 49349015..c93235f9 100644 --- a/packages/eval/package.json +++ b/packages/eval/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/eval", - "version": "0.1.1", + "version": "0.3.2", "description": "Code evaluator for strudel", "main": "index.mjs", "type": "module", @@ -8,7 +8,7 @@ "test": "test" }, "scripts": { - "test": "mocha --colors" + "test": "vitest run" }, "repository": { "type": "git", @@ -28,12 +28,12 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.1.0", + "@strudel.cycles/core": "^0.3.2", "estraverse": "^5.3.0", - "shift-ast": "^6.1.0", - "shift-codegen": "^7.0.3", - "shift-parser": "^7.0.3", - "shift-spec": "^2018.0.2", + "shift-ast": "^7.0.0", + "shift-codegen": "^8.1.0", + "shift-parser": "^8.0.0", + "shift-spec": "^2019.0.0", "shift-traverser": "^1.0.0" } } diff --git a/packages/eval/shapeshifter.mjs b/packages/eval/shapeshifter.mjs index 46d7a635..b8ffffd3 100644 --- a/packages/eval/shapeshifter.mjs +++ b/packages/eval/shapeshifter.mjs @@ -30,11 +30,12 @@ const isNote = (name) => /^[a-gC-G][bs]?[0-9]$/.test(name); const addLocations = true; export const addMiniLocations = true; export const minifyStrings = true; -export const wrappedAsync = true; +export const wrappedAsync = false; // this is now handled by core evaluate by default +export const shouldAddReturn = true; export default (_code) => { const { code, addReturn } = wrapAsync(_code); - const ast = parseScriptWithLocation(code); + const ast = parseScriptWithLocation(disguiseImports(code)); const artificialNodes = []; const parents = []; const shifted = replace(ast.tree, { @@ -125,13 +126,25 @@ export default (_code) => { }, }); // add return to last statement (because it's wrapped in an async function artificially) - if (wrappedAsync) { + if (shouldAddReturn) { addReturn(shifted); } - const generated = codegen(shifted); + const generated = undisguiseImports(codegen(shifted)); return generated; }; +// renames all import statements to "_mport" as Shift doesn't support dynamic import. +// there shouldn't be any side-effects from this as this change does not affect +// the syntax & will be undone by the equivalent replace in "undisguiseImports". +function disguiseImports(code) { + return code.replaceAll('import', '_mport'); // Must be the same length! +} + +// Rename the renamed import statements back to "import" +function undisguiseImports(code) { + return code.replaceAll('_mport', 'import'); +} + function wrapAsync(code) { // wrap code in async to make await work on top level => this will create 1 line offset to locations // this is why line offset is -1 in getLocationObject calls below @@ -141,7 +154,7 @@ ${code} })()`; } const addReturn = (ast) => { - const body = ast.statements[0].expression.callee.body; // actual code ast inside async function body + const body = wrappedAsync ? ast.statements[0].expression.callee.body : ast; body.statements = body.statements .slice(0, -1) .concat([new ReturnStatement({ expression: body.statements.slice(-1)[0] })]); diff --git a/packages/eval/test/evaluate.test.mjs b/packages/eval/test/evaluate.test.mjs index b8c4d2f2..4d7e3101 100644 --- a/packages/eval/test/evaluate.test.mjs +++ b/packages/eval/test/evaluate.test.mjs @@ -4,31 +4,29 @@ Copyright (C) 2022 Strudel contributors - see . */ -import { strict as assert } from 'assert'; -import { evaluate, extend } from '../evaluate.mjs'; +import { expect, describe, it } from 'vitest'; + +import { evaluate } from '../evaluate.mjs'; import { mini } from '@strudel.cycles/mini'; import * as strudel from '@strudel.cycles/core'; +const { fastcat, evalScope } = strudel; -const { fastcat } = strudel; - -extend({ mini }, strudel); -// TODO: test evalScope - -describe('evaluate', () => { +describe('evaluate', async () => { + await evalScope({ mini }, strudel); const ev = async (code) => (await evaluate(code)).pattern._firstCycleValues; it('Should evaluate strudel functions', async () => { - assert.deepStrictEqual(await ev("pure('c3')"), ['c3']); - assert.deepStrictEqual(await ev('cat(c3)'), ['c3']); - assert.deepStrictEqual(await ev('fastcat(c3, d3)'), ['c3', 'd3']); - assert.deepStrictEqual(await ev('slowcat(c3, d3)'), ['c3']); + expect(await ev('pure("c3")')).toEqual(['c3']); + expect(await ev('cat("c3")')).toEqual(['c3']); + expect(await ev('fastcat("c3", "d3")')).toEqual(['c3', 'd3']); + expect(await ev('slowcat("c3", "d3")')).toEqual(['c3']); }); - it('Should be extendable', async () => { - extend({ myFunction: (...x) => fastcat(...x) }); - assert.deepStrictEqual(await ev('myFunction(c3, d3)'), ['c3', 'd3']); + it('Scope should be extendable', async () => { + await evalScope({ myFunction: (...x) => fastcat(...x) }); + expect(await ev('myFunction("c3", "d3")')).toEqual(['c3', 'd3']); }); it('Should evaluate simple double quoted mini notation', async () => { - assert.deepStrictEqual(await ev('"c3"'), ['c3']); - assert.deepStrictEqual(await ev('"c3 d3"'), ['c3', 'd3']); - assert.deepStrictEqual(await ev('""'), ['c3']); + expect(await ev('"c3"')).toEqual(['c3']); + expect(await ev('"c3 d3"')).toEqual(['c3', 'd3']); + expect(await ev('""')).toEqual(['c3']); }); }); diff --git a/packages/eval/test/shapeshifter.test.mjs b/packages/eval/test/shapeshifter.test.mjs index 1cf04825..ae958326 100644 --- a/packages/eval/test/shapeshifter.test.mjs +++ b/packages/eval/test/shapeshifter.test.mjs @@ -4,11 +4,22 @@ Copyright (C) 2022 Strudel contributors - see . */ -import { strict as assert } from 'assert'; -import shapeshifter from '../shapeshifter.mjs'; +import { describe, it, expect } from 'vitest'; +import shapeshifter, { wrappedAsync } from '../shapeshifter.mjs'; describe('shapeshifter', () => { it('Should shift simple double quote string', () => { - assert.equal(shapeshifter('"c3"'), '(async()=>{return mini("c3").withMiniLocation([1,0,15],[1,4,19])})()'); + if (wrappedAsync) { + expect(shapeshifter('"c3"')).toEqual('(async()=>{return mini("c3").withMiniLocation([1,0,15],[1,4,19])})()'); + } else { + expect(shapeshifter('"c3"')).toEqual('return mini("c3").withMiniLocation([1,0,0],[1,4,4])'); + } }); + if (wrappedAsync) { + it('Should handle dynamic imports', () => { + expect(shapeshifter('const { default: foo } = await import(\'https://bar.com/foo.js\');"c3"')).toEqual( + 'const{default:foo}=await import("https://bar.com/foo.js");return mini("c3").withMiniLocation([1,64,79],[1,68,83])', + ); + }); + } }); diff --git a/packages/midi/midi.mjs b/packages/midi/midi.mjs index a9cf4df1..41247dbf 100644 --- a/packages/midi/midi.mjs +++ b/packages/midi/midi.mjs @@ -5,12 +5,11 @@ This program is free software: you can redistribute it and/or modify it under th */ import { isNote } from 'tone'; -import _WebMidi from 'webmidi'; +import * as _WebMidi from 'webmidi'; import { Pattern, isPattern } from '@strudel.cycles/core'; import { Tone } from '@strudel.cycles/tone'; - // if you use WebMidi from outside of this package, make sure to import that instance: -export const WebMidi = _WebMidi; +export const { WebMidi } = _WebMidi; export function enableWebMidi() { return new Promise((resolve, reject) => { diff --git a/packages/midi/package-lock.json b/packages/midi/package-lock.json index ccb23eaf..d1bafd41 100644 --- a/packages/midi/package-lock.json +++ b/packages/midi/package-lock.json @@ -1,13 +1,13 @@ { "name": "@strudel.cycles/midi", - "version": "0.1.1", + "version": "0.3.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@strudel.cycles/midi", - "version": "0.0.4", - "license": "GPL-3.0-or-later", + "version": "0.1.1", + "license": "AGPL-3.0-or-later", "dependencies": { "tone": "^14.7.77", "webmidi": "^2.5.2" diff --git a/packages/midi/package.json b/packages/midi/package.json index ca06cb56..cd3e6761 100644 --- a/packages/midi/package.json +++ b/packages/midi/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/midi", - "version": "0.1.1", + "version": "0.3.3", "description": "Midi API for strudel", "main": "index.mjs", "repository": { @@ -21,8 +21,8 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/tone": "^0.1.1", + "@strudel.cycles/tone": "^0.3.3", "tone": "^14.7.77", - "webmidi": "^2.5.2" + "webmidi": "^3.0.21" } } diff --git a/packages/mini/README.md b/packages/mini/README.md index f5e6f4b5..755ba5df 100644 --- a/packages/mini/README.md +++ b/packages/mini/README.md @@ -33,3 +33,12 @@ yields: ## Mini Notation API See "Mini Notation" in the [Strudel Tutorial](https://strudel.tidalcycles.org/tutorial/) + +## Building the Parser + +The parser [krill-parser.js] is generated from [krill.pegjs](./krill.pegjs) using [peggy](https://peggyjs.org/). +To generate the parser, run + +```js +npm run build:parser +``` diff --git a/packages/mini/krill-parser.js b/packages/mini/krill-parser.js index d93258b2..cdfd4ae4 100644 --- a/packages/mini/krill-parser.js +++ b/packages/mini/krill-parser.js @@ -1,10 +1,4 @@ -/* -krill-parser.js - -Copyright (C) 2022 Strudel contributors - see -This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . -*/ - -// Generated by Peggy 1.2.0. +// Generated by Peggy 2.0.1. // // https://peggyjs.org/ @@ -16,6 +10,7 @@ function peg$subclass(child, parent) { function peg$SyntaxError(message, expected, found, location) { var self = Error.call(this, message); + // istanbul ignore next Check is a necessary evil to support older environments if (Object.setPrototypeOf) { Object.setPrototypeOf(self, peg$SyntaxError.prototype); } @@ -51,14 +46,15 @@ peg$SyntaxError.prototype.format = function(sources) { var loc = this.location.source + ":" + s.line + ":" + s.column; if (src) { var e = this.location.end; - var filler = peg$padEnd("", s.line.toString().length); + var filler = peg$padEnd("", s.line.toString().length, ' '); var line = src[s.line - 1]; var last = s.line === e.line ? e.column : line.length + 1; + var hatLen = (last - s.column) || 1; str += "\n --> " + loc + "\n" + filler + " |\n" + s.line + " | " + line + "\n" - + filler + " | " + peg$padEnd("", s.column - 1) - + peg$padEnd("", last - s.column, "^"); + + filler + " | " + peg$padEnd("", s.column - 1, ' ') + + peg$padEnd("", hatLen, "^"); } else { str += "\n at " + loc; } @@ -79,7 +75,7 @@ peg$SyntaxError.buildMessage = function(expected, found) { : classEscape(part); }); - return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; + return "[" + (expectation.inverted ? "^" : "") + escapedParts.join("") + "]"; }, any: function() { @@ -180,36 +176,39 @@ function peg$parse(input, options) { var peg$c2 = "+"; var peg$c3 = "0"; var peg$c4 = ","; - var peg$c5 = "\""; - var peg$c6 = "'"; - var peg$c7 = "#"; - var peg$c8 = "^"; - var peg$c9 = "_"; - var peg$c10 = "["; - var peg$c11 = "]"; - var peg$c12 = "<"; - var peg$c13 = ">"; - var peg$c14 = "@"; - var peg$c15 = "!"; - var peg$c16 = "("; - var peg$c17 = ")"; - var peg$c18 = "/"; - var peg$c19 = "*"; - var peg$c20 = "%"; - var peg$c21 = "struct"; - var peg$c22 = "target"; - var peg$c23 = "euclid"; - var peg$c24 = "slow"; - var peg$c25 = "rotL"; - var peg$c26 = "rotR"; - var peg$c27 = "fast"; - var peg$c28 = "scale"; - var peg$c29 = "//"; - var peg$c30 = "cat"; - var peg$c31 = "$"; - var peg$c32 = "setcps"; - var peg$c33 = "setbpm"; - var peg$c34 = "hush"; + var peg$c5 = "|"; + var peg$c6 = "\""; + var peg$c7 = "'"; + var peg$c8 = "#"; + var peg$c9 = "^"; + var peg$c10 = "_"; + var peg$c11 = ":"; + var peg$c12 = "["; + var peg$c13 = "]"; + var peg$c14 = "<"; + var peg$c15 = ">"; + var peg$c16 = "@"; + var peg$c17 = "!"; + var peg$c18 = "("; + var peg$c19 = ")"; + var peg$c20 = "/"; + var peg$c21 = "*"; + var peg$c22 = "%"; + var peg$c23 = "?"; + var peg$c24 = "struct"; + var peg$c25 = "target"; + var peg$c26 = "euclid"; + var peg$c27 = "slow"; + var peg$c28 = "rotL"; + var peg$c29 = "rotR"; + var peg$c30 = "fast"; + var peg$c31 = "scale"; + var peg$c32 = "//"; + var peg$c33 = "cat"; + var peg$c34 = "$"; + var peg$c35 = "setcps"; + var peg$c36 = "setbpm"; + var peg$c37 = "hush"; var peg$r0 = /^[1-9]/; var peg$r1 = /^[eE]/; @@ -229,38 +228,41 @@ function peg$parse(input, options) { var peg$e8 = peg$otherExpectation("whitespace"); var peg$e9 = peg$classExpectation([" ", "\n", "\r", "\t"], false, false); var peg$e10 = peg$literalExpectation(",", false); - var peg$e11 = peg$literalExpectation("\"", false); - var peg$e12 = peg$literalExpectation("'", false); - var peg$e13 = peg$classExpectation([["0", "9"], ["a", "z"], ["A", "Z"], "~"], false, false); - var peg$e14 = peg$literalExpectation("#", false); - var peg$e15 = peg$literalExpectation("^", false); - var peg$e16 = peg$literalExpectation("_", false); - var peg$e17 = peg$literalExpectation("[", false); - var peg$e18 = peg$literalExpectation("]", false); - var peg$e19 = peg$literalExpectation("<", false); - var peg$e20 = peg$literalExpectation(">", false); - var peg$e21 = peg$literalExpectation("@", false); - var peg$e22 = peg$literalExpectation("!", false); - var peg$e23 = peg$literalExpectation("(", false); - var peg$e24 = peg$literalExpectation(")", false); - var peg$e25 = peg$literalExpectation("/", false); - var peg$e26 = peg$literalExpectation("*", false); - var peg$e27 = peg$literalExpectation("%", false); - var peg$e28 = peg$literalExpectation("struct", false); - var peg$e29 = peg$literalExpectation("target", false); - var peg$e30 = peg$literalExpectation("euclid", false); - var peg$e31 = peg$literalExpectation("slow", false); - var peg$e32 = peg$literalExpectation("rotL", false); - var peg$e33 = peg$literalExpectation("rotR", false); - var peg$e34 = peg$literalExpectation("fast", false); - var peg$e35 = peg$literalExpectation("scale", false); - var peg$e36 = peg$literalExpectation("//", false); - var peg$e37 = peg$classExpectation(["\n"], true, false); - var peg$e38 = peg$literalExpectation("cat", false); - var peg$e39 = peg$literalExpectation("$", false); - var peg$e40 = peg$literalExpectation("setcps", false); - var peg$e41 = peg$literalExpectation("setbpm", false); - var peg$e42 = peg$literalExpectation("hush", false); + var peg$e11 = peg$literalExpectation("|", false); + var peg$e12 = peg$literalExpectation("\"", false); + var peg$e13 = peg$literalExpectation("'", false); + var peg$e14 = peg$classExpectation([["0", "9"], ["a", "z"], ["A", "Z"], "~"], false, false); + var peg$e15 = peg$literalExpectation("#", false); + var peg$e16 = peg$literalExpectation("^", false); + var peg$e17 = peg$literalExpectation("_", false); + var peg$e18 = peg$literalExpectation(":", false); + var peg$e19 = peg$literalExpectation("[", false); + var peg$e20 = peg$literalExpectation("]", false); + var peg$e21 = peg$literalExpectation("<", false); + var peg$e22 = peg$literalExpectation(">", false); + var peg$e23 = peg$literalExpectation("@", false); + var peg$e24 = peg$literalExpectation("!", false); + var peg$e25 = peg$literalExpectation("(", false); + var peg$e26 = peg$literalExpectation(")", false); + var peg$e27 = peg$literalExpectation("/", false); + var peg$e28 = peg$literalExpectation("*", false); + var peg$e29 = peg$literalExpectation("%", false); + var peg$e30 = peg$literalExpectation("?", false); + var peg$e31 = peg$literalExpectation("struct", false); + var peg$e32 = peg$literalExpectation("target", false); + var peg$e33 = peg$literalExpectation("euclid", false); + var peg$e34 = peg$literalExpectation("slow", false); + var peg$e35 = peg$literalExpectation("rotL", false); + var peg$e36 = peg$literalExpectation("rotR", false); + var peg$e37 = peg$literalExpectation("fast", false); + var peg$e38 = peg$literalExpectation("scale", false); + var peg$e39 = peg$literalExpectation("//", false); + var peg$e40 = peg$classExpectation(["\n"], true, false); + var peg$e41 = peg$literalExpectation("cat", false); + var peg$e42 = peg$literalExpectation("$", false); + var peg$e43 = peg$literalExpectation("setcps", false); + var peg$e44 = peg$literalExpectation("setbpm", false); + var peg$e45 = peg$literalExpectation("hush", false); var peg$f0 = function() { return parseFloat(text()); }; var peg$f1 = function(chars) { return chars.join("") }; @@ -272,29 +274,30 @@ function peg$parse(input, options) { var peg$f7 = function(a) { return { operator : { type_: "stretch", arguments_ :{ amount:a } } } }; var peg$f8 = function(a) { return { operator : { type_: "stretch", arguments_ :{ amount:"1/"+a } } } }; var peg$f9 = function(a) { return { operator : { type_: "fixed-step", arguments_ :{ amount:a } } } }; - var peg$f10 = function(s, o) { return new ElementStub(s, o);}; - var peg$f11 = function(s) { return new PatternStub(s,"h"); }; - var peg$f12 = function(c, v) { return v}; - var peg$f13 = function(c, cs) { if (cs.length == 0 && c instanceof Object) { return c;} else { cs.unshift(c); return new PatternStub(cs,"v");} }; - var peg$f14 = function(s) { return s; }; - var peg$f15 = function(s) { return { name: "struct", args: { sequence:s }}}; - var peg$f16 = function(s) { return { name: "target", args : { name:s}}}; - var peg$f17 = function(p, s, r) { return { name: "bjorklund", args :{ pulse: parseInt(p), step:parseInt(s) }}}; - var peg$f18 = function(a) { return { name: "stretch", args :{ amount: a}}}; - var peg$f19 = function(a) { return { name: "shift", args :{ amount: "-"+a}}}; - var peg$f20 = function(a) { return { name: "shift", args :{ amount: a}}}; - var peg$f21 = function(a) { return { name: "stretch", args :{ amount: "1/"+a}}}; - var peg$f22 = function(s) { return { name: "scale", args :{ scale: s.join("")}}}; - var peg$f23 = function(s, v) { return v}; - var peg$f24 = function(s, ss) { ss.unshift(s); return new PatternStub(ss,"t"); }; - var peg$f25 = function(sg) {return sg}; - var peg$f26 = function(o, soc) { return new OperatorStub(o.name,o.args,soc)}; - var peg$f27 = function(sc) { return sc }; - var peg$f28 = function(c) { return c }; - var peg$f29 = function(v) { return new CommandStub("setcps", { value: v})}; - var peg$f30 = function(v) { return new CommandStub("setcps", { value: (v/120/2)})}; - var peg$f31 = function() { return new CommandStub("hush")}; - + var peg$f10 = function(a) { return { operator : { type_: "degradeBy", arguments_ :{ amount:(a? a : 0.5) } } } }; + var peg$f11 = function(s, o) { return new ElementStub(s, o);}; + var peg$f12 = function(s) { return new PatternStub(s,"h"); }; + var peg$f13 = function(tail) { return { alignment: 'v', list: tail }; }; + var peg$f14 = function(tail) { return { alignment: 'r', list: tail }; }; + var peg$f15 = function(head, tail) { if (tail && tail.list.length > 0) { return new PatternStub([head, ...tail.list], tail.alignment); } else { return head; } }; + var peg$f16 = function(sc) { return sc; }; + var peg$f17 = function(s) { return { name: "struct", args: { sequence:s }}}; + var peg$f18 = function(s) { return { name: "target", args : { name:s}}}; + var peg$f19 = function(p, s, r) { return { name: "bjorklund", args :{ pulse: parseInt(p), step:parseInt(s) }}}; + var peg$f20 = function(a) { return { name: "stretch", args :{ amount: a}}}; + var peg$f21 = function(a) { return { name: "shift", args :{ amount: "-"+a}}}; + var peg$f22 = function(a) { return { name: "shift", args :{ amount: a}}}; + var peg$f23 = function(a) { return { name: "stretch", args :{ amount: "1/"+a}}}; + var peg$f24 = function(s) { return { name: "scale", args :{ scale: s.join("")}}}; + var peg$f25 = function(s, v) { return v}; + var peg$f26 = function(s, ss) { ss.unshift(s); return new PatternStub(ss,"t"); }; + var peg$f27 = function(sg) {return sg}; + var peg$f28 = function(o, soc) { return new OperatorStub(o.name,o.args,soc)}; + var peg$f29 = function(sc) { return sc }; + var peg$f30 = function(c) { return c }; + var peg$f31 = function(v) { return new CommandStub("setcps", { value: v})}; + var peg$f32 = function(v) { return new CommandStub("setcps", { value: (v/120/2)})}; + var peg$f33 = function() { return new CommandStub("hush")}; var peg$currPos = 0; var peg$savedPos = 0; var peg$posDetailsCache = [{ line: 1, column: 1 }]; @@ -737,23 +740,47 @@ function peg$parse(input, options) { return s0; } + function peg$parsepipe() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parsews(); + if (input.charCodeAt(peg$currPos) === 124) { + s2 = peg$c5; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e11); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsews(); + s1 = [s1, s2, s3]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + function peg$parsequote() { var s0; if (input.charCodeAt(peg$currPos) === 34) { - s0 = peg$c5; + s0 = peg$c6; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e11); } + if (peg$silentFails === 0) { peg$fail(peg$e12); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 39) { - s0 = peg$c6; + s0 = peg$c7; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e12); } + if (peg$silentFails === 0) { peg$fail(peg$e13); } } } @@ -768,7 +795,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e13); } + if (peg$silentFails === 0) { peg$fail(peg$e14); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 45) { @@ -780,11 +807,11 @@ function peg$parse(input, options) { } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 35) { - s0 = peg$c7; + s0 = peg$c8; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e14); } + if (peg$silentFails === 0) { peg$fail(peg$e15); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 46) { @@ -796,19 +823,28 @@ function peg$parse(input, options) { } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 94) { - s0 = peg$c8; + s0 = peg$c9; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e15); } + if (peg$silentFails === 0) { peg$fail(peg$e16); } } if (s0 === peg$FAILED) { if (input.charCodeAt(peg$currPos) === 95) { - s0 = peg$c9; + s0 = peg$c10; peg$currPos++; } else { s0 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e16); } + if (peg$silentFails === 0) { peg$fail(peg$e17); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s0 = peg$c11; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e18); } + } } } } @@ -852,23 +888,23 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parsews(); if (input.charCodeAt(peg$currPos) === 91) { - s2 = peg$c10; + s2 = peg$c12; peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e17); } + if (peg$silentFails === 0) { peg$fail(peg$e19); } } if (s2 !== peg$FAILED) { s3 = peg$parsews(); - s4 = peg$parsestack(); + s4 = peg$parsestack_or_choose(); if (s4 !== peg$FAILED) { s5 = peg$parsews(); if (input.charCodeAt(peg$currPos) === 93) { - s6 = peg$c11; + s6 = peg$c13; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e18); } + if (peg$silentFails === 0) { peg$fail(peg$e20); } } if (s6 !== peg$FAILED) { s7 = peg$parsews(); @@ -896,11 +932,11 @@ function peg$parse(input, options) { s0 = peg$currPos; s1 = peg$parsews(); if (input.charCodeAt(peg$currPos) === 60) { - s2 = peg$c12; + s2 = peg$c14; peg$currPos++; } else { s2 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e19); } + if (peg$silentFails === 0) { peg$fail(peg$e21); } } if (s2 !== peg$FAILED) { s3 = peg$parsews(); @@ -908,11 +944,11 @@ function peg$parse(input, options) { if (s4 !== peg$FAILED) { s5 = peg$parsews(); if (input.charCodeAt(peg$currPos) === 62) { - s6 = peg$c13; + s6 = peg$c15; peg$currPos++; } else { s6 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e20); } + if (peg$silentFails === 0) { peg$fail(peg$e22); } } if (s6 !== peg$FAILED) { s7 = peg$parsews(); @@ -962,6 +998,9 @@ function peg$parse(input, options) { s0 = peg$parseslice_fixed_step(); if (s0 === peg$FAILED) { s0 = peg$parseslice_replicate(); + if (s0 === peg$FAILED) { + s0 = peg$parseslice_degrade(); + } } } } @@ -976,11 +1015,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 64) { - s1 = peg$c14; + s1 = peg$c16; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e21); } + if (peg$silentFails === 0) { peg$fail(peg$e23); } } if (s1 !== peg$FAILED) { s2 = peg$parsenumber(); @@ -1004,11 +1043,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 33) { - s1 = peg$c15; + s1 = peg$c17; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e22); } + if (peg$silentFails === 0) { peg$fail(peg$e24); } } if (s1 !== peg$FAILED) { s2 = peg$parsenumber(); @@ -1032,11 +1071,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 40) { - s1 = peg$c16; + s1 = peg$c18; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e23); } + if (peg$silentFails === 0) { peg$fail(peg$e25); } } if (s1 !== peg$FAILED) { s2 = peg$parsews(); @@ -1060,11 +1099,11 @@ function peg$parse(input, options) { } s12 = peg$parsews(); if (input.charCodeAt(peg$currPos) === 41) { - s13 = peg$c17; + s13 = peg$c19; peg$currPos++; } else { s13 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e24); } + if (peg$silentFails === 0) { peg$fail(peg$e26); } } if (s13 !== peg$FAILED) { peg$savedPos = s0; @@ -1098,11 +1137,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 47) { - s1 = peg$c18; + s1 = peg$c20; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e25); } + if (peg$silentFails === 0) { peg$fail(peg$e27); } } if (s1 !== peg$FAILED) { s2 = peg$parsenumber(); @@ -1126,11 +1165,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 42) { - s1 = peg$c19; + s1 = peg$c21; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e26); } + if (peg$silentFails === 0) { peg$fail(peg$e28); } } if (s1 !== peg$FAILED) { s2 = peg$parsenumber(); @@ -1154,11 +1193,11 @@ function peg$parse(input, options) { s0 = peg$currPos; if (input.charCodeAt(peg$currPos) === 37) { - s1 = peg$c20; + s1 = peg$c22; peg$currPos++; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e27); } + if (peg$silentFails === 0) { peg$fail(peg$e29); } } if (s1 !== peg$FAILED) { s2 = peg$parsenumber(); @@ -1177,6 +1216,32 @@ function peg$parse(input, options) { return s0; } + function peg$parseslice_degrade() { + var s0, s1, s2; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 63) { + s1 = peg$c23; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e30); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsenumber(); + if (s2 === peg$FAILED) { + s2 = null; + } + peg$savedPos = s0; + s0 = peg$f10(s2); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + function peg$parseslice_with_modifier() { var s0, s1, s2; @@ -1188,7 +1253,7 @@ function peg$parse(input, options) { s2 = null; } peg$savedPos = s0; - s0 = peg$f10(s1, s2); + s0 = peg$f11(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1213,55 +1278,126 @@ function peg$parse(input, options) { } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f11(s1); + s1 = peg$f12(s1); } s0 = s1; return s0; } - function peg$parsestack() { - var s0, s1, s2, s3, s4, s5; + function peg$parsestack_tail() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsecomma(); + if (s3 !== peg$FAILED) { + s4 = peg$parsesingle_cycle(); + if (s4 !== peg$FAILED) { + s2 = s4; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsecomma(); + if (s3 !== peg$FAILED) { + s4 = peg$parsesingle_cycle(); + if (s4 !== peg$FAILED) { + s2 = s4; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f13(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsechoose_tail() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + s3 = peg$parsepipe(); + if (s3 !== peg$FAILED) { + s4 = peg$parsesingle_cycle(); + if (s4 !== peg$FAILED) { + s2 = s4; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + s3 = peg$parsepipe(); + if (s3 !== peg$FAILED) { + s4 = peg$parsesingle_cycle(); + if (s4 !== peg$FAILED) { + s2 = s4; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$f14(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsestack_or_choose() { + var s0, s1, s2; s0 = peg$currPos; s1 = peg$parsesingle_cycle(); if (s1 !== peg$FAILED) { - s2 = []; - s3 = peg$currPos; - s4 = peg$parsecomma(); - if (s4 !== peg$FAILED) { - s5 = peg$parsesingle_cycle(); - if (s5 !== peg$FAILED) { - peg$savedPos = s3; - s3 = peg$f12(s1, s5); - } else { - peg$currPos = s3; - s3 = peg$FAILED; - } - } else { - peg$currPos = s3; - s3 = peg$FAILED; + s2 = peg$parsestack_tail(); + if (s2 === peg$FAILED) { + s2 = peg$parsechoose_tail(); } - while (s3 !== peg$FAILED) { - s2.push(s3); - s3 = peg$currPos; - s4 = peg$parsecomma(); - if (s4 !== peg$FAILED) { - s5 = peg$parsesingle_cycle(); - if (s5 !== peg$FAILED) { - peg$savedPos = s3; - s3 = peg$f12(s1, s5); - } else { - peg$currPos = s3; - s3 = peg$FAILED; - } - } else { - peg$currPos = s3; - s3 = peg$FAILED; - } + if (s2 === peg$FAILED) { + s2 = null; } peg$savedPos = s0; - s0 = peg$f13(s1, s2); + s0 = peg$f15(s1, s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1277,12 +1413,12 @@ function peg$parse(input, options) { s1 = peg$parsews(); s2 = peg$parsequote(); if (s2 !== peg$FAILED) { - s3 = peg$parsestack(); + s3 = peg$parsestack_or_choose(); if (s3 !== peg$FAILED) { s4 = peg$parsequote(); if (s4 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f14(s3); + s0 = peg$f16(s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1332,19 +1468,19 @@ function peg$parse(input, options) { var s0, s1, s2, s3; s0 = peg$currPos; - if (input.substr(peg$currPos, 6) === peg$c21) { - s1 = peg$c21; + if (input.substr(peg$currPos, 6) === peg$c24) { + s1 = peg$c24; peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e28); } + if (peg$silentFails === 0) { peg$fail(peg$e31); } } if (s1 !== peg$FAILED) { s2 = peg$parsews(); s3 = peg$parsesequence_or_operator(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f15(s3); + s0 = peg$f17(s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1361,12 +1497,12 @@ function peg$parse(input, options) { var s0, s1, s2, s3, s4, s5; s0 = peg$currPos; - if (input.substr(peg$currPos, 6) === peg$c22) { - s1 = peg$c22; + if (input.substr(peg$currPos, 6) === peg$c25) { + s1 = peg$c25; peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e29); } + if (peg$silentFails === 0) { peg$fail(peg$e32); } } if (s1 !== peg$FAILED) { s2 = peg$parsews(); @@ -1377,7 +1513,7 @@ function peg$parse(input, options) { s5 = peg$parsequote(); if (s5 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f16(s4); + s0 = peg$f18(s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1402,12 +1538,12 @@ function peg$parse(input, options) { var s0, s1, s2, s3, s4, s5, s6, s7; s0 = peg$currPos; - if (input.substr(peg$currPos, 6) === peg$c23) { - s1 = peg$c23; + if (input.substr(peg$currPos, 6) === peg$c26) { + s1 = peg$c26; peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e30); } + if (peg$silentFails === 0) { peg$fail(peg$e33); } } if (s1 !== peg$FAILED) { s2 = peg$parsews(); @@ -1422,7 +1558,7 @@ function peg$parse(input, options) { s7 = null; } peg$savedPos = s0; - s0 = peg$f17(s3, s5, s7); + s0 = peg$f19(s3, s5, s7); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1443,70 +1579,12 @@ function peg$parse(input, options) { var s0, s1, s2, s3; s0 = peg$currPos; - if (input.substr(peg$currPos, 4) === peg$c24) { - s1 = peg$c24; + if (input.substr(peg$currPos, 4) === peg$c27) { + s1 = peg$c27; peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e31); } - } - if (s1 !== peg$FAILED) { - s2 = peg$parsews(); - s3 = peg$parsenumber(); - if (s3 !== peg$FAILED) { - peg$savedPos = s0; - s0 = peg$f18(s3); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - return s0; - } - - function peg$parserotL() { - var s0, s1, s2, s3; - - s0 = peg$currPos; - if (input.substr(peg$currPos, 4) === peg$c25) { - s1 = peg$c25; - peg$currPos += 4; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e32); } - } - if (s1 !== peg$FAILED) { - s2 = peg$parsews(); - s3 = peg$parsenumber(); - if (s3 !== peg$FAILED) { - peg$savedPos = s0; - s0 = peg$f19(s3); - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - } else { - peg$currPos = s0; - s0 = peg$FAILED; - } - - return s0; - } - - function peg$parserotR() { - var s0, s1, s2, s3; - - s0 = peg$currPos; - if (input.substr(peg$currPos, 4) === peg$c26) { - s1 = peg$c26; - peg$currPos += 4; - } else { - s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e33); } + if (peg$silentFails === 0) { peg$fail(peg$e34); } } if (s1 !== peg$FAILED) { s2 = peg$parsews(); @@ -1526,16 +1604,16 @@ function peg$parse(input, options) { return s0; } - function peg$parsefast() { + function peg$parserotL() { var s0, s1, s2, s3; s0 = peg$currPos; - if (input.substr(peg$currPos, 4) === peg$c27) { - s1 = peg$c27; + if (input.substr(peg$currPos, 4) === peg$c28) { + s1 = peg$c28; peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e34); } + if (peg$silentFails === 0) { peg$fail(peg$e35); } } if (s1 !== peg$FAILED) { s2 = peg$parsews(); @@ -1555,16 +1633,74 @@ function peg$parse(input, options) { return s0; } + function peg$parserotR() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c29) { + s1 = peg$c29; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e36); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsews(); + s3 = peg$parsenumber(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f22(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsefast() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c30) { + s1 = peg$c30; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$e37); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsews(); + s3 = peg$parsenumber(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s0 = peg$f23(s3); + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + function peg$parsescale() { var s0, s1, s2, s3, s4, s5; s0 = peg$currPos; - if (input.substr(peg$currPos, 5) === peg$c28) { - s1 = peg$c28; + if (input.substr(peg$currPos, 5) === peg$c31) { + s1 = peg$c31; peg$currPos += 5; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e35); } + if (peg$silentFails === 0) { peg$fail(peg$e38); } } if (s1 !== peg$FAILED) { s2 = peg$parsews(); @@ -1584,7 +1720,7 @@ function peg$parse(input, options) { s5 = peg$parsequote(); if (s5 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f22(s4); + s0 = peg$f24(s4); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1609,12 +1745,12 @@ function peg$parse(input, options) { var s0, s1, s2, s3; s0 = peg$currPos; - if (input.substr(peg$currPos, 2) === peg$c29) { - s1 = peg$c29; + if (input.substr(peg$currPos, 2) === peg$c32) { + s1 = peg$c32; peg$currPos += 2; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e36); } + if (peg$silentFails === 0) { peg$fail(peg$e39); } } if (s1 !== peg$FAILED) { s2 = []; @@ -1623,7 +1759,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e37); } + if (peg$silentFails === 0) { peg$fail(peg$e40); } } while (s3 !== peg$FAILED) { s2.push(s3); @@ -1632,7 +1768,7 @@ function peg$parse(input, options) { peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e37); } + if (peg$silentFails === 0) { peg$fail(peg$e40); } } } s1 = [s1, s2]; @@ -1649,21 +1785,21 @@ function peg$parse(input, options) { var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; s0 = peg$currPos; - if (input.substr(peg$currPos, 3) === peg$c30) { - s1 = peg$c30; + if (input.substr(peg$currPos, 3) === peg$c33) { + s1 = peg$c33; peg$currPos += 3; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e38); } + if (peg$silentFails === 0) { peg$fail(peg$e41); } } if (s1 !== peg$FAILED) { s2 = peg$parsews(); if (input.charCodeAt(peg$currPos) === 91) { - s3 = peg$c10; + s3 = peg$c12; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e17); } + if (peg$silentFails === 0) { peg$fail(peg$e19); } } if (s3 !== peg$FAILED) { s4 = peg$parsews(); @@ -1676,7 +1812,7 @@ function peg$parse(input, options) { s9 = peg$parsesequence_or_operator(); if (s9 !== peg$FAILED) { peg$savedPos = s7; - s7 = peg$f23(s5, s9); + s7 = peg$f25(s5, s9); } else { peg$currPos = s7; s7 = peg$FAILED; @@ -1693,7 +1829,7 @@ function peg$parse(input, options) { s9 = peg$parsesequence_or_operator(); if (s9 !== peg$FAILED) { peg$savedPos = s7; - s7 = peg$f23(s5, s9); + s7 = peg$f25(s5, s9); } else { peg$currPos = s7; s7 = peg$FAILED; @@ -1705,15 +1841,15 @@ function peg$parse(input, options) { } s7 = peg$parsews(); if (input.charCodeAt(peg$currPos) === 93) { - s8 = peg$c11; + s8 = peg$c13; peg$currPos++; } else { s8 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e18); } + if (peg$silentFails === 0) { peg$fail(peg$e20); } } if (s8 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f24(s5, s6); + s0 = peg$f26(s5, s6); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1759,7 +1895,7 @@ function peg$parse(input, options) { s4 = peg$parsecomment(); } peg$savedPos = s0; - s0 = peg$f25(s1); + s0 = peg$f27(s1); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1770,18 +1906,18 @@ function peg$parse(input, options) { if (s1 !== peg$FAILED) { s2 = peg$parsews(); if (input.charCodeAt(peg$currPos) === 36) { - s3 = peg$c31; + s3 = peg$c34; peg$currPos++; } else { s3 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e39); } + if (peg$silentFails === 0) { peg$fail(peg$e42); } } if (s3 !== peg$FAILED) { s4 = peg$parsews(); s5 = peg$parsesequence_or_operator(); if (s5 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f26(s1, s5); + s0 = peg$f28(s1, s5); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1806,7 +1942,7 @@ function peg$parse(input, options) { s1 = peg$parsesequence_or_operator(); if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f27(s1); + s1 = peg$f29(s1); } s0 = s1; if (s0 === peg$FAILED) { @@ -1839,7 +1975,7 @@ function peg$parse(input, options) { if (s2 !== peg$FAILED) { s3 = peg$parsews(); peg$savedPos = s0; - s0 = peg$f28(s2); + s0 = peg$f30(s2); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1852,19 +1988,19 @@ function peg$parse(input, options) { var s0, s1, s2, s3; s0 = peg$currPos; - if (input.substr(peg$currPos, 6) === peg$c32) { - s1 = peg$c32; + if (input.substr(peg$currPos, 6) === peg$c35) { + s1 = peg$c35; peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e40); } + if (peg$silentFails === 0) { peg$fail(peg$e43); } } if (s1 !== peg$FAILED) { s2 = peg$parsews(); s3 = peg$parsenumber(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f29(s3); + s0 = peg$f31(s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1881,19 +2017,19 @@ function peg$parse(input, options) { var s0, s1, s2, s3; s0 = peg$currPos; - if (input.substr(peg$currPos, 6) === peg$c33) { - s1 = peg$c33; + if (input.substr(peg$currPos, 6) === peg$c36) { + s1 = peg$c36; peg$currPos += 6; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e41); } + if (peg$silentFails === 0) { peg$fail(peg$e44); } } if (s1 !== peg$FAILED) { s2 = peg$parsews(); s3 = peg$parsenumber(); if (s3 !== peg$FAILED) { peg$savedPos = s0; - s0 = peg$f30(s3); + s0 = peg$f32(s3); } else { peg$currPos = s0; s0 = peg$FAILED; @@ -1910,16 +2046,16 @@ function peg$parse(input, options) { var s0, s1; s0 = peg$currPos; - if (input.substr(peg$currPos, 4) === peg$c34) { - s1 = peg$c34; + if (input.substr(peg$currPos, 4) === peg$c37) { + s1 = peg$c37; peg$currPos += 4; } else { s1 = peg$FAILED; - if (peg$silentFails === 0) { peg$fail(peg$e42); } + if (peg$silentFails === 0) { peg$fail(peg$e45); } } if (s1 !== peg$FAILED) { peg$savedPos = s0; - s1 = peg$f31(); + s1 = peg$f33(); } s0 = s1; @@ -1938,35 +2074,34 @@ function peg$parse(input, options) { } - var PatternStub = function(source, alignment) - { - this.type_ = "pattern"; - this.arguments_ = { alignment : alignment}; - this.source_ = source; - } + var PatternStub = function(source, alignment) + { + this.type_ = "pattern"; + this.arguments_ = { alignment : alignment}; + this.source_ = source; + } - var OperatorStub = function(name, args, source) - { - this.type_ = name; - this.arguments_ = args; - this.source_ = source; - } + var OperatorStub = function(name, args, source) + { + this.type_ = name; + this.arguments_ = args; + this.source_ = source; + } - var ElementStub = function(source, options) - { - this.type_ = "element"; - this.source_ = source; - this.options_ = options; - this.location_ = location(); - } - - var CommandStub = function(name, options) - { - this.type_ = "command"; - this.name_ = name; - this.options_ = options; - } + var ElementStub = function(source, options) + { + this.type_ = "element"; + this.source_ = source; + this.options_ = options; + this.location_ = location(); + } + var CommandStub = function(name, options) + { + this.type_ = "command"; + this.name_ = name; + this.options_ = options; + } peg$result = peg$startRuleFunction(); @@ -1990,5 +2125,6 @@ function peg$parse(input, options) { export { peg$SyntaxError as SyntaxError, + peg$parse as parse }; diff --git a/packages/mini/krill.pegjs b/packages/mini/krill.pegjs index 914855e6..6302614d 100644 --- a/packages/mini/krill.pegjs +++ b/packages/mini/krill.pegjs @@ -8,6 +8,7 @@ This program is free software: you can redistribute it and/or modify it under th // a sequence = a serie of elements placed between quotes // a stack = a serie of vertically aligned slices sharing the same overall length // a slice = a serie of horizontally aligned elements +// a choose = a serie of elements, one of which is chosen at random { @@ -81,17 +82,18 @@ DIGIT = [0-9] // ------------------ delimiters --------------------------- ws "whitespace" = [ \n\r\t]* -comma = ws "," ws; +comma = ws "," ws +pipe = ws "|" ws quote = '"' / "'" // ------------------ steps and cycles --------------------------- // single step definition (e.g bd) -step_char = [0-9a-zA-Z~] / "-" / "#" / "." / "^" / "_" +step_char = [0-9a-zA-Z~] / "-" / "#" / "." / "^" / "_" / ":" step = ws chars:step_char+ ws { return chars.join("") } // define a sub cycle e.g. [1 2, 3 [4]] -sub_cycle = ws "[" ws s:stack ws "]" ws { return s} +sub_cycle = ws "[" ws s:stack_or_choose ws "]" ws { return s} // define a timeline e.g <1 3 [3 5]>. We simply defer to a stack and change the alignement timeline = ws "<" ws sc:single_cycle ws ">" ws @@ -102,7 +104,7 @@ slice = step / sub_cycle / timeline // slice modifier affects the timing/size of a slice (e.g. [a b c]@3) // at this point, we assume we can represent them as regular sequence operators -slice_modifier = slice_weight / slice_bjorklund / slice_slow / slice_fast / slice_fixed_step / slice_replicate +slice_modifier = slice_weight / slice_bjorklund / slice_slow / slice_fast / slice_fixed_step / slice_replicate / slice_degrade slice_weight = "@" a:number { return { weight: a} } @@ -122,6 +124,9 @@ slice_fast = "*"a:number slice_fixed_step = "%"a:number { return { operator : { type_: "fixed-step", arguments_ :{ amount:a } } } } +slice_degrade = "?"a:number? + { return { operator : { type_: "degradeBy", arguments_ :{ amount:(a? a : 0.5) } } } } + // a slice with an modifier applied i.e [bd@4 sd@3]@2 hh] slice_with_modifier = s:slice o:slice_modifier? { return new ElementStub(s, o);} @@ -132,14 +137,22 @@ single_cycle = s:(slice_with_modifier)+ { return new PatternStub(s,"h"); } // a stack is a serie of vertically aligned single cycles, separated by a comma +stack_tail = tail:(comma @single_cycle)+ + { return { alignment: 'v', list: tail }; } + +// a choose is a serie of pipe-separated single cycles, one of which is chosen +// at random each time through the pattern +choose_tail = tail:(pipe @single_cycle)+ + { return { alignment: 'r', list: tail }; } + // if the stack contains only one element, we don't create a stack but return the // underlying element -stack = c:single_cycle cs:(comma v:single_cycle { return v})* - { if (cs.length == 0 && c instanceof Object) { return c;} else { cs.unshift(c); return new PatternStub(cs,"v");} } +stack_or_choose = head:single_cycle tail:(stack_tail / choose_tail)? + { if (tail && tail.list.length > 0) { return new PatternStub([head, ...tail.list], tail.alignment); } else { return head; } } // a sequence is a quoted stack -sequence = ws quote s:stack quote - { return s; } +sequence = ws quote sc:stack_or_choose quote + { return sc; } // ------------------ operators --------------------------- diff --git a/packages/mini/mini.mjs b/packages/mini/mini.mjs index 20971230..82ed4b86 100644 --- a/packages/mini/mini.mjs +++ b/packages/mini/mini.mjs @@ -6,10 +6,17 @@ This program is free software: you can redistribute it and/or modify it under th import * as krill from './krill-parser.js'; import * as strudel from '@strudel.cycles/core'; -import { addMiniLocations } from '@strudel.cycles/eval/shapeshifter.mjs'; +// import { addMiniLocations } from '@strudel.cycles/eval/shapeshifter.mjs'; const { pure, Pattern, Fraction, stack, slowcat, sequence, timeCat, silence, reify } = strudel; +var _seedState = 0; +const randOffset = 0.0002; + +function _nextSeed() { + return _seedState++; +} + const applyOptions = (parent) => (pat, i) => { const ast = parent.source_[i]; const options = ast.options_; @@ -21,6 +28,11 @@ const applyOptions = (parent) => (pat, i) => { return reify(pat).fast(speed); case 'bjorklund': return pat.euclid(operator.arguments_.pulse, operator.arguments_.step, operator.arguments_.rotation); + case 'degradeBy': + return reify(pat)._degradeByWith( + strudel.rand.early(randOffset * _nextSeed()).segment(1), + operator.arguments_.amount, + ); // TODO: case 'fixed-step': "%" } console.warn(`operator "${operator.type_}" not implemented`); @@ -82,6 +94,9 @@ export function patternifyAST(ast) { if (alignment === 'v') { return stack(...children); } + if (alignment === 'r') { + return strudel.chooseInWith(strudel.rand.early(randOffset * _nextSeed()).segment(1), children); + } const weightedChildren = ast.source_.some((child) => !!child.options_?.weight); if (!weightedChildren && alignment === 't') { return slowcat(...children); @@ -100,9 +115,9 @@ export function patternifyAST(ast) { return silence; } if (typeof ast.source_ !== 'object') { - if (!addMiniLocations) { + /* if (!addMiniLocations) { return ast.source_; - } + } */ if (!ast.location_) { console.warn('no location for', ast); return ast.source_; diff --git a/packages/mini/package-lock.json b/packages/mini/package-lock.json new file mode 100644 index 00000000..f98afc84 --- /dev/null +++ b/packages/mini/package-lock.json @@ -0,0 +1,1031 @@ +{ + "name": "@strudel.cycles/mini", + "version": "0.3.3", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@strudel.cycles/mini", + "version": "0.1.3", + "license": "AGPL-3.0-or-later", + "dependencies": { + "@strudel.cycles/core": "^0.1.2", + "@strudel.cycles/eval": "^0.1.3", + "@strudel.cycles/tone": "^0.1.3" + }, + "devDependencies": { + "peggy": "^2.0.1" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@strudel.cycles/core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@strudel.cycles/core/-/core-0.1.2.tgz", + "integrity": "sha512-PdN8NO7lTySuEuPce/fPo6Npl0zAnw7VuvJcmn5qbkKlkgf/cJ+h2+BRvmsvwzv9rOSoc+y1Ioek/00JDlfG9w==", + "dependencies": { + "bjork": "^0.0.1", + "fraction.js": "^4.2.0" + } + }, + "node_modules/@strudel.cycles/eval": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@strudel.cycles/eval/-/eval-0.1.3.tgz", + "integrity": "sha512-FPtmJcWMXHnF9qQVC5zptdWt7wm6DumPDWbPEWLuC75JnLE/kNdEp1/C2PvO3uk1l6eGCSEb+UhH6uUOQ7X8eg==", + "dependencies": { + "@strudel.cycles/core": "^0.1.2", + "estraverse": "^5.3.0", + "shift-ast": "^6.1.0", + "shift-codegen": "^7.0.3", + "shift-parser": "^7.0.3", + "shift-spec": "^2018.0.2", + "shift-traverser": "^1.0.0" + } + }, + "node_modules/@strudel.cycles/tone": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@strudel.cycles/tone/-/tone-0.1.3.tgz", + "integrity": "sha512-4CLENhjizYghnyubYC5m7++d8U1qeCSrK9C71zRnC5kwhRZ72nzdpY45fVZZqA9DTk5E5BQ7NsfC1LoNXlQW8Q==", + "dependencies": { + "@strudel.cycles/core": "^0.1.2", + "@tonejs/piano": "^0.2.1", + "chord-voicings": "^0.0.1", + "tone": "^14.7.77" + } + }, + "node_modules/@tonaljs/abc-notation": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/abc-notation/-/abc-notation-4.6.5.tgz", + "integrity": "sha512-1S0Jnx0NfDLgyhkQOMEHqOacELL6RUdPcWWUP+nAnsOsb9owvB9RKYLSzp5odd16FVUR7U8c/JLc2yxIRvSeJw==", + "dependencies": { + "@tonaljs/core": "^4.6.5" + } + }, + "node_modules/@tonaljs/array": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/array/-/array-4.6.5.tgz", + "integrity": "sha512-7A3DbBQ+qIQ134FqE518b4tJ8V2a15Sn303JjHzgnqZqKrNh/s3wqwkL60F7LKcd09tcp+vIKQP/MYt4xMcRAA==", + "dependencies": { + "@tonaljs/core": "^4.6.5" + } + }, + "node_modules/@tonaljs/chord": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/chord/-/chord-4.6.5.tgz", + "integrity": "sha512-Pjdel4aDVv4kcx9PW6Qozt5BB9nAt13AOExfzKztpgPmlBSy0SKHse7Jp1cA4MGAuLHU8dzVssTFYpCskEFw3w==", + "dependencies": { + "@tonaljs/chord-detect": "^4.6.5", + "@tonaljs/chord-type": "^4.6.5", + "@tonaljs/collection": "^4.6.2", + "@tonaljs/core": "^4.6.5", + "@tonaljs/pcset": "^4.6.5", + "@tonaljs/scale-type": "^4.6.5" + } + }, + "node_modules/@tonaljs/chord-detect": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-detect/-/chord-detect-4.6.5.tgz", + "integrity": "sha512-4xu53UP4kNTfdTNpAAVijhXcQ+ypJqmeMnsST08ZXSjoYfJUhmf5rWDWfz36KOTtNdCA6AbYgdtTYV/Xw0nd/w==", + "dependencies": { + "@tonaljs/chord-type": "^4.6.5", + "@tonaljs/core": "^4.6.5", + "@tonaljs/pcset": "^4.6.5" + } + }, + "node_modules/@tonaljs/chord-type": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-type/-/chord-type-4.6.5.tgz", + "integrity": "sha512-Ol4DDopqpZCF9odosO2i8I+plud3Ul7VWJGNvL+PPCf4Qnwuz87q3aJQDLNoRUz4VyW0u66mq3LyVh6A8kb6Ug==", + "dependencies": { + "@tonaljs/core": "^4.6.5", + "@tonaljs/pcset": "^4.6.5" + } + }, + "node_modules/@tonaljs/collection": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@tonaljs/collection/-/collection-4.6.2.tgz", + "integrity": "sha512-bfPCotLJNB/tG1NrdbsQPLDKZB5jlMs7uPQ6RYKiNkaena3345ZKkbCGl5pj6YTXeDm/oblXiSbFAn7SlLRZdQ==" + }, + "node_modules/@tonaljs/core": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/core/-/core-4.6.5.tgz", + "integrity": "sha512-t7Vx0+L3j/ubQj2AhI1H45D/K745np4DwJjJjXNi5FlGD+TL2wyw50dCwkHKGHsrLDqup1qqP6yN7LBpC6UwNg==" + }, + "node_modules/@tonaljs/duration-value": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@tonaljs/duration-value/-/duration-value-4.6.2.tgz", + "integrity": "sha512-zrXT0L/qsDQ6251Mlqz54vcUbYUB9xb6uJhlxUzc6VauXOt8UOfrdTULubRTXTaBwWt1h8J5n9pXTQmNGzNI9A==" + }, + "node_modules/@tonaljs/interval": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/interval/-/interval-4.6.5.tgz", + "integrity": "sha512-7EDWhqZ7Nnh9oD4ahRYJHLc799ACGxYL4hDHwMKD16B2MgXqPvDeDvwQ31qUuO0ruGz8tMb3FDlgg0Hplowcbw==", + "dependencies": { + "@tonaljs/core": "^4.6.5" + } + }, + "node_modules/@tonaljs/key": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/key/-/key-4.6.5.tgz", + "integrity": "sha512-ZdZWb5IStx6CLRmdEjawR66CqNpoW3EVUua2nVZBMdgnNebWxt4nvgH/ZNvGlCQGFZkUZzRhCfTwqsS6e3OmSA==", + "dependencies": { + "@tonaljs/core": "^4.6.5", + "@tonaljs/note": "^4.6.5", + "@tonaljs/roman-numeral": "^4.6.5" + } + }, + "node_modules/@tonaljs/midi": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/midi/-/midi-4.6.5.tgz", + "integrity": "sha512-fJEZtNvV3M6yW1w+Tep60Rbv5PvuKszQcQzaJS1Loq5mHOKAzdmRfuJSpEpZBiaKEZ1WAMh1QKXYyOd+imyGQg==", + "dependencies": { + "@tonaljs/core": "^4.6.5" + } + }, + "node_modules/@tonaljs/mode": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/mode/-/mode-4.6.5.tgz", + "integrity": "sha512-54iaON1rJ6q8fV5iuei8RGDxYhKBGGxZz3rjAxGSqdTUwBRVOdPqtzOkofThf9gRGYOMhzPp1BMbxbV+UCAPsA==", + "dependencies": { + "@tonaljs/collection": "^4.6.2", + "@tonaljs/core": "^4.6.5", + "@tonaljs/interval": "^4.6.5", + "@tonaljs/pcset": "^4.6.5", + "@tonaljs/scale-type": "^4.6.5" + } + }, + "node_modules/@tonaljs/note": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/note/-/note-4.6.5.tgz", + "integrity": "sha512-Y0/eTzcReXzfcSLLG4k/dLLayqbvh/XYIkybG/QMDyR0BREuJq0Sw+NavbzhTtO0dadIQb/qfe0GFq4k2xS+NQ==", + "dependencies": { + "@tonaljs/core": "^4.6.5", + "@tonaljs/midi": "^4.6.5" + } + }, + "node_modules/@tonaljs/pcset": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/pcset/-/pcset-4.6.5.tgz", + "integrity": "sha512-oWAKflP3cREnUfScqsBzg2LLKNevxSnpDtrq8CPtwOAsrAa8PjQG07NQfhqIiFMjPUdgkDiER3qVA1n8dDwAJA==", + "dependencies": { + "@tonaljs/collection": "^4.6.2", + "@tonaljs/core": "^4.6.5" + } + }, + "node_modules/@tonaljs/progression": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/progression/-/progression-4.6.5.tgz", + "integrity": "sha512-ijYEgMFQG4izHYUw5cRtBRNBuoYzmpGvb/tRiykhJNI6XIjekZEMiMsOMfb1u5q+EGvnVNXRmrluMRDIz2rmRw==", + "dependencies": { + "@tonaljs/chord": "^4.6.5", + "@tonaljs/core": "^4.6.5", + "@tonaljs/roman-numeral": "^4.6.5" + } + }, + "node_modules/@tonaljs/range": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/range/-/range-4.6.5.tgz", + "integrity": "sha512-99cOvVJ3l4X0UJuTSa6qE87JriREnnWIsi3xo1/n7RoqFxnfi8YPh4SfJJyysvHcT18X4EfcTNde9ancMBVu6A==", + "dependencies": { + "@tonaljs/collection": "^4.6.2", + "@tonaljs/midi": "^4.6.5" + } + }, + "node_modules/@tonaljs/roman-numeral": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/roman-numeral/-/roman-numeral-4.6.5.tgz", + "integrity": "sha512-bWYQNZWKmYDDcmbQQNwcWAHfTWanpzmvI0wplrMnGd4x0op5etwUEv+Yzjg0B1ef+E+zcU02Sl0WwRJhaDK3hg==", + "dependencies": { + "@tonaljs/core": "^4.6.5" + } + }, + "node_modules/@tonaljs/scale": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/scale/-/scale-4.6.5.tgz", + "integrity": "sha512-isYDamelOBtcd5bEnJ8QV0Js7jKRwZ0FlFVE/+bUN3wsyo9u6KLL5gMyfH9RKdx74m8lE13JXYTXgKqe+AOa4A==", + "dependencies": { + "@tonaljs/chord-type": "^4.6.5", + "@tonaljs/collection": "^4.6.2", + "@tonaljs/core": "^4.6.5", + "@tonaljs/note": "^4.6.5", + "@tonaljs/pcset": "^4.6.5", + "@tonaljs/scale-type": "^4.6.5" + } + }, + "node_modules/@tonaljs/scale-type": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/scale-type/-/scale-type-4.6.5.tgz", + "integrity": "sha512-rwcDOYf2UifjLJhmuQ8f8bJSeOCMDQJ1lB7lzlqdFxes03OeQhdOEfrT0nPtW8BhBEvq4GMM2NA6CLxX8MTwOQ==", + "dependencies": { + "@tonaljs/core": "^4.6.5", + "@tonaljs/pcset": "^4.6.5" + } + }, + "node_modules/@tonaljs/time-signature": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@tonaljs/time-signature/-/time-signature-4.6.2.tgz", + "integrity": "sha512-OlZY4gdLd21WpMeAI1nS9E9zWcYU6oAzh6ptAUndqmVnFIrIWIWKCkWapdFx8dWdqrX8jqya3m4T33wmeo7w5Q==" + }, + "node_modules/@tonaljs/tonal": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/tonal/-/tonal-4.6.5.tgz", + "integrity": "sha512-lmsWinI9dy7nQyzCEgDVeVAwJtsk4ey05cJZd6oa4QVuSFD+CR8ebaEiwT4/Na+W0kHrKicT3h0uYc2PJIvx5Q==", + "dependencies": { + "@tonaljs/abc-notation": "^4.6.5", + "@tonaljs/array": "^4.6.5", + "@tonaljs/chord": "^4.6.5", + "@tonaljs/chord-type": "^4.6.5", + "@tonaljs/collection": "^4.6.2", + "@tonaljs/core": "^4.6.5", + "@tonaljs/duration-value": "^4.6.2", + "@tonaljs/interval": "^4.6.5", + "@tonaljs/key": "^4.6.5", + "@tonaljs/midi": "^4.6.5", + "@tonaljs/mode": "^4.6.5", + "@tonaljs/note": "^4.6.5", + "@tonaljs/pcset": "^4.6.5", + "@tonaljs/progression": "^4.6.5", + "@tonaljs/range": "^4.6.5", + "@tonaljs/roman-numeral": "^4.6.5", + "@tonaljs/scale": "^4.6.5", + "@tonaljs/scale-type": "^4.6.5", + "@tonaljs/time-signature": "^4.6.2" + } + }, + "node_modules/@tonejs/piano": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@tonejs/piano/-/piano-0.2.1.tgz", + "integrity": "sha512-JIwZ91RSFR7Rt16o7cA7O7G30wenFl0lY5yhTsuwZmn48MO9KV+X7kyXE98Bqvs/dCBVg9PoAJ1GKMabPOW4yQ==", + "dependencies": { + "tslib": "^1.11.1" + }, + "peerDependencies": { + "tone": "^14.6.1", + "webmidi": "^2.5.1" + } + }, + "node_modules/automation-events": { + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-4.0.19.tgz", + "integrity": "sha512-e8ALmWdXSkDAtDVkmqLcCDMfMMvHcPTwsg+1GsxEO8+Cyg7FQs7F3VKifzdRTADVU6S1aqlPzDE3+KLFsH0sxA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=12.20.1" + } + }, + "node_modules/automation-events/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/bjork": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/bjork/-/bjork-0.0.1.tgz", + "integrity": "sha512-IAq1k24hAwuACo82E0NobWh44z2heG4VM0C6c4MxLCDx54Tt4s4tjT8M+0ON4pfXzH2V5Br1tfhhnb19oiMp2w==" + }, + "node_modules/chord-voicings": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/chord-voicings/-/chord-voicings-0.0.1.tgz", + "integrity": "sha512-SutgB/4ynkkuiK6qdQ/k3QvCFcH0Vj8Ch4t6LbRyRQbVzP/TOztiCk3kvXd516UZ6fqk7ijDRELEFcKN+6V8sA==", + "dependencies": { + "@tonaljs/tonal": "^4.6.5" + } + }, + "node_modules/commander": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "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/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/multimap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz", + "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==" + }, + "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/peggy": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/peggy/-/peggy-2.0.1.tgz", + "integrity": "sha512-mBqfmdUAOVn7RILpXTbcRBhLfTR4Go0SresSnivGDdRylBOyVFJncFiVyCNNpPWq8HmgeRleXHs/Go4o8kQVXA==", + "dev": true, + "dependencies": { + "commander": "^9.3.0", + "source-map-generator": "0.8.0" + }, + "bin": { + "peggy": "bin/peggy.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/shift-ast": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.1.0.tgz", + "integrity": "sha512-Vj4XUIJIFPIh6VcBGJ1hjH/kM88XGer94Pr7Rvxa+idEylDsrwtLw268HoxGo5xReL6T3DdRl/9/Pr1XihZ/8Q==" + }, + "node_modules/shift-codegen": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/shift-codegen/-/shift-codegen-7.0.3.tgz", + "integrity": "sha512-dfCVVdBF0qZ6pkajQ3bjxRdNEltyxEITVe7tBJkQt2eCI3znUkSxq0VSe/tTWq1LKHeAS4HuOiqYEuHMFkSq9w==", + "dependencies": { + "esutils": "^2.0.2", + "object-assign": "^4.1.0", + "shift-reducer": "6.0.0" + } + }, + "node_modules/shift-parser": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/shift-parser/-/shift-parser-7.0.3.tgz", + "integrity": "sha512-uYX2ORyZfKZrUc4iKKkO9KOhzUSxCrSBk7QK6ZmShId+BOo1gh1IwecVy97ynyOTpmhPWUttjC8BzsnQl65Zew==", + "dependencies": { + "multimap": "^1.0.2", + "shift-ast": "6.0.0", + "shift-reducer": "6.0.0", + "shift-regexp-acceptor": "2.0.3" + } + }, + "node_modules/shift-parser/node_modules/shift-ast": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.0.0.tgz", + "integrity": "sha512-XXxDcEBWVBzqWXfNYJlLyJ1/9kMvOXVRXiqPjkOrTCC5qRsBvEMJMRLLFhU3tn8ue56Y7IZyBE6bexFum5QLUw==" + }, + "node_modules/shift-reducer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/shift-reducer/-/shift-reducer-6.0.0.tgz", + "integrity": "sha512-2rJraRP8drIOjvaE/sALa+0tGJmMVUzlmS3wIJerJbaYuCjpFAiF0WjkTOFVtz1144Nm/ECmqeG+7yRhuMVsMg==", + "dependencies": { + "shift-ast": "6.0.0" + } + }, + "node_modules/shift-reducer/node_modules/shift-ast": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.0.0.tgz", + "integrity": "sha512-XXxDcEBWVBzqWXfNYJlLyJ1/9kMvOXVRXiqPjkOrTCC5qRsBvEMJMRLLFhU3tn8ue56Y7IZyBE6bexFum5QLUw==" + }, + "node_modules/shift-regexp-acceptor": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/shift-regexp-acceptor/-/shift-regexp-acceptor-2.0.3.tgz", + "integrity": "sha512-sxL7e5JNUFxm+gutFRXktX2D6KVgDAHNuDsk5XHB9Z+N5yXooZG6pdZ1GEbo3Jz6lF7ETYLBC4WAjIFm2RKTmA==", + "dependencies": { + "unicode-match-property-ecmascript": "1.0.4", + "unicode-match-property-value-ecmascript": "1.0.2", + "unicode-property-aliases-ecmascript": "1.0.4" + } + }, + "node_modules/shift-spec": { + "version": "2018.0.2", + "resolved": "https://registry.npmjs.org/shift-spec/-/shift-spec-2018.0.2.tgz", + "integrity": "sha512-5CP/cKDEim4rZ6ViCSipTLY2U7HJr8q/kpDuCBmebFqbx/0DeozWO+9ienHmYjgGLDfHrqj+LBAN67FRK2vE6w==" + }, + "node_modules/shift-traverser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shift-traverser/-/shift-traverser-1.0.0.tgz", + "integrity": "sha512-DMY3512wJbdC+IC+nhLH3/Stgr2BbxbNcg7qyZ6+e5qNnNs8TBQJWdMsRgHlX1JXwF4C0ONKS8VUxsPT0Tf7aw==", + "dependencies": { + "estraverse": "4.2.0", + "shift-spec": "2018.0.0" + } + }, + "node_modules/shift-traverser/node_modules/estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha512-VHvyaGnJy+FuGfcfaM7W7OZw4mQiKW73jPHwQXx2VnMSUBajYmytOT5sKEfsBvNPtGX6YDwcrGDz2eocoHg0JA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shift-traverser/node_modules/shift-spec": { + "version": "2018.0.0", + "resolved": "https://registry.npmjs.org/shift-spec/-/shift-spec-2018.0.0.tgz", + "integrity": "sha512-/aiPOkj7dbe+CV2VZhIMTHQToZmgniofpRG7Yr7x2/0sO6CSVC++py1Wzf+s+rWSTDHKcLvziVAxjRRV4i4EoQ==" + }, + "node_modules/source-map-generator": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/source-map-generator/-/source-map-generator-0.8.0.tgz", + "integrity": "sha512-psgxdGMwl5MZM9S3FWee4EgsEaIjahYV5AzGnwUvPhWeITz/j6rKpysQHlQ4USdxvINlb8lKfWGIXwfkrgtqkA==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/standardized-audio-context": { + "version": "25.3.28", + "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.28.tgz", + "integrity": "sha512-w3TIDQ2z5iA76A3qFjL/knf45BAwHYAqQmDNlDrlE2El89kFKv43TjiN94N0joiMr7G3CRmO1bOuQ7wopDon9g==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "automation-events": "^4.0.19", + "tslib": "^2.4.0" + } + }, + "node_modules/standardized-audio-context/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/tone": { + "version": "14.7.77", + "resolved": "https://registry.npmjs.org/tone/-/tone-14.7.77.tgz", + "integrity": "sha512-tCfK73IkLHyzoKUvGq47gyDyxiKLFvKiVCOobynGgBB9Dl0NkxTM2p+eRJXyCYrjJwy9Y0XCMqD3uOYsYt2Fdg==", + "dependencies": { + "standardized-audio-context": "^25.1.8", + "tslib": "^2.0.1" + } + }, + "node_modules/tone/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "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/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", + "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", + "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/webmidi": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/webmidi/-/webmidi-2.5.3.tgz", + "integrity": "sha512-PyMGvKcDGpvbQUfnmBORQJciyG3VAZ4aHlGy1iRZ3uEs4kG4HCvI7KRthUpM1vuHDPL98lidRIUaoRomkJtWtg==", + "peer": true, + "engines": { + "node": ">0.6.x" + } + } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@strudel.cycles/core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@strudel.cycles/core/-/core-0.1.2.tgz", + "integrity": "sha512-PdN8NO7lTySuEuPce/fPo6Npl0zAnw7VuvJcmn5qbkKlkgf/cJ+h2+BRvmsvwzv9rOSoc+y1Ioek/00JDlfG9w==", + "requires": { + "bjork": "^0.0.1", + "fraction.js": "^4.2.0" + } + }, + "@strudel.cycles/eval": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@strudel.cycles/eval/-/eval-0.1.3.tgz", + "integrity": "sha512-FPtmJcWMXHnF9qQVC5zptdWt7wm6DumPDWbPEWLuC75JnLE/kNdEp1/C2PvO3uk1l6eGCSEb+UhH6uUOQ7X8eg==", + "requires": { + "@strudel.cycles/core": "^0.1.2", + "estraverse": "^5.3.0", + "shift-ast": "^6.1.0", + "shift-codegen": "^7.0.3", + "shift-parser": "^7.0.3", + "shift-spec": "^2018.0.2", + "shift-traverser": "^1.0.0" + } + }, + "@strudel.cycles/tone": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@strudel.cycles/tone/-/tone-0.1.3.tgz", + "integrity": "sha512-4CLENhjizYghnyubYC5m7++d8U1qeCSrK9C71zRnC5kwhRZ72nzdpY45fVZZqA9DTk5E5BQ7NsfC1LoNXlQW8Q==", + "requires": { + "@strudel.cycles/core": "^0.1.2", + "@tonejs/piano": "^0.2.1", + "chord-voicings": "^0.0.1", + "tone": "^14.7.77" + } + }, + "@tonaljs/abc-notation": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/abc-notation/-/abc-notation-4.6.5.tgz", + "integrity": "sha512-1S0Jnx0NfDLgyhkQOMEHqOacELL6RUdPcWWUP+nAnsOsb9owvB9RKYLSzp5odd16FVUR7U8c/JLc2yxIRvSeJw==", + "requires": { + "@tonaljs/core": "^4.6.5" + } + }, + "@tonaljs/array": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/array/-/array-4.6.5.tgz", + "integrity": "sha512-7A3DbBQ+qIQ134FqE518b4tJ8V2a15Sn303JjHzgnqZqKrNh/s3wqwkL60F7LKcd09tcp+vIKQP/MYt4xMcRAA==", + "requires": { + "@tonaljs/core": "^4.6.5" + } + }, + "@tonaljs/chord": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/chord/-/chord-4.6.5.tgz", + "integrity": "sha512-Pjdel4aDVv4kcx9PW6Qozt5BB9nAt13AOExfzKztpgPmlBSy0SKHse7Jp1cA4MGAuLHU8dzVssTFYpCskEFw3w==", + "requires": { + "@tonaljs/chord-detect": "^4.6.5", + "@tonaljs/chord-type": "^4.6.5", + "@tonaljs/collection": "^4.6.2", + "@tonaljs/core": "^4.6.5", + "@tonaljs/pcset": "^4.6.5", + "@tonaljs/scale-type": "^4.6.5" + } + }, + "@tonaljs/chord-detect": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-detect/-/chord-detect-4.6.5.tgz", + "integrity": "sha512-4xu53UP4kNTfdTNpAAVijhXcQ+ypJqmeMnsST08ZXSjoYfJUhmf5rWDWfz36KOTtNdCA6AbYgdtTYV/Xw0nd/w==", + "requires": { + "@tonaljs/chord-type": "^4.6.5", + "@tonaljs/core": "^4.6.5", + "@tonaljs/pcset": "^4.6.5" + } + }, + "@tonaljs/chord-type": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/chord-type/-/chord-type-4.6.5.tgz", + "integrity": "sha512-Ol4DDopqpZCF9odosO2i8I+plud3Ul7VWJGNvL+PPCf4Qnwuz87q3aJQDLNoRUz4VyW0u66mq3LyVh6A8kb6Ug==", + "requires": { + "@tonaljs/core": "^4.6.5", + "@tonaljs/pcset": "^4.6.5" + } + }, + "@tonaljs/collection": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@tonaljs/collection/-/collection-4.6.2.tgz", + "integrity": "sha512-bfPCotLJNB/tG1NrdbsQPLDKZB5jlMs7uPQ6RYKiNkaena3345ZKkbCGl5pj6YTXeDm/oblXiSbFAn7SlLRZdQ==" + }, + "@tonaljs/core": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/core/-/core-4.6.5.tgz", + "integrity": "sha512-t7Vx0+L3j/ubQj2AhI1H45D/K745np4DwJjJjXNi5FlGD+TL2wyw50dCwkHKGHsrLDqup1qqP6yN7LBpC6UwNg==" + }, + "@tonaljs/duration-value": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@tonaljs/duration-value/-/duration-value-4.6.2.tgz", + "integrity": "sha512-zrXT0L/qsDQ6251Mlqz54vcUbYUB9xb6uJhlxUzc6VauXOt8UOfrdTULubRTXTaBwWt1h8J5n9pXTQmNGzNI9A==" + }, + "@tonaljs/interval": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/interval/-/interval-4.6.5.tgz", + "integrity": "sha512-7EDWhqZ7Nnh9oD4ahRYJHLc799ACGxYL4hDHwMKD16B2MgXqPvDeDvwQ31qUuO0ruGz8tMb3FDlgg0Hplowcbw==", + "requires": { + "@tonaljs/core": "^4.6.5" + } + }, + "@tonaljs/key": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/key/-/key-4.6.5.tgz", + "integrity": "sha512-ZdZWb5IStx6CLRmdEjawR66CqNpoW3EVUua2nVZBMdgnNebWxt4nvgH/ZNvGlCQGFZkUZzRhCfTwqsS6e3OmSA==", + "requires": { + "@tonaljs/core": "^4.6.5", + "@tonaljs/note": "^4.6.5", + "@tonaljs/roman-numeral": "^4.6.5" + } + }, + "@tonaljs/midi": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/midi/-/midi-4.6.5.tgz", + "integrity": "sha512-fJEZtNvV3M6yW1w+Tep60Rbv5PvuKszQcQzaJS1Loq5mHOKAzdmRfuJSpEpZBiaKEZ1WAMh1QKXYyOd+imyGQg==", + "requires": { + "@tonaljs/core": "^4.6.5" + } + }, + "@tonaljs/mode": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/mode/-/mode-4.6.5.tgz", + "integrity": "sha512-54iaON1rJ6q8fV5iuei8RGDxYhKBGGxZz3rjAxGSqdTUwBRVOdPqtzOkofThf9gRGYOMhzPp1BMbxbV+UCAPsA==", + "requires": { + "@tonaljs/collection": "^4.6.2", + "@tonaljs/core": "^4.6.5", + "@tonaljs/interval": "^4.6.5", + "@tonaljs/pcset": "^4.6.5", + "@tonaljs/scale-type": "^4.6.5" + } + }, + "@tonaljs/note": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/note/-/note-4.6.5.tgz", + "integrity": "sha512-Y0/eTzcReXzfcSLLG4k/dLLayqbvh/XYIkybG/QMDyR0BREuJq0Sw+NavbzhTtO0dadIQb/qfe0GFq4k2xS+NQ==", + "requires": { + "@tonaljs/core": "^4.6.5", + "@tonaljs/midi": "^4.6.5" + } + }, + "@tonaljs/pcset": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/pcset/-/pcset-4.6.5.tgz", + "integrity": "sha512-oWAKflP3cREnUfScqsBzg2LLKNevxSnpDtrq8CPtwOAsrAa8PjQG07NQfhqIiFMjPUdgkDiER3qVA1n8dDwAJA==", + "requires": { + "@tonaljs/collection": "^4.6.2", + "@tonaljs/core": "^4.6.5" + } + }, + "@tonaljs/progression": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/progression/-/progression-4.6.5.tgz", + "integrity": "sha512-ijYEgMFQG4izHYUw5cRtBRNBuoYzmpGvb/tRiykhJNI6XIjekZEMiMsOMfb1u5q+EGvnVNXRmrluMRDIz2rmRw==", + "requires": { + "@tonaljs/chord": "^4.6.5", + "@tonaljs/core": "^4.6.5", + "@tonaljs/roman-numeral": "^4.6.5" + } + }, + "@tonaljs/range": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/range/-/range-4.6.5.tgz", + "integrity": "sha512-99cOvVJ3l4X0UJuTSa6qE87JriREnnWIsi3xo1/n7RoqFxnfi8YPh4SfJJyysvHcT18X4EfcTNde9ancMBVu6A==", + "requires": { + "@tonaljs/collection": "^4.6.2", + "@tonaljs/midi": "^4.6.5" + } + }, + "@tonaljs/roman-numeral": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/roman-numeral/-/roman-numeral-4.6.5.tgz", + "integrity": "sha512-bWYQNZWKmYDDcmbQQNwcWAHfTWanpzmvI0wplrMnGd4x0op5etwUEv+Yzjg0B1ef+E+zcU02Sl0WwRJhaDK3hg==", + "requires": { + "@tonaljs/core": "^4.6.5" + } + }, + "@tonaljs/scale": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/scale/-/scale-4.6.5.tgz", + "integrity": "sha512-isYDamelOBtcd5bEnJ8QV0Js7jKRwZ0FlFVE/+bUN3wsyo9u6KLL5gMyfH9RKdx74m8lE13JXYTXgKqe+AOa4A==", + "requires": { + "@tonaljs/chord-type": "^4.6.5", + "@tonaljs/collection": "^4.6.2", + "@tonaljs/core": "^4.6.5", + "@tonaljs/note": "^4.6.5", + "@tonaljs/pcset": "^4.6.5", + "@tonaljs/scale-type": "^4.6.5" + } + }, + "@tonaljs/scale-type": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/scale-type/-/scale-type-4.6.5.tgz", + "integrity": "sha512-rwcDOYf2UifjLJhmuQ8f8bJSeOCMDQJ1lB7lzlqdFxes03OeQhdOEfrT0nPtW8BhBEvq4GMM2NA6CLxX8MTwOQ==", + "requires": { + "@tonaljs/core": "^4.6.5", + "@tonaljs/pcset": "^4.6.5" + } + }, + "@tonaljs/time-signature": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@tonaljs/time-signature/-/time-signature-4.6.2.tgz", + "integrity": "sha512-OlZY4gdLd21WpMeAI1nS9E9zWcYU6oAzh6ptAUndqmVnFIrIWIWKCkWapdFx8dWdqrX8jqya3m4T33wmeo7w5Q==" + }, + "@tonaljs/tonal": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/@tonaljs/tonal/-/tonal-4.6.5.tgz", + "integrity": "sha512-lmsWinI9dy7nQyzCEgDVeVAwJtsk4ey05cJZd6oa4QVuSFD+CR8ebaEiwT4/Na+W0kHrKicT3h0uYc2PJIvx5Q==", + "requires": { + "@tonaljs/abc-notation": "^4.6.5", + "@tonaljs/array": "^4.6.5", + "@tonaljs/chord": "^4.6.5", + "@tonaljs/chord-type": "^4.6.5", + "@tonaljs/collection": "^4.6.2", + "@tonaljs/core": "^4.6.5", + "@tonaljs/duration-value": "^4.6.2", + "@tonaljs/interval": "^4.6.5", + "@tonaljs/key": "^4.6.5", + "@tonaljs/midi": "^4.6.5", + "@tonaljs/mode": "^4.6.5", + "@tonaljs/note": "^4.6.5", + "@tonaljs/pcset": "^4.6.5", + "@tonaljs/progression": "^4.6.5", + "@tonaljs/range": "^4.6.5", + "@tonaljs/roman-numeral": "^4.6.5", + "@tonaljs/scale": "^4.6.5", + "@tonaljs/scale-type": "^4.6.5", + "@tonaljs/time-signature": "^4.6.2" + } + }, + "@tonejs/piano": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@tonejs/piano/-/piano-0.2.1.tgz", + "integrity": "sha512-JIwZ91RSFR7Rt16o7cA7O7G30wenFl0lY5yhTsuwZmn48MO9KV+X7kyXE98Bqvs/dCBVg9PoAJ1GKMabPOW4yQ==", + "requires": { + "tslib": "^1.11.1" + } + }, + "automation-events": { + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-4.0.19.tgz", + "integrity": "sha512-e8ALmWdXSkDAtDVkmqLcCDMfMMvHcPTwsg+1GsxEO8+Cyg7FQs7F3VKifzdRTADVU6S1aqlPzDE3+KLFsH0sxA==", + "requires": { + "@babel/runtime": "^7.18.3", + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "bjork": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/bjork/-/bjork-0.0.1.tgz", + "integrity": "sha512-IAq1k24hAwuACo82E0NobWh44z2heG4VM0C6c4MxLCDx54Tt4s4tjT8M+0ON4pfXzH2V5Br1tfhhnb19oiMp2w==" + }, + "chord-voicings": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/chord-voicings/-/chord-voicings-0.0.1.tgz", + "integrity": "sha512-SutgB/4ynkkuiK6qdQ/k3QvCFcH0Vj8Ch4t6LbRyRQbVzP/TOztiCk3kvXd516UZ6fqk7ijDRELEFcKN+6V8sA==", + "requires": { + "@tonaljs/tonal": "^4.6.5" + } + }, + "commander": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + }, + "multimap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz", + "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==" + }, + "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==" + }, + "peggy": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/peggy/-/peggy-2.0.1.tgz", + "integrity": "sha512-mBqfmdUAOVn7RILpXTbcRBhLfTR4Go0SresSnivGDdRylBOyVFJncFiVyCNNpPWq8HmgeRleXHs/Go4o8kQVXA==", + "dev": true, + "requires": { + "commander": "^9.3.0", + "source-map-generator": "0.8.0" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "shift-ast": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.1.0.tgz", + "integrity": "sha512-Vj4XUIJIFPIh6VcBGJ1hjH/kM88XGer94Pr7Rvxa+idEylDsrwtLw268HoxGo5xReL6T3DdRl/9/Pr1XihZ/8Q==" + }, + "shift-codegen": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/shift-codegen/-/shift-codegen-7.0.3.tgz", + "integrity": "sha512-dfCVVdBF0qZ6pkajQ3bjxRdNEltyxEITVe7tBJkQt2eCI3znUkSxq0VSe/tTWq1LKHeAS4HuOiqYEuHMFkSq9w==", + "requires": { + "esutils": "^2.0.2", + "object-assign": "^4.1.0", + "shift-reducer": "6.0.0" + } + }, + "shift-parser": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/shift-parser/-/shift-parser-7.0.3.tgz", + "integrity": "sha512-uYX2ORyZfKZrUc4iKKkO9KOhzUSxCrSBk7QK6ZmShId+BOo1gh1IwecVy97ynyOTpmhPWUttjC8BzsnQl65Zew==", + "requires": { + "multimap": "^1.0.2", + "shift-ast": "6.0.0", + "shift-reducer": "6.0.0", + "shift-regexp-acceptor": "2.0.3" + }, + "dependencies": { + "shift-ast": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.0.0.tgz", + "integrity": "sha512-XXxDcEBWVBzqWXfNYJlLyJ1/9kMvOXVRXiqPjkOrTCC5qRsBvEMJMRLLFhU3tn8ue56Y7IZyBE6bexFum5QLUw==" + } + } + }, + "shift-reducer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/shift-reducer/-/shift-reducer-6.0.0.tgz", + "integrity": "sha512-2rJraRP8drIOjvaE/sALa+0tGJmMVUzlmS3wIJerJbaYuCjpFAiF0WjkTOFVtz1144Nm/ECmqeG+7yRhuMVsMg==", + "requires": { + "shift-ast": "6.0.0" + }, + "dependencies": { + "shift-ast": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/shift-ast/-/shift-ast-6.0.0.tgz", + "integrity": "sha512-XXxDcEBWVBzqWXfNYJlLyJ1/9kMvOXVRXiqPjkOrTCC5qRsBvEMJMRLLFhU3tn8ue56Y7IZyBE6bexFum5QLUw==" + } + } + }, + "shift-regexp-acceptor": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/shift-regexp-acceptor/-/shift-regexp-acceptor-2.0.3.tgz", + "integrity": "sha512-sxL7e5JNUFxm+gutFRXktX2D6KVgDAHNuDsk5XHB9Z+N5yXooZG6pdZ1GEbo3Jz6lF7ETYLBC4WAjIFm2RKTmA==", + "requires": { + "unicode-match-property-ecmascript": "1.0.4", + "unicode-match-property-value-ecmascript": "1.0.2", + "unicode-property-aliases-ecmascript": "1.0.4" + } + }, + "shift-spec": { + "version": "2018.0.2", + "resolved": "https://registry.npmjs.org/shift-spec/-/shift-spec-2018.0.2.tgz", + "integrity": "sha512-5CP/cKDEim4rZ6ViCSipTLY2U7HJr8q/kpDuCBmebFqbx/0DeozWO+9ienHmYjgGLDfHrqj+LBAN67FRK2vE6w==" + }, + "shift-traverser": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shift-traverser/-/shift-traverser-1.0.0.tgz", + "integrity": "sha512-DMY3512wJbdC+IC+nhLH3/Stgr2BbxbNcg7qyZ6+e5qNnNs8TBQJWdMsRgHlX1JXwF4C0ONKS8VUxsPT0Tf7aw==", + "requires": { + "estraverse": "4.2.0", + "shift-spec": "2018.0.0" + }, + "dependencies": { + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha512-VHvyaGnJy+FuGfcfaM7W7OZw4mQiKW73jPHwQXx2VnMSUBajYmytOT5sKEfsBvNPtGX6YDwcrGDz2eocoHg0JA==" + }, + "shift-spec": { + "version": "2018.0.0", + "resolved": "https://registry.npmjs.org/shift-spec/-/shift-spec-2018.0.0.tgz", + "integrity": "sha512-/aiPOkj7dbe+CV2VZhIMTHQToZmgniofpRG7Yr7x2/0sO6CSVC++py1Wzf+s+rWSTDHKcLvziVAxjRRV4i4EoQ==" + } + } + }, + "source-map-generator": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/source-map-generator/-/source-map-generator-0.8.0.tgz", + "integrity": "sha512-psgxdGMwl5MZM9S3FWee4EgsEaIjahYV5AzGnwUvPhWeITz/j6rKpysQHlQ4USdxvINlb8lKfWGIXwfkrgtqkA==", + "dev": true + }, + "standardized-audio-context": { + "version": "25.3.28", + "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.28.tgz", + "integrity": "sha512-w3TIDQ2z5iA76A3qFjL/knf45BAwHYAqQmDNlDrlE2El89kFKv43TjiN94N0joiMr7G3CRmO1bOuQ7wopDon9g==", + "requires": { + "@babel/runtime": "^7.18.3", + "automation-events": "^4.0.19", + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "tone": { + "version": "14.7.77", + "resolved": "https://registry.npmjs.org/tone/-/tone-14.7.77.tgz", + "integrity": "sha512-tCfK73IkLHyzoKUvGq47gyDyxiKLFvKiVCOobynGgBB9Dl0NkxTM2p+eRJXyCYrjJwy9Y0XCMqD3uOYsYt2Fdg==", + "requires": { + "standardized-audio-context": "^25.1.8", + "tslib": "^2.0.1" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", + "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", + "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==" + }, + "webmidi": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/webmidi/-/webmidi-2.5.3.tgz", + "integrity": "sha512-PyMGvKcDGpvbQUfnmBORQJciyG3VAZ4aHlGy1iRZ3uEs4kG4HCvI7KRthUpM1vuHDPL98lidRIUaoRomkJtWtg==", + "peer": true + } + } +} diff --git a/packages/mini/package.json b/packages/mini/package.json index 4eb52c4f..4d583603 100644 --- a/packages/mini/package.json +++ b/packages/mini/package.json @@ -1,11 +1,12 @@ { "name": "@strudel.cycles/mini", - "version": "0.1.1", + "version": "0.3.3", "description": "Mini notation for strudel", "main": "index.mjs", "type": "module", "scripts": { - "test": "mocha --colors" + "test": "vitest run", + "build:parser": "peggy -o krill-parser.js --format es ./krill.pegjs" }, "repository": { "type": "git", @@ -25,8 +26,11 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.1.0", - "@strudel.cycles/eval": "^0.1.1", - "@strudel.cycles/tone": "^0.1.1" + "@strudel.cycles/core": "^0.3.2", + "@strudel.cycles/eval": "^0.3.2", + "@strudel.cycles/tone": "^0.3.3" + }, + "devDependencies": { + "peggy": "^2.0.1" } } diff --git a/packages/mini/test/mini.test.mjs b/packages/mini/test/mini.test.mjs index baf34314..cdc19995 100644 --- a/packages/mini/test/mini.test.mjs +++ b/packages/mini/test/mini.test.mjs @@ -4,50 +4,104 @@ Copyright (C) 2022 Strudel contributors - see . */ -import { strict as assert } from 'assert'; import { mini } from '../mini.mjs'; import '@strudel.cycles/core/euclid.mjs'; +import { describe, expect, it } from 'vitest'; describe('mini', () => { const minV = (v) => mini(v)._firstCycleValues; const minS = (v) => mini(v)._showFirstCycle; it('supports single elements', () => { - assert.deepStrictEqual(minV('a'), ['a']); + expect(minV('a')).toEqual(['a']); }); it('supports rest', () => { - assert.deepStrictEqual(minV('~'), []); + expect(minV('~')).toEqual([]); }); it('supports cat', () => { - assert.deepStrictEqual(minS('a b'), ['a: 0 - 1/2', 'b: 1/2 - 1']); - assert.deepStrictEqual(minS('a b c'), ['a: 0 - 1/3', 'b: 1/3 - 2/3', 'c: 2/3 - 1']); + expect(minS('a b')).toEqual(['a: 0 - 1/2', 'b: 1/2 - 1']); + expect(minS('a b c')).toEqual(['a: 0 - 1/3', 'b: 1/3 - 2/3', 'c: 2/3 - 1']); }); it('supports slowcat', () => { - assert.deepStrictEqual(minV('
'), ['a']); + expect(minV('')).toEqual(['a']); }); it('supports division', () => { - assert.deepStrictEqual(minS('a/2'), ['a: 0 - 2']); - assert.deepStrictEqual(minS('[c3 d3]/2'), ['c3: 0 - 1']); + expect(minS('a/2')).toEqual(['a: 0 - 2']); + expect(minS('[c3 d3]/2')).toEqual(['c3: 0 - 1']); }); it('supports multiplication', () => { - assert.deepStrictEqual(minS('c3*2'), ['c3: 0 - 1/2', 'c3: 1/2 - 1']); - assert.deepStrictEqual(minV('[c3 d3]*2'), ['c3', 'd3', 'c3', 'd3']); + expect(minS('c3*2')).toEqual(['c3: 0 - 1/2', 'c3: 1/2 - 1']); + expect(minV('[c3 d3]*2')).toEqual(['c3', 'd3', 'c3', 'd3']); }); it('supports brackets', () => { - assert.deepStrictEqual(minS('c3 [d3 e3]'), ['c3: 0 - 1/2', 'd3: 1/2 - 3/4', 'e3: 3/4 - 1']); - assert.deepStrictEqual(minS('c3 [d3 [e3 f3]]'), ['c3: 0 - 1/2', 'd3: 1/2 - 3/4', 'e3: 3/4 - 7/8', 'f3: 7/8 - 1']); + expect(minS('c3 [d3 e3]')).toEqual(['c3: 0 - 1/2', 'd3: 1/2 - 3/4', 'e3: 3/4 - 1']); + expect(minS('c3 [d3 [e3 f3]]')).toEqual(['c3: 0 - 1/2', 'd3: 1/2 - 3/4', 'e3: 3/4 - 7/8', 'f3: 7/8 - 1']); }); it('supports commas', () => { - assert.deepStrictEqual(minS('c3,e3,g3'), ['c3: 0 - 1', 'e3: 0 - 1', 'g3: 0 - 1']); - assert.deepStrictEqual(minS('[c3,e3,g3] f3'), ['c3: 0 - 1/2', 'e3: 0 - 1/2', 'g3: 0 - 1/2', 'f3: 1/2 - 1']); + expect(minS('c3,e3,g3')).toEqual(['c3: 0 - 1', 'e3: 0 - 1', 'g3: 0 - 1']); + expect(minS('[c3,e3,g3] f3')).toEqual(['c3: 0 - 1/2', 'e3: 0 - 1/2', 'g3: 0 - 1/2', 'f3: 1/2 - 1']); }); it('supports elongation', () => { - assert.deepStrictEqual(minS('a@3 b'), ['a: 0 - 3/4', 'b: 3/4 - 1']); - assert.deepStrictEqual(minS('a@2 b@3'), ['a: 0 - 2/5', 'b: 2/5 - 1']); + expect(minS('a@3 b')).toEqual(['a: 0 - 3/4', 'b: 3/4 - 1']); + expect(minS('a@2 b@3')).toEqual(['a: 0 - 2/5', 'b: 2/5 - 1']); }); it('supports replication', () => { - assert.deepStrictEqual(minS('a!3 b'), ['a: 0 - 1/4', 'a: 1/4 - 1/2', 'a: 1/2 - 3/4', 'b: 3/4 - 1']); + expect(minS('a!3 b')).toEqual(['a: 0 - 1/4', 'a: 1/4 - 1/2', 'a: 1/2 - 3/4', 'b: 3/4 - 1']); }); it('supports euclidean rhythms', () => { - assert.deepStrictEqual(minS('a(3, 8)'), ['a: 0 - 1/8', 'a: 3/8 - 1/2', 'a: 3/4 - 7/8']); + expect(minS('a(3, 8)')).toEqual(['a: 0 - 1/8', 'a: 3/8 - 1/2', 'a: 3/4 - 7/8']); + }); + it('supports the ? operator', () => { + expect( + mini('a?') + .queryArc(0, 20) + .map((hap) => hap.whole.begin), + ).toEqual( + mini('a') + .degradeBy(0.5) + .queryArc(0, 20) + .map((hap) => hap.whole.begin), + ); + }); + // testing things that involve pseudo-randomness, so there's a probability we could fail by chance. + // these next few tests work with the current PRNG, and are intended to succeed with p > 0.99 even if the PRNG changes + // (as long as the PRNG has a relatively-uniform distribution of values) + it('supports degradeBy with default of 50%', () => { + const haps = mini('a?').queryArc(0, 1000); + expect(459 <= haps.length && haps.length <= 541).toBe(true); + // 'Number of elements did not fall in 99% confidence interval for binomial with p=0.5', + }); + it('supports degradeBy with an argument', () => { + const haps = mini('a?0.8').queryArc(0, 1000); + expect(haps.length > 0).toBe(true); + // 'Should have had at least one element when degradeBy was set at 0.8'); + expect(haps.length < 230).toBe(true); + // 'Had too many cycles remaining after degradeBy 0.8'); + }); + it('supports the random choice operator ("|") with nesting', () => { + const numCycles = 900; + const haps = mini('a | [b | c] | [d | e | f]').queryArc(0, numCycles); + // Should have about 1/3 a, 1/6 each of b | c, and 1/9 each of d | e | f. + // Evaluating this distribution with a chi-squared test. + // Note: this just evaluates the overall distribution, not things like correlation/runs of values + const observed = haps.reduce((acc, hap) => { + acc[hap.value] = (acc[hap.value] || 0) + 1; + return acc; + }, {}); + const expected = { + a: numCycles / 3, + b: numCycles / 6, + c: numCycles / 6, + d: numCycles / 9, + e: numCycles / 9, + f: numCycles / 9, + }; + let chisq = -numCycles; + for (let k in expected) { + chisq += (observed[k] * observed[k]) / expected[k]; + } + // 15.086 is the chisq for 5 degrees of freedom at 99%, so for 99% of uniformly-distributed + // PRNG, this test should succeed + expect(chisq <= 15.086).toBe(true); + // assert(chisq <= 15.086, chisq + ' was expected to be less than 15.086 under chi-squared test'); }); }); diff --git a/packages/osc/README.md b/packages/osc/README.md index cb48090d..61a125b5 100644 --- a/packages/osc/README.md +++ b/packages/osc/README.md @@ -35,3 +35,5 @@ s(" hh").osc() ``` or just [click here](http://localhost:3000/#cygiPGJkIHNkPiBoaCIpLm9zYygp)... + +You can read more about [how to use Superdirt with Strudel the Tutorial](https://strudel.tidalcycles.org/tutorial/#superdirt-api) diff --git a/packages/osc/osc.mjs b/packages/osc/osc.mjs index e3b12823..4e1011b1 100644 --- a/packages/osc/osc.mjs +++ b/packages/osc/osc.mjs @@ -5,7 +5,7 @@ This program is free software: you can redistribute it and/or modify it under th */ import OSC from 'osc-js'; -import { Pattern } from '@strudel.cycles/core'; +import { parseNumeral, Pattern } from '@strudel.cycles/core'; const comm = new OSC(); comm.open(); @@ -22,13 +22,19 @@ let startedAt = -1; */ Pattern.prototype.osc = function () { return this._withHap((hap) => { - const onTrigger = (time, hap, currentTime, cps, cycle, delta) => { + const onTrigger = (time, hap, currentTime, cps) => { + const cycle = hap.wholeOrPart().begin.valueOf(); + const delta = hap.duration.valueOf(); // time should be audio time of onset // currentTime should be current time of audio context (slightly before time) if (startedAt < 0) { startedAt = Date.now() - currentTime * 1000; } - const controls = Object.assign({}, { cps: cps, cycle: cycle, delta: delta }, hap.value); + const controls = Object.assign({}, { cps, cycle, delta }, hap.value); + // make sure n and note are numbers + controls.n && (controls.n = parseNumeral(controls.n)); + controls.note && (controls.note = parseNumeral(controls.note)); + const keyvals = Object.entries(controls).flat(); const ts = Math.floor(startedAt + (time + latency) * 1000); const message = new OSC.Message('/dirt/play', ...keyvals); diff --git a/packages/osc/package-lock.json b/packages/osc/package-lock.json index c89c451e..e10a7011 100644 --- a/packages/osc/package-lock.json +++ b/packages/osc/package-lock.json @@ -1,3096 +1,60 @@ { - "name": "@strudel.cycles/osc", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@strudel.cycles/osc", - "version": "0.1.0", - "license": "AGPL-3.0-or-later", - "dependencies": { - "osc-js": "^2.3.2" - }, - "devDependencies": { - "pkg": "^5.7.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "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/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "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": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "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/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/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==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "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==", - "dev": true - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "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==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "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-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "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==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "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/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "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/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/into-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", - "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", - "dev": true, - "dependencies": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "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==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/multistream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", - "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", - "dev": true, - "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": { - "once": "^1.4.0", - "readable-stream": "^3.6.0" - } - }, - "node_modules/multistream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "node_modules/node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "dev": true, - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/osc-js": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/osc-js/-/osc-js-2.3.2.tgz", - "integrity": "sha512-9i7J4u1hH+glooGMh+ki1ni0JGqKmylT8r0nXKugHbRK63rR+kl4O+5tGW6+/EszjbCju3KV+eXQQzFDdGrmhg==", - "dependencies": { - "ws": "^8.5.0" - } - }, - "node_modules/p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "dev": true, - "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==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/pkg/-/pkg-5.7.0.tgz", - "integrity": "sha512-PTiAjNq/CGAtK5qUBR6pjheqnipTFjeecgSgIKEcAOJA4GpmZeOZC8pMOoT0rfes5vHsmcFo7wbSRTAmXQurrg==", - "dev": true, - "dependencies": { - "@babel/parser": "7.17.10", - "@babel/types": "7.17.10", - "chalk": "^4.1.2", - "escodegen": "^2.0.0", - "fs-extra": "^9.1.0", - "globby": "^11.1.0", - "into-stream": "^6.0.0", - "is-core-module": "2.9.0", - "minimist": "^1.2.6", - "multistream": "^4.1.0", - "pkg-fetch": "3.4.1", - "prebuild-install": "6.1.4", - "resolve": "^1.22.0", - "stream-meter": "^1.0.4" - }, - "bin": { - "pkg": "lib-es5/bin.js" - }, - "peerDependencies": { - "node-notifier": ">=9.0.1" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/pkg-fetch": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-3.4.1.tgz", - "integrity": "sha512-fS4cdayCa1r4jHkOKGPJKnS9PEs6OWZst+s+m0+CmhmPZObMnxoRnf9T9yUWl+lzM2b5aJF7cnQIySCT7Hq8Dg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "fs-extra": "^9.1.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.6", - "progress": "^2.0.3", - "semver": "^7.3.5", - "tar-fs": "^2.1.1", - "yargs": "^16.2.0" - }, - "bin": { - "pkg-fetch": "lib-es5/bin.js" - } - }, - "node_modules/prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "dev": true, - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "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==", - "dev": true, - "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/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "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/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "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/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "dev": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-meter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", - "integrity": "sha1-Uq+Vql6nYKJJFxZwTb/5D3Ov3R0=", - "dev": true, - "dependencies": { - "readable-stream": "^2.1.4" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/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==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/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==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - } - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", - "dev": true - }, - "@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@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==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@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==", - "dev": true - }, - "@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==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "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==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "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==", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "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==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@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" - } - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "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==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "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" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "into-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", - "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", - "dev": true, - "requires": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - } - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "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==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multistream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", - "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", - "dev": true, - "requires": { - "once": "^1.4.0", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "dev": true, - "requires": { - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "osc-js": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/osc-js/-/osc-js-2.3.2.tgz", - "integrity": "sha512-9i7J4u1hH+glooGMh+ki1ni0JGqKmylT8r0nXKugHbRK63rR+kl4O+5tGW6+/EszjbCju3KV+eXQQzFDdGrmhg==", - "requires": { - "ws": "^8.5.0" - } - }, - "p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "dev": true - }, - "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==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pkg": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/pkg/-/pkg-5.7.0.tgz", - "integrity": "sha512-PTiAjNq/CGAtK5qUBR6pjheqnipTFjeecgSgIKEcAOJA4GpmZeOZC8pMOoT0rfes5vHsmcFo7wbSRTAmXQurrg==", - "dev": true, - "requires": { - "@babel/parser": "7.17.10", - "@babel/types": "7.17.10", - "chalk": "^4.1.2", - "escodegen": "^2.0.0", - "fs-extra": "^9.1.0", - "globby": "^11.1.0", - "into-stream": "^6.0.0", - "is-core-module": "2.9.0", - "minimist": "^1.2.6", - "multistream": "^4.1.0", - "pkg-fetch": "3.4.1", - "prebuild-install": "6.1.4", - "resolve": "^1.22.0", - "stream-meter": "^1.0.4" - } - }, - "pkg-fetch": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-3.4.1.tgz", - "integrity": "sha512-fS4cdayCa1r4jHkOKGPJKnS9PEs6OWZst+s+m0+CmhmPZObMnxoRnf9T9yUWl+lzM2b5aJF7cnQIySCT7Hq8Dg==", - "dev": true, - "requires": { - "chalk": "^4.1.2", - "fs-extra": "^9.1.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.6", - "progress": "^2.0.3", - "semver": "^7.3.5", - "tar-fs": "^2.1.1", - "yargs": "^16.2.0" - } - }, - "prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "dev": true, - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true - }, - "simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "dev": true, - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "stream-meter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", - "integrity": "sha1-Uq+Vql6nYKJJFxZwTb/5D3Ov3R0=", - "dev": true, - "requires": { - "readable-stream": "^2.1.4" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "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==", - "dev": true - }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "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==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "requires": {} - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } + "name": "@strudel.cycles/osc", + "version": "0.2.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@strudel.cycles/osc", + "version": "0.1.0", + "license": "AGPL-3.0-or-later", + "dependencies": { + "osc-js": "^2.3.2" + } + }, + "node_modules/osc-js": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/osc-js/-/osc-js-2.3.2.tgz", + "integrity": "sha512-9i7J4u1hH+glooGMh+ki1ni0JGqKmylT8r0nXKugHbRK63rR+kl4O+5tGW6+/EszjbCju3KV+eXQQzFDdGrmhg==", + "dependencies": { + "ws": "^8.5.0" + } + }, + "node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + } + }, + "dependencies": { + "osc-js": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/osc-js/-/osc-js-2.3.2.tgz", + "integrity": "sha512-9i7J4u1hH+glooGMh+ki1ni0JGqKmylT8r0nXKugHbRK63rR+kl4O+5tGW6+/EszjbCju3KV+eXQQzFDdGrmhg==", + "requires": { + "ws": "^8.5.0" + } + }, + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "requires": {} + } + } } diff --git a/packages/osc/package.json b/packages/osc/package.json index be0e42e1..1a90d9ab 100644 --- a/packages/osc/package.json +++ b/packages/osc/package.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/osc", - "version": "0.1.0", + "version": "0.2.0", "description": "OSC messaging for strudel", "main": "osc.mjs", "scripts": { @@ -31,7 +31,7 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "osc-js": "^2.3.2" + "osc-js": "^2.4.0" }, "devDependencies": { "pkg": "^5.7.0" diff --git a/packages/react/.npmignore b/packages/react/.npmignore new file mode 100644 index 00000000..b7265688 --- /dev/null +++ b/packages/react/.npmignore @@ -0,0 +1 @@ +examples \ No newline at end of file diff --git a/packages/react/README.md b/packages/react/README.md index 4fc64a8e..a03dbf4d 100644 --- a/packages/react/README.md +++ b/packages/react/README.md @@ -1,4 +1,43 @@ # @strudel.cycles/react -This package contains react hooks and components for strudel. -Example coming soon +This package contains react hooks and components for strudel. It is used internally by the Strudel REPL. + +## Install + +```js +npm i @strudel.cycles/react +``` + +## Usage + +Here is a minimal example of how to set up a MiniRepl: + +```jsx +import { evalScope, controls } from '@strudel.cycles/core'; +import { MiniRepl } from '@strudel.cycles/react'; +import { prebake } from '../repl/src/prebake.mjs'; + +evalScope( + controls, + import('@strudel.cycles/core'), + import('@strudel.cycles/tonal'), + import('@strudel.cycles/mini'), + import('@strudel.cycles/webaudio'), + /* probably import other strudel packages */ +); + +prebake(); + +export function Repl({ tune }) { + return ; +} +``` + +## Development + +If you change something in here and want to see the changes in the repl, make sure to run `npm run build` inside this folder! + +```js +npm run dev # dev server +npm run build # build package +``` diff --git a/packages/react/dist/index.cjs.js b/packages/react/dist/index.cjs.js index b29d6792..f0471083 100644 --- a/packages/react/dist/index.cjs.js +++ b/packages/react/dist/index.cjs.js @@ -1,3 +1,3 @@ -"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var o=require("react"),te=require("react-codemirror6"),D=require("@codemirror/view"),I=require("@codemirror/state"),oe=require("@codemirror/lang-javascript"),n=require("@codemirror/highlight"),ae=require("react-hook-inview"),re=require("@strudel.cycles/eval"),ne=require("@strudel.cycles/core/util.mjs"),p=require("@strudel.cycles/tone"),z=require("@strudel.cycles/core"),v=require("@strudel.cycles/midi");function ce(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var f=ce(o);const se="#abb2bf",le="#7d8799",ie="#ffffff",ue="#21252b",P="rgba(0, 0, 0, 0.5)",de="transparent",W="#353a42",fe="rgba(128, 203, 196, 0.2)",F="#ffcc00",ge=D.EditorView.theme({"&":{color:"#ffffff",backgroundColor:de,fontSize:"15px","z-index":11},".cm-content":{caretColor:F,lineHeight:"22px"},".cm-line":{background:"#2C323699"},"&.cm-focused .cm-cursor":{borderLeftColor:F},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:fe},".cm-panels":{backgroundColor:ue,color:"#ffffff"},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:P},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847",outline:"1px solid #515a6b"},".cm-gutters":{background:"#2C323699",color:"#676e95",border:"none"},".cm-activeLineGutter":{backgroundColor:P},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:W},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:W,borderBottomColor:W},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:P,color:se}}},{dark:!0}),me=n.HighlightStyle.define([{tag:n.tags.keyword,color:"#c792ea"},{tag:n.tags.operator,color:"#89ddff"},{tag:n.tags.special(n.tags.variableName),color:"#eeffff"},{tag:n.tags.typeName,color:"#f07178"},{tag:n.tags.atom,color:"#f78c6c"},{tag:n.tags.number,color:"#ff5370"},{tag:n.tags.definition(n.tags.variableName),color:"#82aaff"},{tag:n.tags.string,color:"#c3e88d"},{tag:n.tags.special(n.tags.string),color:"#f07178"},{tag:n.tags.comment,color:le},{tag:n.tags.variableName,color:"#f07178"},{tag:n.tags.tagName,color:"#ff5370"},{tag:n.tags.bracket,color:"#a2a1a4"},{tag:n.tags.meta,color:"#ffcb6b"},{tag:n.tags.attributeName,color:"#c792ea"},{tag:n.tags.propertyName,color:"#c792ea"},{tag:n.tags.className,color:"#decb6b"},{tag:n.tags.invalid,color:ie}]),be=[ge,me],B=I.StateEffect.define(),pe=I.StateField.define({create(){return D.Decoration.none},update(e,a){try{for(let c of a.effects)c.is(B)&&(e=D.Decoration.set(c.value.flatMap(u=>(u.context.locations||[]).map(({start:g,end:s})=>{const i=u.context.color||"#FFCA28";let m=a.newDoc.line(g.line).from+g.column,r=a.newDoc.line(s.line).from+s.column;const l=a.newDoc.length;return m>l||r>l?void 0:D.Decoration.mark({attributes:{style:`outline: 1px solid ${i}`}}).range(m,r)})).filter(Boolean),!0));return e}catch{return e}},provide:e=>D.EditorView.decorations.from(e)});function $({value:e,onChange:a,onViewChanged:c,onCursor:u,options:g,editorDidMount:s}){return f.default.createElement(f.default.Fragment,null,f.default.createElement(te.CodeMirror,{onViewChange:c,style:{display:"flex",flexDirection:"column",flex:"1 0 auto"},value:e,onChange:a,extensions:[oe.javascript(),be,pe]}))}function Q(e){const{onEvent:a,onQuery:c,onSchedule:u,ready:g=!0,onDraw:s}=e,[i,m]=o.useState(!1),r=1,l=()=>Math.floor(p.Tone.getTransport().seconds/r),y=(b=l())=>{const w=new z.TimeSpan(b,b+1),S=c?.(new z.State(w))||[];u?.(S,b);const H=w.begin.valueOf();p.Tone.getTransport().cancel(H);const N=(b+1)*r-.5,R=Math.max(p.Tone.getTransport().seconds,N)+.1;p.Tone.getTransport().schedule(()=>{y(b+1)},R),S?.filter(h=>h.part.begin.equals(h.whole?.begin)).forEach(h=>{p.Tone.getTransport().schedule(k=>{a(k,h,p.Tone.getContext().currentTime),p.Tone.Draw.schedule(()=>{s?.(k,h)},k)},h.part.begin.valueOf())})};o.useEffect(()=>{g&&y()},[a,u,c,s,g]);const x=async()=>{m(!0),await p.Tone.start(),p.Tone.getTransport().start("+0.1")},C=()=>{p.Tone.getTransport().pause(),m(!1)};return{start:x,stop:C,onEvent:a,started:i,setStarted:m,toggle:()=>i?C():x(),query:y,activeCycle:l}}function U(e){return o.useEffect(()=>(window.addEventListener("message",e),()=>window.removeEventListener("message",e)),[e]),o.useCallback(a=>window.postMessage(a,"*"),[])}let he=()=>Math.floor((1+Math.random())*65536).toString(16).substring(1);const ve=e=>encodeURIComponent(btoa(e));function G({tune:e,defaultSynth:a,autolink:c=!0,onEvent:u,onDraw:g}){const s=o.useMemo(()=>he(),[]),[i,m]=o.useState(e),[r,l]=o.useState(),[y,x]=o.useState(""),[C,E]=o.useState(),[b,w]=o.useState(!1),[S,H]=o.useState(""),[N,R]=o.useState(),h=o.useMemo(()=>i!==r||C,[i,r,C]),k=o.useCallback(d=>x(t=>t+`${t?` +"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react"),Z=require("@uiw/react-codemirror"),S=require("@codemirror/view"),A=require("@codemirror/state"),ee=require("@codemirror/lang-javascript"),p=require("@lezer/highlight"),te=require("@uiw/codemirror-themes"),se=require("react-hook-inview"),B=require("@strudel.cycles/eval"),C=require("@strudel.cycles/tone"),z=require("@strudel.cycles/core"),oe=require("@strudel.cycles/webaudio"),T=require("@strudel.cycles/midi"),j=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},y=j(t),re=j(Z),ne=te.createTheme({theme:"dark",settings:{background:"#222",foreground:"#75baff",caret:"#ffcc00",selection:"rgba(128, 203, 196, 0.5)",selectionMatch:"#036dd626",lineHighlight:"#8a91991a",gutterBackground:"transparent",gutterForeground:"#676e95"},styles:[{tag:p.tags.keyword,color:"#c792ea"},{tag:p.tags.operator,color:"#89ddff"},{tag:p.tags.special(p.tags.variableName),color:"#eeffff"},{tag:p.tags.typeName,color:"#f07178"},{tag:p.tags.atom,color:"#f78c6c"},{tag:p.tags.number,color:"#ff5370"},{tag:p.tags.definition(p.tags.variableName),color:"#82aaff"},{tag:p.tags.string,color:"#c3e88d"},{tag:p.tags.special(p.tags.string),color:"#f07178"},{tag:p.tags.comment,color:"#7d8799"},{tag:p.tags.variableName,color:"#f07178"},{tag:p.tags.tagName,color:"#ff5370"},{tag:p.tags.bracket,color:"#a2a1a4"},{tag:p.tags.meta,color:"#ffcb6b"},{tag:p.tags.attributeName,color:"#c792ea"},{tag:p.tags.propertyName,color:"#c792ea"},{tag:p.tags.className,color:"#decb6b"},{tag:p.tags.invalid,color:"#ffffff"}]});const W=A.StateEffect.define(),ae=A.StateField.define({create(){return S.Decoration.none},update(e,o){try{for(let r of o.effects)if(r.is(W))if(r.value){const n=S.Decoration.mark({attributes:{style:"background-color: #FFCA2880"}});e=S.Decoration.set([n.range(0,o.newDoc.length)])}else e=S.Decoration.set([]);return e}catch(r){return console.warn("flash error",r),e}},provide:e=>S.EditorView.decorations.from(e)}),$=e=>{e.dispatch({effects:W.of(!0)}),setTimeout(()=>{e.dispatch({effects:W.of(!1)})},200)},P=A.StateEffect.define(),ce=A.StateField.define({create(){return S.Decoration.none},update(e,o){try{for(let r of o.effects)if(r.is(P)){const n=r.value.map(a=>(a.context.locations||[]).map(({start:l,end:c})=>{const s=a.context.color||"#FFCA28";let u=o.newDoc.line(l.line).from+l.column,i=o.newDoc.line(c.line).from+c.column;const g=o.newDoc.length;return u>g||i>g?void 0:S.Decoration.mark({attributes:{style:`outline: 1.5px solid ${s};`}}).range(u,i)})).flat().filter(Boolean)||[];e=S.Decoration.set(n,!0)}return e}catch{return S.Decoration.set([])}},provide:e=>S.EditorView.decorations.from(e)}),ie=[ee.javascript(),ne,ce,ae];function K({value:e,onChange:o,onViewChanged:r,onSelectionChange:n,options:a,editorDidMount:l}){const c=t.useCallback(i=>{o?.(i)},[o]),s=t.useCallback(i=>{r?.(i)},[r]),u=t.useCallback(i=>{i.selectionSet&&n&&n?.(i.state.selection)},[n]);return y.default.createElement(y.default.Fragment,null,y.default.createElement(re.default,{value:e,onChange:c,onCreateEditor:s,onUpdate:u,extensions:ie}))}function U(e){const{onEvent:o,onQuery:r,onSchedule:n,ready:a=!0,onDraw:l}=e,[c,s]=t.useState(!1),u=1,i=()=>Math.floor(C.Tone.getTransport().seconds/u),g=(h=i())=>{const M=new z.TimeSpan(h,h+1),v=r?.(new z.State(M))||[];n?.(v,h);const m=M.begin.valueOf();C.Tone.getTransport().cancel(m);const D=(h+1)*u-.5,_=Math.max(C.Tone.getTransport().seconds,D)+.1;C.Tone.getTransport().schedule(()=>{g(h+1)},_),v?.filter(E=>E.part.begin.equals(E.whole?.begin)).forEach(E=>{C.Tone.getTransport().schedule(x=>{o(x,E,C.Tone.getContext().currentTime),C.Tone.Draw.schedule(()=>{l?.(x,E)},x)},E.part.begin.valueOf())})};t.useEffect(()=>{a&&g()},[o,n,r,l,a]);const b=async()=>{s(!0),await C.Tone.start(),C.Tone.getTransport().start("+0.1")},f=()=>{C.Tone.getTransport().pause(),s(!1)};return{start:b,stop:f,onEvent:o,started:c,setStarted:s,toggle:()=>c?f():b(),query:g,activeCycle:i}}function Q(e){return t.useEffect(()=>(window.addEventListener("message",e),()=>window.removeEventListener("message",e)),[e]),t.useCallback(o=>window.postMessage(o,"*"),[])}let le=()=>Math.floor((1+Math.random())*65536).toString(16).substring(1);const ue=e=>encodeURIComponent(btoa(e));function J({tune:e,autolink:o=!0,onEvent:r,onDraw:n}){const a=t.useMemo(()=>le(),[]),[l,c]=t.useState(e),[s,u]=t.useState(),[i,g]=t.useState(""),[b,f]=t.useState(),[k,h]=t.useState(!1),[M,v]=t.useState(""),[m,D]=t.useState(),_=t.useMemo(()=>l!==s||b,[l,s,b]),E=t.useCallback(w=>g(d=>d+`${d?` -`:""}${d}`),[]),K=o.useMemo(()=>{if(r&&!r.includes("strudel disable-highlighting"))return(d,t)=>g?.(d,t,r)},[r,g]),T=Q({onDraw:K,onEvent:o.useCallback((d,t,Y)=>{try{u?.(t),t.context.logs?.length&&t.context.logs.forEach(k);const{onTrigger:_,velocity:Z}=t.context;if(_)_(d,t,Y,1,t.wholeOrPart().begin.valueOf(),t.duration.valueOf());else if(a){const ee=ne.getPlayableNoteValue(t);a.triggerAttackRelease(ee,t.duration.valueOf(),d,Z)}else throw new Error("no defaultSynth passed to useRepl.")}catch(_){console.warn(_),_.message="unplayable event: "+_?.message,k(_.message)}},[u,k,a]),onQuery:o.useCallback(d=>{try{return N?.query(d)||[]}catch(t){return console.warn(t),t.message="query error: "+t.message,E(t),[]}},[N]),onSchedule:o.useCallback((d,t)=>X(d,t),[]),ready:!!N&&!!r}),V=U(({data:{from:d,type:t}})=>{t==="start"&&d!==s&&(T.setStarted(!1),l(void 0))}),A=o.useCallback(async(d=i)=>{if(r&&!h){E(void 0),T.start();return}try{w(!0);const t=await re.evaluate(d);T.start(),V({type:"start",from:s}),R(()=>t.pattern),c&&(window.location.hash="#"+encodeURIComponent(btoa(i))),H(ve(i)),E(void 0),l(d),w(!1)}catch(t){t.message="evaluation error: "+t.message,console.warn(t),E(t)}},[r,h,i,T,c,s,V]),X=(d,t)=>{d.length};return{pending:b,code:i,setCode:m,pattern:N,error:C,cycle:T,setPattern:R,dirty:h,log:y,togglePlay:()=>{T.started?T.stop():A()},setActiveCode:l,activateCode:A,activeCode:r,pushLog:k,hash:S}}function L(...e){return e.filter(Boolean).join(" ")}let q=[],O;function J({view:e,pattern:a,active:c}){o.useEffect(()=>{if(e)if(a&&c){let g=function(){try{const s=p.Tone.getTransport().seconds,i=[O||s,s+1/60];O=s+1/60,q=q.filter(r=>r.whole.end>s);const m=a.queryArc(...i).filter(r=>r.hasOnset());q=q.concat(m),e.dispatch({effects:B.of(q)})}catch{e.dispatch({effects:B.of([])})}u=requestAnimationFrame(g)},u=requestAnimationFrame(g);return()=>{cancelAnimationFrame(u)}}else q=[],e.dispatch({effects:B.of([])})},[a,c,e])}const ye="_container_10e1g_1",Ce="_header_10e1g_5",we="_buttons_10e1g_9",ke="_button_10e1g_9",Me="_buttonDisabled_10e1g_17",Ee="_error_10e1g_21",Te="_body_10e1g_25";var M={container:ye,header:Ce,buttons:we,button:ke,buttonDisabled:Me,error:Ee,body:Te};function j({type:e}){return f.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",className:"sc-h-5 sc-w-5",viewBox:"0 0 20 20",fill:"currentColor"},{refresh:f.default.createElement("path",{fillRule:"evenodd",d:"M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.999 7H9a1 1 0 010 2H4a1 1 0 01-1-1V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.001 13H11a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z",clipRule:"evenodd"}),play:f.default.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z",clipRule:"evenodd"}),pause:f.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zM7 8a1 1 0 012 0v4a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v4a1 1 0 102 0V8a1 1 0 00-1-1z",clipRule:"evenodd"})}[e])}function _e({tune:e,defaultSynth:a,hideOutsideView:c=!1}){const{code:u,setCode:g,pattern:s,activateCode:i,error:m,cycle:r,dirty:l,togglePlay:y}=G({tune:e,defaultSynth:a,autolink:!1}),[x,C]=o.useState(),[E,b]=ae.useInView({threshold:.01}),w=o.useRef(),S=o.useMemo(()=>((b||!c)&&(w.current=!0),b||w.current),[b,c]);return J({view:x,pattern:s,active:r.started}),f.default.createElement("div",{className:M.container,ref:E},f.default.createElement("div",{className:M.header},f.default.createElement("div",{className:M.buttons},f.default.createElement("button",{className:L(M.button,r.started?"sc-animate-pulse":""),onClick:()=>y()},f.default.createElement(j,{type:r.started?"pause":"play"})),f.default.createElement("button",{className:L(l?M.button:M.buttonDisabled),onClick:()=>i()},f.default.createElement(j,{type:"refresh"}))),m&&f.default.createElement("div",{className:M.error},m.message)),f.default.createElement("div",{className:M.body},S&&f.default.createElement($,{value:u,onChange:g,onViewChanged:C})))}function xe(e){const{ready:a,connected:c,disconnected:u}=e,[g,s]=o.useState(!0),[i,m]=o.useState(v.WebMidi?.outputs||[]);return o.useEffect(()=>{v.enableWebMidi().then(()=>{v.WebMidi.addListener("connected",l=>{m([...v.WebMidi.outputs]),c?.(v.WebMidi,l)}),v.WebMidi.addListener("disconnected",l=>{m([...v.WebMidi.outputs]),u?.(v.WebMidi,l)}),a?.(v.WebMidi),s(!1)}).catch(l=>{if(l){console.error(l),console.warn("Web Midi could not be enabled..");return}})},[a,c,u,i]),{loading:g,outputs:i,outputByName:l=>v.WebMidi.getOutputByName(l)}}exports.CodeMirror=$;exports.MiniRepl=_e;exports.cx=L;exports.useCycle=Q;exports.useHighlighting=J;exports.usePostMessage=U;exports.useRepl=G;exports.useWebMidi=xe; +`:""}${w}`),[]),x=t.useMemo(()=>{if(s&&!s.includes("strudel disable-highlighting"))return(w,d)=>n?.(w,d,s)},[s,n]),L=t.useMemo(()=>s&&s.includes("strudel hide-header"),[s]),q=t.useMemo(()=>s&&s.includes("strudel hide-console"),[s]),R=U({onDraw:x,onEvent:t.useCallback((w,d,Y)=>{try{r?.(d),d.context.logs?.length&&d.context.logs.forEach(E);const{onTrigger:F=oe.webaudioOutputTrigger}=d.context;F(w,d,Y,1)}catch(F){console.warn(F),F.message="unplayable event: "+F?.message,E(F.message)}},[r,E]),onQuery:t.useCallback(w=>{try{return m?.query(w)||[]}catch(d){return console.warn(d),d.message="query error: "+d.message,f(d),[]}},[m]),onSchedule:t.useCallback((w,d)=>X(w),[]),ready:!!m&&!!s}),O=Q(({data:{from:w,type:d}})=>{d==="start"&&w!==a&&(R.setStarted(!1),u(void 0))}),I=t.useCallback(async(w=l)=>{if(s&&!_){f(void 0),R.start();return}try{h(!0);const d=await B.evaluate(w);R.start(),O({type:"start",from:a}),D(()=>d.pattern),o&&(window.location.hash="#"+encodeURIComponent(btoa(l))),v(ue(l)),f(void 0),u(w),h(!1)}catch(d){d.message="evaluation error: "+d.message,console.warn(d),f(d)}},[s,_,l,R,o,a,O]),X=(w,d)=>{w.length};return{hideHeader:L,hideConsole:q,pending:k,code:l,setCode:c,pattern:m,error:b,cycle:R,setPattern:D,dirty:_,log:i,togglePlay:()=>{R.started?R.stop():I()},setActiveCode:u,activateCode:I,activeCode:s,pushLog:E,hash:M}}function H(...e){return e.filter(Boolean).join(" ")}function G({view:e,pattern:o,active:r,getTime:n}){const a=t.useRef([]),l=t.useRef();t.useEffect(()=>{if(e)if(o&&r){let s=function(){try{const u=n(),g=[Math.max(l.current||u,u-1/10),u+1/60];l.current=u+1/60,a.current=a.current.filter(f=>f.whole.end>u);const b=o.queryArc(...g).filter(f=>f.hasOnset());a.current=a.current.concat(b),e.dispatch({effects:P.of(a.current)})}catch{e.dispatch({effects:P.of([])})}c=requestAnimationFrame(s)},c=requestAnimationFrame(s);return()=>{cancelAnimationFrame(c)}}else a.current=[],e.dispatch({effects:P.of([])})},[o,r,e])}const de="_container_3i85k_1",fe="_header_3i85k_5",ge="_buttons_3i85k_9",he="_button_3i85k_9",me="_buttonDisabled_3i85k_17",pe="_error_3i85k_21",be="_body_3i85k_25",N={container:de,header:fe,buttons:ge,button:he,buttonDisabled:me,error:pe,body:be};function V({type:e}){return y.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",className:"sc-h-5 sc-w-5",viewBox:"0 0 20 20",fill:"currentColor"},{refresh:y.default.createElement("path",{fillRule:"evenodd",d:"M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.999 7H9a1 1 0 010 2H4a1 1 0 01-1-1V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.001 13H11a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z",clipRule:"evenodd"}),play:y.default.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z",clipRule:"evenodd"}),pause:y.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zM7 8a1 1 0 012 0v4a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v4a1 1 0 102 0V8a1 1 0 00-1-1z",clipRule:"evenodd"})}[e])}function ye({tune:e,hideOutsideView:o=!1,init:r,onEvent:n,enableKeyboard:a}){const{code:l,setCode:c,pattern:s,activeCode:u,activateCode:i,evaluateOnly:g,error:b,cycle:f,dirty:k,togglePlay:h,stop:M}=J({tune:e,autolink:!1,onEvent:n});t.useEffect(()=>{r&&g()},[e,r]);const[v,m]=t.useState(),[D,_]=se.useInView({threshold:.01}),E=t.useRef(),x=t.useMemo(()=>((_||!o)&&(E.current=!0),_||E.current),[_,o]);return G({view:v,pattern:s,active:f.started&&!u?.includes("strudel disable-highlighting"),getTime:()=>C.Tone.getTransport().seconds}),t.useLayoutEffect(()=>{if(a){const L=async q=>{(q.ctrlKey||q.altKey)&&(q.code==="Enter"?(q.preventDefault(),$(v),await i()):q.code==="Period"&&(f.stop(),q.preventDefault()))};return window.addEventListener("keydown",L,!0),()=>window.removeEventListener("keydown",L,!0)}},[a,s,l,i,f,v]),y.default.createElement("div",{className:N.container,ref:D},y.default.createElement("div",{className:N.header},y.default.createElement("div",{className:N.buttons},y.default.createElement("button",{className:H(N.button,f.started?"sc-animate-pulse":""),onClick:()=>h()},y.default.createElement(V,{type:f.started?"pause":"play"})),y.default.createElement("button",{className:H(k?N.button:N.buttonDisabled),onClick:()=>i()},y.default.createElement(V,{type:"refresh"}))),b&&y.default.createElement("div",{className:N.error},b.message)),y.default.createElement("div",{className:N.body},x&&y.default.createElement(K,{value:l,onChange:c,onViewChanged:m})))}function we(e,o,r=.05,n=.1,a=.1){let l=0,c=0,s=10**4,u=.01;const i=m=>r=m(r);a=a||n/2;const g=()=>{const m=e(),D=m+n+a;for(c===0&&(c=m+u);c=m&&o(c,r,l),c{g(),b=setInterval(g,n*1e3)},k=()=>clearInterval(b);return{setDuration:i,start:f,stop:()=>{l=0,c=0,k()},pause:()=>k(),duration:r,getPhase:()=>c}}class ve{worker;pattern;started=!1;cps=1;getTime;phase=0;constructor({interval:o,onTrigger:r,onError:n,getTime:a,latency:l=.1}){this.getTime=a;const c=s=>Math.round(s*1e3)/1e3;this.clock=we(a,(s,u,i)=>{i===0&&(this.origin=s);const g=c(s-this.origin);this.phase=g-l;const b=c(g+u),f=a();try{this.pattern.queryArc(g,b).forEach(h=>{if(h.part.begin.equals(h.whole.begin)){const M=h.whole.begin+this.origin-f+l,v=h.duration*1;r?.(h,M,v)}})}catch(k){console.warn("scheduler error",k),n?.(k)}},o)}getPhase(){return this.phase}start(){if(!this.pattern)throw new Error("Scheduler: no pattern set! call .setPattern first.");this.clock.start(),this.started=!0}pause(){this.clock.stop(),delete this.origin,this.started=!1}stop(){delete this.origin,this.clock.stop(),this.started=!1}setPattern(o){this.pattern=o}setCps(o=1){this.cps=o}log(o,r,n){const a=n.filter(l=>l.hasOnset());console.log(`${o.toFixed(4)} - ${r.toFixed(4)} ${Array(a.length).fill("I").join("")}`)}}function Ee({defaultOutput:e,interval:o,getTime:r,code:n,evalOnMount:a=!1}){const[l,c]=t.useState(),[s,u]=t.useState(),[i,g]=t.useState(n),[b,f]=t.useState(),k=n!==i,h=t.useMemo(()=>new ve({interval:o,onTrigger:e,onError:c,getTime:r}),[e,o]),M=t.useCallback(async()=>{if(!n){console.log("no code..");return}try{const{pattern:m}=await B.evaluate(n);g(n),h?.setPattern(m),f(m),u()}catch(m){u(m),console.warn("eval error",m)}},[n,h]),v=t.useRef();return t.useEffect(()=>{!v.current&&a&&(v.current=!0,M())},[M,a]),{schedulerError:l,scheduler:h,evalError:s,evaluate:M,activeCode:i,isDirty:k,pattern:b}}const ke=e=>t.useLayoutEffect(()=>(window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)),[e]);function Me(e){const{ready:o,connected:r,disconnected:n}=e,[a,l]=t.useState(!0),[c,s]=t.useState(T.WebMidi?.outputs||[]);return t.useEffect(()=>{T.enableWebMidi().then(()=>{T.WebMidi.addListener("connected",i=>{s([...T.WebMidi.outputs]),r?.(T.WebMidi,i)}),T.WebMidi.addListener("disconnected",i=>{s([...T.WebMidi.outputs]),n?.(T.WebMidi,i)}),o?.(T.WebMidi),l(!1)}).catch(i=>{if(i){console.error(i),console.warn("Web Midi could not be enabled..");return}})},[o,r,n,c]),{loading:a,outputs:c,outputByName:i=>T.WebMidi.getOutputByName(i)}}exports.CodeMirror=K;exports.MiniRepl=ye;exports.cx=H;exports.flash=$;exports.useCycle=U;exports.useHighlighting=G;exports.useKeydown=ke;exports.usePostMessage=Q;exports.useRepl=J;exports.useStrudel=Ee;exports.useWebMidi=Me; diff --git a/packages/react/dist/index.es.js b/packages/react/dist/index.es.js index f15f0f00..deebffc2 100644 --- a/packages/react/dist/index.es.js +++ b/packages/react/dist/index.es.js @@ -1,620 +1,468 @@ -import React, { useState, useEffect, useCallback, useMemo, useRef } from 'react'; -import { CodeMirror as CodeMirror$1 } from 'react-codemirror6'; -import { EditorView, Decoration } from '@codemirror/view'; -import { StateEffect, StateField } from '@codemirror/state'; -import { javascript } from '@codemirror/lang-javascript'; -import { HighlightStyle, tags } from '@codemirror/highlight'; -import { useInView } from 'react-hook-inview'; -import { evaluate } from '@strudel.cycles/eval'; -import { getPlayableNoteValue } from '@strudel.cycles/core/util.mjs'; -import { Tone } from '@strudel.cycles/tone'; -import { TimeSpan, State } from '@strudel.cycles/core'; -import { WebMidi, enableWebMidi } from '@strudel.cycles/midi'; - -/* - Credits for color palette: - - Author: Mattia Astorino (http://github.com/equinusocio) - Website: https://material-theme.site/ -*/ - -const ivory = '#abb2bf', - stone = '#7d8799', // Brightened compared to original to increase contrast - invalid = '#ffffff', - darkBackground = '#21252b', - highlightBackground = 'rgba(0, 0, 0, 0.5)', - // background = '#292d3e', - background = 'transparent', - tooltipBackground = '#353a42', - selection = 'rgba(128, 203, 196, 0.2)', - cursor = '#ffcc00'; - -/// The editor theme styles for Material Palenight. -const materialPalenightTheme = EditorView.theme( - { - // done - '&': { - color: '#ffffff', - backgroundColor: background, - fontSize: '15px', - 'z-index': 11, - }, - - // done - '.cm-content': { - caretColor: cursor, - lineHeight: '22px', - }, - '.cm-line': { - background: '#2C323699', - }, - // done - '&.cm-focused .cm-cursor': { - borderLeftColor: cursor, - }, - - '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': { - backgroundColor: selection, - }, - - '.cm-panels': { backgroundColor: darkBackground, color: '#ffffff' }, - '.cm-panels.cm-panels-top': { borderBottom: '2px solid black' }, - '.cm-panels.cm-panels-bottom': { borderTop: '2px solid black' }, - - // done, use onedarktheme - '.cm-searchMatch': { - backgroundColor: '#72a1ff59', - outline: '1px solid #457dff', - }, - '.cm-searchMatch.cm-searchMatch-selected': { - backgroundColor: '#6199ff2f', - }, - - '.cm-activeLine': { backgroundColor: highlightBackground }, - '.cm-selectionMatch': { backgroundColor: '#aafe661a' }, - - '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': { - backgroundColor: '#bad0f847', - outline: '1px solid #515a6b', - }, - - // done - '.cm-gutters': { - background: '#2C323699', - color: '#676e95', - border: 'none', - }, - - '.cm-activeLineGutter': { - backgroundColor: highlightBackground, - }, - - '.cm-foldPlaceholder': { - backgroundColor: 'transparent', - border: 'none', - color: '#ddd', - }, - - '.cm-tooltip': { - border: 'none', - backgroundColor: tooltipBackground, - }, - '.cm-tooltip .cm-tooltip-arrow:before': { - borderTopColor: 'transparent', - borderBottomColor: 'transparent', - }, - '.cm-tooltip .cm-tooltip-arrow:after': { - borderTopColor: tooltipBackground, - borderBottomColor: tooltipBackground, - }, - '.cm-tooltip-autocomplete': { - '& > ul > li[aria-selected]': { - backgroundColor: highlightBackground, - color: ivory, - }, - }, +import y, { useCallback as T, useState as w, useEffect as q, useMemo as R, useRef as I, useLayoutEffect as j } from "react"; +import Y from "@uiw/react-codemirror"; +import { Decoration as A, EditorView as K } from "@codemirror/view"; +import { StateEffect as U, StateField as Q } from "@codemirror/state"; +import { javascript as Z } from "@codemirror/lang-javascript"; +import { tags as m } from "@lezer/highlight"; +import { createTheme as ee } from "@uiw/codemirror-themes"; +import { useInView as te } from "react-hook-inview"; +import { evaluate as G } from "@strudel.cycles/eval"; +import { Tone as M } from "@strudel.cycles/tone"; +import { TimeSpan as oe, State as re } from "@strudel.cycles/core"; +import { webaudioOutputTrigger as ne } from "@strudel.cycles/webaudio"; +import { WebMidi as N, enableWebMidi as se } from "@strudel.cycles/midi"; +const ae = ee({ + theme: "dark", + settings: { + background: "#222", + foreground: "#75baff", + caret: "#ffcc00", + selection: "rgba(128, 203, 196, 0.5)", + selectionMatch: "#036dd626", + lineHighlight: "#8a91991a", + gutterBackground: "transparent", + gutterForeground: "#676e95" }, - { dark: true }, -); - -/// The highlighting style for code in the Material Palenight theme. -const materialPalenightHighlightStyle = HighlightStyle.define([ - { tag: tags.keyword, color: '#c792ea' }, - { tag: tags.operator, color: '#89ddff' }, - { tag: tags.special(tags.variableName), color: '#eeffff' }, - { tag: tags.typeName, color: '#f07178' }, - { tag: tags.atom, color: '#f78c6c' }, - { tag: tags.number, color: '#ff5370' }, - { tag: tags.definition(tags.variableName), color: '#82aaff' }, - { tag: tags.string, color: '#c3e88d' }, - { tag: tags.special(tags.string), color: '#f07178' }, - { tag: tags.comment, color: stone }, - { tag: tags.variableName, color: '#f07178' }, - { tag: tags.tagName, color: '#ff5370' }, - { tag: tags.bracket, color: '#a2a1a4' }, - { tag: tags.meta, color: '#ffcb6b' }, - { tag: tags.attributeName, color: '#c792ea' }, - { tag: tags.propertyName, color: '#c792ea' }, - { tag: tags.className, color: '#decb6b' }, - { tag: tags.invalid, color: invalid }, -]); - -/// Extension to enable the Material Palenight theme (both the editor theme and -/// the highlight style). -// : Extension -const materialPalenight = [materialPalenightTheme, materialPalenightHighlightStyle]; - -const setHighlights = StateEffect.define(); -const highlightField = StateField.define({ + styles: [ + { tag: m.keyword, color: "#c792ea" }, + { tag: m.operator, color: "#89ddff" }, + { tag: m.special(m.variableName), color: "#eeffff" }, + { tag: m.typeName, color: "#f07178" }, + { tag: m.atom, color: "#f78c6c" }, + { tag: m.number, color: "#ff5370" }, + { tag: m.definition(m.variableName), color: "#82aaff" }, + { tag: m.string, color: "#c3e88d" }, + { tag: m.special(m.string), color: "#f07178" }, + { tag: m.comment, color: "#7d8799" }, + { tag: m.variableName, color: "#f07178" }, + { tag: m.tagName, color: "#ff5370" }, + { tag: m.bracket, color: "#a2a1a4" }, + { tag: m.meta, color: "#ffcb6b" }, + { tag: m.attributeName, color: "#c792ea" }, + { tag: m.propertyName, color: "#c792ea" }, + { tag: m.className, color: "#decb6b" }, + { tag: m.invalid, color: "#ffffff" } + ] +}); +const z = U.define(), ce = Q.define({ create() { - return Decoration.none; + return A.none; }, - update(highlights, tr) { + update(e, o) { try { - for (let e of tr.effects) { - if (e.is(setHighlights)) { - highlights = Decoration.set(e.value.flatMap((hap) => (hap.context.locations || []).map(({ start, end }) => { - const color = hap.context.color || "#FFCA28"; - let from = tr.newDoc.line(start.line).from + start.column; - let to = tr.newDoc.line(end.line).from + end.column; - const l = tr.newDoc.length; - if (from > l || to > l) { - return; - } - const mark = Decoration.mark({ attributes: { style: `outline: 1px solid ${color}` } }); - return mark.range(from, to); - })).filter(Boolean), true); - } - } - return highlights; - } catch (err) { - return highlights; + for (let r of o.effects) + if (r.is(z)) + if (r.value) { + const n = A.mark({ attributes: { style: "background-color: #FFCA2880" } }); + e = A.set([n.range(0, o.newDoc.length)]); + } else + e = A.set([]); + return e; + } catch (r) { + return console.warn("flash error", r), e; } }, - provide: (f) => EditorView.decorations.from(f) -}); -function CodeMirror({ value, onChange, onViewChanged, onCursor, options, editorDidMount }) { - return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(CodeMirror$1, { - onViewChange: onViewChanged, - style: { - display: "flex", - flexDirection: "column", - flex: "1 0 auto" + provide: (e) => K.decorations.from(e) +}), ie = (e) => { + e.dispatch({ effects: z.of(!0) }), setTimeout(() => { + e.dispatch({ effects: z.of(!1) }); + }, 200); +}, O = U.define(), le = Q.define({ + create() { + return A.none; + }, + update(e, o) { + try { + for (let r of o.effects) + if (r.is(O)) { + const n = r.value.map( + (s) => (s.context.locations || []).map(({ start: i, end: a }) => { + const t = s.context.color || "#FFCA28"; + let l = o.newDoc.line(i.line).from + i.column, c = o.newDoc.line(a.line).from + a.column; + const f = o.newDoc.length; + return l > f || c > f ? void 0 : A.mark({ attributes: { style: `outline: 1.5px solid ${t};` } }).range(l, c); + }) + ).flat().filter(Boolean) || []; + e = A.set(n, !0); + } + return e; + } catch { + return A.set([]); + } + }, + provide: (e) => K.decorations.from(e) +}), ue = [Z(), ae, le, ce]; +function de({ value: e, onChange: o, onViewChanged: r, onSelectionChange: n, options: s, editorDidMount: i }) { + const a = T( + (c) => { + o?.(c); }, - value, - onChange, - extensions: [ - javascript(), - materialPalenight, - highlightField - ] + [o] + ), t = T( + (c) => { + r?.(c); + }, + [r] + ), l = T( + (c) => { + c.selectionSet && n && n?.(c.state.selection); + }, + [n] + ); + return /* @__PURE__ */ y.createElement(y.Fragment, null, /* @__PURE__ */ y.createElement(Y, { + value: e, + onChange: a, + onCreateEditor: t, + onUpdate: l, + extensions: ue })); } - -/* -useCycle.mjs - -Copyright (C) 2022 Strudel contributors - see -This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . -*/ - -/* export declare interface UseCycleProps { - onEvent: ToneEventCallback; - onQuery?: (state: State) => Hap[]; - onSchedule?: (events: Hap[], cycle: number) => void; - onDraw?: ToneEventCallback; - ready?: boolean; // if false, query will not be called on change props -} */ - -// function useCycle(props: UseCycleProps) { -function useCycle(props) { - // onX must use useCallback! - const { onEvent, onQuery, onSchedule, ready = true, onDraw } = props; - const [started, setStarted] = useState(false); - const cycleDuration = 1; - const activeCycle = () => Math.floor(Tone.getTransport().seconds / cycleDuration); - - // pull events with onQuery + count up to next cycle - const query = (cycle = activeCycle()) => { - const timespan = new TimeSpan(cycle, cycle + 1); - const events = onQuery?.(new State(timespan)) || []; - onSchedule?.(events, cycle); - // cancel events after current query. makes sure no old events are player for rescheduled cycles - // console.log('schedule', cycle); - // query next cycle in the middle of the current - const cancelFrom = timespan.begin.valueOf(); - Tone.getTransport().cancel(cancelFrom); - // const queryNextTime = (cycle + 1) * cycleDuration - 0.1; - const queryNextTime = (cycle + 1) * cycleDuration - 0.5; - - // if queryNextTime would be before current time, execute directly (+0.1 for safety that it won't miss) - const t = Math.max(Tone.getTransport().seconds, queryNextTime) + 0.1; - Tone.getTransport().schedule(() => { - query(cycle + 1); - }, t); - - // schedule events for next cycle - events - ?.filter((event) => event.part.begin.equals(event.whole?.begin)) - .forEach((event) => { - Tone.getTransport().schedule((time) => { - onEvent(time, event, Tone.getContext().currentTime); - Tone.Draw.schedule(() => { - // do drawing or DOM manipulation here - onDraw?.(time, event); - }, time); - }, event.part.begin.valueOf()); - }); +function fe(e) { + const { onEvent: o, onQuery: r, onSchedule: n, ready: s = !0, onDraw: i } = e, [a, t] = w(!1), l = 1, c = () => Math.floor(M.getTransport().seconds / l), f = (g = c()) => { + const C = new oe(g, g + 1), v = r?.(new re(C)) || []; + n?.(v, g); + const h = C.begin.valueOf(); + M.getTransport().cancel(h); + const D = (g + 1) * l - 0.5, _ = Math.max(M.getTransport().seconds, D) + 0.1; + M.getTransport().schedule(() => { + f(g + 1); + }, _), v?.filter((E) => E.part.begin.equals(E.whole?.begin)).forEach((E) => { + M.getTransport().schedule((L) => { + o(L, E, M.getContext().currentTime), M.Draw.schedule(() => { + i?.(L, E); + }, L); + }, E.part.begin.valueOf()); + }); }; - - useEffect(() => { - ready && query(); - }, [onEvent, onSchedule, onQuery, onDraw, ready]); - - const start = async () => { - setStarted(true); - await Tone.start(); - Tone.getTransport().start('+0.1'); + q(() => { + s && f(); + }, [o, n, r, i, s]); + const p = async () => { + t(!0), await M.start(), M.getTransport().start("+0.1"); + }, d = () => { + M.getTransport().pause(), t(!1); }; - const stop = () => { - Tone.getTransport().pause(); - setStarted(false); - }; - const toggle = () => (started ? stop() : start()); return { - start, - stop, - onEvent, - started, - setStarted, - toggle, - query, - activeCycle, + start: p, + stop: d, + onEvent: o, + started: a, + setStarted: t, + toggle: () => a ? d() : p(), + query: f, + activeCycle: c }; } - -/* -usePostMessage.mjs - -Copyright (C) 2022 Strudel contributors - see -This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . -*/ - -function usePostMessage(listener) { - useEffect(() => { - window.addEventListener('message', listener); - return () => window.removeEventListener('message', listener); - }, [listener]); - return useCallback((data) => window.postMessage(data, '*'), []); +function ge(e) { + return q(() => (window.addEventListener("message", e), () => window.removeEventListener("message", e)), [e]), T((o) => window.postMessage(o, "*"), []); } +let he = () => Math.floor((1 + Math.random()) * 65536).toString(16).substring(1); +const me = (e) => encodeURIComponent(btoa(e)); +function pe({ tune: e, autolink: o = !0, onEvent: r, onDraw: n }) { + const s = R(() => he(), []), [i, a] = w(e), [t, l] = w(), [c, f] = w(""), [p, d] = w(), [k, g] = w(!1), [C, v] = w(""), [h, D] = w(), _ = R(() => i !== t || p, [i, t, p]), E = T((b) => f((u) => u + `${u ? ` -/* -useRepl.mjs - -Copyright (C) 2022 Strudel contributors - see -This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . -*/ - -let s4 = () => { - return Math.floor((1 + Math.random()) * 0x10000) - .toString(16) - .substring(1); -}; -const generateHash = (code) => encodeURIComponent(btoa(code)); - -function useRepl({ tune, defaultSynth, autolink = true, onEvent, onDraw: onDrawProp }) { - const id = useMemo(() => s4(), []); - const [code, setCode] = useState(tune); - const [activeCode, setActiveCode] = useState(); - const [log, setLog] = useState(''); - const [error, setError] = useState(); - const [pending, setPending] = useState(false); - const [hash, setHash] = useState(''); - const [pattern, setPattern] = useState(); - const dirty = useMemo(() => code !== activeCode || error, [code, activeCode, error]); - const pushLog = useCallback((message) => setLog((log) => log + `${log ? '\n\n' : ''}${message}`), []); - - // below block allows disabling the highlighting by including "strudel disable-highlighting" in the code (as comment) - const onDraw = useMemo(() => { - if (activeCode && !activeCode.includes('strudel disable-highlighting')) { - return (time, event) => onDrawProp?.(time, event, activeCode); - } - }, [activeCode, onDrawProp]); - - // cycle hook to control scheduling - const cycle = useCycle({ - onDraw, - onEvent: useCallback( - (time, event, currentTime) => { +` : ""}${b}`), []), L = R(() => { + if (t && !t.includes("strudel disable-highlighting")) + return (b, u) => n?.(b, u, t); + }, [t, n]), H = R(() => t && t.includes("strudel hide-header"), [t]), x = R(() => t && t.includes("strudel hide-console"), [t]), P = fe({ + onDraw: L, + onEvent: T( + (b, u, X) => { try { - onEvent?.(event); - if (event.context.logs?.length) { - event.context.logs.forEach(pushLog); - } - const { onTrigger, velocity } = event.context; - if (!onTrigger) { - if (defaultSynth) { - const note = getPlayableNoteValue(event); - defaultSynth.triggerAttackRelease(note, event.duration.valueOf(), time, velocity); - } else { - throw new Error('no defaultSynth passed to useRepl.'); - } - /* console.warn('no instrument chosen', event); - throw new Error(`no instrument chosen for ${JSON.stringify(event)}`); */ - } else { - onTrigger( - time, - event, - currentTime, - 1 /* cps */, - event.wholeOrPart().begin.valueOf(), - event.duration.valueOf(), - ); - } - } catch (err) { - console.warn(err); - err.message = 'unplayable event: ' + err?.message; - pushLog(err.message); // not with setError, because then we would have to setError(undefined) on next playable event + r?.(u), u.context.logs?.length && u.context.logs.forEach(E); + const { onTrigger: S = ne } = u.context; + S(b, u, X, 1); + } catch (S) { + console.warn(S), S.message = "unplayable event: " + S?.message, E(S.message); } }, - [onEvent, pushLog, defaultSynth], + [r, E] ), - onQuery: useCallback( - (state) => { + onQuery: T( + (b) => { try { - return pattern?.query(state) || []; - } catch (err) { - console.warn(err); - err.message = 'query error: ' + err.message; - setError(err); - return []; + return h?.query(b) || []; + } catch (u) { + return console.warn(u), u.message = "query error: " + u.message, d(u), []; } }, - [pattern], + [h] ), - onSchedule: useCallback((_events, cycle) => logCycle(_events, cycle), []), - ready: !!pattern && !!activeCode, - }); - - const broadcast = usePostMessage(({ data: { from, type } }) => { - if (type === 'start' && from !== id) { - // console.log('message', from, type); - cycle.setStarted(false); - setActiveCode(undefined); - } - }); - - const activateCode = useCallback( - async (_code = code) => { - if (activeCode && !dirty) { - setError(undefined); - cycle.start(); + onSchedule: T((b, u) => J(b), []), + ready: !!h && !!t + }), B = ge(({ data: { from: b, type: u } }) => { + u === "start" && b !== s && (P.setStarted(!1), l(void 0)); + }), V = T( + async (b = i) => { + if (t && !_) { + d(void 0), P.start(); return; } try { - setPending(true); - const parsed = await evaluate(_code); - cycle.start(); - broadcast({ type: 'start', from: id }); - setPattern(() => parsed.pattern); - if (autolink) { - window.location.hash = '#' + encodeURIComponent(btoa(code)); - } - setHash(generateHash(code)); - setError(undefined); - setActiveCode(_code); - setPending(false); - } catch (err) { - err.message = 'evaluation error: ' + err.message; - console.warn(err); - setError(err); + g(!0); + const u = await G(b); + P.start(), B({ type: "start", from: s }), D(() => u.pattern), o && (window.location.hash = "#" + encodeURIComponent(btoa(i))), v(me(i)), d(void 0), l(b), g(!1); + } catch (u) { + u.message = "evaluation error: " + u.message, console.warn(u), d(u); } }, - [activeCode, dirty, code, cycle, autolink, id, broadcast], - ); - // logs events of cycle - const logCycle = (_events, cycle) => { - if (_events.length) ; + [t, _, i, P, o, s, B] + ), J = (b, u) => { + b.length; }; - - const togglePlay = () => { - if (!cycle.started) { - activateCode(); - } else { - cycle.stop(); - } - }; - return { - pending, - code, - setCode, - pattern, - error, - cycle, - setPattern, - dirty, - log, - togglePlay, - setActiveCode, - activateCode, - activeCode, - pushLog, - hash, + hideHeader: H, + hideConsole: x, + pending: k, + code: i, + setCode: a, + pattern: h, + error: p, + cycle: P, + setPattern: D, + dirty: _, + log: c, + togglePlay: () => { + P.started ? P.stop() : V(); + }, + setActiveCode: l, + activateCode: V, + activeCode: t, + pushLog: E, + hash: C }; } - -/* -cx.js - -Copyright (C) 2022 Strudel contributors - see -This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . -*/ - -function cx(...classes) { - // : Array - return classes.filter(Boolean).join(' '); +function $(...e) { + return e.filter(Boolean).join(" "); } - -let highlights = []; // actively highlighted events -let lastEnd; - -function useHighlighting({ view, pattern, active }) { - useEffect(() => { - if (view) { - if (pattern && active) { - let frame = requestAnimationFrame(updateHighlights); - - function updateHighlights() { +function ye({ view: e, pattern: o, active: r, getTime: n }) { + const s = I([]), i = I(); + q(() => { + if (e) + if (o && r) { + let t = function() { try { - const audioTime = Tone.getTransport().seconds; - const span = [lastEnd || audioTime, audioTime + 1 / 60]; - lastEnd = audioTime + 1 / 60; - highlights = highlights.filter((hap) => hap.whole.end > audioTime); // keep only highlights that are still active - const haps = pattern.queryArc(...span).filter((hap) => hap.hasOnset()); - highlights = highlights.concat(haps); // add potential new onsets - view.dispatch({ effects: setHighlights.of(highlights) }); // highlight all still active + new active haps - } catch (err) { - // console.log('error in updateHighlights', err); - view.dispatch({ effects: setHighlights.of([]) }); + const l = n(), f = [Math.max(i.current || l, l - 1 / 10), l + 1 / 60]; + i.current = l + 1 / 60, s.current = s.current.filter((d) => d.whole.end > l); + const p = o.queryArc(...f).filter((d) => d.hasOnset()); + s.current = s.current.concat(p), e.dispatch({ effects: O.of(s.current) }); + } catch { + e.dispatch({ effects: O.of([]) }); } - frame = requestAnimationFrame(updateHighlights); - } - + a = requestAnimationFrame(t); + }, a = requestAnimationFrame(t); return () => { - cancelAnimationFrame(frame); + cancelAnimationFrame(a); }; - } else { - highlights = []; - view.dispatch({ effects: setHighlights.of([]) }); - } - } - }, [pattern, active, view]); + } else + s.current = [], e.dispatch({ effects: O.of([]) }); + }, [o, r, e]); } - -var tailwind = ''; - -const container = "_container_10e1g_1"; -const header = "_header_10e1g_5"; -const buttons = "_buttons_10e1g_9"; -const button = "_button_10e1g_9"; -const buttonDisabled = "_buttonDisabled_10e1g_17"; -const error = "_error_10e1g_21"; -const body = "_body_10e1g_25"; -var styles = { - container: container, - header: header, - buttons: buttons, - button: button, - buttonDisabled: buttonDisabled, - error: error, - body: body +const be = "_container_3i85k_1", we = "_header_3i85k_5", ve = "_buttons_3i85k_9", Ee = "_button_3i85k_9", ke = "_buttonDisabled_3i85k_17", Ce = "_error_3i85k_21", Me = "_body_3i85k_25", F = { + container: be, + header: we, + buttons: ve, + button: Ee, + buttonDisabled: ke, + error: Ce, + body: Me }; - -function Icon({ type }) { - return /* @__PURE__ */ React.createElement("svg", { +function W({ type: e }) { + return /* @__PURE__ */ y.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "sc-h-5 sc-w-5", viewBox: "0 0 20 20", fill: "currentColor" }, { - refresh: /* @__PURE__ */ React.createElement("path", { + refresh: /* @__PURE__ */ y.createElement("path", { fillRule: "evenodd", d: "M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.999 7H9a1 1 0 010 2H4a1 1 0 01-1-1V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.001 13H11a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z", clipRule: "evenodd" }), - play: /* @__PURE__ */ React.createElement("path", { + play: /* @__PURE__ */ y.createElement("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zM9.555 7.168A1 1 0 008 8v4a1 1 0 001.555.832l3-2a1 1 0 000-1.664l-3-2z", clipRule: "evenodd" }), - pause: /* @__PURE__ */ React.createElement("path", { + pause: /* @__PURE__ */ y.createElement("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zM7 8a1 1 0 012 0v4a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v4a1 1 0 102 0V8a1 1 0 00-1-1z", clipRule: "evenodd" }) - }[type]); + }[e]); } - -function MiniRepl({ tune, defaultSynth, hideOutsideView = false }) { - const { code, setCode, pattern, activateCode, error, cycle, dirty, togglePlay } = useRepl({ - tune, - defaultSynth, - autolink: false +function Be({ tune: e, hideOutsideView: o = !1, init: r, onEvent: n, enableKeyboard: s }) { + const { code: i, setCode: a, pattern: t, activeCode: l, activateCode: c, evaluateOnly: f, error: p, cycle: d, dirty: k, togglePlay: g, stop: C } = pe({ + tune: e, + autolink: !1, + onEvent: n }); - const [view, setView] = useState(); - const [ref, isVisible] = useInView({ + q(() => { + r && f(); + }, [e, r]); + const [v, h] = w(), [D, _] = te({ threshold: 0.01 - }); - const wasVisible = useRef(); - const show = useMemo(() => { - if (isVisible || !hideOutsideView) { - wasVisible.current = true; + }), E = I(), L = R(() => ((_ || !o) && (E.current = !0), _ || E.current), [_, o]); + return ye({ + view: v, + pattern: t, + active: d.started && !l?.includes("strudel disable-highlighting"), + getTime: () => M.getTransport().seconds + }), j(() => { + if (s) { + const H = async (x) => { + (x.ctrlKey || x.altKey) && (x.code === "Enter" ? (x.preventDefault(), ie(v), await c()) : x.code === "Period" && (d.stop(), x.preventDefault())); + }; + return window.addEventListener("keydown", H, !0), () => window.removeEventListener("keydown", H, !0); } - return isVisible || wasVisible.current; - }, [isVisible, hideOutsideView]); - useHighlighting({ view, pattern, active: cycle.started }); - return /* @__PURE__ */ React.createElement("div", { - className: styles.container, - ref - }, /* @__PURE__ */ React.createElement("div", { - className: styles.header - }, /* @__PURE__ */ React.createElement("div", { - className: styles.buttons - }, /* @__PURE__ */ React.createElement("button", { - className: cx(styles.button, cycle.started ? "sc-animate-pulse" : ""), - onClick: () => togglePlay() - }, /* @__PURE__ */ React.createElement(Icon, { - type: cycle.started ? "pause" : "play" - })), /* @__PURE__ */ React.createElement("button", { - className: cx(dirty ? styles.button : styles.buttonDisabled), - onClick: () => activateCode() - }, /* @__PURE__ */ React.createElement(Icon, { + }, [s, t, i, c, d, v]), /* @__PURE__ */ y.createElement("div", { + className: F.container, + ref: D + }, /* @__PURE__ */ y.createElement("div", { + className: F.header + }, /* @__PURE__ */ y.createElement("div", { + className: F.buttons + }, /* @__PURE__ */ y.createElement("button", { + className: $(F.button, d.started ? "sc-animate-pulse" : ""), + onClick: () => g() + }, /* @__PURE__ */ y.createElement(W, { + type: d.started ? "pause" : "play" + })), /* @__PURE__ */ y.createElement("button", { + className: $(k ? F.button : F.buttonDisabled), + onClick: () => c() + }, /* @__PURE__ */ y.createElement(W, { type: "refresh" - }))), error && /* @__PURE__ */ React.createElement("div", { - className: styles.error - }, error.message)), /* @__PURE__ */ React.createElement("div", { - className: styles.body - }, show && /* @__PURE__ */ React.createElement(CodeMirror, { - value: code, - onChange: setCode, - onViewChanged: setView + }))), p && /* @__PURE__ */ y.createElement("div", { + className: F.error + }, p.message)), /* @__PURE__ */ y.createElement("div", { + className: F.body + }, L && /* @__PURE__ */ y.createElement(de, { + value: i, + onChange: a, + onViewChanged: h }))); } - -/* -useWebMidi.js - -Copyright (C) 2022 Strudel contributors - see -This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . -*/ - -function useWebMidi(props) { - const { ready, connected, disconnected } = props; - const [loading, setLoading] = useState(true); - const [outputs, setOutputs] = useState(WebMidi?.outputs || []); - useEffect(() => { - enableWebMidi() - .then(() => { - // Reacting when a new device becomes available - WebMidi.addListener('connected', (e) => { - setOutputs([...WebMidi.outputs]); - connected?.(WebMidi, e); - }); - // Reacting when a device becomes unavailable - WebMidi.addListener('disconnected', (e) => { - setOutputs([...WebMidi.outputs]); - disconnected?.(WebMidi, e); - }); - ready?.(WebMidi); - setLoading(false); - }) - .catch((err) => { - if (err) { - console.error(err); - //throw new Error("Web Midi could not be enabled..."); - console.warn('Web Midi could not be enabled..'); - return; - } - }); - }, [ready, connected, disconnected, outputs]); - const outputByName = (name) => WebMidi.getOutputByName(name); - return { loading, outputs, outputByName }; +function Te(e, o, r = 0.05, n = 0.1, s = 0.1) { + let i = 0, a = 0, t = 10 ** 4, l = 0.01; + const c = (h) => r = h(r); + s = s || n / 2; + const f = () => { + const h = e(), D = h + n + s; + for (a === 0 && (a = h + l); a < D; ) + a = Math.round(a * t) / t, a >= h && o(a, r, i), a < h && console.log("TOO LATE", a), a += r, i++; + }; + let p; + const d = () => { + f(), p = setInterval(f, n * 1e3); + }, k = () => clearInterval(p); + return { setDuration: c, start: d, stop: () => { + i = 0, a = 0, k(); + }, pause: () => k(), duration: r, getPhase: () => a }; } - -export { CodeMirror, MiniRepl, cx, useCycle, useHighlighting, usePostMessage, useRepl, useWebMidi }; +class _e { + worker; + pattern; + started = !1; + cps = 1; + getTime; + phase = 0; + constructor({ interval: o, onTrigger: r, onError: n, getTime: s, latency: i = 0.1 }) { + this.getTime = s; + const a = (t) => Math.round(t * 1e3) / 1e3; + this.clock = Te( + s, + (t, l, c) => { + c === 0 && (this.origin = t); + const f = a(t - this.origin); + this.phase = f - i; + const p = a(f + l), d = s(); + try { + this.pattern.queryArc(f, p).forEach((g) => { + if (g.part.begin.equals(g.whole.begin)) { + const C = g.whole.begin + this.origin - d + i, v = g.duration * 1; + r?.(g, C, v); + } + }); + } catch (k) { + console.warn("scheduler error", k), n?.(k); + } + }, + o + ); + } + getPhase() { + return this.phase; + } + start() { + if (!this.pattern) + throw new Error("Scheduler: no pattern set! call .setPattern first."); + this.clock.start(), this.started = !0; + } + pause() { + this.clock.stop(), delete this.origin, this.started = !1; + } + stop() { + delete this.origin, this.clock.stop(), this.started = !1; + } + setPattern(o) { + this.pattern = o; + } + setCps(o = 1) { + this.cps = o; + } + log(o, r, n) { + const s = n.filter((i) => i.hasOnset()); + console.log(`${o.toFixed(4)} - ${r.toFixed(4)} ${Array(s.length).fill("I").join("")}`); + } +} +function Ve({ defaultOutput: e, interval: o, getTime: r, code: n, evalOnMount: s = !1 }) { + const [i, a] = w(), [t, l] = w(), [c, f] = w(n), [p, d] = w(), k = n !== c, g = R( + () => new _e({ interval: o, onTrigger: e, onError: a, getTime: r }), + [e, o] + ), C = T(async () => { + if (!n) { + console.log("no code.."); + return; + } + try { + const { pattern: h } = await G(n); + f(n), g?.setPattern(h), d(h), l(); + } catch (h) { + l(h), console.warn("eval error", h); + } + }, [n, g]), v = I(); + return q(() => { + !v.current && s && (v.current = !0, C()); + }, [C, s]), { schedulerError: i, scheduler: g, evalError: t, evaluate: C, activeCode: c, isDirty: k, pattern: p }; +} +const $e = (e) => j(() => (window.addEventListener("keydown", e, !0), () => window.removeEventListener("keydown", e, !0)), [e]); +function We(e) { + const { ready: o, connected: r, disconnected: n } = e, [s, i] = w(!0), [a, t] = w(N?.outputs || []); + return q(() => { + se().then(() => { + N.addListener("connected", (c) => { + t([...N.outputs]), r?.(N, c); + }), N.addListener("disconnected", (c) => { + t([...N.outputs]), n?.(N, c); + }), o?.(N), i(!1); + }).catch((c) => { + if (c) { + console.error(c), console.warn("Web Midi could not be enabled.."); + return; + } + }); + }, [o, r, n, a]), { loading: s, outputs: a, outputByName: (c) => N.getOutputByName(c) }; +} +export { + de as CodeMirror, + Be as MiniRepl, + $ as cx, + ie as flash, + fe as useCycle, + ye as useHighlighting, + $e as useKeydown, + ge as usePostMessage, + pe as useRepl, + Ve as useStrudel, + We as useWebMidi +}; diff --git a/packages/react/dist/style.css b/packages/react/dist/style.css index 55d715b1..ba86df52 100644 --- a/packages/react/dist/style.css +++ b/packages/react/dist/style.css @@ -1 +1 @@ -*,:before,:after{--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sc-h-5{height:1.25rem}.sc-w-5{width:1.25rem}@keyframes sc-pulse{50%{opacity:.5}}.sc-animate-pulse{animation:sc-pulse 2s cubic-bezier(.4,0,.6,1) infinite}._container_10e1g_1{overflow:hidden;border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(68 76 87 / var(--tw-bg-opacity))}._header_10e1g_5{display:flex;justify-content:space-between;border-top-width:1px;--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity))}._buttons_10e1g_9{display:flex}._button_10e1g_9{display:flex;width:4rem;cursor:pointer;align-items:center;justify-content:center;border-right-width:1px;--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity));padding:.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._button_10e1g_9:hover{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity))}._buttonDisabled_10e1g_17{display:flex;width:4rem;cursor:pointer;cursor:not-allowed;align-items:center;justify-content:center;--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity));padding:.25rem;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity))}._error_10e1g_21{padding:.25rem;text-align:right;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}._body_10e1g_25{position:relative;overflow:auto} +.cm-editor{background-color:transparent!important;height:100%;z-index:11;font-size:16px}.cm-theme-light{width:100%}.cm-line>*{background:#00000095}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sc-h-5{height:1.25rem}.sc-w-5{width:1.25rem}@keyframes sc-pulse{50%{opacity:.5}}.sc-animate-pulse{animation:sc-pulse 2s cubic-bezier(.4,0,.6,1) infinite}._container_3i85k_1{overflow:hidden;border-radius:.375rem;--tw-bg-opacity: 1;background-color:rgb(34 34 34 / var(--tw-bg-opacity))}._header_3i85k_5{display:flex;justify-content:space-between;border-top-width:1px;--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity))}._buttons_3i85k_9{display:flex}._button_3i85k_9{display:flex;width:4rem;cursor:pointer;align-items:center;justify-content:center;border-right-width:1px;--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity));padding:.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}._button_3i85k_9:hover{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity))}._buttonDisabled_3i85k_17{display:flex;width:4rem;cursor:pointer;cursor:not-allowed;align-items:center;justify-content:center;--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity));padding:.25rem;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity))}._error_3i85k_21{padding:.25rem;text-align:right;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity))}._body_3i85k_25{position:relative;overflow:auto} diff --git a/packages/react/examples/nano-repl/.gitignore b/packages/react/examples/nano-repl/.gitignore new file mode 100644 index 00000000..d5554a64 --- /dev/null +++ b/packages/react/examples/nano-repl/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +!dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/react/examples/nano-repl/dist/assets/index.0dabc914.js b/packages/react/examples/nano-repl/dist/assets/index.0dabc914.js new file mode 100644 index 00000000..d95eacda --- /dev/null +++ b/packages/react/examples/nano-repl/dist/assets/index.0dabc914.js @@ -0,0 +1 @@ +import{e as D,j as R,l as E,q as O}from"./index.ec9f9930.js";var T={exports:{}};(function(b,N){(function(m,g){b.exports=g()})(self,()=>(()=>{var m={d:(e,t)=>{for(var s in t)m.o(t,s)&&!m.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},g={};function h(e,t){if(this.msg=e,this.ac=t.ac,this.sampleBank=t.sampleBank,this.outputNode=t.destination,this.cutGroups=t.cutGroups,this.eventCounter=t.eventCounter,this.audioOutputs=t.audioOutputs,this.workletsAvailable=t.workletsAvailable,typeof e.buffer=="object")this.bufferContainer=e.buffer;else{if(this.sampleBank==null)return void console.log("WebDirt: there is no sample bank, cancelling event");if(typeof this.sampleBank!="object")return void console.log("WebDirt: buffer not provided by calling application + no WebDirt sample bank");if(this.msg.n=parseInt(this.msg.n),isNaN(this.msg.n)&&(this.msg.n=0),!this.sampleBank.sampleNameExists(this.msg.s))return void console.log("WebDirt: no sample named "+this.msg.s+" exists in sample map");if(!this.sampleBank.getBufferMightSucceed(this.msg.s,this.msg.n))return}if(this.when=this.msg.when,isNaN(this.when))console.log("WebDirt: 'when' is null or not a number");else if(this.nudge=parseFloat(this.msg.nudge),isNaN(this.nudge)||(this.when=this.when+this.nudge),isNaN(parseFloat(this.msg.speed))&&(this.msg.speed=1),this.msg.speed!=0)if(isNaN(parseFloat(this.msg.note))&&(this.msg.note=0),this.msg.speed=this.msg.speed*Math.pow(2,this.msg.note/12),this.msg.begin=w(this.msg.begin,0),this.msg.end=w(this.msg.end,1),this.msg.end!=this.msg.begin){if(this.msg.begin>this.msg.end&&(this.msg.speed=-1*this.msg.speed),this.msg.speed<0&&(this.msg.begin=1-this.msg.begin,this.msg.end=1-this.msg.end),this.msg.begin>this.msg.end){let W=this.msg.begin;this.msg.begin=this.msg.end,this.msg.end=W}var s;if(this.source=s=this.ac.createBufferSource(),this.source.onended=this.disconnectHandler(),this.disconnectOnEnd(this.source),this.source.playbackRate.value=Math.abs(this.msg.speed),this.prepareBuffer(),this.buffer!=null)this.source.buffer=this.buffer,this.start();else{var a=this,n=1e3*(this.msg.when-this.ac.currentTime-.2);n<=0&&(n=1e3*(this.msg.when-this.ac.currentTime-.2)),n>0&&setTimeout(function(){a.prepareBuffer(),a.buffer!=null?(a.source.buffer=a.buffer,a.start()):(console.log("WebDirt: unable to access sample "+e.s+":"+e.n+" on second attempt"),a.stopAll())},n)}this.cut(this.msg.cut,this.msg.s),s=this.shape(s,this.msg.shape),s=this.lowPassFilter(s,this.msg.cutoff,this.msg.resonance),s=this.highPassFilter(s,this.msg.hcutoff,this.msg.hresonance),s=this.bandPassFilter(s,this.msg.bandf,this.msg.bandq),s=this.vowel(s,this.msg.vowel),s=this.delay(s,this.msg.delay,this.msg.delaytime,this.msg.delayfeedback),s=this.loop(s,this.msg.loop,this.msg.begin,this.msg.end,this.msg.speed),s=this.crush(s,this.msg.crush),s=this.coarse(s,this.msg.coarse),this.unit(this.msg.unit,this.msg.speed);var i=parseFloat(this.msg.gain);isNaN(i)&&(i=1),i>2&&(i=2),i<0&&(i=0);var o=parseFloat(this.msg.overgain);isNaN(o)||(i+=o),i=Math.pow(i,4);var r,c,l,u=parseFloat(e.pan);if(isNaN(u)&&(u=.5),this.audioOutputs==2)(u>1||u<0)&&(u-=Math.floor(u)),r=u,c=0,l=1;else{var A=(u-=Math.floor(u))*this.audioOutputs;(l=(c=Math.floor(A))+1)>=this.audioOutputs&&(l=0),r=A-Math.floor(A)}var v=this.ac.createGain();this.disconnectOnEnd(v);var S=this.ac.createGain();this.disconnectOnEnd(S),v.gain.value=Math.cos(r*Math.PI/2)*i,S.gain.value=Math.sin(r*Math.PI/2)*i,s.connect(v),s.connect(S),this.gain1=v,this.gain2=S;var k=this.ac.createChannelMerger(this.audioOutputs);this.disconnectOnEnd(k),v.connect(k,0,c),S.connect(k,0,l),k.connect(this.outputNode)}else this.stopAll()}function w(e,t){let s=parseFloat(e);return isNaN(s)?t:s>1?1:s<0?0:s}m.r(g),m.d(g,{WebDirt:()=>f}),h.prototype.prepareBuffer=function(){typeof this.bufferContainer=="object"?typeof this.bufferContainer.buffer=="object"&&(this.msg.speed>=0?this.buffer=this.bufferContainer.buffer:(typeof this.bufferContainer.reverseBuffer=="object"||(this.bufferContainer.reverseBuffer=this.reverseBuffer(this.ac,this.bufferContainer.buffer)),this.buffer=this.bufferContainer.reverseBuffer)):(this.msg.speed>=0?this.buffer=this.sampleBank.getBuffer(this.msg.s,this.msg.n):this.buffer=this.sampleBank.getReverseBuffer(this.msg.s,this.msg.n),this.buffer=this.accel(this.buffer,this.msg.accelerate,this.msg.speed))},h.prototype.disconnectOnEnd=function(e){this.source.disconnectQueue==null&&(this.source.disconnectQueue=new Array),this.source.disconnectQueue.unshift(e)},h.prototype.start=function(){let e=Math.abs(this.msg.speed),t=(this.msg.end-this.msg.begin)*this.source.buffer.duration/e,s=this.msg.begin*this.source.buffer.duration;this.source.start(this.when,s,t)},h.prototype.stopAll=function(){if(this.source!=null&&this.source.disconnectQueue!=null){for(var e=0;e1&&this.workletsAvailable){var s=new AudioWorkletNode(this.ac,"coarse-processor");return s.parameters.get("coarse").value=t,e.connect(s),this.disconnectOnEnd(s),s}return e},h.prototype.crush=function(e,t){if(t=parseInt(t),isNaN(t)&&(t=null),t!=null&&t>0&&this.workletsAvailable){var s=new AudioWorkletNode(this.ac,"crush-processor");return s.parameters.get("crush").value=t,e.connect(s),this.disconnectOnEnd(s),s}return e},h.prototype.cut=function(e,t){if(e=parseInt(e),!isNaN(e)&&e!=0){for(var s={cutGroup:e,node:this,sampleName:t},a=0;a2e4&&(t=2e4),isNaN(parseFloat(s))&&(s=0),s<0&&(s=0),s>1&&(s=1),s=1/(s=1-.999*(s*=s));var a=this.ac.createBiquadFilter();return this.disconnectOnEnd(a),a.type="highpass",a.frequency.value=t,a.Q.value=s,e.connect(a),a},h.prototype.lowPassFilter=function(e,t,s){if(isNaN(parseFloat(t))&&isNaN(parseFloat(s)))return e;isNaN(parseFloat(t))&&(t=440),t<20&&(t=20),t>2e4&&(t=2e4),isNaN(parseFloat(s))&&(s=0),s<0&&(s=0),s>1&&(s=1),s=1/(s=1-.999*(s*=s));var a=this.ac.createBiquadFilter();return this.disconnectOnEnd(a),a.type="lowpass",a.frequency.value=t,a.Q.value=s,e.connect(a),a},h.prototype.bandPassFilter=function(e,t,s){if(isNaN(parseFloat(t))&&isNaN(parseFloat(s)))return e;isNaN(parseFloat(t))&&(t=440),t<20&&(t=20),t>2e4&&(t=2e4),isNaN(parseFloat(s))&&(s=10),s<1&&(s=1),s>100&&(s=100);var a=this.ac.createBiquadFilter();return this.disconnectOnEnd(a),a.type="bandpass",a.frequency.value=t,a.Q.value=s,a.gain.value=s,e.connect(a),a},h.prototype.loop=function(e,t){if(isNaN(parseInt(t))||t==0)return e;try{var s=this.source.buffer.duration-this.msg.begin*this.source.buffer.duration-(1-this.msg.end)*this.source.buffer.duration;return this.source.loop=!0,this.source.loopStart=this.msg.begin*this.source.buffer.duration,this.source.loopEnd=this.msg.end*this.source.buffer.duration,this.source.stop(this.when+s*t/this.source.playbackRate.value),e}catch{return console.log("WebDirt Warning: buffer data not yet available to calculate loop time - no looping applied"),e}},h.prototype.accelerate=function(e,t){if(t=Math.abs(t),isNaN(parseFloat(e))&&(e=0),e!=0){e=parseFloat(e),this.source.playbackRate.setValueAtTime(t,this.when);var s=Math.abs((this.source.buffer.length*e/this.ac.sampleRate+t)/t),a=t+this.source.buffer.length*e/this.ac.sampleRate;if(a<0)this.source.buffer=this.negativeAccelerateBuffer(this.source.buffer,e,t),this.source.playbackRate.linearRampToValueAtTime(0,this.when+s),this.source.playbackRate.linearRampToValueAtTime(1,this.when+this.source.buffer.duration);else try{this.source.playbackRate.linearRampToValueAtTime(a,this.when+this.source.buffer.duration)}catch{console.log("WebDirt: Warning, buffer data not loaded, could not apply acclerate effect")}}},h.prototype.negativeAccelerateBuffer=function(e,t,s){var a=e.length,n=new Float32Array(a),i=this.ac.createBuffer(e.numberOfChannels,e.length,this.ac.sampleRate),o=new Float32Array(a),r=Math.abs(s/(s-t))*a;r=a*Math.abs((this.source.buffer.length*t/this.ac.sampleRate+s)/s)/this.source.buffer.duration,r=Math.trunc(r);for(var c=0;c=1&&(t=.999),t>0&&this.workletsAvailable){var s=new AudioWorkletNode(this.ac,"shape-processor");return s.parameters.get("shape").value=t,e.connect(s),this.disconnectOnEnd(s),s}return e},h.prototype.stop=function(e){this.gain1.gain.setValueAtTime(this.gain1.gain.value,e),this.gain1.gain.linearRampToValueAtTime(0,e+.02),this.gain2.gain.setValueAtTime(this.gain1.gain.value,e),this.gain2.gain.linearRampToValueAtTime(0,e+.02)},h.prototype.unit=function(e,t){e=="c"&&(this.source.playbackRate.value=this.source.playbackRate.value*this.source.buffer.duration)},h.prototype.vowel=function(e,t){if(typeof t!="string")return e;if((t=t.toLowerCase())=="a"||t=="e"||t=="i"||t=="o"||t=="u"){var s,a,n,i=this.ac.createGain();switch(this.disconnectOnEnd(i),t){case"a":s=p.a.freqs,a=p.a.qs,n=p.a.amps;break;case"e":s=p.e.freqs,a=p.e.qs,n=p.e.amps;break;case"i":s=p.i.freqs,a=p.i.qs,n=p.i.amps;break;case"o":s=p.o.freqs,a=p.o.qs,n=p.o.amps;break;case"u":s=p.u.freqs,a=p.u.qs,n=p.u.amps}for(var o=0;o<5;o++){var r=this.ac.createGain();this.disconnectOnEnd(r),r.gain.value=n[o];var c=this.ac.createBiquadFilter();this.disconnectOnEnd(c),c.type="bandpass",c.Q.value=a[o]/8,c.frequency.value=s[o],e.connect(c),c.connect(r),r.connect(i)}return i.gain.value=8,i}return e},h.prototype.reverseBuffer=function(e,t){for(var s=t.length,a=new Float32Array(s),n=e.createBuffer(t.numberOfChannels,t.length,e.sampleRate),i=new Float32Array(s),o=0;o{console.log("WebDirt: audio worklets added"),this.workletsAvailable=!0}).catch(t=>{console.log("WebDirt: error loading AudioWorklets.js: "+t),console.log("(WebDirt should still work but shape, coarse, and crush will have no effect)"),this.workletsAvailable=!1}):(console.log("WebDirt: browser does not support audio worklets"),console.log("(WebDirt should still work but shape, coarse, and crush will have no effect)"),this.workletsAvailable=!1),this.tempo={time:this.ac.currentTime,beats:0,bpm:30},this.clockDiff=Date.now()/1e3-this.ac.currentTime,this.sampleBank!=null&&(this.sampleBank.ac=this.ac),this.silentNote=this.ac.createOscillator(),this.silentNote.type="sine",this.silentNote.frequency.value=440,this.silentGain=this.ac.createGain(),this.silentGain.gain.value=0,this.silentNote.connect(this.silentGain),this.silentGain.connect(this.ac.destination),this.silentNote.start();var e=this;setTimeout(function(){e.silentGain.disconnect(e.ac.destination),e.silentNote.disconnect(e.silentGain),e.silentNote.stop(),e.silentGain=null,e.silentNote=null},500)}console.log("WebDirt: initializeWebAudio finished.")},f.prototype.playSample=function(e,t){if(t==null&&(t=this.latency),e.whenPosix!=null&&(e.when=e.whenPosix-(new Date().getTime()/1e3-this.ac.currentTime)),e.when==null&&(e.when=this.ac.currentTime),e.when=e.when+t,typeof e.maxLateness!="number"&&(e.maxLateness=this.maxLateness),this.ac.currentTime-e.when>e.maxLateness)return void console.log("WebDirt warning: dropping msg late by "+(this.ac.currentTime-e.when)+" seconds");let s=new h(e,this);return this.eventCounter++,s},f.prototype.playScore=function(e,t,s){this.initializeWebAudio(),t==null&&(t=this.latency);for(var a=this.ac.currentTime,n=0,i=0;in&&(n=o.when),o.when=o.when+a,o.s!=null&&(o.sample_name=o.s),o.n!=null&&(o.sample_n=o.n),this.playSample(o,t)}setTimeout(function(){typeof s=="function"&&s()},1e3*(n+t))},f.prototype.playScoreWhenReady=function(e,t,s,a){this.initializeWebAudio(),t==null&&(t=this.latency);for(var n=e.length,i=0;i{const N=async(m,g,h)=>{if(!y)throw new Error("WebDirt not initialized!");const w=m-h,{s:p,n:d=0,...f}=g.value||{};p||console.warn('Pattern.webdirt: no "s" was set!');const e=O();if(!(e!=null&&e[p])){y.playSample({s:p,n:d,...f},w);return}if(!(e!=null&&e[p]))console.warn(`Pattern.webdirt: sample "${p}" not found in loaded samples`,e);else{const t=e[p],s=t[d%t.length],a=R(s);if(!a)console.log(`Pattern.webdirt: load ${p}:${d} from ${s}`),E(s,y.ac);else{const n={buffer:{buffer:a},...f};y.playSample(n,w)}}};return b.setContext({...b.context,onTrigger:N})})};export{F as loadWebDirt}; diff --git a/packages/react/examples/nano-repl/dist/assets/index.5b4bbb94.js b/packages/react/examples/nano-repl/dist/assets/index.5b4bbb94.js new file mode 100644 index 00000000..dea97fdc --- /dev/null +++ b/packages/react/examples/nano-repl/dist/assets/index.5b4bbb94.js @@ -0,0 +1 @@ +import{P as o,m as p}from"./index.ec9f9930.js";function m(i){if(!/^[1-9]+[0-9]*edo$/.test(i))throw new Error('not an edo scale: "'+i+'"');const[n,e]=i.match(/^([1-9]+[0-9]*)edo$/);return Array.from({length:e},(r,s)=>Math.pow(2,s/e))}const d={"12ji":[1/1,16/15,9/8,6/5,5/4,4/3,45/32,3/2,8/5,5/3,16/9,15/8]};function f(i,n){return n.map(e=>e*i)}const l=220;function h(i,n){if(typeof i=="string")if(/^[1-9]+[0-9]*edo$/.test(i))i=m(i);else if(d[i])i=d[i];else throw new Error('unknown scale name: "'+i+'"');return i=f(l,i),n?i.filter((e,r)=>n.includes(r)):i}function u(i,n,e=0){const r=p(e+n,i.length),s=Math.floor(n/i.length);return i[r]*Math.pow(2,s)}o.prototype._xen=function(i,n){return this._asNumber()._withHap(e=>{const r=h(i);n=n||r.length;const s=u(r,e.value);return e.withValue(()=>s).setContext({...e.context,type:"frequency"})})};o.prototype.tuning=function(i){return this._asNumber()._withHap(n=>{const e=u(i,n.value);return n.withValue(()=>e).setContext({...n.context,type:"frequency"})})};o.prototype.define("xen",(i,n)=>n.xen(i),{composable:!0,patternified:!0});function t(){this.scale=[],this.mode={output:"frequency",input:"step"},this.etmajor=[261.62558,293.664764,329.627563,349.228241,391.995422,440,493.883301,523.25116],this.tonic=440}t.prototype.tonicize=function(i){this.tonic=i};t.prototype.note=function(i,n){var e;return this.mode.output=="frequency"?e=this.frequency(i,n):this.mode.output=="ratio"?e=this.ratio(i,n):this.mode.output=="MIDI"?e=this.MIDI(i,n):e=this.frequency(i,n),e};t.prototype.frequency=function(i,n){(this.mode.input=="midi"||this.mode.input=="MIDI")&&(this.stepIn+=60);var e=Math.floor(i/this.scale.length);n&&(e+=n);for(var r=i%this.scale.length;r<0;)r+=this.scale.length;var s=this.tonic*this.scale[r];return s=s*Math.pow(2,e),s=Math.floor(s*1e11)/1e11,s};t.prototype.ratio=function(i,n){(this.mode.input=="midi"||this.mode.input=="MIDI")&&(this.stepIn+=60);var e=Math.floor(i/this.scale.length);n&&(e+=n);var r=i%this.scale.length,s=Math.pow(2,e)*this.scale[r];return s=Math.floor(s*1e11)/1e11,s};t.prototype.MIDI=function(i,n){var e=this.frequency(i,n),r=69+12*Math.log(e/440)/Math.log(2);return r=Math.floor(r*1e9)/1e9,r};t.prototype.loadScale=function(i){var n=a[i].frequencies;this.scale=[];for(var e=0;e[1, 1, -1]->[0, 1, -1]->[0, 0, -1]->[0, 0, 0]->[0, -1, 0],[0, -1, 1]->[0, -2, 1]->[-1, -2, 1]"},breedt1:{frequencies:[261.6255653006,275.62199471997,292.34127285051,310.07474405997,326.6631048533,348.83408706747,367.49599295996,391.11111150212,413.43299207996,437.02884834934,465.11211608996,489.99465727995,523.2511306012],description:"Graham Breed's 1/4 P temperament, TL 10-06-99"},breedt2:{frequencies:[261.6255653006,276.37000081643,293.53214922797,310.91625060765,328.43856194079,349.78078158391,368.4933346061,392.4383479509,414.55500101742,439.10654054756,466.37437567834,492.65784266492,523.2511306012],description:"Graham Breed's 1/5 P temperament, TL 10-06-99"},breedt3:{frequencies:[261.6255653006,276.55731914056,293.33333347996,311.12698372208,328.88393162803,350.01785633742,368.74309237173,392.4383479509,414.83597850347,438.51190905657,466.69047534984,491.65745674141,523.2511306012],description:"Graham Breed's other 1/4 P temperament, TL 10-06-99"},brown:{frequencies:[261.6255653006,272.52663052146,275.62199471997,275.93321340298,279.38237857051,287.10624449997,290.69507255622,291.02331101095,294.32876096318,306.24666079997,306.59245933664,310.07474405997,310.42486507835,322.99452506247,327.03195662575,331.11985608357,344.52749339997,344.91651675372,348.83408706747,349.22797321314,363.36884069528,367.49599295996,367.91095120397,372.50983809402,382.80832599996,387.59343007496,388.03108134794,392.4383479509,408.78994578219,413.43299207996,413.89982010446,430.65936674996,436.04260883433,436.53496651643,441.49314144476,459.36999119996,459.88868900496,465.11211608996,465.63729761752,484.4917875937,489.99465727995,490.54793493862,496.67978412536,516.79124009995,517.37477513058,523.2511306012],description:"Tuning of Colin Brown's Voice Harmonium, Glasgow. Helmholtz/Ellis p. 470-473"},bruder:{frequencies:[261.6255653006,276.38325105256,293.66476791741,310.22971009486,327.53979283172,349.02656754477,368.60786575306,391.65594491223,414.34624765043,439.23819834286,465.62553897253,491.60634075178,523.2511306012],description:"Ignaz Bruder organ temperament (1829) according to P. Vier"},burma3:{frequencies:[261.6255653006,287.71029735626,317.68827763215,350.39147881787,389.32370520689,429.81331927092,476.14308821464,523.2511306012],description:"Burmese scale, von Hornbostel"},"burt-forks":{frequencies:[261.6255653006,271.31540105247,279.06726965397,290.69507255622,294.32876096318,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,406.97310157871,418.60090448096,436.04260883433,465.11211608996,470.92601754108,490.54793493862,504.56359022259,523.2511306012],description:"Warren Burt 19-tone Forks. Interval 5(3): pp. 13+23 Winter 1986-87"},burt1:{frequencies:[261.6255653006,272.09058791262,283.42769574232,295.75063903546,309.19384990071,340.11323489078,358.01393146398,377.90359432309,415.52295665389,425.14154361347,453.48431318771,485.87604984397,523.2511306012],description:"W. Burt's 13diatsub #1"},burt10:{frequencies:[261.6255653006,265.11390617127,268.69652652494,272.3773008609,276.16031892841,355.06326719367,368.21375857121,382.37582620857,386.08821287079,389.87339142835,393.73352401674,397.67085925691,523.2511306012],description:"W. Burt's 19enhsub #10"},burt11:{frequencies:[261.6255653006,344.24416486921,347.6866065179,351.12904816659,354.57148981529,358.01393146398,371.78369805875,385.55346465352,495.71159741166,502.59648070905,509.48136400643,516.36624730382,523.2511306012],description:"W. Burt's 19enhharm #11"},burt12:{frequencies:[261.6255653006,302.93486508491,316.70463167967,330.47439827444,344.24416486921,358.01393146398,371.78369805875,385.55346465352,440.63253103259,468.17206422213,495.71159741166,509.48136400643,523.2511306012],description:"W. Burt's 19diatharm #12"},burt13:{frequencies:[261.6255653006,273.51763645063,286.54228580542,293.53112204458,300.86940009569,334.29933343966,353.96400011258,376.08675011961,401.15920012759,429.81342870813,445.73244458621,462.87600014722,523.2511306012],description:"W. Burt's 23diatsub #13"},burt14:{frequencies:[261.6255653006,264.50057151269,267.43946675172,270.4444045804,273.51763645063,334.29933343966,353.96400011258,376.08675011961,382.05638107389,388.21858076863,394.58281979763,401.15920012759,523.2511306012],description:"W. Burt's 23enhsub #14"},burt15:{frequencies:[261.6255653006,341.25073734861,346.93824963775,352.6257619269,358.31327421604,364.00078650518,386.75083566176,409.50088481833,500.50108144463,506.18859373377,511.87610602291,517.56361831206,523.2511306012],description:"W. Burt's 23enhharm #15"},burt16:{frequencies:[261.6255653006,295.75063903546,307.12566361375,318.50068819203,341.25073734861,364.00078650518,386.75083566176,409.50088481833,455.00098313148,466.37600770977,477.75103228805,500.50108144463,523.2511306012],description:"W. Burt's 23diatharm #16"},burt17:{frequencies:[261.6255653006,262.27760655527,262.77528702311,280.51080915002,281.04308772525,281.33584094163,286.12102533302,286.66394947976,306.91182648178,308.56189006502,309.14739649778,336.61297098002,337.2517052703,337.60300912996,338.42271813583,339.41807907152,363.01398831179,369.18841978454,370.27426807802,396.01525997649,398.14437427744,399.31538714296,403.93556517602,406.10726176299,434.33931739357,434.79175418253,435.61678597414,437.95881170519,475.21831197179,476.86837555503,477.77324913293,478.27092960078,479.17846457156,521.20718087229,521.75010501903,522.74014316897,523.2511306012],description:`W. Burt's "2 out of 3,5,11,17,31 dekany" CPS with 1/1=3/1. 1/1 vol. 10(1) '98`},burt18:{frequencies:[261.6255653006,268.26840191956,269.80136421624,270.50397193556,275.42222597075,281.04308772525,286.15296204753,295.09524211152,300.46061014991,306.59245933664,309.14739649778,314.76825825228,321.92208230347,324.60476632267,337.2517052703,343.38355445704,344.27778246344,354.11429053382,357.69120255941,367.91095120397,370.97687579734,375.57576268738,393.46032281536,404.70204632437,413.13333895612,421.56463158788,429.2294430713,432.80635509689,449.66894036041,463.72109474667,472.15238737843,490.54793493862,491.82540351919,500.76768358318,505.87755790546,515.07533168556,523.2511306012],description:`W. Burt's "2 out of 1,3,5,7,11 dekany" CPS with 1/1=1/1. 1/1 vol. 10(1) '98`},burt19:{frequencies:[261.6255653006,268.26840191956,286.15296204753,294.32876096318,300.46061014991,306.59245933664,321.92208230347,327.03195662575,343.38355445704,357.69120255941,367.91095120397,375.57576268738,392.4383479509,400.61414686654,408.78994578219,429.2294430713,457.84473927605,490.54793493862,500.76768358318,515.07533168556,523.2511306012],description:`W. Burt's "2 out of 2,3,4,5,7 dekany" CPS with 1/1=1/1. 1/1 vol. 10(1) '98`},burt2:{frequencies:[261.6255653006,264.16561933264,266.75547834571,269.39662169567,272.09058791262,340.11323489078,344.41846571218,348.83408706747,353.36439988652,358.01393146398,412.25846653428,485.87604984397,523.2511306012],description:"W. Burt's 13enhsub #2"},burt20:{frequencies:[261.6255653006,269.10058145205,279.06726965397,279.38237857051,294.32876096318,298.00787047521,330.74639366397,335.25885428462,367.91095120397,376.74081403286,412.06026534844,418.60090448096,523.2511306012],description:'Warren Burt tuning for "Commas" (1993) 1/1=263. XH 16'},burt3:{frequencies:[261.6255653006,281.75060878526,332.06321749692,382.37582620857,387.40708707973,392.4383479509,397.46960882207,402.50086969323,503.12608711654,508.1573479877,513.18860885887,518.21986973003,523.2511306012],description:"W. Burt's 13enhharm #3"},burt4:{frequencies:[261.6255653006,281.75060878526,301.87565226992,322.00069575458,342.12573923925,362.25078272391,382.37582620857,402.50086969323,442.75095666255,462.87600014722,483.00104363188,503.12608711654,523.2511306012],description:"W. Burt's 13diatharm #4, see his post 3/30/94 in Tuning Digest #57"},burt5:{frequencies:[261.6255653006,277.97716313189,296.50897400735,317.68818643644,342.12573923925,277.97716313189,386.75083566176,404.33041910093,423.58424858192,444.76346101102,468.17206422213,494.18162334558,523.2511306012],description:"W. Burt's 17diatsub #5"},burt6:{frequencies:[261.6255653006,265.53042448419,269.55361273395,273.7005913914,277.97716313189,370.63621750918,386.75083566176,404.33041910093,408.97789518255,413.73345210327,418.60090448096,423.58424858192,523.2511306012],description:"W. Burt's 17enhsub #6"},burt7:{frequencies:[261.6255653006,323.18452184192,327.03195662575,330.87939140958,334.72682619341,338.57426097725,353.96400011258,369.35373924791,492.47165233054,500.16652189821,507.86139146587,515.55626103354,523.2511306012],description:"W. Burt's 17enhharm #7"},burt8:{frequencies:[261.6255653006,277.01530443593,292.40504357126,307.79478270659,323.18452184192,338.57426097725,353.96400011258,369.35373924791,400.13321751856,430.91269578922,461.69217405988,492.47165233054,523.2511306012],description:"W. Burt's 17diatharm #8"},burt9:{frequencies:[261.6255653006,268.69652652494,276.16031892841,292.40504357126,310.68035879446,355.06326719367,368.21375857121,382.37582620857,397.67085925691,414.24047839262,432.2509339749,451.89870370104,523.2511306012],description:"W. Burt's 19diatsub #9"},burt_fibo:{frequencies:[261.6255653006,277.97716313189,294.32876096318,311.70233365892,327.03195662575,343.38355445704,363.82305174615,385.28452389971,392.4383479509,425.14154361347,449.66894036041,476.24028683625,523.2511306012],description:'Warren Burt, 3/2+5/3+8/5+etc. "Recurrent Sequences", 2002'},burt_fibo23:{frequencies:[261.6255653006,267.05480676802,277.97716313189,282.81557538079,294.32876096318,299.5065008038,311.70233365892,327.03195662575,330.09788121912,343.38355445704,349.5792770728,363.82305174615,370.21039464899,385.28452389971,392.4383479509,408.02346463385,425.14154361347,432.10374737758,449.66894036041,457.60521391719,476.24028683625,484.61169812829,504.34459560877,523.2511306012],description:'Warren Burt, 23-tone Fibonacci scale. "Recurrent Sequences", 2002'},burt_primes:{frequencies:[261.6255653006,267.75741448733,273.88926367407,277.97716313189,280.0211128608,284.10901231862,290.24086150535,298.416660421,302.50455987882,304.54850960773,308.63640906555,310.68035879446,320.90010743902,322.94405716793,327.03195662575,333.16380581248,335.20775554139,339.29565499922,341.33960472813,351.55935337268,353.60330310159,359.73515228832,363.82305174615,365.86700147506,369.95490093288,376.08675011961,384.26254903526,390.39439822199,392.4383479509,394.48229767981,396.52624740872,402.65809659545,406.74599605328,412.87784524001,421.05364415565,425.14154361347,431.27339280021,433.31734252912,437.40524198694,445.58104090258,455.80078954714,457.84473927605,461.93263873387,463.97658846278,468.0644879206,474.19633710734,476.24028683625,482.37213602298,488.50398520971,492.59188466754,498.72373385427,506.89953276991,513.03138195665,519.16323114338,523.2511306012],description:'Warren Burt, primes until 251. "Some Numbers", Dec. 2002'},bushmen:{frequencies:[261.6255653006,347.0163224393,394.26624244126,453.9405988926,523.2511306012],description:"Observed scale of South-African bushmen, almost (4 notes) equal pentatonic"},dan_semantic:{frequencies:[261.6255653006,272.52663052146,275.62199471997,279.06726965397,290.69507255622,294.32876096318,297.67175429757,306.59245933664,310.07474405997,313.95067836072,322.99452506247,327.03195662575,331.11985608357,344.91651675372,348.83408706747,353.19451315581,363.36884069528,367.91095120397,372.08969287196,387.59343007496,392.4383479509,397.34382730029,408.78994578219,413.43299207996,418.60090448096,430.65936674996,436.04260883433,441.49314144476,459.88868900496,465.11211608996,470.92601754108,484.4917875937,490.54793493862,496.67978412536,516.79124009995,523.2511306012],description:'The Semantic Scale, from Alain Dani\xEF\xBF\xBDlou: "S\xEF\xBF\xBDmantique Musicale" (1967)'},danielou5_53:{frequencies:[261.6255653006,264.89588486686,267.90457886781,272.52663052146,275.62199471997,279.06726965397,282.55561052465,285.76488412567,290.69507255622,294.32876096318,297.67175429757,301.39265122629,306.59245933664,310.07474405997,313.95067836072,317.87506184023,322.99452506247,327.03195662575,331.11985608357,334.88072358477,340.65828815182,344.52749339997,348.83408706747,353.19451315581,357.20610515709,363.36884069528,367.91095120397,372.08969287196,376.74081403286,383.2405741708,387.59343007496,392.4383479509,397.34382730029,401.85686830172,408.78994578219,413.43299207996,418.60090448096,423.83341578697,430.65936674996,436.04260883433,441.49314144476,446.50763144636,454.2110508691,459.88868900496,465.11211608996,470.92601754108,479.0507177135,484.4917875937,490.54793493862,496.67978412536,502.32108537715,510.98743222773,516.79124009995,523.2511306012],description:"Dani\xEF\xBF\xBDlou's Harmonic Division in 5-limit, symmetrized"},danielou_53:{frequencies:[261.6255653006,264.89588486686,267.43946675172,272.52663052146,275.62199471997,279.06726965397,282.55561052465,287.78812183066,290.69507255622,294.32876096318,297.67175429757,301.87565226992,306.59245933664,310.07474405997,313.95067836072,318.93402246168,322.99452506247,327.03195662575,331.11985608357,334.88072358477,340.65828815182,344.52749339997,348.83408706747,353.19451315581,357.20610515709,363.36884069528,367.91095120397,372.08969287196,376.74081403286,383.2405741708,387.59343007496,392.4383479509,397.34382730029,401.85686830172,408.78994578219,413.43299207996,418.60090448096,423.83341578697,430.65936674996,436.04260883433,441.49314144476,446.50763144636,454.2110508691,459.88868900496,465.11211608996,470.92601754108,479.64686971777,484.4917875937,490.54793493862,496.67978412536,502.32108537715,510.98743222773,516.79124009995,523.2511306012],description:"Dani\xEF\xBF\xBDlou's Harmonic Division of the Octave, see p. 153"},darreg:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,306.59245933664,313.95067836072,327.03195662575,348.83408706747,367.91095120397,372.08969287196,392.4383479509,408.78994578219,418.60090448096,436.04260883433,441.49314144476,459.88868900496,470.92601754108,490.54793493862,523.2511306012],description:"This set of 19 ratios in 5-limit JI is for his megalyra family"},darreg_ennea:{frequencies:[261.6255653006,269.29177952703,277.18263097687,293.66476791741,349.22823143301,391.99543598175,403.48177901006,415.30469757995,440,523.2511306012],description:"Ivor Darreg's Mixed Enneatonic, a mixture of chromatic and enharmonic"},darreg_genus:{frequencies:[261.6255653006,271.31540105247,279.06726965397,290.69507255622,348.83408706747,392.4383479509,406.97310157871,418.60090448096,436.04260883433,523.2511306012],description:"Ivor Darreg's Mixed JI Genus (Archytas Enh, Ptolemy Soft Chrom, Didymos Chrom"},darreg_genus2:{frequencies:[261.6255653006,271.31540105247,279.06726965397,294.32876096318,348.83408706747,392.4383479509,406.97310157871,418.60090448096,441.49314144476,523.2511306012],description:"Darreg's Mixed JI Genus 2 (Archytas Enharmonic and Chromatic Genera)"},david11:{frequencies:[261.6255653006,269.80136421624,274.70684356563,285.40970760065,294.32876096318,305.22982618403,314.76825825228,327.03195662575,332.97799220076,343.38355445704,359.73515228832,366.27579142084,374.60024122586,392.4383479509,406.97310157871,419.69101100305,428.11456140098,441.49314144476,457.84473927605,479.64686971777,490.54793493862,499.46698830115,523.2511306012],description:"11-limit system from Gary David, 1967"},david7:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,336.37572681506,348.83408706747,366.27579142084,392.4383479509,418.60090448096,448.50096908674,470.92601754108,488.36772189445,523.2511306012],description:"Gary David's Constant Structure, 1967. A mode of Fokker's 7-limit scale"},ddimlim1:{frequencies:[261.6255653006,294.32876096318,306.59245933664,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,418.60090448096,436.04260883433,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"First 27/25&2048/1875 scale"},de_caus:{frequencies:[261.6255653006,272.52663052146,290.69507255622,306.59245933664,327.03195662575,348.83408706747,363.36884069528,392.4383479509,408.78994578219,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"De Caus (a mode of Ellis's duodene) (1615)"},degung1:{frequencies:[261.6255653006,286.1303811777,319.28416942365,390.63652710512,420.90734643474,523.2511306012],description:"Gamelan Degung, Kabupaten Sukabumi. 1/1=363 Hz"},degung2:{frequencies:[261.6255653006,276.67939184371,325.99375993805,390.36201910543,415.27879033283,523.2511306012],description:"Gamelan Degung, Kabupaten Bandung. 1/1=252 Hz"},degung3:{frequencies:[261.6255653006,282.83850205216,320.55017368416,393.28023705203,426.95140008307,523.2511306012],description:"Gamelan Degung, Kabupaten Sumedang. 1/1=388.5 Hz"},degung4:{frequencies:[261.6255653006,284.6485709981,319.18312009646,379.88037698982,415.46137490477,523.2511306012],description:"Gamelan Degung, Kasepuhan Cheribon. 1/1=250 Hz"},degung5:{frequencies:[261.6255653006,284.24274449773,317.86283634652,388.77066331187,430.33748813761,523.2511306012],description:"Gamelan Degung, Kanoman Cheribon. 1/1=428 Hz"},degung6:{frequencies:[261.6255653006,273.29426590363,298.47415715355,379.54129348313,409.02013274169,523.2511306012],description:"Gamelan Degung, Kacherbonan Cheribon. 1/1=426 Hz"},dekany:{frequencies:[261.6255653006,299.7792935736,305.22982618403,327.03195662575,359.73515228832,381.53728273004,419.69101100305,436.04260883433,457.84473927605,479.64686971777,523.2511306012],description:"2)5 Dekany 1.3.5.7.11 (1.3 tonic)"},dekany2:{frequencies:[261.6255653006,279.06726965397,299.00064605783,313.95067836072,348.83408706747,358.80077526939,398.6675280771,418.60090448096,448.50096908674,465.11211608996,523.2511306012],description:"3)5 Dekany 1.3.5.7.9 (1.3.5.7.9 tonic)"},dekany3:{frequencies:[261.6255653006,294.32876096318,305.22982618403,327.03195662575,343.38355445704,381.53728273004,392.4383479509,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"2)5 Dekany 1.3.5.7.9 and 3)5 Dekany 1 1/3 1/5 1/7 1/9"},dekany4:{frequencies:[261.6255653006,270.96933548991,288.48890459486,310.68035879446,321.77608589426,355.06326719367,425.14154361347,440.3251701711,474.19633710734,485.87604984397,523.2511306012],description:"2)5 Dekany 1.7.13.19.29 (1.7 tonic)"},dekany_union:{frequencies:[261.6255653006,274.70684356563,294.32876096318,305.22982618403,327.03195662575,343.38355445704,366.27579142084,381.53728273004,392.4383479509,412.06026534844,436.04260883433,457.84473927605,470.92601754108,490.54793493862,523.2511306012],description:"Union of 2)5 and 3)5 [ 1 3 5 7 9] dekanies"},dent:{frequencies:[261.6255653006,276.73939277812,293.41671964988,311.13637945111,328.33487278761,349.18153137729,368.9858570375,391.91718148616,414.84850593482,438.82216331296,465.92281947955,491.98114271667,523.2511306012],description:"Tom Dent, well temperament with A=421 Hz. Integer Hz beat rates from A"},dent2:{frequencies:[261.6255653006,276.57667301797,293.18838124587,310.79781949647,328.55897053596,349.10502918563,369.05532299592,391.67735584266,414.54302837239,438.92977277749,465.83490899549,492.45596147139,523.2511306012],description:"Tom Dent, well-temperament, 2/32 and 5/32 comma. TL 3 & 5-9-2005"},dent3:{frequencies:[261.6255653006,276.38325105256,293.15632631094,310.94732162256,328.48713220126,349.22823143301,368.7143392539,391.76907592069,414.58565256441,438.73106346722,466.16376151809,492.17459484008,523.2511306012],description:'Tom Dent, Bach harpsichord "sine wave" temperament, TL 10-10-2005'},deporcy:{frequencies:[261.6255653006,272.52663052146,286.15296204753,299.00064605783,313.95067836072,327.03195662575,348.83408706747,358.80077526939,381.53728273004,392.4383479509,418.60090448096,436.04260883433,457.84473927605,478.40103369253,502.32108537715,523.2511306012],description:"A 15-note chord-based detempering of 7-limit porcupine"},diab19_612:{frequencies:[261.6255653006,267.01398215014,280.33982809972,299.03492334906,305.19382000629,313.95883772326,320.42510414137,327.02455105776,348.83292260574,366.24210002542,373.7851897098,392.43965797471,418.61038382265,427.23204601759,436.03127668087,448.5538823653,457.79225819026,488.32116993744,512.69177642068,523.2511306012],description:"diab19a in 612-tET"},diab19_72:{frequencies:[261.6255653006,266.71173418545,279.86396690685,299.37379946195,305.19382000629,314.13668154225,320.24370022528,326.46944327063,349.22823143301,366.44956000397,373.57357677338,391.99543598175,419.32216217931,427.47405410759,435.78442404634,448.5538823653,457.27406033445,489.15147723638,513.27277840175,523.2511306012],description:"diab19a in 72-tET"},diablack:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,331.11985608357,372.08969287196,392.4383479509,418.60090448096,441.49314144476,470.92601754108,523.2511306012],description:"Unique 256/245&2048/2025 Fokker block"},diachrome1:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,334.88072358477,367.91095120397,392.4383479509,418.60090448096,441.49314144476,470.92601754108,523.2511306012],description:"First 25/24&2048/2025 scale"},diacycle13:{frequencies:[261.6255653006,268.33391312882,275.39533189537,282.83844897362,290.69507255622,299.00064605783,307.79478270659,317.12189733406,327.03195662575,337.58137458142,348.83408706747,360.86284869048,373.75080757229,387.59343007496,402.50086969323,413.09299784305,424.25767346043,436.04260883433,448.50096908674,461.69217405988,475.68284600109,490.54793493862,506.37206187213,523.2511306012],description:"Diacycle on 20/13, 13/10; there are also nodes at 3/2, 4/3; 13/9, 18/13"},diaddim1:{frequencies:[261.6255653006,275.93321340298,294.32876096318,313.95067836072,334.88072358477,344.91651675372,357.20610515709,367.91095120397,392.4383479509,418.60090448096,446.50763144636,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"First 2048/2025&2048/1875 scale"},dialim1:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,334.88072358477,348.83408706747,353.19451315581,367.91095120397,392.4383479509,418.60090448096,441.49314144476,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"First 27/25&2048/2025 scale"},diamisty:{frequencies:[261.6255653006,275.93321340298,294.32876096318,310.42486507835,330.74639366397,348.83408706747,372.08969287196,392.4383479509,413.89982010446,436.53496651643,470.39487098876,496.11959049595,523.2511306012],description:"Diamisty scale 2048/2025 and 67108864/66430125"},diamond11a:{frequencies:[261.6255653006,279.06726965397,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,380.54627680087,392.4383479509,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,490.54793493862,523.2511306012],description:"11-limit Diamond with added 16/15 & 15/8, Zoomoozophone tuning: 1/1 = 392 Hz"},diamond11ak:{frequencies:[261.6255653006,279.72330032405,285.63317938628,287.78812183066,290.69507255622,293.86839138568,299.07491977616,305.39295512204,314.19649759716,319.76457981184,326.52043447049,333.41680553884,335.93301933283,349.10721912206,359.17247822875,366.75848641051,373.2589099097,381.14243472333,392.13131479202,407.50942884268,410.58480125643,419.25667855894,428.11456140098,435.70146034294,448.26139746089,457.73103588952,465.84075338014,470.92601754108,475.68284600109,479.27160679251,489.39746055879,523.2511306012],description:"microtempered version of diamond11a, Dave Keenan TL 11-1-2000, 225/224&385/384"},diamond11at:{frequencies:[261.6255653006,279.83704120119,285.33574350137,287.98268367985,290.84948650387,293.82121114493,299.2738827313,305.22380787491,314.19079532693,320.23980272009,326.48518221507,332.71524733285,336.02719554531,349.1122100506,359.53680125564,366.52331521885,373.4984028396,380.75621844446,392.12570885984,407.39521875769,411.45055399509,419.30194782174,427.47925671618,435.70936791853,448.50981249085,457.42672761267,465.91555560021,470.67599975252,475.36147343465,479.7712027167,489.19854301666,523.2511306012],description:"microtempered version of diamond11a, OdC"},diamond11map:{frequencies:[195.99771799087,228.66400432268,261.33029065449,293.99657698631,326.66286331812,359.32914964993,391.99543598174,457.32800864536,522.66058130899,587.99315397261,653.32572663623,718.65829929986,213.81569235368,249.45164107929,285.0875898049,320.72353853051,356.35948725613,391.99543598174,427.63138470735,498.90328215858,570.1751796098,641.44707706103,712.71897451225,783.99087196348,235.19726158904,274.39680518722,313.59634878539,352.79589238357,391.99543598174,431.19497957991,470.39452317809,548.79361037444,627.19269757078,705.59178476713,783.99087196348,862.38995915983,261.33029065449,304.88533909691,348.44038753932,391.99543598174,435.55048442416,479.10553286657,522.66058130899,609.77067819382,696.88077507865,783.99087196348,871.10096884831,958.21106573314,293.99657698631,342.99600648402,391.99543598174,440.99486547946,489.99429497718,538.99372447489,587.99315397261,685.99201296804,783.99087196348,881.98973095892,979.98858995435,1077.98744894978,335.99608798435,391.99543598174,447.99478397913,503.99413197652,559.99347997391,615.99282797131,671.9921759687,783.99087196348,895.98956795826,1007.98826395305,1119.98695994783,1231.98565594261,783.99087196348],description:"11-limit diamond on a 'centreless' map"},diamond15:{frequencies:[261.6255653006,269.80136421624,279.06726965397,280.31310567921,281.75060878526,283.42769574232,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,301.87565226992,305.22982618403,309.19384990071,310.07474405997,313.95067836072,318.85615771011,319.76457981184,322.00069575458,327.03195662575,332.97799220076,336.37572681506,340.11323489078,343.38355445704,348.83408706747,356.76213450082,359.73515228832,362.25078272391,366.27579142084,367.91095120397,372.08969287196,373.75080757229,377.90359432309,380.54627680087,383.71749577421,392.4383479509,398.6675280771,402.50086969323,406.97310157871,411.12588832951,418.60090448096,425.14154361347,428.11456140098,429.33426100611,436.04260883433,441.49314144476,442.75095666255,448.50096908674,453.48431318771,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,483.00104363188,485.87604984397,488.36772189445,490.54793493862,507.3950357345,523.2511306012],description:"15-limit Diamond + 2nd ratios. See Novaro, 1927, Sistema Natural..."},diamond17:{frequencies:[261.6255653006,277.97716313189,281.75060878526,283.42769574232,285.40970760065,287.78812183066,299.00064605783,305.22982618403,307.79478270659,309.19384990071,313.95067836072,317.68818643644,322.00069575458,327.03195662575,332.97799220076,338.57426097725,340.11323489078,342.12573923925,348.83408706747,359.73515228832,366.27579142084,369.35373924791,370.63621750918,373.75080757229,380.54627680087,392.4383479509,400.13321751856,402.50086969323,404.33041910093,411.12588832951,418.60090448096,425.14154361347,430.91269578922,436.04260883433,442.75095666255,444.76346101102,448.50096908674,457.84473927605,475.68284600109,479.64686971777,483.00104363188,485.87604984397,492.47165233054,523.2511306012],description:"17-limit Diamond"},diamond17a:{frequencies:[261.6255653006,277.01530443593,277.97716313189,281.75060878526,283.42769574232,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,307.79478270659,309.19384990071,313.95067836072,317.68818643644,319.76457981184,322.00069575458,327.03195662575,332.97799220076,336.37572681506,338.57426097725,340.11323489078,342.12573923925,348.83408706747,359.73515228832,362.25078272391,366.27579142084,369.35373924791,370.63621750918,373.75080757229,377.90359432309,380.54627680087,392.4383479509,400.13321751856,402.50086969323,404.33041910093,406.97310157871,411.12588832951,418.60090448096,425.14154361347,428.11456140098,430.91269578922,436.04260883433,442.75095666255,444.76346101102,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,483.00104363188,485.87604984397,492.47165233054,494.18162334558,523.2511306012],description:"17-limit, +9 Diamond"},diamond19:{frequencies:[261.6255653006,275.39533189537,277.97716313189,281.75060878526,283.42769574232,285.40970760065,287.78812183066,292.40504357126,299.00064605783,302.93486508491,305.22982618403,307.79478270659,309.19384990071,310.68035879446,313.95067836072,317.68818643644,322.00069575458,327.03195662575,330.47439827444,332.97799220076,338.57426097725,340.11323489078,342.12573923925,348.83408706747,355.06326719367,358.01393146398,359.73515228832,366.27579142084,369.35373924791,370.63621750918,373.75080757229,380.54627680087,382.37582620857,385.55346465352,392.4383479509,400.13321751856,402.50086969323,404.33041910093,411.12588832951,414.24047839262,418.60090448096,425.14154361347,430.91269578922,436.04260883433,440.63253103259,442.75095666255,444.76346101102,448.50096908674,451.89870370104,457.84473927605,468.17206422213,475.68284600109,479.64686971777,483.00104363188,485.87604984397,492.47165233054,497.08857407114,523.2511306012],description:"19-limit Diamond"},diamond7:{frequencies:[261.6255653006,299.00064605783,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,373.75080757229,392.4383479509,418.60090448096,436.04260883433,448.50096908674,457.84473927605,523.2511306012],description:"7-limit Diamond, also double-tie circular mirroring of 4:5:6:7"},diamond9:{frequencies:[261.6255653006,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,523.2511306012],description:"9-limit Diamond"},diamond_chess:{frequencies:[261.6255653006,299.00064605783,313.95067836072,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,406.97310157871,436.04260883433,457.84473927605,523.2511306012],description:"9-limit chessboard pattern diamond. OdC"},diamond_chess11:{frequencies:[261.6255653006,287.78812183066,299.00064605783,313.95067836072,319.76457981184,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,380.54627680087,392.4383479509,406.97310157871,428.11456140098,436.04260883433,457.84473927605,475.68284600109,523.2511306012],description:"11-limit chessboard pattern diamond. OdC"},diamond_dup:{frequencies:[261.6255653006,274.70684356563,280.31310567921,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,343.38355445704,348.83408706747,366.27579142084,373.75080757229,392.4383479509,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,490.54793493862,523.2511306012],description:"Two 7-limit diamonds 3/2 apart"},diamond_mod:{frequencies:[261.6255653006,269.10058145205,271.31540105247,279.06726965397,327.03195662575,336.37572681506,348.83408706747,392.4383479509,406.97310157871,418.60090448096,490.54793493862,504.56359022259,508.71637697339,523.2511306012],description:"13-tone Octave Modular Diamond, based on Archytas's Enharmonic"},diamond_tetr:{frequencies:[261.6255653006,271.31540105247,279.06726965397,327.03195662575,336.37572681506,339.14425131559,348.83408706747,358.80077526939,523.2511306012],description:"Tetrachord Modular Diamond based on Archytas's Enharmonic"},diaphonic_10:{frequencies:[261.6255653006,277.01530443593,294.32876096318,313.95067836072,336.37572681506,362.25078272391,392.4383479509,418.60090448096,448.50096908674,483.00104363188,523.2511306012],description:"10-tone Diaphonic Cycle"},diaphonic_12:{frequencies:[261.6255653006,274.70684356563,289.16509849014,305.22982618403,323.18452184192,343.38355445704,366.27579142084,392.4383479509,413.09299784305,436.04260883433,461.69217405988,490.54793493862,523.2511306012],description:"12-tone Diaphonic Cycle, conjunctive form on 3/2 and 4/3"},diaphonic_12a:{frequencies:[261.6255653006,274.70684356563,289.16509849014,305.22982618403,323.18452184192,343.38355445704,366.27579142084,385.55346465352,406.97310157871,430.91269578922,457.84473927605,488.36772189445,523.2511306012],description:"2nd 12-tone Diaphonic Cycle, conjunctive form on 10/7 and 7/5"},diaphonic_5:{frequencies:[261.6255653006,299.00064605783,348.83408706747,392.4383479509,448.50096908674,523.2511306012],description:"D5-tone Diaphonic Cycle"},diaphonic_7:{frequencies:[261.6255653006,285.40970760065,313.95067836072,348.83408706747,380.54627680087,418.60090448096,465.11211608996,523.2511306012],description:"7-tone Diaphonic Cycle, disjunctive form on 4/3 and 3/2"},diaschismic:{frequencies:[261.6255653006,266.61097723855,278.05603152599,283.35453458855,295.51835494038,301.14961170579,314.07733767684,320.06224556188,333.80185153667,340.16262034629,354.76509561975,369.99442271164,377.04485988831,393.23061088369,400.72382577504,417.92606548687,425.88986517773,444.17243057662,452.63636847719,472.06710558841,481.06259110609,501.71360968203,523.2511306012],description:"diaschismic temperament, g=105.446531, p=600, 5-limit"},diat13:{frequencies:[261.6255653006,279.06726965397,322.00069575458,348.83408706747,392.4383479509,418.60090448096,483.00104363188,523.2511306012],description:"This genus is from K.S's diatonic Hypodorian harmonia"},diat15:{frequencies:[261.6255653006,301.87565226992,327.03195662575,356.76213450082,373.75080757229,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"Tonos-15 Diatonic and its own trite synemmenon Bb"},diat15_inv:{frequencies:[261.6255653006,279.06726965397,313.95067836072,348.83408706747,366.27579142084,383.71749577421,418.60090448096,453.48431318771,523.2511306012],description:"Inverted Tonos-15 Harmonia, a harmonic series from 15 from 30."},diat17:{frequencies:[261.6255653006,296.50897400735,342.12573923925,370.63621750918,386.75083566176,404.33041910093,444.76346101102,494.18162334558,523.2511306012],description:"Tonos-17 Diatonic and its own trite synemmenon Bb"},diat19:{frequencies:[261.6255653006,276.16031892841,310.68035879446,355.06326719367,368.21375857121,382.37582620857,414.24047839262,451.89870370104,523.2511306012],description:"Tonos-19 Diatonic and its own trite synemmenon Bb"},diat21:{frequencies:[261.6255653006,289.16509849014,305.22982618403,343.38355445704,366.27579142084,392.4383479509,422.62591317789,457.84473927605,523.2511306012],description:"Tonos-21 Diatonic and its own trite synemmenon Bb"},diat21_inv:{frequencies:[261.6255653006,299.00064605783,323.91736656265,348.83408706747,373.75080757229,398.6675280771,448.50096908674,473.41768959156,523.2511306012],description:"Inverted Tonos-21 Harmonia, a harmonic series from 21 from 42."},diat23:{frequencies:[261.6255653006,286.54228580542,300.86940009569,334.29933343966,353.96400011258,376.08675011961,429.81342870813,462.87600014722,523.2511306012],description:"Tonos-23 Diatonic and its own trite synemmenon Bb"},diat25:{frequencies:[261.6255653006,297.30177875068,327.03195662575,363.36884069528,384.74347838324,408.78994578219,467.18850946536,503.12608711654,523.2511306012],description:"Tonos-25 Diatonic and its own trite synemmenon Bb"},diat27:{frequencies:[261.6255653006,294.32876096318,336.37572681506,353.19451315581,371.78369805875,392.4383479509,441.49314144476,504.56359022259,523.2511306012],description:"Tonos-27 Diatonic and its own trite synemmenon Bb"},diat27_inv:{frequencies:[261.6255653006,271.31540105247,310.07474405997,348.83408706747,377.90359432309,387.59343007496,406.97310157871,465.11211608996,523.2511306012],description:"Inverted Tonos-27 Harmonia, a harmonic series from 27 from 54"},diat29:{frequencies:[261.6255653006,291.81313052759,316.13089140489,344.87006335079,361.29244731988,379.35706968587,421.50785520652,474.19633710734,523.2511306012],description:"Tonos-29 Diatonic and its own trite synemmenon Bb"},diat31:{frequencies:[261.6255653006,289.65687586852,311.93817401225,337.93302184661,352.6257619269,368.65420565085,405.51962621593,450.57736246214,523.2511306012],description:"Tonos-31 Diatonic. The disjunctive and conjunctive diatonic forms are the same"},diat33:{frequencies:[261.6255653006,287.78812183066,319.76457981184,359.73515228832,375.37581108347,392.4383479509,431.68218274599,479.64686971777,523.2511306012],description:"Tonos-33 Diatonic. The conjunctive form is 23 (Bb instead of B) 20 18 33/2"},diat_chrom:{frequencies:[261.6255653006,280.31310567921,301.87565226992,348.83408706747,392.4383479509,420.46965851882,452.81347840488,523.2511306012],description:"Diatonic- Chromatic, on the border between the chromatic and diatonic genera"},diat_dies2:{frequencies:[261.6255653006,266.71168334607,311.12698372208,349.22823143301,391.99543598175,399.61600264311,466.16376151809,523.2511306012],description:"Dorian Diatonic, 2 part Diesis"},diat_dies5:{frequencies:[261.6255653006,274.52693220706,311.12698372208,349.22823143301,391.99543598175,411.32564531909,466.16376151809,523.2511306012],description:"Dorian Diatonic, 5 part Diesis"},diat_enh:{frequencies:[261.6255653006,269.29177952703,311.12698372208,349.22823143301,391.99543598175,403.48177901006,466.16376151809,523.2511306012],description:"Diat. + Enharm. Diesis, Dorian Mode"},diat_enh2:{frequencies:[261.6255653006,269.29177952703,302.26980244078,349.22823143301,391.99543598175,403.48177901006,452.89298412314,523.2511306012],description:"Diat. + Enharm. Diesis, Dorian Mode 3 + 12 + 15 parts"},diat_enh3:{frequencies:[261.6255653006,302.26980244078,311.12698372208,349.22823143301,391.99543598175,452.89298412314,466.16376151809,523.2511306012],description:"Diat. + Enharm. Diesis, Dorian Mode, 15 + 3 + 12 parts"},diat_enh4:{frequencies:[261.6255653006,302.26980244078,339.28638158975,349.22823143301,391.99543598175,452.89298412314,508.3551866238,523.2511306012],description:"Diat. + Enharm. Diesis, Dorian Mode, 15 + 12 + 3 parts"},diat_enh5:{frequencies:[261.6255653006,293.66476791741,339.28638158975,349.22823143301,391.99543598175,440,508.3551866238,523.2511306012],description:"Dorian Mode, 12 + 15 + 3 parts"},diat_enh6:{frequencies:[261.6255653006,293.66476791741,302.26980244078,349.22823143301,391.99543598175,440,452.89298412314,523.2511306012],description:"Dorian Mode, 12 + 3 + 15 parts"},diat_eq:{frequencies:[261.6255653006,288.06466200271,317.1754314895,349.22823143301,391.99543598175,431.60932167676,475.22619361214,523.2511306012],description:"Equal Diatonic, Islamic form, similar to 11/10 x 11/10 x 400/363"},diat_eq2:{frequencies:[261.6255653006,287.78812183066,317.12189733406,348.83408706747,392.4383479509,431.68218274599,475.68284600109,523.2511306012],description:"Equal Diatonic, 11/10 x 400/363 x 11/10"},diat_gold:{frequencies:[261.6255653006,292.38332274669,326.75708630452,349.99258496952,391.13935185123,437.1232727958,488.51296691354,523.2511306012],description:"Diatonic scale with ratio between whole and half tone the Golden Section"},diat_hemchrom:{frequencies:[261.6255653006,273.20871865617,311.12698372208,349.22823143301,391.99543598175,409.35055662695,466.16376151809,523.2511306012],description:"Diat. + Hem. Chrom. Diesis, Another genus of Aristoxenos, Dorian Mode"},diat_smal:{frequencies:[261.6255653006,299.00064605783,327.03195662575,348.83408706747,392.4383479509,436.04260883433,457.84473927605,523.2511306012],description:'"Smallest number" diatonic scale'},diat_sofchrom:{frequencies:[261.6255653006,271.8968348557,311.12698372208,349.22823143301,391.99543598175,407.38495184466,466.16376151809,523.2511306012],description:"Diat. + Soft Chrom. Diesis, Another genus of Aristoxenos, Dorian Mode"},diat_soft:{frequencies:[261.6255653006,274.52693220706,302.26980244078,349.22823143301,391.99543598175,411.32564531909,452.89298412314,523.2511306012],description:"Soft Diatonic genus 5 + 10 + 15 parts"},diat_soft2:{frequencies:[261.6255653006,281.2143451833,302.26980244078,349.22823143301,391.99543598175,421.34544350737,452.89298412314,523.2511306012],description:"Soft Diatonic genus with equally divided Pyknon; Dorian Mode"},diat_soft3:{frequencies:[261.6255653006,281.2143451833,324.90175210669,349.22823143301,391.99543598175,421.34544350737,486.80259447109,523.2511306012],description:"New Soft Diatonic genus with equally divided Pyknon; Dorian Mode; 1:1 pyknon"},diat_soft4:{frequencies:[261.6255653006,302.26980244078,324.90175210669,349.22823143301,391.99543598175,452.89298412314,486.80259447109,523.2511306012],description:"New Soft Diatonic genus with equally divided Pyknon; Dorian Mode; 1:1 pyknon"},dicot:{frequencies:[261.6255653006,270.35822989652,294.32876096318,320.42456924675,331.11985608357,360.47764004221,392.4383479509,405.53734464206,441.49314144476,480.63685362987,523.2511306012],description:"Dicot temperament, g=350.9775, 5-limit"},didy_chrom:{frequencies:[261.6255653006,279.06726965397,290.69507255622,348.83408706747,392.4383479509,418.60090448096,436.04260883433,523.2511306012],description:"Didymus Chromatic"},didy_chrom1:{frequencies:[261.6255653006,279.06726965397,334.88072358477,348.83408706747,392.4383479509,418.60090448096,502.32108537715,523.2511306012],description:"Permuted Didymus Chromatic"},didy_chrom2:{frequencies:[261.6255653006,313.95067836072,327.03195662575,348.83408706747,392.4383479509,470.92601754108,490.54793493862,523.2511306012],description:"Didymos's Chromatic, 6/5 x 25/24 x 16/15"},didy_chrom3:{frequencies:[261.6255653006,272.52663052146,290.69507255622,348.83408706747,392.4383479509,408.78994578219,436.04260883433,523.2511306012],description:"Didymos's Chromatic, 25/24 x 16/15 x 6/5"},didy_diat:{frequencies:[261.6255653006,279.06726965397,310.07474405997,348.83408706747,392.4383479509,418.60090448096,465.11211608996,523.2511306012],description:"Didymus Diatonic"},didy_diatinv:{frequencies:[261.6255653006,294.32876096318,327.03195662575,348.83408706747,392.4383479509,441.49314144476,490.54793493862,523.2511306012],description:"Inverse Didymus Diatonic, variant of Ptolemy with 2 identical triads"},didy_enh:{frequencies:[261.6255653006,270.06509966514,279.06726965397,348.83408706747,392.4383479509,405.0976494977,418.60090448096,523.2511306012],description:"Dorian mode of Didymos's Enharmonic"},didy_enh2:{frequencies:[261.6255653006,275.62199471997,279.06726965397,348.83408706747,392.4383479509,413.43299207996,418.60090448096,523.2511306012],description:"Permuted Didymus Enharmonic"},"diesic-m":{frequencies:[261.6255653006,289.62525622617,320.62153003931,354.93508703008,392.92094947462,434.97213484265,481.52372211906,523.2511306012],description:"Minimal Diesic temperament, g=176.021, 5-limit"},"diesic-t":{frequencies:[261.6255653006,272.92239980638,281.87304203955,294.04415210774,303.68749398125,316.80053726141,327.19018747082,337.92057205022,352.51178108166,364.07260143821,379.79303732838,392.24856169057,409.18561859271,422.60509148244,436.46466102477,455.31094249407,470.24311865111,490.54793493862,506.63572944675,523.2511306012],description:"Tiny Diesic temperament, g=443.017, 5-limit"},diff31_72:{frequencies:[261.6255653006,269.29177952703,274.52698453615,279.86396690685,285.30470202322,293.66476791741,299.37379946195,305.19382000629,314.13668154225,320.24370022528,326.46944327063,336.03572815422,342.56848033562,352.60650301302,356.01745236555,366.44956000397,373.57357677338,384.52011812375,388.23978476841,399.61607881612,407.38487419079,419.32216217931,427.47405410759,435.78442404634,448.5538823653,457.27406033445,466.16376151809,479.82340237272,489.15147723638,498.66089874196,508.3551866238,523.2511306012],description:"Diff31, 11/9, 4/3, 7/5, 3/2, 7/4, 9/5 difference diamond, tempered to 72-et"},dimteta:{frequencies:[261.6255653006,282.55561052465,307.12566361375,336.37572681506,406.97310157871,439.53094970501,477.75103228805,523.2511306012],description:"A heptatonic form on the 9/7"},dimtetb:{frequencies:[261.6255653006,294.32876096318,336.37572681506,406.97310157871,457.84473927605,523.2511306012],description:"A pentatonic form on the 9/7"},div_fifth1:{frequencies:[261.6255653006,273.00058987889,285.40970760065,348.83408706747,392.4383479509,523.2511306012],description:"Divided Fifth #1, From Schlesinger, see Chapter 8, p. 160"},div_fifth2:{frequencies:[261.6255653006,279.06726965397,299.00064605783,348.83408706747,392.4383479509,523.2511306012],description:"Divided Fifth #2, From Schlesinger, see Chapter 8, p. 160"},div_fifth3:{frequencies:[261.6255653006,271.31540105247,305.22982618403,348.83408706747,392.4383479509,523.2511306012],description:"Divided Fifth #3, From Schlesinger, see Chapter 8, p. 160"},div_fifth4:{frequencies:[261.6255653006,274.70684356563,305.22982618403,343.38355445704,392.4383479509,523.2511306012],description:"Divided Fifth #4, From Schlesinger, see Chapter 8, p. 160"},div_fifth5:{frequencies:[261.6255653006,287.78812183066,319.76457981184,359.73515228832,411.12588832951,523.2511306012],description:"Divided Fifth #5, From Schlesinger, see Chapter 8, p. 160"},dkring1:{frequencies:[261.6255653006,274.70684356563,305.22982618403,313.95067836072,320.49131749323,327.03195662575,366.27579142084,392.4383479509,439.53094970501,448.50096908674,457.84473927605,470.92601754108,523.2511306012],description:"Double-tie circular mirroring of 4:5:6:7"},dkring2:{frequencies:[261.6255653006,274.70684356563,305.22982618403,329.64821227876,336.37572681506,353.19451315581,366.27579142084,392.4383479509,406.97310157871,427.32175665765,436.04260883433,470.92601754108,523.2511306012],description:"Double-tie circular mirroring of 3:5:7:9"},dkring3:{frequencies:[261.6255653006,294.32876096318,299.00064605783,305.22982618403,336.37572681506,348.83408706747,384.42940207435,392.4383479509,398.6675280771,448.50096908674,465.11211608996,504.56359022259,523.2511306012],description:"Double-tie circular mirroring of 6:7:8:9"},dkring4:{frequencies:[261.6255653006,290.69507255622,294.32876096318,299.00064605783,327.03195662575,336.37572681506,367.91095120397,373.75080757229,378.42269266694,420.46965851882,467.18850946536,470.92601754108,523.2511306012],description:"Double-tie circular mirroring of 7:8:9:10"},dodeceny:{frequencies:[261.6255653006,275.93321340298,294.32876096318,306.59245933664,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,436.04260883433,441.49314144476,490.54793493862,523.2511306012],description:"Degenerate eikosany 3)6 from 1.3.5.9.15.45 tonic 1.3.15"},dorian_chrom:{frequencies:[261.6255653006,279.06726965397,299.00064605783,310.07474405997,315.92521092903,322.00069575458,348.83408706747,380.54627680087,398.6675280771,408.39112632289,418.60090448096,465.11211608996,523.2511306012,558.13453930795,598.00129211566,620.14948811994,631.85042185805,644.00139150917,697.66817413493,761.09255360175,797.33505615421,816.78225264578,837.20180896192,930.22423217991,1046.5022612024],description:"Dorian Chromatic Tonos"},dorian_chrom2:{frequencies:[261.6255653006,274.08392555301,287.78812183066,359.73515228832,411.12588832951,426.35277308246,442.75095666255,523.2511306012],description:"Schlesinger's Dorian Harmonia in the chromatic genus"},dorian_chrominv:{frequencies:[261.6255653006,273.00058987889,285.40970760065,332.97799220076,380.54627680087,404.33041910093,428.11456140098,523.2511306012],description:"A harmonic form of Schlesinger's Chromatic Dorian inverted"},dorian_diat:{frequencies:[261.6255653006,279.06726965397,299.00064605783,322.00069575458,334.88072358477,348.83408706747,364.00078650518,380.54627680087,418.60090448096,440.63253103259,465.11211608996,492.47165233054,523.2511306012,558.13453930795,598.00129211566,644.00139150917,669.76144716954,697.66817413493,728.00157301037,761.09255360175,837.20180896192,881.26506206518,930.22423217991,984.94330466108,1046.5022612024],description:"Dorian Diatonic Tonos"},dorian_diat2:{frequencies:[261.6255653006,287.78812183066,319.76457981184,359.73515228832,383.71749577421,411.12588832951,442.75095666255,479.64686971777,523.2511306012],description:"Schlesinger's Dorian Harmonia, a subharmonic series through 13 from 22"},dorian_diat2inv:{frequencies:[261.6255653006,285.40970760065,309.19384990071,332.97799220076,356.76213450082,380.54627680087,428.11456140098,475.68284600109,523.2511306012],description:"Inverted Schlesinger's Dorian Harmonia, a harmonic series from 11 from 22"},dorian_diatcon:{frequencies:[261.6255653006,287.78812183066,319.76457981184,359.73515228832,383.71749577421,411.12588832951,479.64686971777,523.2511306012],description:"A Dorian Diatonic with its own trite synemmenon replacing paramese"},dorian_diatred11:{frequencies:[261.6255653006,287.78812183066,316.56693401373,348.83408706747,392.4383479509,431.68218274599,474.85040102059,523.2511306012],description:"Dorian mode of a diatonic genus with reduplicated 11/10"},dorian_enh:{frequencies:[261.6255653006,279.06726965397,299.00064605783,304.4370214407,307.2300216374,310.07474405997,348.83408706747,380.54627680087,389.39619021485,393.97732186443,398.6675280771,465.11211608996,523.2511306012,558.13453930795,598.00129211566,608.8740428814,614.4600432748,620.14948811994,697.66817413493,761.09255360175,778.79238042969,787.95464372887,797.33505615421,930.22423217991,1046.5022612024],description:"Dorian Enharmonic Tonos"},dorian_enh2:{frequencies:[261.6255653006,267.70988077271,274.08392555301,359.73515228832,411.12588832951,426.35277308246,442.75095666255,523.2511306012],description:"Schlesinger's Dorian Harmonia in the enharmonic genus"},dorian_enhinv:{frequencies:[261.6255653006,267.19206668997,273.00058987889,332.97799220076,380.54627680087,392.4383479509,404.33041910093,523.2511306012],description:"A harmonic form of Schlesinger's Dorian enharmonic inverted"},dorian_pent:{frequencies:[261.6255653006,271.49822814213,287.78812183066,359.73515228832,411.12588832951,423.21782622156,442.75095666255,523.2511306012],description:"Schlesinger's Dorian Harmonia in the pentachromatic genus"},dorian_pis:{frequencies:[261.6255653006,299.00064605783,322.00069575458,348.83408706747,380.54627680087,418.60090448096,465.11211608996,523.2511306012,558.13453930795,598.00129211566,644.00139150917,697.66817413493,761.09255360175,837.20180896192,930.22423217991,1046.5022612024],description:"Diatonic Perfect Immutable System in the Dorian Tonos, a non-rep. 16 tone gamut"},dorian_schl:{frequencies:[261.6255653006,274.08392555301,287.78812183066,302.93486508491,319.76457981184,338.57426097725,359.73515228832,383.71749577421,411.12588832951,442.75095666255,460.46099492906,479.64686971777,523.2511306012],description:"Schlesinger's Dorian Piano Tuning (Sub 22)"},dorian_tri1:{frequencies:[261.6255653006,269.80136421624,278.50463402967,359.73515228832,411.12588832951,421.15334902048,431.68218274599,523.2511306012],description:"Schlesinger's Dorian Harmonia in the first trichromatic genus"},dorian_tri2:{frequencies:[261.6255653006,269.80136421624,287.78812183066,359.73515228832,411.12588832951,421.15334902048,442.75095666255,523.2511306012],description:"Schlesinger's Dorian Harmonia in the second trichromatic genus"},douwes:{frequencies:[261.6255653006,273.00058987889,292.50063201309,313.39353429974,327.01933943691,350.37786403433,365.61168556196,391.72680409,408.75840577964,436.81779569448,468.01906681552,488.36772189445,523.2511306012],description:"Claas Douwes recommendation of 24/23 and 15/14 steps for clavichord (1699)"},dow_high:{frequencies:[261.6255653006,277.01530443593,278.50463402967,294.32876096318,308.34441624714,313.31771328338,327.34193952303,331.11985608357,346.88746827803,348.83408706747,369.35373924791,392.4383479509,417.75695104451,441.49314144476,462.5166243707],description:"Highest octave of Dowlands lute tuning, strings 5,6. 1/1=G (1610)"},dow_lmh:{frequencies:[261.6255653006,278.50463402967,294.32876096318,308.34441624714,327.34193952303,348.83408706747,369.35373924791,371.33951203956,392.4383479509,411.12588832951,417.75695104451,436.45591936403,441.49314144476,462.5166243707,465.11211608996,492.47165233054,495.11934938608,523.2511306012,548.16785110602,557.00926805934,581.94122581871,588.65752192635,616.68883249427,620.14948811994,626.63542656676,656.62886977405,662.23971216714,693.77493655606,697.66817413493,736.51936392681,742.67902407912,784.8766959018,822.25177665903,831.04591330779,835.51390208901,882.98628288953,925.03324874141,939.95313985014,982.02581856908,993.35956825072,1040.66240483408,1046.5022612024,1108.06121774372,1114.01853611868,1177.3150438527,1233.37766498854,1253.27085313352,1309.3677580921,1324.47942433429,1387.54987311211,1395.33634826987,1477.41495699162,1569.7533918036,1671.02780417803,1765.97256577905,1850.06649748281],description:"All three octaves of Dowland's lute tuning"},dow_low:{frequencies:[261.6255653006,278.50463402967,294.32876096318,308.34441624714,327.34193952303,348.83408706747,369.35373924791,371.33951203956,392.4383479509,411.12588832951,417.75695104451,436.45591936403,441.49314144476,462.5166243707,465.11211608996,492.47165233054,495.11934938608,523.2511306012],description:"Lowest octave of Dowlands lute tuning, strings 1,2,3. 1/1=G. (1610)"},dow_middle:{frequencies:[261.6255653006,274.08392555301,278.50463402967,290.97061290936,294.32876096318,308.34441624714,310.07474405997,313.31771328338,328.31443488703,331.11985608357,346.88746827803,348.83408706747,368.2596819634,371.33951203956,392.4383479509,411.12588832951,415.52295665389,417.75695104451,441.49314144476,462.5166243707,469.97656992507,491.01290928454,496.67978412536,520.33120241704,523.2511306012],description:"Middle octave of Dowlands lute tuning, strings 3,4,5. 1/1=G (1610)"},dowland_12:{frequencies:[261.6255653006,278.50463402967,294.32876096318,308.34441624714,327.34193952303,348.83408706747,369.35373924791,392.4383479509,417.75695104451,441.49314144476,462.5166243707,492.47165233054,523.2511306012],description:"subset of Dowland's lute tuning, lowest octave"},druri:{frequencies:[261.6255653006,285.79952600623,326.97270111135,357.18467683857,523.2511306012],description:"Scale of druri dana of Siwoli, south Nias, Jaap Kunst"},dudon_a:{frequencies:[261.6255653006,285.85015468029,319.76457981184,348.83408706747,392.4383479509,428.77523202043,479.64686971777,523.2511306012],description:"Dudon Tetrachord A"},dudon_b:{frequencies:[261.6255653006,283.42769574232,321.58142401532,348.83408706747,392.4383479509,425.14154361347,482.37213602298,523.2511306012],description:"Dudon Tetrachord B"},dudon_c12:{frequencies:[261.6255653006,302.50455987882,327.03195662575,343.38355445704,392.4383479509,425.14154361347,474.19633710734,523.2511306012],description:"Differentially coherent scale in interval class 1 and 2"},dudon_diat:{frequencies:[261.6255653006,294.32876096318,321.08592105074,350.8160989258,392.4383479509,428.11456140098,481.6288815761,523.2511306012],description:"Dudon Neutral Diatonic"},dudon_moha_baya:{frequencies:[261.6255653006,285.30470202322,320.24370022528,349.22823143301,391.99543598175,427.47405410759,466.16376151809,523.2511306012],description:"Mohajira + Bayati (Dudon) 3 + 4 + 3 Mohajira and 3 + 3 + 4 Bayati tetrachords"},dudon_mohajira:{frequencies:[261.6255653006,285.30470202322,320.24370022528,349.22823143301,391.99543598175,427.47405410759,479.82340237272,523.2511306012],description:"Dudon's Mohajira, two 3 + 4 + 3 tetrachords, neutral diatonic"},dudon_mohajira_r:{frequencies:[261.6255653006,283.42769574232,321.58142401532,348.83408706747,392.4383479509,425.14154361347,479.64686971777,523.2511306012],description:"Jacques Dudon, JI Mohajira, Lumi\xEF\xBF\xBDres audibles"},dudon_thai:{frequencies:[261.6255653006,288.26147859917,317.63518509943,350.43752981487,386.47021463976,426.17461277719,469.97930400405,523.2511306012],description:"Dudon, coherent Thai heptatonic scale, 1/1 vol. 11/2, 2003"},dudon_thai2:{frequencies:[261.6255653006,288.02814528506,314.43072526953,347.1339209321,383.13743909274,422.44127975143,475.35895071461,523.2511306012],description:"Slightly better version, 3.685 cents deviation"},dudon_thai3:{frequencies:[261.6255653006,291.60349465796,321.58142401532,354.2846196779,394.48229767981,434.67997568173,478.96555314146,523.2511306012],description:"Dudon, Thai scale with two 704/703 = 2.46 c. deviations and simpler numbers"},duncan:{frequencies:[261.6255653006,277.97716313189,294.32876096318,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"Dudley Duncan's Superparticular Scale"},duoden12:{frequencies:[261.6255653006,275.93321340298,294.32876096318,310.42486507835,330.74639366397,348.83408706747,372.08969287196,392.4383479509,413.89982010446,440.99519155196,465.63729761752,496.11959049595,523.2511306012],description:"Almost equal 12-tone subset of Duodenarium"},duodenarium:{frequencies:[14.56761754744,14.73307690724,14.74971276678,14.91724036858,14.98726085128,15.00418372272,15.10370587319,15.17460161192,15.19173601925,15.34695511171,15.36428413207,15.5387920506,15.55633768372,15.71528203439,15.73302695124,15.80687667908,15.91172305982,15.92968978813,16.00446263757,16.18624171938,16.20451842054,16.38856974087,16.57471152064,16.59342686263,16.78189541465,16.86066845769,16.87970668806,16.99166910733,17.07142681341,17.26532450067,17.28481964857,17.48114105693,17.67969228869,17.69965532014,17.78273626396,17.90068844229,17.98471302153,18.00502046726,18.2095219343,18.41634613405,18.43714095848,18.64655046072,18.73407606409,18.85833844126,18.87963234148,18.9682520149,18.98967002407,19.18369388963,19.20535516508,19.42349006325,19.44542210465,19.64410254298,19.66628368904,19.88965382477,19.91211223516,20.00557829696,20.13827449758,20.23280214922,20.25564802567,20.48571217609,20.7183894008,20.74178357829,20.97736926831,21.07583557211,21.21563074642,21.23958638417,21.33928351676,21.58165562584,21.60602456072,21.85142632116,22.09961536086,22.12456915017,22.37586055287,22.48089127691,22.50627558408,22.65555880978,22.76190241787,23.02043266756,23.0464261981,23.3081880759,23.57292305158,23.59954042685,23.71031501862,23.86758458973,23.97961736204,24.00669395635,24.27936257907,24.30677763081,24.55512817873,24.5828546113,24.86206728096,24.89014029395,25.14445125502,25.17284312198,25.29100268653,25.31956003209,25.487503661,25.60714022011,25.897986751,25.92722947286,26.22171158539,26.51953843303,26.54948298021,26.67410439595,26.85103266344,26.9770695323,27.0075307009,27.31428290145,27.62451920107,27.65571143772,27.96982569108,28.10111409614,28.2875076619,28.31944851222,28.45237802234,28.77554083445,28.80803274762,29.13523509488],description:"Ellis's Duodenarium : genus [3^12 5^8]"},duodene:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Ellis's Duodene : genus [33355]"},"duodene14-18-21":{frequencies:[261.6255653006,271.31540105247,294.32876096318,305.22982618403,336.37572681506,348.83408706747,378.42269266694,392.4383479509,406.97310157871,448.50096908674,457.84473927605,504.56359022259,523.2511306012],description:"14-18-21 Duodene"},"duodene3-11_9":{frequencies:[261.6255653006,285.40970760065,294.32876096318,319.76457981184,321.08592105074,348.83408706747,359.73515228832,392.4383479509,426.35277308246,428.11456140098,479.64686971777,481.6288815761,523.2511306012],description:"3-11/9 Duodene"},"duodene3-7":{frequencies:[261.6255653006,294.32876096318,299.00064605783,305.22982618403,336.37572681506,343.38355445704,348.83408706747,392.4383479509,398.6675280771,448.50096908674,457.84473927605,515.07533168556,523.2511306012],description:"3-7 Duodene"},"duodene6-7-9":{frequencies:[261.6255653006,294.32876096318,299.00064605783,305.22982618403,336.37572681506,343.38355445704,348.83408706747,392.4383479509,406.97310157871,448.50096908674,457.84473927605,504.56359022259,523.2511306012],description:"6-7-9 Duodene"},duodene_min:{frequencies:[261.6255653006,290.69507255622,294.32876096318,313.95067836072,327.03195662575,348.83408706747,353.19451315581,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Minor Duodene"},"duodene_r-45":{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,334.88072358477,353.19451315581,376.74081403286,401.85686830172,408.78994578219,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Ellis's Duodene rotated -45 degrees"},duodene_r45:{frequencies:[261.6255653006,275.93321340298,279.06726965397,294.32876096318,313.95067836072,334.88072358477,383.2405741708,408.78994578219,436.04260883433,459.88868900496,465.11211608996,490.54793493862,523.2511306012],description:"Ellis's Duodene rotated 45 degrees"},duodene_r90:{frequencies:[261.6255653006,272.52663052146,279.06726965397,306.59245933664,313.95067836072,327.03195662575,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,490.54793493862,523.2511306012],description:"Ellis's Duodene rotated 90 degrees: genus [33555]"},duodene_skew:{frequencies:[261.6255653006,282.55561052465,290.69507255622,313.95067836072,327.03195662575,348.83408706747,376.74081403286,392.4383479509,418.60090448096,436.04260883433,470.92601754108,502.32108537715,523.2511306012],description:"Rotated 6/5x3/2 duodene"},duodene_t:{frequencies:[261.6255653006,279.3825857701,293.66476791741,313.59634948548,327.03195662575,349.22823143301,367.08095907728,391.99543598175,418.60090448096,436.53528831673,469.86362971679,489.99429388332,523.2511306012],description:"Duodene with equal tempered fifths"},duowell:{frequencies:[261.6255653006,278.41172412276,294.03623226919,312.90189200955,327.96500300935,349.00756672938,368.59392213143,392.24328034087,417.4100028405,437.50413894442,469.11953885575,491.70297432358,523.2511306012],description:"Ellis duodene well-tuned to fifth=(7168/11)^(1/16) third=(11/7)^(1/2)"},dwarf6_7:{frequencies:[261.6255653006,299.00064605783,327.03195662575,373.75080757229,392.4383479509,448.50096908674,523.2511306012],description:"Dwarf(<6 10 14 17|)"},cairo:{frequencies:[261.6255653006,269.38381929633,276.03456984659,285.15047989166,293.63138642043,300.85736580106,309.799366845,312.20234522745,320.03127253896,327.93377450564,337.66851484331,348.83408706747,357.41197445437,367.9166999024,380.21445327801,392.4383479509,401.02017979859,414.62054722758,417.26565438692,427.77234352616,440.44707963064,451.93568025669,468.86302025197,480.04690880844,491.77737838459,510.98743222773,523.2511306012],description:"P.42, of d'Erlanger, vol.5. Congress of Arabic Music, Cairo, 1932"},canright:{frequencies:[261.6255653006,286.48426603331,306.03443598155,335.11270457212,357.98136125932,391.99543598175,418.74586628806,458.53356119912,489.82466832727,523.2511306012],description:`David Canright's piano tuning for "Fibonacci Suite" (2001)`},carlos_alpha:{frequencies:[261.6255653006,273.68256372566,286.29520819723,299.48910562989,313.29104303136,327.729041887,342.83241505062,358.63182625716,375.1593523779,392.44854854484,410.5345162762,429.45397474154,449.24533531117,469.94877954106,491.60634075178,514.26198936695,537.96172218451,562.75365576207,588.68812410589],description:"Wendy Carlos' Alpha scale with perfect fifth divided in nine"},carlos_alpha2:{frequencies:[261.6255653006,267.58616452957,273.68256372566,279.91785681123,286.29520819723,292.81785438923,299.48910562989,306.31234757893,313.29104303136,320.42873367481,327.729041887,335.19567257401,342.83241505062,350.6431449633,358.63182625716,366.8025131876,375.1593523779,383.7065849236,392.44854854484,401.3896797878,410.5345162762,419.88769901416,429.45397474154,439.23819834286,449.24533531117,459.48046426806,469.94877954106,480.6555937997,491.60634075178,502.8065779009,514.26198936695,525.97838877075,537.96172218451,550.21807114943,562.75365576207,575.57483783111,588.68812410589],description:"Wendy Carlos' Alpha prime scale with perfect fifth divided by eightteen"},carlos_beta:{frequencies:[261.6255653006,271.44693432634,281.63699549204,292.20958942356,303.17907632096,314.56035546319,326.36888544505,338.62070517372,351.33245565363,364.52140258903,378.2054598351,392.40321372938,407.13394833666,422.41767164147,438.27514272393,454.72789995564,471.7982902542,489.50949943583,507.88558370741,526.95150234083,546.73315157381,567.25739978343,588.55212398003],description:"Wendy Carlos' Beta scale with perfect fifth divided by eleven"},carlos_beta2:{frequencies:[261.6255653006,266.49100855797,271.44693432634,276.49502530642,281.63699549204,286.87459075215,292.20958942356,297.64380291476,303.17907632096,308.81728905054,314.56035546319,320.41022551991,326.36888544505,332.43835840072,338.62070517372,344.91802487526,351.33245565363,357.86617542024,364.52140258903,371.30039682974,378.2054598351,385.23893610237,392.40321372938,399.70072522531,407.13394833666,414.70540688852,422.41767164147,430.27336116448,438.27514272393,446.42573318931,454.72789995564,463.18446188312,471.7982902542,480.57230974851,489.50949943583,498.61289378764,507.88558370741,517.33071758003,526.95150234083,536.75120456442,546.73315157381,556.90073257014,567.25739978343,577.80666964473,588.55212398003],description:"Wendy Carlos' Beta prime scale with perfect fifth divided by twentytwo"},carlos_gamma:{frequencies:[261.6255653006,266.98388983977,272.45195763676,278.03201633122,283.72635959645,289.53732808222,295.4673103769,301.51874398927,307.69411635045,313.99596583639,320.42688281121,326.98951069203,333.68654703547,340.52074464653,347.49491271011,354.6119179457,361.87468578579,369.2862015783,376.84951181374,384.56772537748,392.44401482761,400.48161769905,408.68383783428,417.05404674148,425.59568498025,434.31226357598,443.20736546293,452.28464695708,461.547839259,471.00074998758,480.64726474513,490.49134871455,500.53704828923,510.78849273629,521.24989589392,531.92555790347],description:"Wendy Carlos' Gamma scale with third divided by eleven or fifth by twenty"},carlos_harm:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,392.4383479509,425.14154361347,441.49314144476,457.84473927605,490.54793493862,523.2511306012],description:"Carlos Harmonic & Ben Johnston's scale of 'Blues' from Suite f.micr.piano (1977) & David Beardsley's scale of 'Science Friction'"},carlos_super:{frequencies:[261.6255653006,277.97716313189,294.32876096318,313.95067836072,327.03195662575,348.83408706747,359.73515228832,392.4383479509,425.14154361347,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"Carlos Super Just"},carlson:{frequencies:[261.6255653006,274.70684356563,286.15296204753,294.32876096318,305.22982618403,313.95067836072,327.03195662575,339.14425131559,348.83408706747,366.27579142084,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,457.84473927605,470.92601754108,490.54793493862,508.71637697339,523.2511306012],description:"Brian Carlson's guitar scale (or 7 is 21/16 instead) fretted by Mark Rankin"},cassandra1:{frequencies:[261.6255653006,265.52313139125,271.43629763673,275.48001908354,279.58398024378,283.7490817683,290.06813927787,294.38942683035,298.7750924519,305.42877739024,309.97889991383,314.59680966486,319.28351286859,326.39391783308,331.25637026535,336.19125912653,343.67819754196,348.79814248043,353.99435973883,359.26798967332,367.26884406885,372.74022844163,378.29312490007,386.71766674112,392.47878977853,398.32574139651,407.19640716832,413.26261206104,419.41919061043,425.66748431192,435.14704737009,441.62964923022,448.20882304357,458.19037897128,465.01626879626,471.9438445688,478.97462660712,489.64133323501,496.93576068834,504.33885972365,515.57042175735,523.2511306012],description:"Cassandra temperament (Erv Wilson), 13-limit, g=497.866"},cassandra2:{frequencies:[261.6255653006,265.34593985135,270.18130909623,275.10479273152,279.0168449367,284.10133754875,289.27848429833,293.3920895946,298.7385406747,304.18241953205,309.72550158209,314.12986807617,319.85422136322,325.68288889698,330.31417303802,336.33345109576,342.46241778116,348.70307193775,353.66170827405,360.10644584283,366.66862514012,371.88273569526,378.65951299923,385.5597827545,392.58579535013,398.16845391153,405.42423290482,412.81223314336,418.68251621245,426.31212065787,434.08075852776,440.25348482514,448.27617460765,456.44506096456,464.76280801961,471.37183998139,479.96159605313,488.70788228454,495.65741860341,504.6897280454,513.8866322474,523.2511306012],description:"Cassandra temperament, schismic variant, 13-limit, g=497.395"},catler:{frequencies:[261.6255653006,269.80136421624,279.06726965397,294.32876096318,299.00064605783,305.22982618403,313.95067836072,318.93402246168,322.00069575458,327.03195662575,343.38355445704,348.83408706747,359.73515228832,367.91095120397,380.54627680087,392.4383479509,418.60090448096,425.14154361347,436.04260883433,441.49314144476,457.84473927605,465.11211608996,483.00104363188,490.54793493862,523.2511306012],description:'Catler 24-tone JI from "Over and Under the 13 Limit", 1/1 3(3)'},cbrat19:{frequencies:[261.6255653006,272.05448646742,281.65887246066,291.7164960911,303.76422848609,314.23522436032,325.78124145721,339.14379232251,350.05979530932,364.18597952318,377.95660802413,389.93691761381,406.2330981776,420.87727247778,436.65546295526,454.14747622901,467.92430113657,486.684954898,506.27371414348,523.2511306012],description:"brats = -1 -1 -1 -1 -1 -1 -1 -1 0 3/7 390808/591947 1/2 1/2 1/2 1/2 1/4 0 0 -1"},ceb88f:{frequencies:[261.6255653006,275.30280934529,289.60851057007,304.80308899558,320.69584574771,337.31885569235,354.97473368038,373.44187862432,393.05647479461,413.57234190108,435.03089105397,457.82276134277,481.66189358475,506.59641128799],description:"88 cents steps with equal beating fifths"},ceb88s:{frequencies:[261.6255653006,275.27750547448,289.60710371138,304.74878776577,320.64207659236,337.32428016541,354.95189689869,373.45451504132,392.8755714351,413.39725679488,434.93759942207,457.54716438978,481.43806014345,506.51485544552,533.01280425363],description:"88 cents steps with equal beating sevenths"},ceb88t:{frequencies:[261.6255653006,275.20384442973,289.60910777612,304.54100616185,320.3823320487,337.18847246966,354.60902163481,373.09056856306,392.69773188536,413.02170471677,434.58350960486,457.45853552679,481.16983689269,506.32527343025,533.01280425363],description:"88 cents steps with equal beating 7/6 thirds"},cet105:{frequencies:[261.6255653006,277.98437592617,295.36606150822,313.83458334354,333.45789502888,354.30820661869,376.46223533368,400.00150378562,425.01262301844,451.58762919357,479.82430313337,509.82655042708,541.70476218406,575.57624366132],description:"Equal temperament with very good 6/5 and 13/8"},cet105a:{frequencies:[261.6255653006,278.09098920184,295.59266404146,314.19580976213,333.96974580612,354.98815389674,377.32935907335,401.07660961589,426.31839262878,453.14877154631,481.66772230429,511.98151233648,544.20310589723,578.45256778249,614.85751848055,653.5536209391,694.68506540856,738.40511604959,784.8766959018],description:"18th root of 3"},cet111:{frequencies:[261.6255653006,279.02234237845,297.57591715819,317.3632108372,338.46625752841,360.97255206362,384.97540137331,410.57431878206,437.87543474729,466.99193686517,498.04453913461,531.16197935691,566.48156495049,604.14972437838,644.32262592407,687.16682227215,732.8599410185,781.59142109591,833.56329335333,888.99103711409,948.10444554232,1011.14859670036,1078.38486510237,1150.09200534594,1226.56730779978,1308.127826503],description:'25th root of 5, Karlheinz Stockhausen in "Studie II" (1954)'},cet111a:{frequencies:[261.6255653006,279.09119608948,297.72279782842,317.59821198502,338.80046946076,361.41815173468,385.54574794778,411.2840547398,438.74060487161,468.03009995854,499.27490936609,532.60556349815,568.16130614457,606.09068659426,646.55215742719,689.71476370538,735.75882016749,784.8766959018],description:"17th root of 3. McLaren 'Microtonal Music', volume 1, track 8"},cet112:{frequencies:[261.6255653006,279.13807488234,297.82282461384,317.75828292395,339.02816520012,361.72179601836,385.93447726538,411.76789245756,439.33052439618,468.73812456399,500.11419015728,533.59048802364,569.30759588159,607.4155105893,648.07426630787,691.45461344743,737.73872000797,787.12095980595,839.80871352279,896.02324851892,956.00062766807,1019.99273078287,1088.26829265547,1161.11404316696,1238.83588500259,1321.76021726874,1410.23528064063,1504.63263477595,1605.34868446028,1712.8063948195,1827.45703443292,1949.78208984359,2080.29524321777,2219.54459500735,2368.11492276755,2526.63016208001,2695.75596930795,2876.20260183901,3068.72784518,3274.14022786751,3493.30234242079,3727.13457771193,3976.61891204907,4242.80307922676,4526.8048719912,4829.81697864182,5153.11189830808,5498.04733953642,5866.07179694692,6258.73081875602,6677.6733762505,7124.65885956048,7601.56430418436,8110.3925243186],description:"53rd root of 31. McLaren 'Microtonal Music', volume 4, track 16"},cet114:{frequencies:[261.6255653006,279.47933554513,298.55147893584,318.92513586406,340.68912750315,363.93832870511,388.77409689134,415.30469757995,443.64579124771,473.92093172942,506.26209616971,540.81027939262,577.71608583803,617.1404103833,659.25511382574,704.24379572788,752.30258557703,803.64098403142,858.48280642307,917.06712239825,979.64933665453,1046.5022612024],description:"21st root of 4"},cet115:{frequencies:[261.6255653006,279.68949451567,299.00064605783,319.64513593742,341.71502406609,365.30872604057,390.53145607553,417.49568846357,446.32166408632,477.13792869952,510.08190181294],description:"2nd root of 8/7. Werner Linden, Musiktheorie, 2003 no.1 midi 15.Eb=19.44544 Hz"},cet117:{frequencies:[261.6255653006,279.86396690685,299.37379946195,320.24370022528,342.56848033562,366.44956000397,391.99543598175,419.32216217931,448.5538823653,479.82340237272,513.27277840175,549.0539690723,587.32953583482,628.27336308449,672.07145630843,718.92279942609,769.0402362475,822.65144744826,880,941.34642612261,1006.96941915374,1077.1671181081,1152.25842837255,1232.58448551457,1318.51022765149,1410.42601205207,1508.74940691646,1613.92711604023,1726.4369576214,1846.79005749489,1975.53320502451,2113.25127526858,2260.56991361642,2418.15841952625,2586.73271138559,2767.05861265008,2959.95538169309],description:"72nd root of 128, step = generator of Miracle"},cet118:{frequencies:[261.6255653006,280.22072913446,300.13755324878,321.46997343155,344.3186075731,368.79121945838,395.0032340925,423.07827792492,453.14877154631,485.35654007358,519.85349135637,556.8023269521,596.37732215892,638.76512932755,684.16567043124,732.79307276157,784.8766959018],description:"16th root of 3. McLaren 'Microtonal Music', volume 1, track 7"},cet126:{frequencies:[261.6255653006,281.50639381697,302.89795903081,325.91506125677,350.68122444233,377.32935907335,406.00247545366,436.85445118639,470.05085697597,505.76984518255,544.20310589723,585.55689566922,630.05314440547,677.93064638327,729.44634176744,784.8766959018],description:"15th root of 3. McLaren 'Microtonal Music', volume 1, track 6"},cet126a:{frequencies:[261.6255653006,281.42815779395,302.72962012827,325.64340264099,350.29154279212,376.80531512858,405.32593044476,436.00528786292,469.00678383895,504.50618240233,542.69254813034,583.76926541313,627.95510352048,675.48539363125,726.61327927927,781.61106458091,840.77166451082,904.41016494992,972.86550081423,1046.5022612024],description:"19th root of 4"},cet133:{frequencies:[261.6255653006,282.54488373859,305.13688994853,329.53533037111,355.88464567857,384.34082587483,415.07233376839,448.26110228542,484.10361152681,522.81205194575,564.61558053174,609.76167743791,658.5176110828,711.17202040031],description:"13th root of e"},cet140:{frequencies:[261.6255653006,283.72172983292,307.68407293041,333.67021037701,361.85106232365,392.4119924075,425.55401329039,461.49511402661,500.47170241421,542.7401414615,588.57845795114,638.28815062634,692.19618110881,750.65713728047,814.05554253056,882.80839491877,957.36792629418,1038.22454144983,1125.91008648826,1221.00130775733,1324.12366033919,1435.95544645068,1557.23222387914,1688.75170820144,1831.3789571042],description:"24th root of 7"},cet141:{frequencies:[261.6255653006,283.85429714132,307.97166902637,334.13814720468,362.52783176564,393.32961502355,426.7484383229,463.0066556268,502.34551296122,545.02675670673,591.33436279611,641.57644431325,696.08728968715,755.22958979995,819.39685117042,889.01601417107,964.55029369918,1046.5022612024],description:"17th root of 4"},cet146:{frequencies:[261.6255653006,284.69629445872,309.80145226022,337.12043918596,366.84847565362,399.19799705513,434.40017432099,472.70655602525,514.39088038704,559.75102196641,609.11112257023,662.82390755693,721.27320639821,784.8766959018],description:"13th root of 3, Bohlen-Pierce approximation"},cet148:{frequencies:[261.6255653006,284.92791524313,310.30575035912,337.94392545772,368.04376529149,400.82452432448,436.52498800167,475.40520223986,517.74838217475,563.86296895784,614.08486606944,668.77990486322,728.34649714081,793.21854485147,863.86858278563,940.81124699851,1024.60701225804,1115.86625569541,1215.25373699679,1323.49342609599,1441.37375222579,1569.7533918036],description:"21th root of 6, Moreno's C-21"},cet152:{frequencies:[261.6255653006,285.70808394691,312.0073878821,340.72733440875,372.0911362405,406.34196228781,443.74556186468,484.59214639302,529.19833545193,577.91081034511,631.10724720728,689.20039277289,752.64098693245,821.92125998587],description:"13th root of pi"},cet158:{frequencies:[261.6255653006,286.70831230381,314.19580976213,344.3186075731,377.32935907335,413.50494015483,453.14877154631,496.5933637384,544.20310589723,596.37732215892,653.5536209391,716.21156534988,784.8766959018],description:`12th root of 3, Moreno's A-12, see dissertation "Embedding Equal Pitch Spaces.`},cet159:{frequencies:[261.6255653006,286.82842069679,314.45911373416,344.75151869218,377.96204482418,414.37180231943,454.28897403052,498.05144066897,546.02962057131],description:"4e-th root of e. e-th root of e is highest x-th root of x"},cet160:{frequencies:[261.6255653006,286.95745534843,314.74210513576,345.21700307457,378.64263238751,415.30469757995,455.51656649021,499.62194879119,547.99783383788,601.05771297194,659.25511382574,723.0874768355,793.10040709753,869.89233791055,954.11964586525,1046.5022612024],description:'15th root of 4, Rudolf Escher in "The Long Christmas Dinner" (1960)'},cet160a:{frequencies:[261.6255653006,287.06963246392,314.98822873932,345.62201499981,379.23505183234,416.11708252541,456.58602635137,500.99072933585,549.71395617638,603.17569602575,661.83679400878,726.20290371434,796.8288589228,874.32344802967,959.35468153537,1052.65552131526,1155.03021091382,1267.36122959081,1390.6168610076,1525.85955590014,1674.2551187631,1837.08270650821,2015.74588766663,2211.78472029595,2426.88907720145,2662.91313932742,2921.89140956529,3206.0563044734,3517.85730085803,3859.98211320646,4235.37982185266,4647.28638964387,5099.2524155536,5595.17379976366,6139.32543031277,6736.39784717273,7391.53779523322,8110.3925243186],description:"37th root of 31. McLaren 'Microtonal Music', volume 2, track 7"},cet163:{frequencies:[261.6255653006,287.45276480522,315.82957660097,347.00769742017,381.26366336311,418.90131810157,460.25449359467,505.68997636603,555.61077020009,610.45965236807],description:'9th root of 7/3. Jeff Scott in "Quiet Moonlight" (2001)'},cet163a:{frequencies:[261.6255653006,287.41152361975,315.7389582221,346.85836204295,381.04491126651,418.60090448096,459.85843616195,505.18233428314,554.97338050766],description:"5th root of 8/5"},cet166:{frequencies:[261.6255653006,287.95619440582,316.93680165166,348.83408706747],description:"3rd root of 4/3"},cet173:{frequencies:[261.6255653006,289.10449173793,319.46957112932,353.02394045842,390.10257564198,431.07563562091,476.35215768611,526.38414093011,581.67105858963,642.7648443263,710.27540222401,784.8766959018],description:"11th root of 3, Moreno's A-11"},cet175:{frequencies:[261.6255653006,289.48414624674,320.30918244523,354.41654988346,392.15575985798,433.91353804458,480.11779720922,531.2420078798,587.8100594825,650.40162657281,719.65810898332,796.28920449429,881.08018137935,974.89992535123,1078.70983713651,1193.57370864212,1320.66858845324,1461.29686662697,1616.89961515233,1789.07135516847,1979.57639663535,2190.36691789568,2423.60297039629,2681.67459807517,2967.22638952895,3283.18448966052,3632.78664249769,4019.61535560076,4447.6346101102],description:"28th root of 7. McLaren 'Microtonal Music', volume 6, track 3"},cet175a:{frequencies:[261.6255653006,289.53628281337,320.42456924675,354.60807736883,392.4383479509,434.30442400296,480.63685362987,531.91211578736],description:"4th root of 3/2"},cet178:{frequencies:[261.6255653006,289.91935960089,321.27301846367,356.01745236555,394.51936464224,437.18511000944,484.46499093218,536.85800524663,594.91712478053,659.25511382574,730.5510078664,809.55727745129,897.10776473059,994.12650420781,1101.63744560301,1220.77528002516,1352.79740322961,1499.09721690784,1661.21879031979,1840.87318566558,2039.95650991293,2260.56991361642,2505.04181781964,2775.9524141353,3076.16094499002,3408.83584914421,3777.48827884202,4186.0090448096],description:"27th root of 16"},cet181:{frequencies:[261.6255653006,290.48091212946,322.51878830959,358.09020513941,397.58488163802,441.43552612833,490.12256936272,544.17943316245,604.19836236377,670.83693141722,744.82523718317,826.97390553231,918.18295398723,1019.45167961503,1131.88958971281,1256.72856920928,1395.33634826987],description:"6.625 tET. The 16/3 is the so-called Kidjel Ratio promoted by Maurice Kidjel in 1958"},cet182:{frequencies:[261.6255653006,290.70585738945,323.0184918031,358.92275093366,398.81785224951,443.14738973192,492.40425618917,547.1361382945,607.95159681319,675.52683545966,750.61321956915,834.04563048717,926.75174856904,1029.76237395443,1144.22286477952,1271.40590625444,1412.7256395721,1569.7533918036],description:"17th root of 6, Moreno's C-17"},cet195:{frequencies:[261.6255653006,292.81795587218,327.72927094457,366.80289667873,410.53509014096,459.48126579586,514.26306468681,575.57624366132],description:"7th root of 11/5"},cet21k:{frequencies:[261.6255653006,264.89588486686,268.20708342769,271.55967197054,274.95416787017,278.3910952928,281.87098404962,285.39437141672,288.96180112674,292.57382370898,296.23099657435,299.9338841014,303.68305772341,307.47909424051,311.32258299104,315.21411535185,319.1542918681,323.14372059172,327.18301717534,331.2728049672,335.41371510742,339.60638662537,343.85146653829,348.14960995112,352.50148015762,356.90774874273,361.36909568619,365.8862094675,370.45978717215,375.09053459917,379.77916637013,384.52640603933,389.33298620552,394.19964862491,399.1271443257,404.11623372391,409.16768674077,414.28228292154,419.46080913287,424.70406934596,430.01287031296,435.38803129329,440.83038178715,446.34076166346,451.92002128953,457.56902166224,463.28863454093,469.07974258197,474.94323947488,480.88003008033,486.89103056976,492.97716856672,499.13938329007,505.37862569893,511.69585863936,518.09205699304,524.56820782765],description:"scale of syntonic comma's, almost 56-tET"},cet222:{frequencies:[261.6255653006,297.3462123974,337.94392545772,384.08458333231,436.52498800167,496.12526073276,563.86296895784,640.8491384935,728.34649714081,827.79017883768,940.81124699851,1069.2634803114,1215.25373699679,1381.1765584523,1569.7533918036],description:"14th root of 6, Moreno's C-14"},cet233:{frequencies:[261.6255653006,299.41460910537,342.66187834083,392.15575985798,448.79850611373,513.6227001391,587.8100594825,672.71300106294,769.87926947615,881.08018137935,1008.34288220748,1153.98733901804,1320.66858845324,1511.42518780658,1729.7345489351,1979.57639663535,2265.50524176842,2592.73349533282,2967.22638952895,3395.81083571538,3886.29974647262,4447.6346101102],description:"21st root of 17. McLaren 'Microtonal Music', volume 2, track 15"},cet24:{frequencies:[261.6255653006,265.3411057651,269.1094134006,272.9312375932,276.80733837157,280.73848655813,284.72546392233,288.7690633361,292.87008893155,297.02935626086,301.24769245848,305.52593640563,309.86493889709,314.26556281043,318.72868327757,323.25518785885,327.84597671953,332.50196280875,337.22407204116,342.01324348101,346.8704295289,351.79659611118,356.79272287204,361.85980336835,366.9988452672,372.21087054633,377.49691569736,382.85803193188,388.29528539052,393.80975735501,399.40254446313,405.07475892685,410.82752875349,416.66199797006,422.57932685074,428.58069214763,434.66728732478,440.84032279551,447.10102616311,453.45064246502,459.89043442035,466.42168268106,473.04568608657,479.76376192214,486.57724618073,493.48749382879,500.49587907561,507.6037956467,514.81265706088,522.12389691142,529.53896915113],description:"least squares fit primes 2-13"},cet258:{frequencies:[261.6255653006,303.75687573192,352.67287219582,409.46613795376,475.40520223986,551.96287401486,640.8491384935,744.04935121924,863.86858278563,1002.98310468409,1164.50016626124,1352.0273979586,1569.7533918036],description:"12th root of 6, Moreno's C-12"},cet29:{frequencies:[51.91308719749,52.80006242627,53.70219231256,54.6197354699,55.55295587693,56.50212107609,57.46750349647,58.44938022184,59.44803272677,60.46374832519,61.49681820986,62.54753889218,63.61621194966,64.70314373878,65.80864697157,66.93303858176,68.07664129187,69.2397833384,70.42279815925,71.62602610967,72.84981213985,74.09450750046,75.36046944358,76.64806088248,77.95765225928,79.28961901721,80.64434345693,82.02221441105,83.42362735565,84.84898403373,86.29869452271,87.77317443616,89.27284697886,90.79814258634,92.34949851506,93.9273610926,95.53218267212,97.16442386902,98.82455316866,100.51304648023,102.230389586,103.97707482641,105.75360353451,107.56048560902,109.39823902877,111.26739251837,113.16848194039,115.10205294491,117.06866050489,119.06886838764,121.10325205621,123.17239474253,125.2768903313,127.4173428542,129.59436591466,131.80858584574,134.06063743615,136.35116706905,138.68083217153,141.05030058861,143.46025402018,145.91138336926,148.40439215824,150.93999592972,153.51892156515,156.14191102559,158.8097162888,161.52310306741,164.28285015685,167.08974869373,169.94460622727,172.84824120887,175.80148703892,178.80519135714,181.8602162858,184.96743760879,188.12774927869,191.34205731671,194.61128429254,197.93636853869,201.31826325695,204.75794142387,208.2563891515,211.8146105632,215.43362693858,219.11447574094,222.85821595641,226.66592086774,230.53868336123,234.47761499594,238.48384494529,242.55852580808,246.70282574354,250.91793424736,255.20506113867,259.56543598745],description:"95th root of 5"},cet39:{frequencies:[261.6255653006,267.55763511324,273.62420803617,279.82833216202,286.17312954462,292.66178817784,299.29756995616,306.08381073387,313.02392200207,320.12139075456,327.37978859613,334.80276256646,342.39404424694,350.15744982839,358.09687996112,366.21632994368,374.51987945827,383.01170275779,391.6960687417,400.57734310204,409.65998815178,418.94857448076,428.44776921301,438.16234766073,448.09719341103,458.25729813392,468.64777462103,479.27384364987,490.14084702027,501.25424765147,512.61963232837,524.24271148185,536.12933410494,548.28547272565,560.71723832061,573.43088042607,586.43278689221,599.72950056876,613.32770249519,627.23422858353,641.45606974252,656.00037539202,670.87445318194,686.08578808043,701.64202314362,717.55097860059,733.82065199545,750.45921787297,767.47504913108,784.8766959018],description:"49th root of 3"},cet39a:{frequencies:[261.6255653006,267.54999903763,273.60843178624,279.80421399945,286.14029787289,292.61969147246,299.24597805224,306.02231493662,312.9519192023,320.03862308027,327.28580327671,334.69690040195,342.27601296361,350.02675229311,357.95279806627,366.05853356918,374.34782106107,382.82459589435,391.49354592099,400.35880176332,409.42457221564,418.6958708581,428.17711532294,437.87280684605,447.78830736843,457.9283414747,468.29772316218,478.90218693807,489.74678566745,500.83666784082,512.17796641877,523.77608535691],description:"31-tET with least squares octave; equal weight to 5/4, 3/2, 7/4 and 2/1"},cet39b:{frequencies:[261.6255653006,267.54443554965,273.59736903996,279.78708267123,286.11699418435,292.58994480246,299.2095086599,305.97865699219,312.90112748358,319.98002733127,327.21907624411,334.6220906301,342.19239338178,349.93416455252,357.85087908811,365.94690831825,374.22588619981,382.6921630398,391.3502022376,400.20389001205,409.25811505631,418.51694141988,427.98548149913,437.66798531163,447.56979919346,457.69536764001,468.05001127562,478.63918904181,489.46765396188,500.54138513107,511.86535306771,523.4458104663],description:"31-tET with l.s. 8/7, 5/4, 4/3, 3/2, 8/5, 7/4, 2/1; equal weights"},cet39c:{frequencies:[261.6255653006,267.52919373065,273.56603860918,279.73910598956,286.05147140959,292.50627485027,299.10673210371,305.85612987468,312.75782903301,319.8152662872,327.03195662575,334.41149334841,341.95754947331,349.67388372612,357.56433846376,365.63284274659,373.88341429498,382.32016148985,390.94728541851,399.7690842757,408.78994578219,418.01436575232,427.44693588739,437.09235368188,446.9554220819,457.04105241293,467.35426952494,477.9002035559,488.68410850494,499.71135422907,510.98743222773,522.51795602393],description:"10th root of 5/4"},cet39d:{frequencies:[261.6255653006,267.55786538889,273.62467903016,279.82905628857,286.1741163878,292.66304927922,299.29911724561,306.08565654127,313.02607906932,320.12387409698,327.38261000985,334.80593610581,342.39758442978,350.16137164992,358.1012009765,366.22106412416,374.52504331879,383.0173133498,391.70214366901,400.58390053708,409.66704921865,418.95615622721,428.45589162089,438.17103135034,448.1064596598,458.26717154264,468.65827525256,479.28499487175,490.15267293726,501.26677312698,512.63288300643,524.25671683791],description:"31-tET with l.s. 5/4, 3/2, 7/4"},cet39e:{frequencies:[261.6255653006,267.56053134626,273.63013029147,279.83741943955,286.18551905392,292.67762672082,299.3170076044,306.10700082387,313.05102655064,320.15257723818,327.41522444303,334.84262641603,342.43851674365,350.20672153383,358.15114775562,366.27579142084],description:"15th root of 7/5, X.J. Scott"},cet44:{frequencies:[261.6255653006,268.36512159638,275.27829096782,282.369545742,289.64347345451,297.10477981732,304.75829176301,312.60896056742,320.66186505284,328.92221487359,337.3953538863,346.08676360706,355.00206675748,364.14703090225,373.52757218034,383.14975913231,393.01981662619,403.14412988459,413.52924861543,424.18189124916,435.1089492851,446.31749174973,457.81476976988,469.60822126365,481.70547575226,494.11435929576,506.84289955596,519.89933098975,533.2921001762],description:"least maximum error of 10.0911 cents to a set of 11-limit consonances"},cet45:{frequencies:[261.6255653006,268.55812265554,275.67437899809,282.97903853108,290.47742047479,298.17449463282,306.07552595385,314.18591889722,322.51122112969,331.05693609414,339.82928674186,348.83408706747],description:"11th root of 4/3"},cet45a:{frequencies:[261.6255653006,268.48547646737,275.52525683447,282.74962263341,290.1634137569,297.77159700127,305.57926939395,313.59166160814,321.8141414671,330.2522175402,338.9115428334,347.79791857637,356.91729810903,366.27579142084],description:"13th root of 7/5, X.J. Scott"},cet49:{frequencies:[261.6255653006,269.10883825956,276.80615518671,284.72363837915,292.86758524998,301.24447333711,309.86096545541,318.72391499615,327.84037137809,337.21758565441,346.86301628009,356.78433504421,366.98943317194,377.48642760107,388.28366743806,399.38974059878,410.81348063915,422.56397378117,434.65056613995,447.08287115744,459.87077724873,473.02445566714,486.55436859423,500.47127746122,514.78625150841,529.51067658945],description:"least squares fit primes 3-13"},cet49a:{frequencies:[261.6255653006,269.10939785623,276.80730639354,284.72541458317,292.8700212642,301.24760545475,309.86483150611,318.72855440416,327.84582522255,337.22389673177,346.87022916874,356.7924961714,366.99859088307,377.49663223147,388.29497138724,399.40219840734,410.82714906841,422.57891189558,434.66683539241,447.10053547759,459.8899031344,473.04511227892,486.57662785344,500.49521415122,514.81194337949,529.53820446742],description:"least squares fit primes 5-13"},cet49b:{frequencies:[261.6255653006,269.11089011973,276.81037630182,284.73015118141,292.87651740119,301.25595792767,309.87514121046,318.74092648901,327.86036925135,337.24072684885,346.88946427176,356.81426008988,367.0230125633,377.52384592787,388.3251168606,399.43542112995,410.86360043647,422.61874944911,434.71022304287,447.14764374346,459.94090938509,473.10020098719,486.63599085665,500.55905092174,514.88046130456,529.61161913871],description:"least squares fit primes 3-11"},cet51:{frequencies:[261.6255653006,269.45730810595,277.52349357863,285.8311397433,294.38747470873,303.19994295657,312.27621181854,321.62417814738,331.25197518754,341.1679796516,351.38081900843,361.89937898954,372.73281132023,383.89054168203,395.38227791356,407.21801845694,419.40806105693,431.96301172054,444.89379394488,458.21165822114,471.92819182319,486.05532888913,500.60536080461,515.59094689708,531.0251223827,546.92132188791,563.29337300176,580.1555203085,597.52243480304,615.40922665547,633.83145835774,652.80515826392,672.34683453572,692.47348950549,713.20263446921,734.55230492227,756.54107625132,779.18807989593,802.51301999392,826.53619052513,851.2784929682,876.7614544861,903.00724665589,930.0387047592,957.87934765022,986.55339821839,1016.08580446361,1046.5022612024],description:"47nd root of 4"},cet53:{frequencies:[261.6255653006,269.81714175785,278.26519897904,286.97776745533,295.963129115,305.22982618403],description:"5th root of 7/6, X.J. Scott"},cet54:{frequencies:[261.6255653006,269.96706985652,278.57452968396,287.45642599351,296.6215054241,306.0787984682,315.83762188043,325.9075894649,336.29862154621,347.0209567468,358.08515411748,369.5021153806,381.28308783765,393.43967739203,405.98385998242,418.92799580061,432.28483186346,446.06752886518,460.28966468743,474.96525012045,490.10874266572,505.73506369981,521.85960157932,538.49824405725,555.66738252045,573.38393096839,591.66534267587,610.52963091344,629.99537269573,650.08174791487,670.80854445602,692.19618110881,714.26572768264,737.03893002078,760.53821452531,784.78673539949,809.80838082331,835.62780061242,862.2704354823,889.76252234217,918.13114956434,947.40426420901,977.61070438283,1008.78022764847,1040.94354635268,1074.13233401713,1108.37929206026,1143.71815851921,1180.1837471134,1217.81198154093,1256.63993812708,1296.7058535394,1338.04920533515,1380.71072249048,1424.73243255855,1470.15770307252,1517.03129303135,1565.39936221354,1615.30956841503,1666.81108016015,1719.95463363144,1774.79258265191,1831.3789571042],description:"62nd root of 7"},cet54a:{frequencies:[36.70809598968,37.88151295543,39.09243955873,40.34207507177,41.63165640381,42.96246070241,44.33580570763,45.75305128262,47.21560103286,48.72490261351,50.28245077394,51.88978777214,53.5485051662,55.26024570942,57.02670371,58.84962859429,60.73082539186,62.67215683218,64.67554556259,66.74297456936,68.87649134796,71.07820847085,73.35030604133,75.69503428946,78.11471406483,80.61174171737,83.18858976192,85.8478097501,88.59203530858,91.42398271579,94.34645661434,97.36235078878,100.47465152683,103.6864411753,107.00089881505,110.42130694669,113.95105240089,117.59363027227,121.3526480812,125.23182656372,129.23500749643,133.36615476182,137.62935895249,142.02884224198,146.56895930934,151.25420649717,156.08922305851,161.0787965455,166.22786851013,171.54153558634,177.0250602084,182.68387207023,188.52357443227,194.5499507934,200.76896615752,207.18677957808,213.80974586608,220.64442297146,227.69757979185,234.97619765489,242.48748500016,250.23887937817,258.23805608937,266.49293732345,275.01169389411,283.8027624226,292.87484767725,302.23693268442,311.89828942495,321.86848086456,332.15738106504,342.77517792247,353.73238500089,365.03985405114,376.70877738729,388.75071142436,401.17757988308,414.00168763976,427.23573537822,440.89282237095,454.98647402737,469.53064564449,484.53973861665,500.02861758376,516.01261368641,532.50755680773,549.52977996323,567.09613827221,585.22402902787,603.93139550692,623.23676470498,643.1592524742,663.71858572717,684.9351219702,706.82987354375,729.42451222373,752.74141479803,776.80366927173,801.63510168485,827.26030448295,853.70464190233,880.99430375232],description:"101st root of 24"},cet54b:{frequencies:[261.6255653006,269.96795403263,278.5763544202,287.45924871019,296.62539133416,306.08381073387,315.84382837889,325.91506125677,336.30743300953,347.03118371184,358.09687996112,369.51542742358,381.29807310848,393.45642905887,406.00247545366,418.94857448076,432.30748251802,446.09236270275,460.31680056078,474.99480683953,490.14084702027,505.76984518255,521.89720128632,538.53880634615,555.71105808945,573.43088042607,591.71572697754,610.58361784146,630.05314440547,650.14349087612,670.87445318194,692.26646247798,714.3405894063,737.11858847932,760.62290389144,784.8766959018],description:"35th root of 3 or shrunk 22-tET"},cet55:{frequencies:[261.6255653006,270.01349691657,278.67035254505,287.60475577316,296.82560168354,306.34207552634,316.16365537714,326.30012507123,336.76157646737,347.55843063202,358.70144085484,370.20170518484,382.07067969055,394.32018111076,406.96241165943,420.00996255663,433.47583121124,447.37342422819,461.71658555081,476.51960046685,491.79721226214,507.56463983627,523.83758122386,540.63224654693,557.96536270557,575.85419620437,594.31655714751,613.37083662462,633.03601203256,653.33166919923,674.2780257851,695.8959359612,718.20693418482,741.23324143097,764.99779551626,789.52425640623,814.83705588084,840.96140460432,867.92332151557,895.74966491622,924.46813868508,954.10735043232,984.69681977767,1016.26701863443,1048.84937826003,1082.47635523452,1117.18144085251,1152.9992001672,1189.96531328939,1228.1165836432,1267.49101522141,1308.127826503],description:"51th root of 5"},cet55a:{frequencies:[261.6255653006,270.1234331478,278.89732210685,287.95619440582,297.30930820811,306.96622255393,316.93680165166,327.23123542864,337.86004496999,348.83408706747],description:"9th root of 4/3"},cet63:{frequencies:[261.6255653006,271.38398887572,281.50639381697,292.00635633712,302.89795903081,314.19580976213,325.91506125677,338.07143142496,350.68122444233,363.76135261718,377.32935907335,391.4034412791,406.00247545366,421.14604188408,436.85445118639,453.14877154631,470.05085697597,487.58337662462,505.76984518255,524.63465441916,544.20310589723,564.50144490757,585.55689566922,607.39769784277,630.05314440547,653.5536209391,677.93064638327,703.21691530872,729.44634176744,756.65410477833,784.8766959018],description:"30th root of 3 or stretched 19-tET"},cet63a:{frequencies:[261.6255653006,271.37251603396,281.48259278098,291.96932561311,302.84674360983,314.12940356828,325.83240291761,337.9714015469,350.5626427598,363.62297711023,377.1698766242,391.22147055517,405.79656146784,420.91465242294,436.59597307447,452.86150935499,469.73302118774,487.23308701689,505.38512383853,524.21342105699,543.74317298677,564.00051582303,585.01254970054,606.80739415229,629.41421305643,652.8632568014,677.18590276436,702.41470135475,728.58340348685,755.72702964881,783.88190097186,813.08569174348,843.37747981977,874.79780396885,907.38869808556,941.19377721109,976.25827622702,1012.62911525602,1050.35496244617,1089.48630538731,1130.07549372248,1172.17684627813,1215.84669925421,1261.14348767523,1308.127826503],description:"44th root of 5"},cet67:{frequencies:[261.6255653006,271.89449162354,282.56647812794,293.65734341902,305.18353207836,317.16212905639,329.61089159214,342.54827390456,355.99345454941,369.96636271272,384.48771622149,399.57903967613,415.26270466472,431.56196087069,448.50096908674],description:"14th root of 12/7, X.J. Scott"},cet70:{frequencies:[261.6255653006,272.49048247121,283.80660334964,295.59266404146,307.86818385681,320.65348759128,333.96974580612,347.83900623503,362.28423824861,377.32935907335,392.99928119148,409.31995166322,426.31839262878,444.02275580482,462.46235461904,481.66772230429,501.67065719504,522.50428685614,544.20310589723,566.80304433509,590.34152430617,614.85751848055,640.39162865951,666.98613212152,694.68506540856,723.53429383412,753.58158307649,784.8766959018],description:"27th root of 3"},cet78:{frequencies:[261.6255653006,273.68177330057,286.29355449603,299.48651076576,313.28742377221,327.72430932822,342.82647426905,358.62457594514,375.15068445646,392.4383479509],description:"9th root of 3/2"},cet79:{frequencies:[261.6255653006,273.87994580863,286.70831230381,300.13755324878,314.19580976213,328.91254817579,344.3186075731,360.44627930254,377.32935907335,395.0032340925,413.50494015483,432.87325713404,453.14877154631,474.3739811962,496.5933637384,519.85349135637,544.20310589723,569.69324454502,596.37732215892,624.31126899512,653.5536209391,684.16567043124,716.21156534988,749.7584744066,784.8766959018],description:"24th root of 3, James Heffernan (1906)."},cet80:{frequencies:[261.6255653006,273.93704112612,286.82786567404,300.32530171503,314.4578949408,329.25553433534,344.74951538696,360.97260627516,377.95911717185,395.74497280393,414.36778843034,433.8669493945,454.28369442026,475.66120282759,498.04439817054,521.48118104407,546.02084308555,571.71528316122,598.61884237431,626.7884189909,656.28358877393,687.16673097983,719.50316028422,753.36126491573,788.81265129014,825.93229545055,864.79870163404,905.49406830005,948.10446197172,992.7199992577,1039.43503743958,1088.34837402783,1139.56345570838,1193.18859712177,1249.33720993748,1308.127826503],description:"35th root of 5"},cet84:{frequencies:[261.6255653006,274.70153691096,288.43104187674,302.84674360983,317.98293803021,333.87563322966,350.5626427598,368.08366429725,386.48038152577,405.79656146784,426.0781586093,447.37342422819,469.73302118774,493.21014446673,517.86064472263,543.74317298677,570.91930267857,599.45368763079,629.41421305643,660.87215705217,693.9023601738,728.58340348685,764.99779551626,803.23216389999,843.37747981977,885.52924725223,929.78774807537,976.25827622702,1025.05138820617,1076.28316609431,1130.07549372248,1186.55634664103,1245.86008938569,1308.127826503],description:"33rd root of 5"},cet87:{frequencies:[261.6255653006,275.05808287728,289.18026151691,304.0275068203,319.63704721237,336.04802279017,353.30157737897,371.44097305523,390.51169339433,410.56155044631,431.64081781968,453.80235066263,477.10170997643,501.59731726833,527.35059397819,554.42610593952],description:"Least-squares stretched ET to telephone dial tones. 1/1=697 Hz"},cet88:{frequencies:[261.6255653006,275.26799068863,289.6217982776,304.72408298441,320.61387403473,337.33223582731,354.92237405774,373.42974737602,392.90218486657,413.39000965417,434.94616895528,457.62637091093,481.48922855473,506.59641128799,533.01280425363],description:"88 cents steps by Gary Morrison"},cet88_appr:{frequencies:[261.6255653006,275.62199471997,290.69507255622,305.22982618403,320.49131749323,336.37572681506,354.37113606854,373.75080757229,392.4383479509,413.43299207996,436.04260883433,457.84473927605,482.33849075995,504.56359022259,531.55670410281,560.62621135843,588.65752192635,620.14948811994,654.0639132515,686.76710891407,723.50773613993,763.07456546008,801.22829373309],description:"88 cents scale approximated"},cet88b:{frequencies:[261.6255653006,275.26385669298,289.61326650562,304.7105300898,320.59498481995,337.30729585456,354.89100872976,373.39113880701,392.85588995712,413.33509311257,434.8821088097,457.55209870333,481.40413163568,506.49927024418,532.9029023296],description:"87.9745 cents steps. Least squares of 7/6, 11/9, 10/7, 3/2, 7/4."},cet88bis:{frequencies:[261.6255653006,289.53272725508,320.41669955092,337.26306895804,373.23835706057,392.86190344834,434.76782633734,457.62637091093],description:"Bistep approximation of 2212121 mode in 7/4 to 11/9 9/7 10/7 3/2"},cet88bm:{frequencies:[261.6255653006,275.22889829239,289.53954239223,304.59427454323,320.43178392135,337.09277136281,354.62005396115,373.05867644715,392.45602022512,412.86193859025,434.32887139488,456.91198653787,480.66932039657,505.66192697453,531.95403480429],description:"87.75412 cents steps. Minimal highest deviation for 7/6, 11/9, 10/7, 3/2, 7/4."},cet88c:{frequencies:[261.6255653006,275.37188725148,289.84046967782,305.06925821769,321.09819727018,337.96933026971,355.72690383892,374.4174952616,394.09012940783,414.79640018179,436.59061916193,459.52995194191,483.67455974508,509.0877727469,535.83624905561,563.99013984227,593.62329144382,624.813430743,657.64235771869,692.19618110881,728.56553457307,766.84580121693,807.13738838693,849.54597972796,894.18279699007,941.16492045434,990.61558284509,1042.66447461031,1097.44811755542,1155.11020756021,1215.8019705522,1279.68259818323,1346.91964745566,1417.68945580607,1492.17764912727,1570.57960775359,1653.10095047047,1739.95812689496,1831.3789571042],description:"38th root of 7. McLaren 'Microtonal Music', volume 3, track 7"},cet89:{frequencies:[261.6255653006,275.56724848068,290.25186566903,305.71900507847,322.01036982349,339.16988002511,357.2437980159,376.28084921395,396.33236207144,417.45239374596,439.69788420361,463.12880499146,487.80833148705,513.80299757552,541.1828853206,570.0218080747,600.39752248465,632.39191886931,666.09125466774,701.58637981228,738.97299766656,778.35189934333,819.82925103406,863.51687139942,909.53255273344,958.00034936337,1009.05093129669,1062.82192563509,1119.45831186524,1179.11277682321,1241.94614996535,1308.127826503],description:"31st root of 5. McLaren 'Microtonal Music', volume 2, track 22"},cet90:{frequencies:[261.6255653006,275.62199471997,290.36720431405,305.90125228146,322.26633935092,339.50692625527,357.66984706396,376.80444887746,396.96271256675,418.19939952297,440.572208006,464.1419130862,488.97255163391,515.13157534193,542.69005603758,571.72285881831,602.3088534069,634.53113933145],description:"Scale with limma steps"},cet93:{frequencies:[261.6255653006,275.99488223824,291.15340824655,307.14448922429,324.01384989472,341.80973194459,360.58302103444,380.38739950036,401.27949808494,423.31905787312],description:"Tuning used in John Chowning's STRIA, 9th root of Phi"},cet98:{frequencies:[261.6255653006,276.83245825991,292.92324815749,309.94930780463,327.96500300935,347.02785219778,367.1987248383,388.54202015806,411.12588832951],description:"8th root of 11/7, X.J. Scott"},chahargah:{frequencies:[261.6255653006,277.18263097687,283.66146785671,311.12698372208,326.97270111135,348.82502010853,367.86341164695,392.44854854484,415.30469757995,425.01198472693,466.16376151809,493.88330125613,523.2511306012],description:"Chahargah in C"},chahargah2:{frequencies:[261.6255653006,283.66146785671,327.729041887,348.82502010853,392.44854854484,425.01198472693,493.88330125613,523.2511306012],description:"Dastgah Chahargah in C, Mohammad Reza Gharib"},chalmers:{frequencies:[261.6255653006,274.70684356563,279.06726965397,294.32876096318,305.22982618403,313.95067836072,327.03195662575,343.38355445704,348.83408706747,366.27579142084,381.53728273004,392.4383479509,412.06026534844,418.60090448096,436.04260883433,457.84473927605,470.92601754108,488.36772189445,515.07533168556,523.2511306012],description:"Chalmers' 19-tone with more hexanies than Perrett's Tierce-Tone"},chalmers_17:{frequencies:[261.6255653006,269.10058145205,286.15296204753,294.32876096318,313.95067836072,327.03195662575,336.37572681506,343.38355445704,376.74081403286,384.42940207435,392.4383479509,400.61414686654,408.78994578219,448.50096908674,457.84473927605,470.92601754108,490.54793493862,523.2511306012],description:"7-limit figurative scale, Chalmers '96 Adnexed S&H decads"},chalmers_19:{frequencies:[261.6255653006,269.10058145205,290.69507255622,294.32876096318,305.22982618403,313.95067836072,336.37572681506,348.83408706747,356.10146388137,363.36884069528,376.74081403286,384.42940207435,392.4383479509,406.97310157871,436.04260883433,448.50096908674,465.11211608996,470.92601754108,508.71637697339,523.2511306012],description:"7-limit figurative scale. Reversed S&H decads"},chalmers_csurd:{frequencies:[261.6255653006,273.35108123154,287.04667286017,303.37994773979,315.80837468238,323.38635505005,348.83408706747,357.38803216938,383.0466618906,392.4383479509,423.31690179539,433.47765231178,451.2357321491,476.91154755397,500.80604115761,523.2511306012],description:"Combined Surd Scale, combination of Surd and Inverted Surd, JHC, 26-6-97"},chalmers_isurd:{frequencies:[261.6255653006,273.35108123154,287.04667286017,303.37994773979,323.38635505005,348.83408706747,383.0466618906,433.47765231178,523.2511306012],description:"Inverted Surd Scale, of the form 4/(SQRT(N)+1, JHC, 26-6-97"},chalmers_ji1:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,348.83408706747,370.63621750918,392.4383479509,414.24047839262,436.04260883433,466.02053819169,490.54793493862,523.2511306012],description:"Based loosely on Wronski's and similar JI scales, May 2, 1997."},chalmers_ji2:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,348.83408706747,370.63621750918,392.4383479509,416.96574469783,441.49314144476,466.02053819169,490.54793493862,523.2511306012],description:"Based loosely on Wronski's and similar JI scales, May 2, 1997."},chalmers_ji3:{frequencies:[261.6255653006,279.06726965397,296.50897400735,313.95067836072,331.39238271409,348.83408706747,366.27579142084,392.4383479509,418.60090448096,444.76346101102,470.92601754108,497.08857407114,523.2511306012],description:"15 16 17 18 19 20 21 on 1/1, 15-20 on 3/2, May 2, 1997. See other scales"},chalmers_ji4:{frequencies:[261.6255653006,279.06726965397,296.50897400735,313.95067836072,331.39238271409,348.83408706747,372.08969287196,395.34529867646,418.60090448096,441.85651028546,465.11211608996,496.11959049595,523.2511306012],description:"15 16 17 18 19 20 on 1/1, same on 4/3, + 16/15 on 16/9"},chalmers_surd:{frequencies:[261.6255653006,315.80837468238,357.38803216938,392.4383479509,423.31690179539,451.2357321491,476.91154755397,500.80604115761,523.2511306012],description:"Surd Scale, Surds of the form (SQRT(N)+1)/2, JHC, 26-6-97"},chalmers_surd2:{frequencies:[261.6255653006,272.2395613933,282.33485096279,291.98077704337,301.23248980765,310.13469895524,318.72425558532,327.03195662575,335.08385052998,342.90220911983,350.50624086893,357.91266581346,365.13613061818,372.18956061116,379.08442465499,385.8309605564,392.4383479509,398.91485744029,405.26796981327,411.50448329997,417.63058822561,423.65195171798,429.57376586736,435.40081471708,441.13750301549,446.78791303515,452.35581962987,457.84473927605,463.2579384726,468.59846621725,473.86917438523,479.07273156015,484.21164154672,489.28825377326,494.3047826718,499.26331035461,504.16580309972,509.01411882861,513.81001953884,518.55516185524,523.2511306012],description:"Surd Scale, Surds of the form (SQRT(N)+1)/4"},chalung:{frequencies:[261.6255653006,328.09251713275,362.03316295439,390.31715077734,479.41117101029,527.4935758042,647.70012555753,728.30917696308,823.06004869243,961.65052057178,1054.9871516084,1301.05663342451],description:'Tuning of chalung from Tasikmalaya. "slendroid". 1/1=185 Hz'},chaumont:{frequencies:[261.6255653006,273.37431312998,292.50627485027,309.49749487796,327.03195662575,349.91912034749,365.63284274659,391.22147055517,408.78994578219,437.39890198442,465.40109831725,489.02683710225,523.2511306012],description:"Lambert Chaumont organ temperament (1695), 1st interpretation"},chaumont2:{frequencies:[261.6255653006,274.56549986328,292.86986732103,309.30531842668,327.84547867349,349.70184487387,366.99801003998,391.46454285105,410.8262805401,438.2147004401,465.11211608996,490.54793493862,523.2511306012],description:"Lambert Chaumont organ temperament (1695), 2nd interpretation"},chimes:{frequencies:[261.6255653006,288.69027895239,130.8127826503,144.34513947619],description:"Heavenly Chimes"},chimes_peck:{frequencies:[261.6255653006,327.03195662575,392.4383479509,457.84473927605,588.65752192635,719.47030457665,850.28308722695,981.09586987725,1046.5022612024],description:"Kris Peck, 9-tone windchime tuning. TL 7-3-2001"},chin_12:{frequencies:[261.6255653006,277.05457499359,293.57996645301,310.53449241474,329.24697610111,347.79893712036,368.97000115401,391.76907592069,413.1274313058,439.00991514661,462.11551390967,491.43599249807,523.2511306012],description:"Chinese scale, 4th cent."},chin_5:{frequencies:[261.6255653006,294.32876096318,348.83408706747,392.4383479509,441.49314144476,523.2511306012],description:"Chinese pentatonic from Zhou period"},chin_60:{frequencies:[261.6255653006,262.17244551937,265.19499215873,268.81311753311,272.48060600886,276.1981310001,279.38237857051,283.19406633357,287.05775848811,290.97416342694,294.32876096318,294.94400091442,298.34436617857,302.41475692242,306.54068145351,310.72289706448,314.30517589183,318.59332496145,322.93997797627,327.34593352805,331.11985608357,331.812000697,335.63741195089,340.21660119759,344.85826629043,349.56326086722,353.59332287831,358.41749022331,363.30747486009,368.26417485089,372.50983809402,373.28850041093,377.59208844475,382.74367817547,387.96555142985,392.4383479509,393.25866808247,397.79248823809,403.21967609811,408.72090880899,414.29719629306,419.07356785577,424.79110016094,430.58663751693,436.46124492224,441.49314144476,442.41600115048,447.51654926786,453.62213515688,459.81102195042,466.08434536373,471.45776383774,477.8899872033,484.40996672226,491.01890004663,496.67978412536,497.7180007967,503.45611792634,510.32490448905,517.28740216504,523.2511306012],description:'Chinese scale of fifths (the 60 lu")'},chin_7:{frequencies:[261.6255653006,294.32876096318,331.11985608357,348.83408706747,392.4383479509,441.49314144476,496.67978412536,523.2511306012],description:"Chinese heptatonic scale and tritriadic of 64:81:96 triad"},chin_bianzhong:{frequencies:[261.6255653006,277.82379926216,312.56802260838,375.1593523779,420.13030572059,469.40618689596,506.59641128799,563.72967895209,627.66881138238,764.75812197709,849.53311813274,949.1724262561,1225.95732655636],description:"Pitches of Bianzhong bells (Xinyang). 1/1=b, Liang Mingyue, 1975."},chin_bianzhong2a:{frequencies:[261.6255653006,284.81073476233,312.56802260838,372.56793743951,413.39000965417,447.94973572445,491.60634075178,562.75365576207,652.05945856061,695.63805470995,863.88355261715,960.75607282217,1173.30283584026],description:"A-tones (GU) of 13 Xinyang bells (Ma Cheng-Yuan) 1/1=d#=619 Hz"},chin_bianzhong2b:{frequencies:[261.6255653006,279.59231184543,312.74738729016,375.37536096215,418.43048063126,468.86028020615,505.12945327459,562.08698385796,624.42058858709,762.97988553915,849.53425657971,936.08862980659,1215.37624187632],description:"B-tones (SUI) of 13 Xinyang bells (Ma Cheng-Yuan) 1/1=b+=506.6 Hz"},chin_bianzhong3:{frequencies:[261.6255653006,508.3551866238,542.32970395878,608.04166718582,619.02750937577,673.88551872153,729.80120031671,739.56153452917,812.57643344187,881.52624580654,911.03313298042,978.11461117351,982.0774855146,1059.88575280263,1092.20381072382,1163.18085489566,1213.27682870749,1331.52122774489,1483.40111876828,1542.82606951623,1645.93659621657,1649.74391394557,1818.91159982256,2044.01922018919,2273.22753490632,2362.92760489328,2776.13057951436],description:"A and B-tones of 13 Xinyang bells (Ma Cheng-Yuan) abs. pitches wrt middle-C"},chin_bronze:{frequencies:[261.6255653006,299.00064605783,313.95067836072,327.03195662575,348.83408706747,392.4383479509,436.04260883433,523.2511306012],description:`Scale found on ancient Chinese bronze instrument 3rd c.BC & "Scholar's Lute"`},chin_chime:{frequencies:[261.6255653006,248.6592656401,341.74499057264,392.56190849927,548.78974538591,648.86582834888,714.36935367713,785.57745330134,889.7110417619,886.88898199546,992.62825668803,1044.08711871947,1326.14827969763],description:"Pitches of 12 stone chimes, F. Kuttner, 1951, ROMA Toronto. %1=b4"},chin_ching:{frequencies:[261.6255653006,276.1981310001,294.32876096318,310.72289706448,331.11985608357,349.56326086722,368.26417485089,392.4383479509,414.29719629306,441.49314144476,466.08434536373,496.67978412536,524.34489103873],description:"Scale of Ching Fang, c.45 BC. Pyth.steps 0 1 2 3 4 5 47 48 49 50 51 52 53"},chin_di:{frequencies:[261.6255653006,298.70635408336,316.56004827153,360.50766037677,409.94872043165,433.75364775074,527.37121036213],description:"Chinese di scale"},chin_di2:{frequencies:[261.6255653006,289.95657583698,318.21537073485,338.89464890898,383.48501130814,436.9606979923,494.73987775324,522.04355935974],description:"Observed tuning from Chinese flute dizi, Helmholtz/Ellis p. 518, nr.103"},chin_huang:{frequencies:[261.6255653006,331.11985608357,392.4383479509,441.49314144476,523.2511306012,588.65752192635,662.23971216714],description:"Huang Zhong qin tuning"},"chin_liu-an":{frequencies:[261.6255653006,278.83777354406,294.32876096318,311.64221749042,331.11985608357,353.19451315581,371.78369805875,392.4383479509,415.52295665389,441.49314144476,470.92601754108,492.82955324067],description:'Scale of Liu An, in: "Huai Nan Tzu", c.122 BC, 1st known corr. to Pyth. scale'},chin_lu:{frequencies:[261.6255653006,277.01530443593,294.32876096318,313.95067836072,328.55303549378,348.83408706747,371.78369805875,392.4383479509,415.52295665389,441.49314144476,470.92601754108,495.71159741166,523.2511306012],description:"Chinese L\xEF\xBF\xBD scale by Huai Nan zi, Han era. P\xEF\xBF\xBDre Amiot 1780, Kurt Reinhard"},chin_lu2:{frequencies:[261.6255653006,279.38237857051,294.32876096318,314.30517589183,331.11985608357,353.59332287831,372.50983809402,392.4383479509,419.07356785577,441.49314144476,471.45776383774,496.67978412536,523.2511306012],description:"Chinese L\xEF\xBF\xBD (Lushi chunqiu, by Lu Buwei). Mingyue: Music of the billion, p.67"},chin_lu3:{frequencies:[261.6255653006,277.34278419245,293.66476791741,310.58830860439,329.24697610111,347.81902735497,369.14054089803,391.76907592069,413.1512951712,439.23819834286,462.1422075194,491.60634075178,523.2511306012],description:"Chinese L\xEF\xBF\xBD scale by Ho Ch'\xEF\xBF\xBDng-T'ien, reported in Sung Shu (500 AD)"},chin_lu3a:{frequencies:[261.6255653006,277.06033146978,293.58830182213,310.53780743131,329.25144446584,347.79484055318,368.74579520635,391.78066943209,413.13681807919,438.99947255393,462.1072190611,491.17907538715,523.2511306012],description:`Chinese L\xEF\xBF\xBD scale by Ho Ch'\xEF\xBF\xBDng-T'ien, calc. basis is "big number" 177147`},chin_lu4:{frequencies:[261.6255653006,276.78521684908,293.5444075184,310.55356739316,329.35741152087,348.44172229085,369.5396750577,391.9150968203,414.62425518576,439.72952246257,465.20924434298,493.37740286979,523.2511306012],description:'Chinese L\xEF\xBF\xBD "749-Temperament"'},chin_lu5:{frequencies:[261.6255653006,277.35401920913,293.41471131112,311.37240624271,329.40299530711,349.20610523279,369.80535913035,392.03738806826,415.16320853113,440.12206674667,466.08434536373,494.10449271367,522.71643616375],description:"Chinese L\xEF\xBF\xBD scale by Ch'ien Lo-Chih, c.450 AD Pyth.steps 0 154 255 103 204 etc."},chin_lusheng:{frequencies:[261.6255653006,316.38258506467,348.82502010853,389.28772571905,466.97226207056,520.53801357752],description:"Observed tuning of a small Lusheng, 1/1=d, OdC '97"},chin_pan:{frequencies:[261.6255653006,275.62199471997,279.38237857051,290.36720431405,294.32876096318,310.07474405997,326.6631048533,331.11985608357,344.13890881665,348.83408706747,367.49599295996,372.50983809402,387.15627241873,392.4383479509,413.43299207996,419.07356785577,435.55080647107,441.49314144476,458.8518784222,465.11211608996,489.99465727995,496.67978412536,516.20836322497,523.2511306012],description:"Pan Huai-su pure system, in: Sin-Yan Shen, 1991"},chin_pipa:{frequencies:[261.6255653006,284.4818984792,320.42873367481,380.17671965621,433.44136952667,521.74210224793],description:"Observed tuning from Chinese balloon lute p'i-p'a, Helmholtz/Ellis p. 518, nr.109"},chin_sheng:{frequencies:[261.6255653006,295.36595061166,318.03161540472,348.82502010853,395.40657391157,442.03793673691,477.05982293263,522.94897617031],description:"Observed tuning from Chinese sheng or mouth organ, Helmholtz/Ellis p. 518, nr.105"},chin_sientsu:{frequencies:[261.6255653006,291.80478157373,326.97270111135,392.44854854484,438.22451411849,523.2511306012],description:"Observed tuning from Chinese tamboura sienzi, Helmholtz/Ellis p. 518, nr.108"},chin_sona:{frequencies:[261.6255653006,284.4818984792,310.58830860439,337.33223582731,377.98706287655,418.43499793376,469.94877954106,528.10941333272],description:"Observed tuning from Chinese oboe (so-na), Helmholtz/Ellis p. 518, nr.104"},"chin_wang-po":{frequencies:[261.6255653006,294.32876096318,330.24264909897,371.97947673071,392.4383479509,440.94196398978,495.71159741166,517.50111817701],description:"Scale of Wang Po, 958 AD. H. Pischner: Musik in China, Berlin, 1955, p.20"},chin_yangqin:{frequencies:[261.6255653006,288.45311779165,306.48933163909,347.41744306689,383.26356564167,434.44398956347,465.08793784701,522.64699622026],description:"Observed tuning from Chinese dulcimer yangqin, Helmholtz/Ellis p. 518, nr.107"},chin_yunlo:{frequencies:[261.6255653006,288.45311779165,323.40385076956,367.0144478307,386.1523605003,409.35055662695,483.1608380663,525.67465946865],description:"Observed tuning from Chinese gong-chime (y\xEF\xBF\xBDn-lo), Helmholtz/Ellis p. 518, nr.106"},choquel:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,436.04260883433,475.68284600109,490.54793493862,523.2511306012],description:"Choquel/Barbour/Marpurg?"},chordal:{frequencies:[261.6255653006,392.4383479509,327.03195662575,457.84473927605,588.65752192635,719.47030457665,850.28308722695,981.09586987725,981.09586987725,490.54793493862,555.95432626377,621.36071758893,310.68035879446,523.2511306012,348.83408706747,418.60090448096,299.00064605783,465.11211608996,380.54627680087,322.00069575458,279.06726965397,610.45965236807,915.6894785521,872.08521766867,697.66817413493,654.0639132515,627.90135672144,448.50096908674,319.76457981184,377.90359432309,444.76346101102,889.52692202204,336.37572681506,294.32876096318,465.11211608996,411.12588832951,305.22982618403,366.27579142084,373.75080757229,313.95067836072,470.92601754108],description:"Chordal Notes S&H"},chrom15:{frequencies:[261.6255653006,280.31310567921,301.87565226992,356.76213450082,392.4383479509,413.09299784305,436.04260883433,523.2511306012],description:"Tonos-15 Chromatic"},chrom15_inv:{frequencies:[261.6255653006,313.95067836072,331.39238271409,348.83408706747,383.71749577421,453.48431318771,488.36772189445,523.2511306012],description:"Inverted Chromatic Tonos-15 Harmonia"},chrom15_inv2:{frequencies:[261.6255653006,279.06726965397,296.50897400735,348.83408706747,383.71749577421,401.15920012759,418.60090448096,523.2511306012],description:"A harmonic form of the Chromatic Tonos-15 inverted"},chrom17:{frequencies:[261.6255653006,277.97716313189,296.50897400735,370.63621750918,404.33041910093,423.58424858192,444.76346101102,523.2511306012],description:"Tonos-17 Chromatic"},chrom17_con:{frequencies:[261.6255653006,277.97716313189,296.50897400735,370.63621750918,386.75083566176,404.33041910093,494.18162334558,523.2511306012],description:"Conjunct Tonos-17 Chromatic"},chrom19:{frequencies:[261.6255653006,276.16031892841,292.40504357126,355.06326719367,382.37582620857,397.67085925691,414.24047839262,523.2511306012],description:"Tonos-19 Chromatic"},chrom19_con:{frequencies:[261.6255653006,276.16031892841,292.40504357126,355.06326719367,368.21375857121,382.37582620857,451.89870370104,523.2511306012],description:"Conjunct Tonos-19 Chromatic"},chrom21:{frequencies:[261.6255653006,274.70684356563,289.16509849014,343.38355445704,392.4383479509,406.97310157871,422.62591317789,523.2511306012],description:"Tonos-21 Chromatic"},chrom21_inv:{frequencies:[261.6255653006,323.91736656265,336.37572681506,348.83408706747,398.6675280771,473.41768959156,498.33441009638,523.2511306012],description:"Inverted Chromatic Tonos-21 Harmonia"},chrom21_inv2:{frequencies:[261.6255653006,279.06726965397,299.00064605783,348.83408706747,398.6675280771,423.58424858192,448.50096908674,523.2511306012],description:"Inverted harmonic form of the Chromatic Tonos-21"},chrom23:{frequencies:[261.6255653006,273.51763645063,286.54228580542,334.29933343966,376.08675011961,401.15920012759,429.81342870813,523.2511306012],description:"Tonos-23 Chromatic"},chrom23_con:{frequencies:[261.6255653006,273.51763645063,286.54228580542,334.29933343966,353.96400011258,376.08675011961,462.87600014722,523.2511306012],description:"Conjunct Tonos-23 Chromatic"},chrom25:{frequencies:[261.6255653006,278.32506946872,297.30177875068,363.36884069528,408.78994578219,436.04260883433,467.18850946536,523.2511306012],description:"Tonos-25 Chromatic"},chrom25_con:{frequencies:[261.6255653006,278.32506946872,297.30177875068,363.36884069528,384.74347838324,408.78994578219,503.12608711654,523.2511306012],description:"Conjunct Tonos-25 Chromatic"},chrom27:{frequencies:[261.6255653006,277.01530443593,294.32876096318,353.19451315581,392.4383479509,415.52295665389,441.49314144476,523.2511306012],description:"Tonos-27 Chromatic"},chrom27_inv:{frequencies:[261.6255653006,310.07474405997,329.45441556372,348.83408706747,387.59343007496,465.11211608996,494.18162334558,523.2511306012],description:"Inverted Chromatic Tonos-27 Harmonia"},chrom27_inv2:{frequencies:[261.6255653006,271.31540105247,281.00523680435,348.83408706747,387.59343007496,406.97310157871,436.04260883433,523.2511306012],description:"Inverted harmonic form of the Chromatic Tonos-27"},chrom29:{frequencies:[261.6255653006,270.96933548991,281.00523680435,344.87006335079,379.35706968587,399.32323124828,421.50785520652,523.2511306012],description:"Tonos-29 Chromatic"},chrom29_con:{frequencies:[261.6255653006,270.96933548991,281.00523680435,344.87006335079,361.29244731988,379.35706968587,474.19633710734,523.2511306012],description:"Conjunct Tonos-29 Chromatic"},chrom31:{frequencies:[261.6255653006,279.66870773512,300.3849083081,337.93302184661,352.6257619269,368.65420565085,386.2091678247,405.51962621593,523.2511306012],description:"Tonos-31 Chromatic. Tone 24 alternates with 23 as MESE or A"},chrom31_con:{frequencies:[261.6255653006,279.66870773512,300.3849083081,337.93302184661,352.6257619269,368.65420565085,386.2091678247,450.57736246214,523.2511306012],description:"Conjunct Tonos-31 Chromatic"},chrom33:{frequencies:[261.6255653006,278.50463402967,297.71185016965,359.73515228832,392.4383479509,411.12588832951,431.68218274599,523.2511306012],description:"Tonos-33 Chromatic. A variant is 66 63 60 48"},chrom33_con:{frequencies:[261.6255653006,278.50463402967,297.71185016965,359.73515228832,375.37581108347,392.4383479509,479.64686971777,523.2511306012],description:"Conjunct Tonos-33 Chromatic"},chrom_new:{frequencies:[261.6255653006,273.20871865617,297.93622032612,349.22823143301,391.99543598175,409.35055662695,446.39994737251,523.2511306012],description:"New Chromatic genus 4.5 + 9 + 16.5"},chrom_new2:{frequencies:[261.6255653006,273.6474710507,299.37374239667,349.22823143301,391.99543598175,410.00794244467,448.55379686399,523.2511306012],description:"New Chromatic genus 14/3 + 28/3 + 16 parts"},chrom_soft:{frequencies:[261.6255653006,271.68808704293,282.55561052465,348.83408706747,392.4383479509,407.5321305644,423.83341578697,523.2511306012],description:"100/81 Chromatic. This genus is a good approximation to the soft chromatic"},chrom_soft2:{frequencies:[261.6255653006,268.42893440103,282.57118533961,349.22823143301,391.99543598175,402.18897205153,423.37840671577,523.2511306012],description:"1:2 Soft Chromatic"},chrom_soft3:{frequencies:[261.6255653006,271.31540105247,281.75060878526,348.83408706747,392.4383479509,406.97310157871,422.62591317789,523.2511306012],description:"Soft chromatic genus is from K. Schlesinger's modified Mixolydian Harmonia"},cifariello:{frequencies:[261.6255653006,279.06726965397,290.69507255622,294.32876096318,313.95067836072,327.03195662575,348.83408706747,363.36884069528,376.74081403286,392.4383479509,418.60090448096,436.04260883433,465.11211608996,470.92601754108,490.54793493862,523.2511306012],description:"F. Cifariello Ciardi, ICMC 86 Proc. 15-tone 5-limit tuning"},ckring1:{frequencies:[261.6255653006,299.00064605783,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,373.75080757229,392.4383479509,418.60090448096,436.04260883433,448.50096908674,457.84473927605,523.2511306012],description:"Double-tie circular mirroring with common pivot of 4:5:6:7 = square 1 3 5 7"},ckring2:{frequencies:[261.6255653006,290.69507255622,305.22982618403,313.95067836072,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,406.97310157871,436.04260883433,448.50096908674,470.92601754108,523.2511306012],description:"Double-tie circular mirroring with common pivot of 3:5:7:9"},"clampitt-phi":{frequencies:[261.6255653006,289.46753582364,320.2724252102,340.92857683151,377.20990650852,444.26963537301,491.54843559637,523.2511306012],description:'David Clampitt, phi+1 mod 3phi+2, from "Pairwise Well-Formed Scales", 1997'},classr:{frequencies:[261.6255653006,275.93321340298,287.4304306281,313.95067836072,327.03195662575,344.91651675372,367.91095120397,392.4383479509,408.78994578219,441.49314144476,459.88868900496,490.54793493862,523.2511306012],description:"Marvel projection to the 5-limit of class"},cluster:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"13-tone 5-limit Tritriadic Cluster"},cluster6a:{frequencies:[261.6255653006,327.03195662575,348.83408706747,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"Six-Tone Triadic Cluster 4:5:6"},cluster6b:{frequencies:[261.6255653006,313.95067836072,327.03195662575,392.4383479509,418.60090448096,490.54793493862,523.2511306012],description:"Six-Tone Triadic Cluster 4:6:5"},cluster6c:{frequencies:[261.6255653006,290.69507255622,313.95067836072,348.83408706747,418.60090448096,436.04260883433,523.2511306012],description:"Six-Tone Triadic Cluster 3:4:5"},cluster6d:{frequencies:[261.6255653006,290.69507255622,327.03195662575,348.83408706747,392.4383479509,436.04260883433,523.2511306012],description:"Six-Tone Triadic Cluster 3:5:4"},cluster6e:{frequencies:[261.6255653006,313.95067836072,327.03195662575,392.4383479509,418.60090448096,502.32108537715,523.2511306012],description:"Six-Tone Triadic Cluster 5:6:8"},cluster6f:{frequencies:[261.6255653006,313.95067836072,348.83408706747,418.60090448096,436.04260883433,502.32108537715,523.2511306012],description:"Six-Tone Triadic Cluster 5:8:6"},cluster6g:{frequencies:[261.6255653006,286.15296204753,299.00064605783,327.03195662575,373.75080757229,457.84473927605,523.2511306012],description:"Six-Tone Triadic Cluster 4:5:7"},cluster6h:{frequencies:[261.6255653006,286.15296204753,327.03195662575,366.27579142084,418.60090448096,457.84473927605,523.2511306012],description:"Six-Tone Triadic Cluster 4:7:5"},cluster6i:{frequencies:[261.6255653006,313.95067836072,366.27579142084,373.75080757229,439.53094970501,448.50096908674,523.2511306012],description:"Six-Tone Triadic Cluster 5:6:7"},cluster6j:{frequencies:[261.6255653006,305.22982618403,313.95067836072,366.27579142084,436.04260883433,439.53094970501,523.2511306012],description:"Six-Tone Triadic Cluster 5:7:6"},cluster8a:{frequencies:[261.6255653006,294.32876096318,327.03195662575,348.83408706747,367.91095120397,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"Eight-Tone Triadic Cluster 4:5:6"},cluster8b:{frequencies:[261.6255653006,306.59245933664,313.95067836072,327.03195662575,392.4383479509,408.78994578219,418.60090448096,490.54793493862,523.2511306012],description:"Eight-Tone Triadic Cluster 4:6:5"},cluster8c:{frequencies:[261.6255653006,290.69507255622,313.95067836072,348.83408706747,363.36884069528,418.60090448096,436.04260883433,484.4917875937,523.2511306012],description:"Eight-Tone Triadic Cluster 3:4:5"},cluster8d:{frequencies:[261.6255653006,290.69507255622,327.03195662575,348.83408706747,387.59343007496,392.4383479509,436.04260883433,465.11211608996,523.2511306012],description:"Eight-Tone Triadic Cluster 3:5:4"},cluster8e:{frequencies:[261.6255653006,313.95067836072,327.03195662575,334.88072358477,392.4383479509,401.85686830172,418.60090448096,502.32108537715,523.2511306012],description:"Eight-Tone Triadic Cluster 5:6:8"},cluster8f:{frequencies:[261.6255653006,301.39265122629,313.95067836072,348.83408706747,376.74081403286,418.60090448096,436.04260883433,502.32108537715,523.2511306012],description:"Eight-Tone Triadic Cluster 5:8:6"},cluster8g:{frequencies:[261.6255653006,286.15296204753,299.00064605783,327.03195662575,373.75080757229,400.61414686654,457.84473927605,500.76768358318,523.2511306012],description:"Eight-Tone Triadic Cluster 4:5:7"},cluster8h:{frequencies:[261.6255653006,286.15296204753,327.03195662575,357.69120255941,366.27579142084,408.78994578219,418.60090448096,457.84473927605,523.2511306012],description:"Eight-Tone Triadic Cluster 4:7:5"},cluster8i:{frequencies:[261.6255653006,307.67166479351,313.95067836072,366.27579142084,373.75080757229,439.53094970501,448.50096908674,512.78610798918,523.2511306012],description:"Eight-Tone Triadic Cluster 5:6:7"},cluster8j:{frequencies:[261.6255653006,263.718569823,305.22982618403,313.95067836072,366.27579142084,376.74081403286,436.04260883433,439.53094970501,523.2511306012],description:"Eight-Tone Triadic Cluster 5:7:6"},cohenf_11:{frequencies:[261.6255653006,299.00064605783,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,523.2511306012],description:`Flynn Cohen, 7-limit scale of "Rameau's nephew", 1996`},coleman:{frequencies:[261.6255653006,276.70272600503,293.15632631094,310.58830860439,328.48713220126,349.43001184052,368.92737853004,391.76907592069,414.58565256441,438.98455767189,465.89457252293,491.89038573682,523.2511306012],description:"Jim Coleman's ModX piano temperament. TL 16 Mar 1999"},collengettes:{frequencies:[261.6255653006,269.10058145205,275.62199471997,285.40970760065,294.32876096318,302.73815413355,310.07474405997,321.08592105074,331.11985608357,340.58042340025,348.83408706747,358.80077526939,367.49599295996,380.54627680087,392.4383479509,403.65087217807,413.43299207996,428.11456140098,441.49314144476,454.10723120033,465.11211608996,478.40103369253,496.67978412536,507.3950357345,523.2511306012],description:"R.P. Collengettes, from p.23 of d'Erlanger, vol 5. 24 tone Arabic system"},colonna1:{frequencies:[261.6255653006,272.52663052146,290.69507255622,308.86351459099,327.03195662575,348.83408706747,363.36884069528,392.4383479509,399.70572476481,436.04260883433,463.29527188648,490.54793493862,523.2511306012],description:"Colonna 1"},colonna2:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,470.92601754108,479.64686971777,523.2511306012],description:"Colonna 2"},concertina:{frequencies:[261.6255653006,272.52663052146,290.69507255622,294.32876096318,306.59245933664,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,436.04260883433,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:"English Concertina, Helmholtz/Ellis, p. 470"},cons11:{frequencies:[261.6255653006,313.95067836072,327.03195662575,348.83408706747,392.4383479509,436.04260883433,457.84473927605,523.2511306012],description:"Set of intervals with num + den <= 11 not exceeding 2/1"},cons12:{frequencies:[261.6255653006,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,436.04260883433,457.84473927605,523.2511306012],description:"Set of intervals with num + den <= 12 not exceeding 2/1"},cons13:{frequencies:[261.6255653006,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,523.2511306012],description:"Set of intervals with num + den <= 13 not exceeding 2/1"},cons14:{frequencies:[261.6255653006,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,470.92601754108,523.2511306012],description:"Set of intervals with num + den <= 14 not exceeding 2/1"},cons15:{frequencies:[261.6255653006,299.00064605783,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,470.92601754108,523.2511306012],description:"Set of intervals with num + den <= 15 not exceeding 2/1"},cons16:{frequencies:[261.6255653006,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,470.92601754108,523.2511306012],description:"Set of intervals with num + den <= 16 not exceeding 2/1"},cons17:{frequencies:[261.6255653006,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,418.60090448096,436.04260883433,457.84473927605,470.92601754108,479.64686971777,523.2511306012],description:"Set of intervals with num + den <= 17 not exceeding 2/1"},cons18:{frequencies:[261.6255653006,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,411.12588832951,418.60090448096,436.04260883433,457.84473927605,470.92601754108,479.64686971777,523.2511306012],description:"Set of intervals with num + den <= 18 not exceeding 2/1"},cons19:{frequencies:[261.6255653006,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,392.4383479509,411.12588832951,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,479.64686971777,523.2511306012],description:"Set of intervals with num + den <= 19 not exceeding 2/1"},cons20:{frequencies:[261.6255653006,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,392.4383479509,411.12588832951,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,479.64686971777,485.87604984397,523.2511306012],description:"Set of intervals with num + den <= 20 not exceeding 2/1"},cons21:{frequencies:[261.6255653006,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,392.4383479509,411.12588832951,418.60090448096,425.14154361347,436.04260883433,448.50096908674,457.84473927605,470.92601754108,479.64686971777,485.87604984397,523.2511306012],description:"Set of intervals with num + den <= 21 not exceeding 2/1"},cons8:{frequencies:[261.6255653006,348.83408706747,392.4383479509,436.04260883433,523.2511306012],description:"Set of intervals with num + den <= 8 not exceeding 2/1"},cons9:{frequencies:[261.6255653006,327.03195662575,348.83408706747,392.4383479509,436.04260883433,523.2511306012],description:"Set of intervals with num + den <= 9 not exceeding 2/1"},cons_5:{frequencies:[261.6255653006,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,470.92601754108,523.2511306012],description:"Set of consonant 5-limit intervals within the octave"},cons_7:{frequencies:[261.6255653006,299.00064605783,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605],description:"Set of consonant 7-limit intervals of tetrad 4:5:6:7 and inverse"},cons_7a:{frequencies:[261.6255653006,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,418.60090448096,436.04260883433,457.84473927605],description:"Set of consonant 7-limit intervals, harmonic entropy minima"},cont_frac1:{frequencies:[261.6255653006,264.29672053658,267.01859068163,284.39991302433,288.64312378534,304.51680721446,328.36325429535,342.47239171077,368.24757473349,390.36247006958,408.23697512781,419.80330474394,448.3033221197,488.42606438843,498.20005830409],description:"Continued fraction scale 1, see McLaren in Xenharmonikon 15, pp.33-38"},cont_frac2:{frequencies:[261.6255653006,268.67076720771,283.00159623424,287.78825007941,303.56038377389,306.30898587133,329.63288816559,333.85601282718,352.97051886932,380.09613548074,393.10104267352,426.45795861378,432.83315799354,472.91012288255,483.94654132265,519.4303061261],description:"Continued fraction scale 2, see McLaren in Xenharmonikon 15, pp.33-38"},cordier:{frequencies:[261.6255653006,277.2273508585,293.75953199293,311.27759533081,329.84032939425,349.51003591412,370.35272620855,392.4383479509,415.84102607989,440.63929776914,466.91639276282,494.76049384407,524.26505360912],description:"Serge Cordier, piano tuning, 1975 (Piano bien temp\xEF\xBF\xBDr\xEF\xBF\xBD et justesse orchestrale)"},corner11:{frequencies:[261.6255653006,269.80136421624,286.15296204753,294.32876096318,314.76825825228,327.03195662575,343.38355445704,359.73515228832,392.4383479509,400.61414686654,408.78994578219,449.66894036041,457.84473927605,490.54793493862,494.63583439645,523.2511306012],description:"Quadratic Corner 11-limit. Chalmers '96"},corner13:{frequencies:[261.6255653006,265.71346475842,269.80136421624,286.15296204753,292.28481123426,294.32876096318,314.76825825228,318.85615771011,327.03195662575,343.38355445704,345.42750418595,359.73515228832,371.99885066179,392.4383479509,400.61414686654,408.78994578219,425.14154361347,449.66894036041,457.84473927605,490.54793493862,494.63583439645,523.2511306012],description:"Quadratic Corner 13-limit. Chalmers '96"},corner17:{frequencies:[261.6255653006,265.71346475842,269.80136421624,277.97716313189,286.15296204753,292.28481123426,294.32876096318,295.35073582763,314.76825825228,318.85615771011,327.03195662575,343.38355445704,345.42750418595,347.47145391486,359.73515228832,371.99885066179,382.21859930635,392.4383479509,400.61414686654,408.78994578219,416.96574469783,425.14154361347,449.66894036041,451.71289008932,457.84473927605,486.4600354808,490.54793493862,494.63583439645,523.2511306012],description:"Quadratic Corner 17-limit."},corner17a:{frequencies:[261.6255653006,265.71346475842,269.80136421624,275.93321340298,277.97716313189,286.15296204753,292.28481123426,294.32876096318,295.35073582763,306.59245933664,312.72430852337,314.76825825228,318.85615771011,327.03195662575,331.11985608357,337.2517052703,343.38355445704,345.42750418595,347.47145391486,359.73515228832,367.91095120397,371.99885066179,382.21859930635,392.4383479509,398.57019713763,400.61414686654,404.70204632437,408.78994578219,416.96574469783,425.14154361347,429.2294430713,441.49314144476,449.66894036041,451.71289008932,457.84473927605,459.88868900496,478.28423656516,486.4600354808,490.54793493862,494.63583439645,515.07533168556,521.20718087229,523.2511306012],description:"Quadratic Corner 17 odd limit."},corner7:{frequencies:[261.6255653006,286.15296204753,294.32876096318,327.03195662575,343.38355445704,392.4383479509,400.61414686654,408.78994578219,457.84473927605,490.54793493862,523.2511306012],description:"Quadratic corner 7-limit. Chalmers '96"},corner9:{frequencies:[261.6255653006,286.15296204753,294.32876096318,327.03195662575,331.11985608357,343.38355445704,367.91095120397,392.4383479509,400.61414686654,408.78994578219,441.49314144476,457.84473927605,490.54793493862,515.07533168556,523.2511306012],description:"First 9 harmonics of 5th through 9th harmonics"},corners11:{frequencies:[261.6255653006,269.80136421624,276.76092858245,279.06726965397,286.15296204753,294.32876096318,299.00064605783,304.4370214407,314.76825825228,327.03195662575,334.88072358477,341.71502406609,343.38355445704,348.83408706747,359.73515228832,380.54627680087,392.4383479509,398.6675280771,400.61414686654,408.78994578219,418.60090448096,434.91003062957,449.66894036041,457.84473927605,465.11211608996,478.40103369253,490.54793493862,494.63583439645,507.3950357345,523.2511306012],description:"Quadratic Corners 11-limit. Chalmers '96"},corners13:{frequencies:[261.6255653006,265.71346475842,269.80136421624,276.76092858245,279.06726965397,286.15296204753,292.28481123426,294.32876096318,299.00064605783,304.4370214407,314.76825825228,318.85615771011,322.00069575458,327.03195662575,334.88072358477,341.71502406609,343.38355445704,345.42750418595,348.83408706747,359.73515228832,368.0007951481,371.99885066179,380.54627680087,392.4383479509,396.30854862103,398.6675280771,400.61414686654,408.78994578219,418.60090448096,425.14154361347,429.33426100611,434.91003062957,449.66894036041,457.84473927605,465.11211608996,468.3646483703,478.40103369253,490.54793493862,494.63583439645,507.3950357345,515.20111320734,523.2511306012],description:"Quadratic Corners 13-limit. Chalmers '96"},corners7:{frequencies:[261.6255653006,279.06726965397,286.15296204753,294.32876096318,299.00064605783,327.03195662575,334.88072358477,341.71502406609,343.38355445704,348.83408706747,392.4383479509,398.6675280771,400.61414686654,408.78994578219,418.60090448096,457.84473927605,465.11211608996,478.40103369253,490.54793493862,523.2511306012],description:"Quadratic Corners 7-limit. Chalmers '96"},corrette:{frequencies:[261.6255653006,273.37431312998,292.50627485027,309.11326130363,327.03195662575,349.91912034749,365.63284274659,391.22147055517,411.33704984564,437.39890198442,465.11211608996,489.02683710225,523.2511306012],description:"Corrette temperament"},corrette2:{frequencies:[261.6255653006,272.8349596094,292.34127285051,310.42509491746,326.6631048533,350.01785633742,365.01443422269,391.11111150212,409.71484950008,437.02884834934,466.16376151809,488.33748205014,523.2511306012],description:"Michel Corrette, modified meantone temperament (1753)"},coul_12:{frequencies:[261.6255653006,272.52663052146,290.69507255622,313.95067836072,327.03195662575,340.65828815182,363.36884069528,392.4383479509,408.78994578219,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Scale 1 5/4 3/2 2 successively split largest intervals by smallest interval"},coul_12a:{frequencies:[261.6255653006,272.52663052146,290.69507255622,313.95067836072,327.03195662575,348.83408706747,376.74081403286,392.4383479509,408.78994578219,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Scale 1 6/5 3/2 2 successively split largest intervals by smallest interval"},coul_12sup:{frequencies:[261.6255653006,280.31310567921,294.32876096318,310.68035879446,331.39238271409,348.83408706747,373.75080757229,392.4383479509,420.46965851882,441.49314144476,466.02053819169,497.08857407114,523.2511306012],description:"Superparticular approximation to Pythagorean scale. Op de Coul, 2003"},coul_13:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,363.36884069528,376.74081403286,392.4383479509,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Symmetrical 13-tone 5-limit just system"},coul_17sup:{frequencies:[261.6255653006,276.16031892841,279.06726965397,294.57100685697,310.07474405997,313.95067836072,331.39238271409,348.83408706747,368.21375857121,372.08969287196,392.76134247596,413.43299207996,418.60090448096,441.85651028546,465.11211608996,470.92601754108,497.08857407114,523.2511306012],description:"Superparticular approximation to Pythagorean 17-tone scale. Op de Coul, 2003"},coul_20:{frequencies:[261.6255653006,277.18263097687,282.2367833559,293.66476791741,305.55548036855,311.12698372208,329.62755691287,335.63799088232,349.22823143301,363.36884069528,369.99442271164,391.99543598175,399.14308682247,415.30469757995,432.12070439462,440,466.16376151809,474.66379875343,493.88330125613,513.88101620607,523.2511306012],description:"Tuning for a 3-row symmetrical keyboard, Op de Coul, 1989"},coul_27:{frequencies:[261.6255653006,275.62199471997,275.93321340298,279.06726965397,293.99679436797,294.32876096318,310.07474405997,310.42486507835,327.03195662575,330.74639366397,331.11985608357,348.83408706747,367.49599295996,367.91095120397,372.08969287196,372.50983809402,392.4383479509,413.43299207996,413.89982010446,418.60090448096,440.99519155196,441.49314144476,465.11211608996,465.63729761752,490.54793493862,496.11959049595,496.67978412536,523.2511306012],description:"Symmetrical 27-tone 5-limit just system, 67108864/66430125 and 25/24"},counterschismic:{frequencies:[261.6255653006,265.12640119254,268.67408364533,272.2692364133,275.65170316539,279.34022410565,283.07810312094,286.865997406,290.70457953408,294.3160713245,298.25434362449,302.24531258767,306.28968684494,310.09479611189,314.24420508029,318.4491358588,322.71033506911,327.0285519162,331.0913069245,335.5216703313,340.01131880467,344.56104171562,348.84160709651,353.50948891197,358.2398341551,363.03347451625,367.54352740958,372.46166135084,377.44560747755,382.49624206822,387.61445966759,392.4298881006,397.68103103357,403.0024376988,408.3950505989,413.46864135256,419.00130591222,424.60800114791,430.28972009123,436.04746916004,441.46459261549,447.37187116862,453.35819556254,459.4246261707,465.13216971689,471.35614630867,477.663406507,484.05506753352,490.06860102591,496.62625431187,503.27165616309,510.00598369715,516.83042094502,523.2511306012],description:"Counterschismic temperament, g=498.082318, 5-limit"},couperin:{frequencies:[261.6255653006,273.37431312998,292.50627485027,309.28785294636,327.03195662575,349.91912034749,365.63284274659,391.22147055517,408.78994578219,437.39890198442,465.24345038333,489.02683710225,523.2511306012],description:"Couperin modified meantone"},cross13:{frequencies:[261.6255653006,281.75060878526,285.40970760065,290.69507255622,299.00064605783,305.22982618403,322.00069575458,332.97799220076,336.37572681506,366.27579142084,373.75080757229,406.97310157871,411.12588832951,425.14154361347,448.50096908674,457.84473927605,470.92601754108,479.64686971777,485.87604984397,523.2511306012],description:"13-limit harmonic/subharmonic cross"},cross2:{frequencies:[261.6255653006,282.55561052465,339.14425131559,366.27579142084,436.04260883433,470.92601754108,560.62621135843,605.4763082671,726.73768139056,784.8766959018],description:"Pusey's double 5-7 cross reduced by 3/1"},cross2_5:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,348.83408706747,392.4383479509,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"double 3-5 cross reduced by 2/1"},cross2_7:{frequencies:[261.6255653006,294.32876096318,299.00064605783,327.03195662575,334.88072358477,341.71502406609,348.83408706747,392.4383479509,400.61414686654,408.78994578219,418.60090448096,457.84473927605,465.11211608996,523.2511306012],description:"longer 3-5-7 cross reduced by 2/1"},cross3:{frequencies:[261.6255653006,282.55561052465,311.45900631024,336.37572681506,363.28578496026,403.74315632809,436.04260883433,470.92601754108,508.60009894437,565.24041885932,610.45965236807,659.29642455751,726.73768139056,784.8766959018],description:"Pusey's triple 5-7 cross reduced by 3/1"},cross_7:{frequencies:[261.6255653006,299.00064605783,327.03195662575,348.83408706747,392.4383479509,418.60090448096,457.84473927605,523.2511306012],description:"3-5-7 cross reduced by 2/1, quasi diatonic, similar to Zalzal's, Flynn Cohen"},cross_72:{frequencies:[261.6255653006,279.06726965397,294.32876096318,305.22982618403,313.95067836072,343.38355445704,348.83408706747,392.4383479509,398.6675280771,436.04260883433,448.50096908674,465.11211608996,490.54793493862,523.2511306012],description:"double 3-5-7 cross reduced by 2/1"},cross_7a:{frequencies:[261.6255653006,336.37572681506,392.4383479509,436.04260883433,470.92601754108,523.2511306012,610.45965236807,784.8766959018],description:"2-5-7 cross reduced by 3/1"},cruciform:{frequencies:[261.6255653006,294.32876096318,306.59245933664,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,418.60090448096,436.04260883433,490.54793493862,523.2511306012],description:"Cruciform Lattice"},galilei:{frequencies:[261.6255653006,277.66336828161,293.32570896007,311.30674962848,328.86683469969,348.2210758395,368.7143392539,390.41365788584,413.39000965417,437.71854962063,463.47885582013,490.75518955849,523.2511306012],description:"Vincenzo Galilei's approximation"},gamelan_om:{frequencies:[261.6255653006,280.31310567921,294.32876096318,305.22982618403,327.03195662575,348.83408706747,366.27579142084,392.4383479509,406.97310157871,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"Other Music gamelan (7 limit black keys)"},gamelan_udan:{frequencies:[261.6255653006,261.6255653006,290.69507255622,305.22982618403,334.88072358477,351.32575911795,364.00078650518,392.4383479509,402.50086969323,465.11211608996,465.11211608996,501.44900015948,523.2511306012],description:"Gamelan Udan Mas (approx) s6,p6,p7,s1,p1,s2,p2,p3,s3,p4,s5,p5"},ganassi:{frequencies:[261.6255653006,275.39533189537,290.69507255622,307.79478270659,327.03195662575,348.83408706747,369.35373924791,392.4383479509,413.09299784305,436.04260883433,461.69217405988,490.54793493862,523.2511306012],description:"Sylvestro Ganassi's temperament (1543)"},gann_custer:{frequencies:[261.6255653006,269.80136421624,274.70684356563,279.06726965397,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,336.37572681506,343.38355445704,348.83408706747,353.19451315581,359.73515228832,366.27579142084,380.54627680087,392.4383479509,406.97310157871,418.60090448096,428.11456140098,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,490.54793493862,507.3950357345,523.2511306012],description:"Kyle Gann, scale from Custer's Ghost to Sitting Bull, 1/1=G"},gann_frac:{frequencies:[261.6255653006,264.89588486686,294.32876096318,305.22982618403,309.04519901133,313.95067836072,348.83408706747,353.19451315581,366.27579142084,392.4383479509,397.34382730029,412.06026534844,418.60090448096,423.83341578697,457.84473927605,470.92601754108,523.2511306012],description:"Kyle Gann, scale from Fractured Paradise, 1/1=B"},gann_ghost:{frequencies:[261.6255653006,294.32876096318,305.22982618403,343.38355445704,348.83408706747,392.4383479509,406.97310157871,457.84473927605,523.2511306012],description:"Kyle Gann, scale from Ghost Town, 1/1=E"},gann_super:{frequencies:[261.6255653006,287.78812183066,290.69507255622,294.32876096318,299.00064605783,313.95067836072,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,392.4383479509,411.12588832951,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,523.2511306012],description:"Kyle Gann, scale from Superparticular Woman (1992), 1/1=G"},gann_things:{frequencies:[261.6255653006,266.47048317654,272.52663052146,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,336.37572681506,343.38355445704,348.83408706747,373.75080757229,387.59343007496,392.4383479509,406.97310157871,408.78994578219,436.04260883433,448.50096908674,465.11211608996,490.54793493862,498.33441009638,508.71637697339,523.2511306012],description:"Kyle Gann, scale from How Miraculous Things Happen, 1/1=A"},garcia:{frequencies:[261.6255653006,268.33391312882,271.68808704293,279.06726965397,286.22284067074,294.32876096318,301.87565226992,310.07474405997,313.95067836072,322.00069575458,331.11985608357,339.61010880366,348.83408706747,357.77855083843,362.25078272391,372.08969287196,381.63045422766,392.4383479509,402.50086969323,407.5321305644,418.60090448096,429.33426100611,441.49314144476,452.81347840488,465.11211608996,470.92601754108,483.00104363188,496.11959049595,509.4151632055,523.2511306012],description:"Linear 29-tone scale by Jos\xEF\xBF\xBD L. Garcia, 1988 15/13-52/45 alternating"},garibaldi24:{frequencies:[261.6255653006,271.45160478635,275.48458787532,290.07776082447,294.38747453868,305.44397410364,309.9819851541,326.40257969757,331.25197480486,343.69301829526,348.79929894143,361.89937857146,367.27615309757,386.73177659938,392.47748849606,407.21801775129,413.26809573999,435.16003837828,441.62525370518,458.21165716245,465.0193526482,489.65270106975,496.92751922541,515.59094540799,523.2511306012],description:"Garibaldi[24] in 94-tET tuning."},genovese:{frequencies:[261.6255653006,277.01530443593,277.97716313189,279.06726965397,280.31310567921,281.75060878526,283.42769574232,285.40970760065,287.78812183066,290.69507255622,294.32876096318,296.50897400735,299.00064605783,301.87565226992,305.22982618403,307.79478270659,309.19384990071,313.95067836072,317.68818643644,319.76457981184,322.00069575458,327.03195662575,332.97799220076,336.37572681506,338.57426097725,340.11323489078,342.12573923925,348.83408706747,356.76213450082,359.73515228832,362.25078272391,366.27579142084,369.35373924791,370.63621750918,373.75080757229,377.90359432309,380.54627680087,383.71749577421,392.4383479509,400.13321751856,402.50086969323,404.33041910093,406.97310157871,411.12588832951,418.60090448096,425.14154361347,428.11456140098,430.91269578922,436.04260883433,442.75095666255,444.76346101102,448.50096908674,453.48431318771,457.84473927605,461.69217405988,465.11211608996,470.92601754108,475.68284600109,479.64686971777,483.00104363188,485.87604984397,488.36772189445,490.54793493862,492.47165233054,494.18162334558,523.2511306012],description:"Denny Genovese's 65-note scale. 3/2=384 Hz"},genovese_12:{frequencies:[261.6255653006,285.40970760065,294.32876096318,313.95067836072,327.03195662575,348.83408706747,359.73515228832,392.4383479509,425.14154361347,448.50096908674,457.84473927605,490.54793493862,523.2511306012],description:"Denny Genovese's superposition of harmonics 8-16 and subharmonics 6-12"},genovese_38:{frequencies:[261.6255653006,280.31310567921,283.42769574232,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,309.19384990071,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,340.11323489078,348.83408706747,356.76213450082,359.73515228832,366.27579142084,373.75080757229,377.90359432309,380.54627680087,392.4383479509,406.97310157871,411.12588832951,418.60090448096,425.14154361347,428.11456140098,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,485.87604984397,490.54793493862,523.2511306012],description:"Denny Genovese's 38-note scale. Harm 1..16 x Subh. 1..12"},"gf1-2":{frequencies:[261.6255653006,269.29177952703,277.18263097687,285.30470202322,293.66476791741,311.12698372208,320.24370022528,339.28638158975,349.22823143301,359.46139971304,380.8360868427,403.48177901006,415.30469757995,440,466.16376151809,493.88330125613,523.2511306012],description:"16-note scale with all possible quadruplets of 50 & 100 c. Galois Field GF(2)"},"gf2-3":{frequencies:[261.6255653006,270.85177093588,280.40333801024,290.29174037004,300.52885648597,316.56538760238,327.729041887,345.21700307457,357.39105439675,369.99442271164,389.73770840504,410.5345162762,425.01198472693,447.69106452518,471.58032351597,496.7443381147,523.2511306012],description:"16-note scale with all possible quadruplets of 60 & 90 c. Galois Field GF(2)"},gilson7:{frequencies:[261.6255653006,261.6255653006,299.00064605783,313.95067836072,327.03195662575,392.4383479509,373.75080757229,392.4383479509,408.78994578219,408.78994578219,467.18850946536,490.54793493862,523.2511306012],description:"Gilson septimal"},gilson7a:{frequencies:[261.6255653006,261.6255653006,280.31310567921,299.00064605783,313.95067836072,336.37572681506,373.75080757229,373.75080757229,392.4383479509,418.60090448096,470.92601754108,470.92601754108,523.2511306012],description:"Gilson septimal 2"},golden_10:{frequencies:[261.6255653006,287.58715183149,304.90466328003,323.26497397694,342.73087946949,376.74069565061,399.42672527674,423.47882962254,465.50141625349,493.53231135469,523.2511306012],description:"Golden version of Rapoport's Major 10 out of 13"},golden_5:{frequencies:[261.6255653006,327.03195662575,343.38355445704,392.4383479509,425.14154361347,523.2511306012],description:"Golden pentatonic"},gradus10:{frequencies:[261.6255653006,290.69507255622,299.00064605783,305.22982618403,490.54793493862,882.98628288953,930.22423217991,941.85203508216,1220.91930473613,1255.80271344288,1674.40361792384,2747.0684356563,3270.3195662575,3488.34087067467,5886.5752192635,10595.8353946743,10988.2737426252,11162.69078615893,13081.27826503,14651.0316568336,23546.300877054,31395.067836072,41860.090448096,42383.3415786972,56511.1221049296,75348.1628065728,100464.2170754304,133952.2894339072],description:"Intervals > 1 with Gradus = 10"},gradus3:{frequencies:[261.6255653006,784.8766959018,1046.5022612024],description:"Intervals > 1 with Gradus = 3"},gradus4:{frequencies:[261.6255653006,392.4383479509,1569.7533918036,2093.0045224048],description:"Intervals > 1 with Gradus = 4"},gradus5:{frequencies:[261.6255653006,348.83408706747,1308.127826503,2354.6300877054,3139.5067836072,4186.0090448096],description:"Intervals > 1 with Gradus = 5"},gradus6:{frequencies:[261.6255653006,654.0639132515,697.66817413493,1177.3150438527,2616.255653006,4709.2601754108,6279.0135672144,8372.0180896192],description:"Intervals > 1 with Gradus = 6"},gradus7:{frequencies:[261.6255653006,327.03195662575,436.04260883433,588.65752192635,1395.33634826987,1831.3789571042,3924.383479509,5232.511306012,7063.8902631162,9418.5203508216,12558.0271344288,16744.0361792384],description:"Intervals > 1 with Gradus = 7"},gradus8:{frequencies:[261.6255653006,294.32876096318,313.95067836072,418.60090448096,872.08521766867,915.6894785521,1962.1917397545,2790.67269653973,3531.9451315581,3662.7579142084,7848.766959018,10465.022612024,14127.7805262324,18837.0407016432,25116.0542688576,33488.0723584768],description:"Intervals > 1 with Gradus = 8"},gradus9:{frequencies:[261.6255653006,457.84473927605,465.11211608996,470.92601754108,610.45965236807,627.90135672144,837.20180896192,981.09586987725,1744.17043533733,1765.97256577905,5494.1368713126,5581.34539307947,6540.639132515,7325.5158284168,11773.150438527,15697.533918036,20930.045224048,21191.6707893486,28255.5610524648,37674.0814032864,50232.1085377152,66976.1447169536],description:"Intervals > 1 with Gradus = 9"},grady11:{frequencies:[261.6255653006,277.4816601673,290.69507255622,305.22982618403,332.97799220076,356.76213450082,378.42269266694,392.4383479509,420.46965851882,458.69417292962,481.6288815761,504.56359022259,523.2511306012],description:"Kraig Grady's dual [5 7 9 11] hexany scale"},grady7:{frequencies:[261.6255653006,274.70684356563,294.32876096318,305.22982618403,327.03195662575,348.83408706747,366.27579142084,392.4383479509,406.97310157871,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:`Kraig Grady's 7-limit "Centaur" scale (1987), see Xenharmonikon 16`},grady7t:{frequencies:[261.6255653006,274.79177208104,293.65339461903,305.54250820508,326.68804977983,349.10444036529,366.6627351378,392.00975085961,407.77240291308,436.0718257558,457.96530027286,489.37179607373,523.2511306012],description:"Tempered version of grady7 with egalised 225/224"},grady_14:{frequencies:[261.6255653006,274.70684356563,294.32876096318,305.22982618403,327.03195662575,343.38355445704,348.83408706747,366.27579142084,392.4383479509,412.06026534844,441.49314144476,457.84473927605,490.54793493862,515.07533168556,523.2511306012],description:"Kraig Grady, letter to Lou Harrison, published in 1/1 7 (1) 1991 p 5."},grammateus:{frequencies:[261.6255653006,277.49581689502,294.32876096318,312.18279369479,331.11985608357,348.83408706747,369.99442271164,392.4383479509,416.24372513446,441.49314144476,468.27419030811,496.67978412536,523.2511306012],description:"H. Grammateus (Heinrich Schreiber) (1518). B-F# and Bb-F 1/2 P. Also Marpurg temp.nr.6"},graupner:{frequencies:[261.6255653006,277.083518473,293.59062125964,310.9808189359,329.55130849159,349.11528328816,370.00708353276,392.01655298731,415.20348378516,439.96413779539,466.04943410823,493.90517116572,523.2511306012],description:"Johann Gottlieb Graupner's temperament (1819)"},groenewald_21:{frequencies:[261.6255653006,275.93321340298,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,330.74639366397,348.83408706747,367.91095120397,372.08969287196,392.4383479509,413.89982010446,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,496.11959049595,523.2511306012],description:"J\xEF\xBF\xBDrgen Gr\xEF\xBF\xBDnewald, new meantone temperament I (2000)"},gross:{frequencies:[13.75,13.83042567154,13.91662997964,13.99803029322,14.07990672861,14.1622619889,14.24509903843,14.32842061343,14.41222946472,14.49652860895,14.58132083065,14.67220542837,14.75802520833,14.84434696019,14.93117353378,15.01850805439,15.10635340681,15.19471249121,15.28358848801,15.37298433293,15.46880332718,15.55928251958,15.65029093742,15.74183158529,15.83390775812,15.92652249736,16.01967895316,16.113380201,16.20762961362,16.30865090754,16.4040424858,16.49999202274,16.59650278193,16.69357794961,16.79122101993,16.88943521823,16.98822378696,17.08759028197,17.18753798549,17.29466699621,17.39582592037,17.49757653721,17.59992220598,17.70286661052,17.80641315127,17.91056524676,18.01532664586,18.12070080902,18.23364617402,18.34029731861,18.44757228066,18.55547460176,18.66400816581,18.77317655783,18.88298349104,18.99343259063,19.10452783216,19.2236053387,19.33604689279,19.44914613325,19.56290690697,19.67733296969,19.79242844011,19.90819712001,20.02464283144,20.14176976577,20.26731246322,20.38585868839,20.50509842475,20.62503561099,20.74567420676,20.86701855437,20.98907266203,21.11184068121,21.23532666504,21.36768545088,21.49266790503,21.61838152318,21.74483045784,21.87201888365,21.99995137868,22.12863216875,22.25806563075,22.38825603783,22.52780097787,22.65956910312,22.79210808945,22.92542231482,23.05951631373,23.1943945132,23.33006176809,23.46652255971,23.60378139323,23.75090264526,23.88982499399,24.02955978014,24.17011203339,24.3114863964,24.45368753658,24.59672057234,24.74059022832,24.88530139802,25.04041015894,25.18687501732,25.33419642278,25.48237967807,25.63142967793,25.78135134315,25.93215007005,26.08383083979,26.23639881154,26.39992889083,26.55434576426,26.70966568928,26.86589425653,27.0230366265,27.18109814415,27.34008402779,27.5],description:"Gross temperament, g=91.531021, 5-limit"},groven:{frequencies:[261.6255653006,264.7464578752,272.5650766677,275.81646505128,279.10663876478,290.77709705464,294.24573392894,297.75574765819,306.54921255625,310.20599265769,313.90639394672,327.03195662575,330.93307160522,334.88072358477,344.77058253591,348.88329767713,353.04507480266,363.47137260637,367.80716871461,372.19468374184,387.75749219625,392.38299382393,397.06367008113,408.78994578219,413.66634097248,418.60090448096,436.10412364188,441.30634506723,446.57062302059,459.75895986689,465.24335632603,470.79317533731,484.69686416326,490.47874118496,496.32958936031,517.08292506126,523.2511306012],description:"Eivind Groven's 36-tone scale with 1/8-schisma temp. fifths and 5/4 (1948)"},groven_ji:{frequencies:[261.6255653006,264.89588486686,272.52663052146,275.93321340298,279.06726965397,290.69507255622,294.32876096318,297.67175429757,306.59245933664,310.07474405997,313.95067836072,327.03195662575,331.11985608357,334.88072358477,344.91651675372,348.83408706747,353.19451315581,363.36884069528,367.91095120397,372.08969287196,387.59343007496,392.4383479509,396.89567239676,408.78994578219,413.89982010446,418.60090448096,436.04260883433,441.49314144476,446.50763144636,459.88868900496,465.11211608996,470.92601754108,484.4917875937,490.54793493862,496.11959049595,517.37477513058,523.2511306012],description:"Untempered version of Groven's 36-tone scale"},gumbeng:{frequencies:[261.6255653006,305.03156112838,348.43777142572,394.8168394034,470.9259392365,525.62941881859],description:"Scale of gumbeng ensemble, Java. 1/1=440 Hz."},gunkali:{frequencies:[261.6255653006,275.93321340298,282.55561052465,348.83408706747,392.4383479509,408.78994578219,418.60090448096,523.2511306012],description:"Indian mode Gunkali, see Dani\xEF\xBF\xBDlou: Intr. to the Stud. of Mus. Scales, p.175"},gyaling:{frequencies:[261.6255653006,283.49766588023,307.55338551939,339.28638158975,347.81902735497,393.58362272115,435.9522698367],description:'Tibetan Buddhist Gyaling tones measured from CD "The Diamond Path", Ligon 2002'},far12_104:{frequencies:[261.6255653006,276.7193479141,294.32876096318,311.93817401225,329.54758706133,349.67263054599,369.79767403066,392.4383479509,415.07902187114,440.23532622697,465.3916305828,493.06356537421,523.2511306012],description:"Farey approximation to 12-tET with den=104"},far12_65:{frequencies:[261.6255653006,277.72560008833,293.82563487606,309.92566966379,330.05071314845,350.17575663311,370.30080011777,390.42584360243,414.57589578403,438.72594796562,466.90100884415,495.07606972267,523.2511306012],description:"Farey approximation to 12-tET with den=65"},far12_80:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,330.30227619201,349.92419358955,369.5461109871,392.4383479509,415.3305849147,441.49314144476,467.65569797482,493.81825450488,523.2511306012],description:"Farey approximation to 12-tET with den=80"},farey3:{frequencies:[261.6255653006,313.95067836072,348.83408706747,392.4383479509,418.60090448096,523.2511306012],description:"Farey fractions between 0 and 1 until 3rd level, normalised by 2/1"},farey4:{frequencies:[261.6255653006,299.00064605783,313.95067836072,327.03195662575,348.83408706747,373.75080757229,392.4383479509,418.60090448096,448.50096908674,523.2511306012],description:"Farey fractions between 0 and 1 until 4th level, normalised by 2/1"},farey5:{frequencies:[261.6255653006,285.40970760065,290.69507255622,299.00064605783,305.22982618403,313.95067836072,322.00069575458,327.03195662575,332.97799220076,348.83408706747,366.27579142084,373.75080757229,380.54627680087,392.4383479509,402.50086969323,406.97310157871,418.60090448096,436.04260883433,448.50096908674,465.11211608996,523.2511306012],description:"Farey fractions between 0 and 1 until 5th level, normalised by 2/1"},farnsworth:{frequencies:[261.6255653006,294.32876096318,327.03195662575,343.38355445704,392.4383479509,441.49314144476,490.54793493862,523.2511306012],description:"Farnsworth's scale"},fibo_9:{frequencies:[261.6255653006,277.97716313189,327.03195662575,343.38355445704,363.82305174615,392.4383479509,425.14154361347,449.66894036041,523.2511306012],description:"First 9 Fibonacci terms reduced by 2/1, B. McLaren, XH 13, 1991"},finnamore:{frequencies:[261.6255653006,277.97716313189,310.68035879446,348.83408706747,392.4383479509,416.96574469783,457.84473927605,466.02053819169,523.2511306012],description:"David J. Finnamore, Tuning List 9 May '97. Tetrachordal scale, 17/16x19/17x64/57"},finnamore53:{frequencies:[261.6255653006,286.15296204753,310.68035879446,327.03195662575,343.38355445704,359.73515228832,367.91095120397,376.08675011961,392.4383479509,408.78994578219,416.96574469783,425.14154361347,433.31734252912,441.49314144476,457.84473927605,474.19633710734,523.2511306012],description:'David J. Finnamore, tuning for "Crawlspace", 53-limit, 1998.'},finnamore_11:{frequencies:[261.6255653006,287.78812183066,294.32876096318,305.22982618403,323.76163705949,331.11985608357,343.38355445704,348.83408706747,392.4383479509,431.68218274599,441.49314144476,457.84473927605,485.64245558924,515.07533168556,523.2511306012],description:"David J. Finnamore, 11-limit scale, Tuning List 3 Sept '98"},finnamore_7:{frequencies:[261.6255653006,274.70684356563,294.32876096318,309.04519901133,331.11985608357,348.83408706747,366.27579142084,392.4383479509,412.06026534844,441.49314144476,463.567798517,496.67978412536,523.2511306012],description:"David J. Finnamore, TL 1 Sept '98. 7-tone Pyth. with 9/8 div. in 21/20 &15/14"},finnamore_7a:{frequencies:[261.6255653006,280.31310567921,294.32876096318,315.35224388912,331.11985608357,348.83408706747,373.75080757229,392.4383479509,420.46965851882,441.49314144476,473.02836583367,496.67978412536,523.2511306012],description:"David J. Finnamore, TL 1 Sept '98. 7-tone Pyth. with 9/8 div. in 15/14 &21/20"},finnamore_jc:{frequencies:[261.6255653006,276.16031892841,310.68035879446,348.83408706747,392.4383479509,414.24047839262,466.02053819169,523.2511306012],description:"Chalmers' modification of Finnamore. Tuning List 9-5-97 19/18 x 9/8 x 64/57"},fisher:{frequencies:[261.6255653006,273.37431312998,292.50627485027,310.67535808973,327.03195662575,349.71841093413,365.63284485857,391.22147055517,410.55062036439,437.39890198442,467.47330218196,489.02683992698,523.2511306012],description:"Alexander Metcalf Fisher's modified meantone temperament (1818)"},"fj-10tet":{frequencies:[261.6255653006,280.31310567921,300.51585203447,322.00069575458,345.20039866051,370.01329949656,396.52624740872,425.14154361347,455.42228033808,488.36772189445,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 10-tet"},"fj-12tet":{frequencies:[261.6255653006,277.19851561611,293.6613488068,311.12229387098,329.64821227876,348.83408706747,370.01329949656,391.99491478937,415.52295665389,440.00663255101,466.16918908107,490.54793493862,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 12-tet"},"fj-13tet":{frequencies:[261.6255653006,275.96121271433,291.05844139692,306.97399661937,323.91736656265,341.56671025356,360.27127025001,379.97998769849,400.78810003496,422.62591317789,445.95266812602,41.6222490251,496.18641694941,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 13-tet"},"fj-14tet":{frequencies:[261.6255653006,274.92856014639,288.87822835275,303.4856557487,318.85615771011,335.0643204727,352.18826098158,370.01329949656,388.70083987518,408.5030756448,429.33426100611,451.0785608631,473.88781639354,497.93252750759,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 14-tet"},"fj-15tet":{frequencies:[261.6255653006,274.08392555301,286.94416839421,300.51585203447,314.76825825228,329.64821227876,345.20039866051,361.51896296083,378.66858135613,396.52624740872,415.52295665389,392.4383479509,455.42228033808,477.08191319521,499.46698830115,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 15-tet"},"fj-16tet":{frequencies:[261.6255653006,273.25336820285,285.40970760065,297.96244937013,311.12229387098,324.92207303462,339.29565499922,354.2846196779,370.01329949656,386.4008349055,403.52417698906,421.50785520652,440.00663255101,459.44001711325,479.64686971777,500.9851250437,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 16-tet"},"fj-17tet":{frequencies:[261.6255653006,272.52663052146,283.8915708581,295.75063903546,307.98958953109,320.70230585235,334.29933343966,348.03400888612,362.53828334512,373.75080757229,392.4383479509,409.71550792358,426.86276443782,444.76346101102,462.87600014722,482.37213602298,502.32108537715,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 17-tet"},"fj-18tet":{frequencies:[261.6255653006,271.88539139082,282.55561052465,293.6613488068,305.22982618403,317.12189733406,329.64821227876,342.60490694126,355.98232655655,370.01329949656,384.51030051755,399.57359064092,415.52295665389,431.68218274599,448.50096908674,466.16918908107,484.4917875937,503.12608711654,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 18-tet"},"fj-19tet":{frequencies:[261.6255653006,271.31540105247,281.44568388398,291.81313052759,302.73815413355,313.95067836072,325.69713231299,337.73482066077,350.31219760589,363.36884069528,376.74081403286,390.78248994267,405.26313056367,420.46965851882,436.04260883433,451.89870370104,468.95148497277,485.87604984397,504.56359022259,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 19-tet"},"fj-20tet":{frequencies:[261.6255653006,270.8594087818,280.31310567921,290.29686012806,300.51585203447,311.12229387098,322.00069575458,333.44434793214,345.20039866051,357.34223553253,370.01329949656,383.09457776159,396.52624740872,410.48149038542,425.14154361347,440.00663255101,455.42228033808,470.92601754108,488.36772189445,505.41302387616,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 20-tet"},"fj-21tet":{frequencies:[261.6255653006,270.34641747729,279.46367202564,288.87822835275,298.56093922539,308.58400009814,318.85615771011,329.64821227876,340.72166643799,352.18826098158,364.00078650518,376.08675011961,388.70083987518,401.78211814021,415.52295665389,429.33426100611,443.62595855319,457.84473927605,473.88781639354,489.85212226495,506.18859373377,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 21-tet"},"fj-22tet":{frequencies:[261.6255653006,270.06509966514,278.68810216803,287.55242312318,296.76929795292,306.29334474217,316.13089140489,326.18252297218,336.37572681506,347.40443916965,358.52392281934,370.01329949656,381.83190611439,392.4383479509,392.4383479509,419.69101100305,433.03541842858,446.94367405519,461.28718092474,475.68284600109,491.34557385722,506.89953276991,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 22-tet"},"fj-23tet":{frequencies:[261.6255653006,269.55361273395,277.97716313189,286.37392958579,295.1673044417,304.21577360535,313.47928094576,323.18452184192,332.97799220076,343.1154954762,353.6790049434,364.40703738298,375.66747838035,387.20583664489,398.97898708342,411.12588832951,423.58424858192,436.04260883433,449.99597231703,463.79077485106,477.96978276071,492.47165233054,507.86139146587,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 23-tet"},"fj-24tet":{frequencies:[261.6255653006,269.32043486826,277.19851561611,285.40970760065,293.6613488068,302.32287545847,311.12229387098,320.2657782128,329.64821227876,339.29565499922,348.83408706747,348.83408706747,370.01329949656,380.54627680087,391.99491478937,403.52417698906,415.52295665389,427.53446036927,440.00663255101,452.81347840488,466.16918908107,479.64686971777,490.54793493862,508.30109829831,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 24-tet"},"fj-26tet":{frequencies:[261.6255653006,268.69652652494,275.96121271433,283.42769574232,291.05844139692,299.00064605783,306.97399661937,315.29234792636,323.91736656265,332.57487114483,341.56671025356,350.8160989258,360.27127025001,370.01329949656,379.97998769849,390.22118214327,400.78810003496,411.12588832951,422.62591317789,434.18710837121,445.95266812602,457.84473927605,457.84473927605,483.00104363188,496.18641694941,509.48136400643,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 26-tet"},"fj-30tet":{frequencies:[261.6255653006,267.70988077271,274.08392555301,280.31310567921,286.94416839421,293.6613488068,300.51585203447,307.52478728316,314.76825825228,322.00069575458,329.64821227876,337.35928157183,345.20039866051,353.19451315581,361.51896296083,370.01329949656,378.66858135613,387.59343007496,396.52624740872,405.78659107848,415.52295665389,425.14154361347,392.4383479509,444.76346101102,455.42228033808,466.16918908107,477.08191319521,488.36772189445,499.46698830115,511.35905945117,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 30-tet"},"fj-31tet":{frequencies:[261.6255653006,267.57160087561,273.51763645063,279.79400733536,286.15296204753,292.60754013883,299.00064605783,305.96888145324,312.81317590289,319.76457981184,327.03195662575,334.53760808929,342.12573923925,349.884792149,357.81143489641,366.27579142084,373.75080757229,382.37582620857,391.25985441351,400.13321751856,409.20921752145,418.60090448096,428.11456140098,437.54620403721,447.51741432997,457.84473927605,467.90726101838,478.40103369253,489.12605686634,500.50108144463,511.62332769895,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 31-tet"},"fj-36tet":{frequencies:[261.6255653006,266.75547834571,271.88539139082,277.19851561611,282.55561052465,288.08208313999,293.6613488068,299.00064605783,305.22982618403,311.12229387098,317.12189733406,323.18452184192,329.64821227876,327.03195662575,342.60490694126,348.83408706747,355.98232655655,362.89997767503,370.01329949656,377.22755927063,384.51030051755,391.99491478937,399.57359064092,406.97310157871,415.52295665389,423.35773294097,431.68218274599,440.00663255101,448.50096908674,436.04260883433,466.16918908107,475.19745534191,484.4917875937,490.54793493862,503.12608711654,513.18860885887,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 36-tet"},"fj-41tet":{frequencies:[261.6255653006,266.05989691586,270.64713651786,275.21650375777,279.87851171692,284.71017400359,289.532292266,294.32876096318,299.49242343621,304.63250754179,309.81974838229,315.13988547572,320.49131749323,325.95972070239,331.39238271409,337.09447836808,342.81970625596,348.83408706747,354.64798851859,360.72615821749,366.27579142084,373.13810133036,379.35706968587,386.00493241072,392.4383479509,399.32323124828,405.97070477679,413.09299784305,419.97788114044,427.14378008261,434.48531380278,441.85651028546,449.45930449077,436.04260883433,465.11211608996,472.93852188955,480.82536325516,489.12605686634,497.08857407114,505.80942624783,514.53027842451,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 41-tet"},"fj-42tet":{frequencies:[261.6255653006,265.98599138894,270.34641747729,274.92856014639,279.46367202564,284.05061375494,288.87822835275,293.6613488068,298.56093922539,303.4856557487,308.58400009814,313.7026920429,318.85615771011,324.18820048118,329.64821227876,335.0643204727,340.72166643799,346.37750898953,352.18826098158,358.01393146398,364.00078650518,370.01329949656,376.08675011961,382.37582620857,388.70083987518,395.22159864559,401.78211814021,408.5030756448,415.52295665389,422.16852582597,429.33426100611,436.04260883433,443.62595855319,451.0785608631,457.84473927605,466.16918908107,473.88781639354,481.94183081689,489.85212226495,497.93252750759,506.18859373377,514.81159623666,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 42-tet"},"fj-43tet":{frequencies:[261.6255653006,265.84533248287,270.2034526875,274.70684356563,279.06726965397,283.42769574232,288.1672893166,292.86443876933,297.71185016965,302.50455987882,307.4100392282,312.38873468728,317.43901923139,322.67153053741,327.85988562987,332.97799220076,338.57426097725,344.24416486921,348.83408706747,355.41586229515,361.11697745717,367.05676325756,372.95559308809,379.09010482332,385.17097113699,391.45479319413,397.88888056133,404.33041910093,392.4383479509,417.48760420309,424.25767346043,431.1976909584,438.2228218785,445.32011114996,452.54151835779,459.82675113439,467.18850946536,475.05694751951,483.00104363188,490.54793493862,498.33441009638,506.89953276991,514.81159623666,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 43-tet"},"fj-53tet":{frequencies:[261.6255653006,265.06800694929,268.51044859798,272.09058791262,275.69145590816,279.30296836145,282.98275430473,286.71294827463,290.48132617934,294.32876096318,298.13145813324,302.11523612093,306.05254808749,310.07474405997,313.95067836072,318.31110444906,322.46872002167,326.7649917632,331.03642956402,335.41739141103,336.37572681506,344.24416486921,348.83408706747,353.42400926572,358.01393146398,362.89997767503,367.52162744608,372.31330446624,377.3445653374,382.37582620857,387.20583664489,392.4383479509,397.67085925691,402.82031482791,408.13588186894,413.53718386224,418.60090448096,424.41480593208,429.81342870813,436.04260883433,441.49314144476,447.29532132038,453.1728541814,459.07882213124,465.11211608996,470.92601754108,477.46665667359,483.76047923507,485.87604984397,496.55464434604,503.12608711654,509.83443494476,516.36624730382,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 53-tet"},"fj-54tet":{frequencies:[261.6255653006,265.02329991489,268.42103452919,271.88539139082,275.39533189537,279.06726965397,282.55561052465,286.15296204753,289.90941019796,293.6613488068,297.46468383493,301.26580246736,305.22982618403,309.19384990071,313.15787361738,317.12189733406,321.29455387793,325.43667878855,329.64821227876,333.91683992313,338.19890148614,342.60490694126,346.93824963775,351.55935337268,355.98232655655,360.61902244137,365.28852513669,370.01329949656,374.76094489005,379.61356533813,384.51030051755,389.53139722534,394.5147413263,399.57359064092,404.77917650282,409.88005230427,415.52295665389,420.652869699,426.07592063241,431.68218274599,436.04260883433,442.75095666255,448.50096908674,454.40229762736,460.26719821402,466.16918908107,472.20223981084,478.40103369253,484.4917875937,490.54793493862,497.08857407114,503.12608711654,510.16985233617,516.54278277298,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 54-tet"},"fj-55tet":{frequencies:[261.6255653006,264.93728131706,268.33391312882,271.68808704293,275.15792212649,278.68810216803,282.14521748104,285.77561748219,289.37373131733,293.02063313667,296.76929795292,300.51585203447,304.33994330886,308.21641939523,312.11470948142,316.13089140489,319.76457981184,324.10331223806,328.22116374075,332.33517754401,336.37572681506,340.90603963412,345.20039866051,348.83408706747,353.96400011258,358.52392281934,363.07221307022,367.68998366571,372.31330446624,377.04860881557,381.83190611439,386.75083566176,391.58336244338,396.52624740872,401.56482115906,406.65712867376,411.81801945465,416.96574469783,418.60090448096,427.65717404906,433.03541842858,438.60756535689,444.15502946381,449.8123754291,455.42228033808,461.28718092474,467.18850946536,472.93852188955,479.03272519828,485.0974023282,491.34557385722,497.60156537565,503.87145909745,510.16985233617,516.71049146868,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 55-tet"},"fj-5tet":{frequencies:[261.6255653006,300.51585203447,345.20039866051,396.52624740872,455.42228033808,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 5-tet"},"fj-60tet":{frequencies:[261.6255653006,264.66772303665,267.70988077271,270.8594087818,274.08392555301,277.19851561611,280.31310567921,283.6903720127,286.94416839421,290.29686012806,293.6613488068,297.10021822272,300.51585203447,304.05133264664,307.52478728316,311.12229387098,314.76825825228,318.50068819203,322.00069575458,325.79787377056,329.64821227876,333.44434793214,337.35928157183,341.25073734861,345.20039866051,348.83408706747,353.19451315581,357.34223553253,361.51896296083,365.74186169574,370.01329949656,374.3258088147,378.66858135613,383.09457776159,387.59343007496,391.99491478937,396.52624740872,401.15920012759,405.78659107848,410.48149038542,415.52295665389,420.18651396763,425.14154361347,429.81342870813,434.91003062957,440.00663255101,444.76346101102,450.23934493592,455.42228033808,460.95932933915,466.16918908107,470.92601754108,477.08191319521,482.55382044333,488.36772189445,490.54793493862,499.46698830115,505.41302387616,511.35905945117,517.30509502619,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 60-tet"},"fj-66tet":{frequencies:[261.6255653006,264.37951861955,267.19206668997,270.06509966514,272.83808952777,275.76748774928,278.68810216803,281.58005756929,284.57517629188,287.55242312318,290.69507255622,293.6613488068,296.76929795292,299.91223339337,302.93486508491,306.29334474217,309.48390041656,312.81317590289,316.13089140489,319.38705374359,322.78478835788,326.18252297218,329.64821227876,332.97799220076,336.37572681506,340.11323489078,343.8507429665,347.40443916965,351.12904816659,354.74652922115,358.52392281934,362.25078272391,366.27579142084,370.01329949656,373.75080757229,377.90359432309,381.83190611439,385.89770881839,389.97018224052,392.4383479509,398.12586024004,402.50086969323,406.65712867376,411.12588832951,415.52295665389,419.69101100305,424.01384721132,428.62060698183,433.03541842858,437.71969579139,442.27178896054,446.94367405519,451.89870370104,456.45311392871,461.28718092474,466.16918908107,470.92601754108,475.68284600109,481.05345877852,485.87604984397,491.34557385722,496.41773928832,501.44900015948,506.89953276991,512.35006538034,517.80059799077,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 66-tet"},"fj-72tet":{frequencies:[195.99771799087,197.9006084568,199.84081050049,201.76235675531,203.68390301012,205.67661764474,207.66424882366,209.67197738558,211.67753543014,213.81569235368,215.817711945,217.77524221208,219.99743856118,222.13074705632,223.99739198957,226.48625190056,228.66400432268,230.8417567448,233.07836734049,235.19726158904,237.57299150408,239.92824098882,242.11482810637,244.5635242187,246.9571246685,249.45164107929,251.74018824515,254.18454051941,256.66367832138,259.11562717437,261.33029065449,264.17083729204,266.68541956135,269.28382123963,271.86780237443,274.39680518722,277.19677258709,279.99673998696,282.60136082405,285.0875898049,288.0572521987,290.83532347032,293.66437746429,296.5093682426,299.34196929515,302.30156503677,304.88533909691,307.99641398565,311.29049327962,313.59634878539,317.15994365795,320.28895378996,323.39623468494,326.46784071315,329.63252571192,332.8263135694,335.99608798435,339.22681959958,342.55457018224,345.87832586624,349.232297511,352.79589238357,355.99585512627,359.32914964993,362.95873702013,366.4305162438,367.49572123288,373.6206499201,376.91868844398,380.79556638226,384.45706221286,388.2262490973,391.99543598174],description:"Franck Jedrzejewski continued fractions approx. of 72-tet"},"fj-78tet":{frequencies:[138.59131548844,139.82873794816,141.06616040788,142.33702671786,143.60064014465,144.89092073791,146.18536017274,147.4753741736,148.781853392,150.14059177914,151.48353088271,152.80580938469,154.18283848089,155.56168065029,156.95883922787,158.39007484393,159.76498868806,161.21846903757,162.6138101731,164.12129465736,165.53962683341,167.02030328094,168.55700532378,170.00534699915,171.58924774759,173.06676710248,174.62505751543,176.17540104463,177.75842638735,179.35346710269,180.93866188769,182.53490332624,184.15558359423,185.8383548595,187.50589742554,188.98815748424,190.84705739392,192.48793817839,194.02784168382,196.00771761937,197.74614527009,199.57149430335,201.28738678083,203.10796235375,204.87411854813,206.71247055903,207.88697323266,210.45347907504,212.31010032272,214.18657848213,216.10849194808,217.78635291041,220.11561871693,221.7461047815,223.87827886594,225.96410133985,228.00506741647,230.00260868294,232.05987709692,234.17153306667,236.2351968553,238.37706264012,240.41350645954,242.53480210477,244.7463656498,246.9445257794,249.1343885566,251.39820018833,253.59261982991,255.8608901325,258.1602935569,260.55167311827,262.84559834014,265.13121223875,267.51346943117,269.88835121433,272.23294113801,274.70778605744,277.18263097688],description:"Franck Jedrzejewski continued fractions approx. of 78-tet"},"fj-7tet":{frequencies:[261.6255653006,288.87822835275,318.85615771011,352.18826098158,388.70083987518,429.33426100611,473.88781639354,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 7-tet"},"fj-84tet":{frequencies:[97.99885899544,98.81551615374,99.63217331203,100.44883047033,101.26548762862,102.12512674262,102.98185182572,103.83212441184,104.68059938149,105.53723276432,106.39876119505,107.33208366167,108.20707347413,109.09306944775,109.9987192806,110.89344570537,111.83399203009,112.76581035092,113.67867643471,114.64017467391,115.58839778949,116.53918367025,117.50574088079,118.47623251688,119.43610940069,120.45693084856,121.43336875522,122.4985737443,123.47856233425,124.48503710232,125.50731064328,126.58185953578,127.62642101732,128.62350243151,129.74496824748,130.66514532725,131.9215409554,132.99845149381,134.10370178323,135.17083999371,136.34623860235,137.19840259362,138.59838629355,139.73911375276,140.87335980595,142.09834554339,143.22910160872,144.41937115117,145.59830479323,146.83218873215,148.0408295463,149.25980062382,150.498247743,151.74016876713,153.01576229113,154.29607586516,155.64524663982,156.7981743927,158.13452246991,159.45577056885,160.81864040277,162.07503603092,163.33143165907,164.81626285597,166.17197829662,167.54643634704,168.96354999214,170.33135015874,171.49800324202,173.20728566636,174.61614875551,176.03498745477,177.50736723702,178.95443816559,180.52421393897,181.99788099153,183.48722535316,183.74786061645,186.51395744293,188.05186455882,189.60648805639,191.21728584476,192.8364644749,194.36440367429,195.99771799088],description:"Franck Jedrzejewski continued fractions approx. of 84-tet"},"fj-8tet":{frequencies:[261.6255653006,285.40970760065,311.12229387098,339.29565499922,370.01329949656,403.52417698906,440.00663255101,479.64686971777,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 8-tet"},"fj-90tet":{frequencies:[69.29565774422,69.83283338565,70.37840239647,70.9071846685,71.46114704873,72.0131345185,72.59545097014,73.14541650779,73.69538204544,74.24534758309,74.83931036376,75.40998048636,76.00168913882,76.58993750677,77.19009976571,77.78084032514,78.38361285822,78.99704982841,79.59636362512,80.23707738804,80.84493403492,81.4527906818,82.08870225085,82.70772053342,83.37133822351,83.99473665966,84.69469279849,85.2869633775,85.97794571968,86.61957218027,87.31252875772,87.95218098305,88.65767976099,89.35492709123,90.08435506749,90.74431371267,91.43177063473,92.14038007748,92.85618137725,93.5491379547,94.28753430771,95.03404490636,95.75399979201,96.51895185802,97.25706350066,98.00385880968,98.74631228551,99.50145727375,100.29634673506,101.05616754365,101.84361819984,102.66023369514,103.42635484212,103.94348661633,105.02623126858,105.83336819117,106.60870422188,107.47897935838,108.27446522534,109.14066094715,110.05780935847,110.87305239075,111.72157064884,112.60544383436,113.39289449054,114.33783527796,115.19278170468,116.11704811194,116.93642244337,117.80261816517,118.79255613295,119.69249974002,120.62577459179,121.5942673625,122.52275717094,123.4722628897,124.41720367712,125.39214258478,126.36267000417,127.35418180019,128.32529211893,129.35189445588,130.27583655913,131.29703572589,132.29171023897,133.26088027735,134.39157865546,135.4415128637,136.49144707195,137.52522844622,138.59131548844],description:"Franck Jedrzejewski continued fractions approx. of 90-tet"},"fj-96tet":{frequencies:[48.99942949772,49.35708956705,49.70956615711,50.0646344868,50.44058918883,50.81422318282,51.17718191984,51.5338827476,51.91606220592,52.2660581309,52.67438671005,53.04896912563,53.45392308842,53.81904551389,54.21213476343,54.59936429746,54.9993596403,55.39065943221,55.80490581685,56.20522795327,56.62156297514,57.01751796098,57.44760699733,57.85474808165,58.26959183513,58.69162434342,59.11042288614,59.54361052887,59.98206024721,60.41025554513,60.85413018265,61.24928687215,61.73928116713,62.19158359326,62.61038213598,63.09515579158,63.54613512986,63.99925485416,64.47293354963,64.92424408448,65.33257266363,65.89578449693,66.3533941115,66.81740386053,67.32095530991,67.84536391992,68.30223505743,68.78766064103,69.29919314678,69.78706625433,70.30352927934,70.77695371893,71.27189745123,71.86582992999,72.36838818125,72.90159022832,73.41609436608,73.94459360565,74.47913283653,75.03037641838,75.5753912592,76.10549687944,76.66039776256,77.21122223883,77.82262331991,78.34524166943,78.94352530188,79.48796340741,80.07223844749,80.64489438166,81.23589627254,81.66571582953,82.40813142798,82.999033639,83.58726208435,84.21776944921,84.8067048999,85.43490271397,86.04777863014,86.69129834212,87.30807437776,87.94769397027,88.57589178434,89.20408959841,89.83228741249,90.46048522656,91.16172929808,91.87393030822,92.49330511929,93.09891604567,93.82869478287,94.4988997456,95.19889159557,95.91377688915,96.59887529551,97.28872233605,97.99885899544],description:"Franck Jedrzejewski continued fractions approx. of 96-tet"},"fj-9tet":{frequencies:[261.6255653006,282.55561052465,305.22982618403,329.64821227876,355.98232655655,384.51030051755,415.52295665389,448.50096908674,484.4917875937,523.2511306012],description:"Franck Jedrzejewski continued fractions approx. of 9-tet"},flavel:{frequencies:[261.6255653006,272.52663052146,290.69507255622,294.32876096318,327.03195662575,348.83408706747,363.36884069528,392.4383479509,408.78994578219,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Bill Flavel's just tuning. Tuning List 6-5-98"},fogliano:{frequencies:[261.6255653006,272.52663052146,290.69507255622,294.32876096318,313.95067836072,327.03195662575,348.83408706747,363.36884069528,392.4383479509,408.78994578219,436.04260883433,465.11211608996,470.92601754108,490.54793493862,523.2511306012],description:"Fogliano's Monochord with D-/D and Bb-/Bb"},fogliano1:{frequencies:[261.6255653006,272.52663052146,290.69507255622,313.95067836072,327.03195662575,348.83408706747,363.36884069528,392.4383479509,408.78994578219,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Fogliano's Monochord no.1, Musica theorica (1529)"},fogliano2:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,363.36884069528,392.4383479509,408.78994578219,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Fogliano's Monochord no.2"},"fokker-h":{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,363.36884069528,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Fokker-H 5-limit per.bl. synt.comma&small diesis, KNAW B71, 1968"},"fokker-ht":{frequencies:[261.6255653006,272.31140503734,279.67242998298,290.89121260742,305.67073265504,313.92185180985,326.66733279836,335.5942968927,349.22294231864,363.36596605244,376.74379448613,392.00137290182,407.92073675044,419.068143928,436.08264938702,447.85404100892,470.60848490625,489.4864783277,502.71810253025,523.2511306012],description:"Tempered version of Fokker-H per.bl. with better 6 tetrads, OdC"},"fokker-k":{frequencies:[261.6255653006,272.52663052146,282.55561052465,290.69507255622,302.80736724606,313.95067836072,327.03195662575,339.06673262958,348.83408706747,363.36884069528,376.74081403286,392.4383479509,403.74315632809,418.60090448096,436.04260883433,452.08897683944,470.92601754108,484.4917875937,502.32108537715,523.2511306012],description:"Fokker-K 5-limit per.bl. of 225/224 & 81/80 & 10976/10935, KNAW B71, 1968"},"fokker-l":{frequencies:[261.6255653006,271.31540105247,282.62020942966,291.99281841585,301.39265122629,313.95067836072,325.57848126297,339.14425131559,350.39138209902,363.36884069528,376.74081403286,390.69417751556,403.65087217807,420.46965851882,436.04260883433,454.2110508691,468.83301301868,484.38104661368,504.56359022259,523.2511306012],description:"Fokker-L 7-limit periodicity block 10976/10935 & 225/224 & 15625/15552, 1969"},"fokker-lt":{frequencies:[261.6255653006,272.07297743248,282.57734531132,291.77233860052,302.20925621315,313.90139500947,326.42149564976,339.58797317787,349.9403315901,363.14714144228,376.97081214523,391.19775936204,403.12344267272,419.38375585596,436.11106867998,452.98371913917,469.18728997524,484.4545223075,503.15865298196,523.2511306012],description:"Tempered version of Fokker-L per.bl. with more triads"},"fokker-m":{frequencies:[261.6255653006,265.7783520514,274.70684356563,279.06726965397,286.15296204753,294.32876096318,299.00064605783,305.22982618403,313.95067836072,318.93402246168,327.03195662575,336.37572681506,343.38355445704,348.83408706747,358.80077526939,366.27579142084,373.75080757229,381.53728273004,392.4383479509,398.6675280771,406.97310157871,418.60090448096,429.2294430713,436.04260883433,448.50096908674,457.84473927605,465.11211608996,478.40103369253,490.54793493862,498.33441009638,515.07533168556,523.2511306012],description:"Fokker-M 7-limit periodicity block 81/80 & 225/224 & 1029/1024, KNAW B72, 1969"},"fokker-n":{frequencies:[261.6255653006,265.7783520514,273.37201925287,277.71125765371,286.15296204753,290.69507255622,299.00064605783,303.74668805875,313.95067836072,318.93402246168,328.62879235146,333.84512238879,343.38355445704,348.83408706747,358.80077526939,364.4960256705,375.57576268738,381.53728273004,392.4383479509,398.6675280771,410.05802887931,416.56688648057,429.2294430713,436.04260883433,450.69091522486,457.84473927605,470.92601754108,478.40103369253,492.94318852719,500.76768358318,515.07533168556,523.2511306012],description:"Fokker-N 7-limit periodicity block 81/80 & 2100875/2097152 & 1029/1024, 1969"},"fokker-n2":{frequencies:[261.6255653006,265.7783520514,272.52663052146,279.06726965397,286.15296204753,290.69507255622,299.00064605783,305.22982618403,313.95067836072,318.93402246168,327.03195662575,334.88072358477,343.38355445704,348.83408706747,358.80077526939,366.27579142084,373.75080757229,381.53728273004,392.4383479509,398.6675280771,408.78994578219,418.60090448096,429.2294430713,436.04260883433,448.50096908674,457.84473927605,470.92601754108,478.40103369253,490.54793493862,502.32108537715,515.07533168556,523.2511306012],description:"Fokker-N different block shape"},"fokker-p":{frequencies:[261.6255653006,267.90457886781,273.37201925287,280.31310567921,286.15296204753,290.69507255622,299.00064605783,306.17666156322,312.97980223949,320.35783506196,327.03195662575,334.88072358477,341.85740532612,350.39138209902,357.69120255941,366.27579142084,373.75080757229,382.72082695402,390.69417751556,400.44729382745,408.78994578219,418.60090448096,427.32175665765,437.39523080459,447.11400319927,457.84473927605,470.92601754108,478.40103369253,488.36772189445,500.76768358318,510.98743222773,523.2511306012],description:"Fokker-P 7-limit periodicity block 65625/65536 & 6144/6125 & 2401/2400, 1969"},"fokker-q":{frequencies:[261.6255653006,265.7783520514,269.10058145205,272.52663052146,274.70684356563,279.06726965397,284.76252005507,286.15296204753,290.69507255622,294.32876096318,299.00064605783,301.39265122629,305.22982618403,311.45900631024,313.95067836072,318.93402246168,321.92208230347,327.03195662575,332.22294006425,334.88072358477,340.65828815182,343.38355445704,348.83408706747,353.19451315581,358.80077526939,363.36884069528,366.27579142084,373.75080757229,376.74081403286,381.53728273004,387.59343007496,392.4383479509,398.6675280771,401.85686830172,408.78994578219,412.06026534844,418.60090448096,425.24536328225,429.2294430713,436.04260883433,439.53094970501,448.50096908674,454.2110508691,457.84473927605,465.11211608996,470.92601754108,478.40103369253,480.73697623985,490.54793493862,498.33441009638,502.32108537715,508.71637697339,515.07533168556,523.2511306012],description:"Fokker-Q 7-limit per.bl. 225/224 & 4000/3969 & 6144/6125, KNAW B72, 1969"},"fokker-r":{frequencies:[261.6255653006,264.95644634031,268.26840191956,272.52663052146,275.55899540689,279.06726965397,282.62020942966,287.04062021552,290.69507255622,294.32876096318,298.07600213285,301.80195215951,306.17666156322,310.07474405997,313.95067836072,317.94773560837,322.92069774245,327.03195662575,331.19555792538,334.88072358477,340.1962906258,344.44874425862,348.83408706747,353.19451315581,357.69120255941,363.36884069528,367.91095120397,372.08969287196,376.74081403286,382.72082695402,387.59343007496,392.4383479509,397.43466951046,402.40260287934,408.78994578219,413.33849311034,418.60090448096,423.93031414449,430.56093032327,436.04260883433,441.49314144476,447.11400319927,453.59505416773,459.26499234482,465.11211608996,470.92601754108,476.92160341255,484.38104661368,490.54793493862,496.79333688808,502.32108537715,510.29443593869,516.67311638793,523.2511306012],description:"Fokker-R 7-limit per.bl. 4375/4374 & 65625/65536 & 6144/6125, 1969"},"fokker-s":{frequencies:[261.6255653006,265.7783520514,269.10058145205,273.37201925287,273.85732695955,278.20426865732,282.55561052465,286.15296204753,290.69507255622,295.2417807931,299.00064605783,303.74668805875,304.28591884395,309.04519901133,313.95067836072,317.94773560837,322.92069774245,328.04642310345,332.22294006425,333.84512238879,338.01818641865,343.38355445704,348.83408706747,353.19451315581,358.80077526939,364.4960256705,369.13660007139,370.8542388136,375.57576268738,381.53728273004,387.59343007496,392.4383479509,398.6675280771,404.99558407833,410.05802887931,412.06026534844,417.30640298598,423.93031414449,430.56093032327,436.04260883433,442.96392008567,449.89223739901,450.69091522486,457.84473927605,463.67378109554,470.92601754108,478.40103369253,484.4917875937,492.06963465517,499.88026377668,500.76768358318,508.71637697339,515.07533168556,523.2511306012],description:"Fokker-S 7-limit per.bl. 4375/4374 & 323/322 & 64827/65536, 1969"},fokker_12:{frequencies:[261.6255653006,280.31310567921,294.32876096318,305.22982618403,327.03195662575,348.83408706747,367.91095120397,392.4383479509,420.46965851882,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"Fokker's 7-limit 12-tone just scale"},fokker_12a:{frequencies:[261.6255653006,274.70684356563,293.02063313667,309.04519901133,327.03195662575,348.83408706747,367.91095120397,390.69417751556,412.06026534844,439.53094970501,465.11211608996,490.54793493862,523.2511306012],description:"Fokker's 7-limit periodicity block of 2048/2025 & 3969/4000 & 225/224"},fokker_12b:{frequencies:[261.6255653006,275.93321340298,293.02063313667,309.04519901133,332.22294006425,348.83408706747,367.91095120397,392.4383479509,412.06026534844,439.53094970501,467.18850946536,496.11959049595,523.2511306012],description:"Fokker's 7-limit semitone scale KNAW B72, 1969"},fokker_12c:{frequencies:[261.6255653006,275.93321340298,293.02063313667,311.45900631024,332.22294006425,348.83408706747,372.08969287196,392.4383479509,412.06026534844,442.96392008567,467.18850946536,496.11959049595,523.2511306012],description:"Fokker's 7-limit complementary semitone scale, KNAW B72, 1969"},fokker_12t:{frequencies:[261.6255653006,279.53180800295,293.53544531438,305.4439412874,326.66157401657,349.08351368992,366.63408494061,391.81886165309,419.06057467847,436.03416050506,457.88164994338,489.21957814041,523.2511306012],description:"Tempered version of fokker_12 with egalised 225/224, see also lumma"},fokker_12t2:{frequencies:[261.6255653006,279.53060025556,293.5302824794,305.44678713816,326.66192308793,349.10467831311,366.62831408589,391.81689264402,419.03095498017,436.04260883433,457.88067400285,489.21694446174,523.2511306012],description:"Another tempered version of fokker_12 with egalised 225/224"},fokker_22:{frequencies:[261.6255653006,272.52663052146,279.06726965397,287.4304306281,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,353.19451315581,367.91095120397,383.2405741708,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,459.88868900496,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Fokker's 22-tone periodicity block of 2048/2025 & 3125/3072. KNAW B71, 1968"},fokker_22a:{frequencies:[261.6255653006,269.46602871384,279.06726965397,287.4304306281,297.67175429757,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,357.20610515709,367.91095120397,383.2405741708,392.4383479509,408.78994578219,418.60090448096,431.14564594215,446.50763144636,459.88868900496,476.27480687611,490.54793493862,502.32108537715,523.2511306012],description:"Fokker's 22-tone periodicity block of 2048/2025 & 2109375/2097152 = semicomma"},fokker_31:{frequencies:[261.6255653006,265.7783520514,275.93321340298,280.31310567921,286.15296204753,294.32876096318,299.00064605783,305.22982618403,315.35224388912,321.92208230347,327.03195662575,336.37572681506,343.38355445704,348.83408706747,357.69120255941,367.91095120397,373.75080757229,381.53728273004,392.4383479509,398.6675280771,406.97310157871,420.46965851882,429.2294430713,436.04260883433,448.50096908674,457.84473927605,465.11211608996,482.88312345521,490.54793493862,498.33441009638,515.07533168556,523.2511306012],description:"Fokker's 31-tone just system"},fokker_31a:{frequencies:[261.6255653006,269.10058145205,272.52663052146,280.31310567921,286.15296204753,294.32876096318,299.00064605783,305.22982618403,311.45900631024,321.92208230347,327.03195662575,336.37572681506,343.38355445704,348.83408706747,357.69120255941,367.91095120397,373.75080757229,381.53728273004,392.4383479509,398.6675280771,412.06026534844,420.46965851882,429.2294430713,436.04260883433,448.50096908674,457.84473927605,470.92601754108,476.92160341255,490.54793493862,498.33441009638,515.07533168556,523.2511306012],description:"Fokker's 31-tone first alternate septimal tuning"},fokker_31b:{frequencies:[261.6255653006,267.07609791103,274.70684356563,280.31310567921,286.15296204753,294.32876096318,299.00064605783,305.22982618403,313.95067836072,321.92208230347,327.03195662575,336.37572681506,343.38355445704,348.83408706747,357.69120255941,367.91095120397,373.75080757229,381.53728273004,392.4383479509,398.6675280771,408.78994578219,420.46965851882,429.2294430713,436.04260883433,448.50096908674,457.84473927605,467.18850946536,480.53675259294,490.54793493862,498.33441009638,515.07533168556,523.2511306012],description:"Fokker's 31-tone second alternate septimal tuning"},fokker_31c:{frequencies:[261.6255653006,269.46602871384,272.52663052146,279.06726965397,287.4304306281,294.32876096318,297.67175429757,306.59245933664,313.95067836072,319.36714514233,327.03195662575,334.88072358477,344.91651675372,348.83408706747,359.28803828513,367.91095120397,372.08969287196,383.2405741708,392.4383479509,396.89567239676,408.78994578219,418.60090448096,431.14564594215,436.04260883433,446.50763144636,459.88868900496,465.11211608996,479.0507177135,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"Fokker's 31-tone periodicity block of 81/80 & 2109375/2097152 = semicomma"},fokker_31d:{frequencies:[261.6255653006,266.13928761861,272.52663052146,279.06726965397,287.4304306281,294.32876096318,299.40669857094,306.59245933664,313.95067836072,319.36714514233,327.03195662575,334.88072358477,340.65828815182,348.83408706747,359.28803828513,367.91095120397,376.74081403286,383.2405741708,392.4383479509,399.20893142792,408.78994578219,418.60090448096,425.82286018978,436.04260883433,443.56547936435,459.88868900496,470.92601754108,479.0507177135,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"Fokker's 31-tone periodicity block of 81/80 & W\xEF\xBF\xBDrschmidt's comma"},fokker_31d2:{frequencies:[261.6255653006,267.90457886781,272.52663052146,279.06726965397,283.88190679319,290.69507255622,301.39265122629,306.59245933664,313.95067836072,319.36714514233,327.03195662575,334.88072358477,340.65828815182,348.83408706747,357.20610515709,363.36884069528,376.74081403286,383.2405741708,392.4383479509,401.85686830172,408.78994578219,418.60090448096,425.82286018978,436.04260883433,446.50763144636,454.2110508691,465.11211608996,482.22824196207,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"Reduced version of fokker_31d by Prooijen expressibility"},fokker_41:{frequencies:[261.6255653006,264.89588486686,271.31540105247,274.70684356563,280.31310567921,283.8170195002,290.69507255622,294.32876096318,300.33547037059,305.22982618403,311.45900631024,313.95067836072,321.55899383997,325.57848126297,329.64821227876,336.37572681506,341.85740532612,348.83408706747,353.19451315581,361.75386806997,366.27579142084,373.75080757229,378.42269266694,387.59343007496,392.4383479509,400.44729382745,406.97310157871,415.27867508032,420.46965851882,425.72552925031,436.04260883433,439.53094970501,448.50096908674,455.80987376816,465.11211608996,470.92601754108,482.33849075995,488.36772189445,498.33441009638,504.56359022259,516.79124009995,523.2511306012],description:"Fokker's 7-limit supracomma per.bl. 10976/10935 & 225/224 & 496125/262144"},fokker_41a:{frequencies:[261.6255653006,264.59711493117,272.83435407277,275.93321340298,279.06726965397,287.4304306281,291.02331101095,294.32876096318,297.67175429757,306.59245933664,310.42486507835,313.95067836072,323.35923445661,327.03195662575,331.11985608357,334.88072358477,344.91651675372,348.83408706747,353.19451315581,363.77913876369,367.91095120397,372.08969287196,376.315896791,388.03108134794,392.4383479509,396.89567239676,408.78994578219,413.89982010446,418.60090448096,431.14564594215,436.04260883433,441.49314144476,446.50763144636,459.88868900496,465.11211608996,470.92601754108,485.03885168492,490.54793493862,496.11959049595,502.32108537715,517.37477513058,523.2511306012],description:"Fokker's 41-tone periodicity block of schisma & 34171875/33554432"},fokker_41b:{frequencies:[261.6255653006,264.89588486686,272.52663052146,275.93321340298,279.06726965397,287.4304306281,290.69507255622,294.32876096318,297.67175429757,306.59245933664,310.42486507835,313.95067836072,323.35923445661,327.03195662575,331.11985608357,340.65828815182,344.91651675372,348.83408706747,353.19451315581,363.36884069528,367.91095120397,372.08969287196,383.2405741708,388.03108134794,392.4383479509,397.34382730029,408.78994578219,413.89982010446,418.60090448096,431.14564594215,436.04260883433,441.49314144476,454.2110508691,459.88868900496,465.11211608996,470.92601754108,485.03885168492,490.54793493862,496.67978412536,510.98743222773,517.37477513058,523.2511306012],description:"Fokker's 41-tone periodicity block of schisma & 3125/3072"},fokker_53:{frequencies:[261.6255653006,263.718569823,268.26840191956,272.52663052146,274.70684356563,279.06726965397,282.55561052465,286.15296204753,290.69507255622,294.32876096318,299.00064605783,300.46061014991,305.22982618403,309.04519901133,313.95067836072,317.87506184023,321.92208230347,327.03195662575,329.64821227876,334.88072358477,340.65828815182,343.38355445704,348.83408706747,353.19451315581,357.69120255941,360.55273217989,366.27579142084,373.75080757229,376.74081403286,381.53728273004,386.30649876417,392.4383479509,398.6675280771,400.61414686654,410.05802887931,412.06026534844,418.60090448096,423.83341578697,429.2294430713,436.04260883433,439.53094970501,448.50096908674,450.69091522486,457.84473927605,465.11211608996,470.92601754108,476.92160341255,480.73697623985,490.54793493862,498.33441009638,502.32108537715,508.71637697339,515.07533168556,523.2511306012],description:"Fokker's 53-tone system, degree 37 has alternatives"},fokker_53a:{frequencies:[261.6255653006,264.89588486686,269.46602871384,272.52663052146,275.93321340298,279.38237857051,283.88190679319,287.4304306281,290.69507255622,294.32876096318,298.00787047521,302.80736724606,306.59245933664,310.42486507835,313.95067836072,319.36714514233,323.35923445661,327.03195662575,331.11985608357,334.88072358477,340.65828815182,344.91651675372,348.83408706747,353.19451315581,359.28803828513,363.36884069528,367.91095120397,372.50983809402,378.50920905758,383.2405741708,388.03108134794,392.4383479509,397.34382730029,403.74315632809,408.78994578219,413.89982010446,418.60090448096,425.82286018978,431.14564594215,436.04260883433,441.49314144476,447.01180571282,454.2110508691,459.88868900496,465.63729761752,470.92601754108,479.0507177135,484.4917875937,490.54793493862,496.67978412536,504.67894541011,510.98743222773,517.37477513058,523.2511306012],description:"Fokker's 53-tone periodicity block of schisma & kleisma"},fokker_53b:{frequencies:[261.6255653006,264.59711493117,267.90457886781,272.52663052146,275.93321340298,279.06726965397,282.55561052465,287.4304306281,290.69507255622,294.32876096318,297.67175429757,301.39265122629,306.59245933664,310.07474405997,313.95067836072,317.51653791741,323.35923445661,327.03195662575,331.11985608357,334.88072358477,340.65828815182,344.91651675372,348.83408706747,353.19451315581,357.20610515709,363.36884069528,367.91095120397,372.08969287196,376.74081403286,383.2405741708,388.03108134794,392.4383479509,396.89567239676,401.85686830172,408.78994578219,413.89982010446,418.60090448096,423.35538388988,431.14564594215,436.04260883433,441.49314144476,446.50763144636,451.5790761492,459.88868900496,465.11211608996,470.92601754108,476.27480687611,485.03885168492,490.54793493862,496.11959049595,502.32108537715,510.98743222773,517.37477513058,523.2511306012],description:"Fokker's 53-tone periodicity block of schisma & 2109375/2097152"},fokker_av:{frequencies:[261.6255653006,267.53238172257,273.57240048543,279.74894499065,286.06477437084,292.52336378682,299.12777114678,305.88111195206,312.78710209553,319.84901131344,327.07017092477,334.45455423048,342.00545991849,349.72704272607,357.62295854304,365.69693211485,373.95340598657,382.39606841888,391.02956482064,399.85798283974,408.88548711149,418.11704484248,427.5567798744,437.20988623572,447.08093432269,457.17458061119,467.49637893146,478.0512162812,488.84407170063,499.88088374606,511.16658268681,522.70737825664],description:"Fokker's suggestion for a shrinked octave by averaging approximations"},fokker_bosch:{frequencies:[261.6255653006,294.32876096318,327.03195662575,343.38355445704,348.83408706747,392.4383479509,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:'Scale of "Naar Den Bosch toe", genus diatonicum cum septimis. 1/1=D'},fokker_sr:{frequencies:[261.6255653006,269.10058145205,279.06726965397,287.04062021552,296.75121990114,305.22982618403,315.35224388912,325.57848126297,336.37572681506,347.28371334717,358.80077526939,367.91095120397,381.53728273004,392.4383479509,406.97310157871,418.60090448096,434.10464168396,446.50763144636,461.31528248922,474.80195184183,490.54793493862,506.45541529795,523.2511306012],description:"Fokker's 7-limit sruti scale, KNAW B72, 1969"},fokker_sr2:{frequencies:[261.6255653006,270.30192333353,279.06726965397,288.32205155576,296.75121990114,306.59245933664,315.35224388912,327.03195662575,336.37572681506,348.83408706747,358.80077526939,372.08969287196,381.53728273004,394.1903048614,406.97310157871,420.46965851882,434.10464168396,448.50096908674,461.31528248922,476.92160341255,490.54793493862,508.71637697339,523.2511306012],description:"Fokker's complementary 7-limit sruti scale, KNAW B72, 1969"},fokker_sra:{frequencies:[261.6255653006,269.76956886185,278.7476190342,287.42460593148,296.37169586701,305.59729331129,315.11006948887,325.59707150921,336.43308557971,346.90573279191,357.7043774887,368.83916960349,381.11429755927,392.97780480816,406.05627704035,419.57000893919,433.5334812886,447.02871783796,460.94403787128,475.29252052682,490.08765232515,506.39798251136,523.2511306012],description:"Two-step approximation 9-13 to Fokker's 7-limit sruti scale"},fokker_srb:{frequencies:[261.6255653006,269.31534001393,278.64197723942,286.83190328195,296.76515515861,305.48776291796,316.06708432391,325.35701999957,336.62443200122,346.51859521924,358.51885197895,369.0565423573,381.83730669135,393.06038214356,406.67242132093,418.62545783369,433.12283887627,445.85331391262,461.29362042034,474.85209942927,491.29666030217,505.73699464332,523.2511306012],description:"Two-step maximally even approximation 11-11 to Fokker's 7-limit sruti scale"},fokker_uv:{frequencies:[220,220.05029721079,220.09166666667,220.14198483463,220.15668113546,220.24841308594,220.29876708984,220.3905582428,220.5253936656,220.68244897959,220.7744,220.82487425697,220.98214285714,221.03266460905,221.0236875,221.07421875,221.28224372864,221.41762468656,221.66763848397,221.71831695641,221.76,221.81069958848,222.01040039062,222.06115722656,222.40609622534,222.44790857143,222.4987654321,222.65722615577,222.75,222.80092592593,223.00151824951,223.05250167847,223.14544022083,223.18896568405,223.23999196793,223.44097959184,223.49206349206,223.58518518519,223.79557291667,223.88882107205,224.18534499514,224.23659907493,224.33003099121,224.48979591837,224.58333333333,224.79466029576,224.83692169189,224.88832473755,225.18617242815,225.28,225.33150434385,225.49198250729,225.5859375,225.67993164062,225.9788277551,226.03049186753,226.28571428571,226.4317558299,226.68743133545,227.08224,227.1341563786,227.29591836735,227.390625,227.44261188272,228.096,228.14814814815,229.16666666667,231,232.03125,233.6237037037,233.84353741497],description:"Table of Unison Vectors, Microsons and Minisons, from article KNAW, 1969"},foote:{frequencies:[261.6255653006,276.70272600503,293.15632631094,310.58830860439,328.48713220126,349.43001184052,368.92737853004,391.76907592069,414.58565256441,438.98455767189,465.89457252293,492.17459484008,523.2511306012],description:"Ed Foote, piano temperament. TL 9 Jun 1999, almost equal to Coleman"},forster:{frequencies:[261.6255653006,279.06726965397,283.42769574232,287.78812183066,299.00064605783,309.19384990071,319.76457981184,327.03195662575,336.37572681506,340.11323489078,343.38355445704,353.19451315581,359.73515228832,366.27579142084,373.75080757229,377.90359432309,380.54627680087,387.59343007496,392.4383479509,398.6675280771,402.50086969323,406.97310157871,418.60090448096,428.11456140098,441.49314144476,442.75095666255,448.50096908674,457.84473927605,465.11211608996,483.00104363188,490.54793493862,507.3950357345,523.2511306012],description:"Cris Forster's Chrysalis tuning, XH 7+8"},fortuna11:{frequencies:[261.6255653006,274.70684356563,299.00064605783,305.22982618403,332.97799220076,343.38355445704,373.75080757229,398.6675280771,411.12588832951,448.50096908674,457.84473927605,498.33441009638,523.2511306012],description:"11-limit scale from Clem Fortuna"},fortuna_a1:{frequencies:[261.6255653006,277.18263097687,293.66476791741,311.12698372208,320.24370022528,349.22823143301,369.99442271164,391.99543598175,415.30469757995,440,466.16376151809,479.82340237272,523.2511306012],description:"Clem Fortuna, Arabic mode of 24-tET, try C or G major, superset of Basandida, trivalent"},fortuna_a2:{frequencies:[261.6255653006,277.18263097687,285.30470202322,311.12698372208,329.62755691287,349.22823143301,369.99442271164,391.99543598175,428.11456140098,440,466.16376151809,493.88330125613,523.2511306012],description:"Clem Fortuna, Arabic mode of 24-tET, try C or F minor"},fortuna_bag:{frequencies:[261.6255653006,266.17557513191,291.58269109838,303.42373253797,318.96815495553,348.01136516401,359.18086083642,388.55281975337,398.8194592997,432.92801877123,462.35552488468,479.64686971777,523.2511306012],description:"Bagpipe tuning from Fortuna, try key of G with F natural"},fortuna_eth:{frequencies:[261.6255653006,280.31310567921,288.69027895239,305.7551787248,323.91736656265,346.02090894595,368.95913055213,385.17097113699,414.24047839262,422.62591317789,469.58434797544,484.00729580611,523.2511306012],description:"Ethiopian Tunings from Fortuna"},fortuna_sheng:{frequencies:[261.6255653006,275.29257244317,286.94416839421,312.81317590289,320.2657782128,348.83408706747,367.19377586049,382.62738925213,417.81993264424,433.74764773521,467.75479856774,484.77678276288,523.2511306012],description:"Sheng scale on naturals starting on d, from Fortuna"},"francis_r12-14p":{frequencies:[261.6255653006,277.2273508585,293.19140419912,311.27759533081,328.56574776048,349.51003591412,369.636465861,391.67937618637,415.43871422078,438.93656251816,466.46466724696,492.84862139436,523.2511306012],description:"Bach WTC theoretical temperament, 1/14 Pyth. comma, Cornet-ton"},"francis_r12-2":{frequencies:[261.6255653006,277.2831963903,293.15801965318,311.35818177599,328.6319369554,349.45847225471,369.71092870521,391.50168688506,415.45657533448,438.80025285527,466.56783666625,492.94847466277,523.2511306012],description:"J. Charles Francis, Bach WTC temperament R12-2, fifths beat ratios 0, 1, 2. C=279.331 Cornet-ton"},"francis_r2-1":{frequencies:[261.6255653006,276.41735337657,293.40958958006,310.96959408698,328.77281747949,349.18425877583,368.55655650762,391.91325216238,414.62612565656,439.06418506387,465.92902003736,492.10921220871,523.2511306012],description:"J. Charles Francis, Bach WTC temperament R2-1, fifths beat ratios 0, 1, 2. C=249.072 Cammerton"},"francis_r2-14p":{frequencies:[261.6255653006,276.42350693124,293.47533146651,310.97644498676,328.88393162803,349.17189700163,368.56467609256,392.05867944486,414.6352601896,439.36162975058,466.01338145177,492.37181018521,523.2511306012],description:"Bach WTC theoretical temperament, 1/14 Pyth. comma, Cammerton"},francis_seal:{frequencies:[261.6255653006,275.89934348748,293.01242796531,310.38672525582,327.92787107993,349.18506556371,367.865749003,391.38524198103,413.84896721463,437.93907827641,465.58008765101,490.83740312498,523.2511306012],description:"J. Charles Francis, Bach tuning interpretion as beats/sec. from seal"},francis_suppig:{frequencies:[261.6255653006,276.33536163417,293.13939342657,310.64213412049,328.58201670643,349.47038191026,368.45885450371,391.47500324588,414.51381656966,438.73106346722,465.97531289569,491.91879926026,523.2511306012],description:"J. Charles Francis, Suppig Calculus musicus, 5ths beat ratios 0, 1, 2."},efg333:{frequencies:[261.6255653006,294.32876096318,348.83408706747,392.4383479509,523.2511306012],description:"Genus primum [333]"},efg333333333337:{frequencies:[261.6255653006,275.01702890535,279.38237857051,289.72987407313,294.32876096318,309.39415751852,314.30517589183,325.94610833227,331.11985608357,343.38355445704,353.59332287831,366.6893718738,372.50983809402,386.30649876417,392.4383479509,412.52554335802,419.07356785577,434.59481110969,441.49314144476,457.84473927605,471.45776383774,488.9191624984,496.67978412536,515.07533168556,523.2511306012],description:"Genus [333333333337]"},efg333333355:{frequencies:[261.6255653006,264.89588486686,275.93321340298,279.06726965397,290.69507255622,294.32876096318,310.42486507835,313.95067836072,327.03195662575,331.11985608357,348.83408706747,353.19451315581,367.91095120397,372.08969287196,392.4383479509,397.34382730029,413.89982010446,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,496.67978412536,523.2511306012],description:"Genus [333333355]"},efg33335:{frequencies:[261.6255653006,275.93321340298,294.32876096318,327.03195662575,348.83408706747,367.91095120397,392.4383479509,436.04260883433,441.49314144476,490.54793493862,523.2511306012],description:"Genus [33335]"},efg3333555:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,306.59245933664,313.95067836072,327.03195662575,348.83408706747,363.36884069528,367.91095120397,372.08969287196,392.4383479509,408.78994578219,418.60090448096,436.04260883433,459.88868900496,465.11211608996,470.92601754108,490.54793493862,523.2511306012],description:"Genus [3333555]"},efg33335555:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,297.67175429757,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,363.36884069528,367.91095120397,372.08969287196,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,459.88868900496,465.11211608996,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Genus bis-ultra-chromaticum [33335555]"},efg333355577:{frequencies:[261.6255653006,267.07609791103,268.26840191956,272.52663052146,274.70684356563,278.20426865732,279.06726965397,281.68182201554,284.8811711051,286.15296204753,290.69507255622,294.32876096318,300.46061014991,305.22982618403,306.59245933664,312.97980223949,313.95067836072,317.94773560837,320.49131749323,321.92208230347,325.57848126297,327.03195662575,333.84512238879,343.38355445704,348.83408706747,352.10227751942,356.10146388137,357.69120255941,360.55273217989,363.36884069528,366.27579142084,367.91095120397,372.08969287196,375.57576268738,381.53728273004,392.4383479509,400.61414686654,402.40260287934,406.97310157871,408.78994578219,412.06026534844,417.30640298598,418.60090448096,427.32175665765,429.2294430713,436.04260883433,445.12682985172,450.69091522486,457.84473927605,459.88868900496,465.11211608996,469.46970335923,470.92601754108,476.92160341255,480.73697623985,488.36772189445,490.54793493862,500.76768358318,508.71637697339,515.07533168556,523.2511306012],description:"Genus [333355577]"},efg33337:{frequencies:[261.6255653006,294.32876096318,305.22982618403,343.38355445704,348.83408706747,386.30649876417,392.4383479509,441.49314144476,457.84473927605,515.07533168556,523.2511306012],description:"Genus [33337]"},efg3335:{frequencies:[261.6255653006,290.69507255622,327.03195662575,348.83408706747,392.4383479509,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Genus diatonicum veterum correctum [3335]"},efg33355:{frequencies:[261.6255653006,272.52663052146,290.69507255622,310.07474405997,327.03195662575,348.83408706747,363.36884069528,387.59343007496,408.78994578219,436.04260883433,465.11211608996,484.4917875937,523.2511306012],description:"Genus diatonico-chromaticum hodiernum correctum [33355]"},efg333555:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,306.59245933664,313.95067836072,327.03195662575,348.83408706747,363.36884069528,372.08969287196,392.4383479509,408.78994578219,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Genus diatonico-hyperchromaticum [333555]"},efg33355555:{frequencies:[261.6255653006,272.52663052146,279.06726965397,287.4304306281,294.32876096318,306.59245933664,313.95067836072,319.36714514233,327.03195662575,340.65828815182,348.83408706747,359.28803828513,367.91095120397,383.2405741708,392.4383479509,408.78994578219,418.60090448096,425.82286018978,436.04260883433,459.88868900496,470.92601754108,479.0507177135,490.54793493862,510.98743222773,523.2511306012],description:"Genus [33355555]"},efg333555777:{frequencies:[261.6255653006,262.79353657426,267.07609791103,268.26840191956,269.10058145205,272.52663052146,274.70684356563,279.06726965397,280.31310567921,281.68182201554,286.15296204753,294.32876096318,299.00064605783,300.46061014991,305.22982618403,306.59245933664,311.45900631024,312.97980223949,313.95067836072,318.93402246168,320.49131749323,321.92208230347,327.03195662575,333.84512238879,336.37572681506,343.38355445704,348.83408706747,350.39138209902,352.10227751942,357.69120255941,358.80077526939,360.55273217989,366.27579142084,367.91095120397,373.75080757229,375.57576268738,381.53728273004,392.4383479509,398.6675280771,400.61414686654,402.40260287934,408.78994578219,412.06026534844,417.30640298598,418.60090448096,420.46965851882,427.32175665765,429.2294430713,436.04260883433,448.50096908674,450.69091522486,457.84473927605,459.88868900496,467.18850946536,469.46970335923,470.92601754108,476.92160341255,478.40103369253,480.73697623985,488.36772189445,490.54793493862,498.33441009638,500.76768358318,515.07533168556,523.2511306012],description:"Genus [333555777]"},efg333557:{frequencies:[261.6255653006,265.7783520514,279.06726965397,280.31310567921,290.69507255622,299.00064605783,313.95067836072,318.93402246168,327.03195662575,332.22294006425,348.83408706747,358.80077526939,372.08969287196,373.75080757229,392.4383479509,398.6675280771,418.60090448096,425.24536328225,436.04260883433,448.50096908674,465.11211608996,478.40103369253,490.54793493862,498.33441009638,523.2511306012],description:"Genus diatonico-enharmonicum [333557]"},efg33357:{frequencies:[261.6255653006,274.70684356563,279.06726965397,305.22982618403,313.95067836072,325.57848126297,343.38355445704,348.83408706747,366.27579142084,372.08969287196,392.4383479509,406.97310157871,418.60090448096,457.84473927605,465.11211608996,488.36772189445,523.2511306012],description:"Genus diatonico-enharmonicum [33357]"},efg3335711:{frequencies:[261.6255653006,265.58571790036,269.80136421624,275.93321340298,286.15296204753,294.32876096318,295.09524211152,303.52653474327,314.76825825228,321.92208230347,327.03195662575,331.98214737546,337.2517052703,343.38355445704,354.11429053382,359.73515228832,367.91095120397,379.40816842909,386.30649876417,392.4383479509,393.46032281536,404.70204632437,429.2294430713,441.49314144476,442.64286316727,449.66894036041,457.84473927605,472.15238737843,482.88312345521,490.54793493862,505.87755790546,515.07533168556,523.2511306012],description:"Genus [3 3 3 5 7 11], expanded hexany 1 3 5 7 9 11"},efg333577:{frequencies:[261.6255653006,267.07609791103,281.68182201554,286.15296204753,294.32876096318,300.46061014991,305.22982618403,321.92208230347,327.03195662575,333.84512238879,343.38355445704,348.83408706747,367.91095120397,375.57576268738,381.53728273004,392.4383479509,400.61414686654,429.2294430713,436.04260883433,450.69091522486,457.84473927605,490.54793493862,500.76768358318,515.07533168556,523.2511306012],description:"Genus [333577]"},efg3337:{frequencies:[261.6255653006,294.32876096318,305.22982618403,343.38355445704,348.83408706747,392.4383479509,457.84473927605,515.07533168556,523.2511306012],description:"Genus [3337]"},efg33377:{frequencies:[261.6255653006,294.32876096318,299.00064605783,305.22982618403,336.37572681506,343.38355445704,348.83408706747,392.4383479509,398.6675280771,448.50096908674,457.84473927605,515.07533168556,523.2511306012],description:"Genus [33377] Bi-enharmonicum simplex"},efg335:{frequencies:[261.6255653006,327.03195662575,348.83408706747,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"Genus secundum [335]"},efg3355:{frequencies:[261.6255653006,279.06726965397,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,490.54793493862,523.2511306012],description:"Genus chromaticum veterum correctum [3355]"},efg33555:{frequencies:[261.6255653006,294.32876096318,306.59245933664,313.95067836072,327.03195662575,367.91095120397,392.4383479509,408.78994578219,418.60090448096,459.88868900496,470.92601754108,490.54793493862,523.2511306012],description:"Genus bichromaticum [33555]"},efg335555577:{frequencies:[261.6255653006,267.07609791103,268.26840191956,272.52663052146,274.70684356563,279.06726965397,286.15296204753,293.02063313667,300.46061014991,305.22982618403,306.59245933664,312.97980223949,313.95067836072,320.49131749323,327.03195662575,333.84512238879,334.88072358477,341.85740532612,343.38355445704,348.83408706747,357.69120255941,366.27579142084,375.57576268738,381.53728273004,384.58958099188,390.69417751556,392.4383479509,400.61414686654,408.78994578219,417.30640298598,418.60090448096,427.32175665765,429.2294430713,436.04260883433,439.53094970501,446.50763144636,457.84473927605,469.46970335923,476.92160341255,480.73697623985,488.36772189445,490.54793493862,500.76768358318,502.32108537715,512.78610798918,523.2511306012],description:"Genus [335555577]"},efg33557:{frequencies:[261.6255653006,274.70684356563,279.06726965397,286.15296204753,305.22982618403,313.95067836072,327.03195662575,343.38355445704,348.83408706747,366.27579142084,381.53728273004,392.4383479509,418.60090448096,429.2294430713,436.04260883433,457.84473927605,488.36772189445,490.54793493862,523.2511306012],description:"Genus chromatico-enharmonicum [33557]"},efg335577:{frequencies:[261.6255653006,274.70684356563,279.06726965397,280.31310567921,286.15296204753,299.00064605783,305.22982618403,313.95067836072,318.93402246168,327.03195662575,343.38355445704,348.83408706747,358.80077526939,366.27579142084,373.75080757229,381.53728273004,392.4383479509,398.6675280771,418.60090448096,429.2294430713,436.04260883433,448.50096908674,457.84473927605,478.40103369253,488.36772189445,490.54793493862,498.33441009638,523.2511306012],description:"Genus chromaticum septimis triplex [335577]"},efg3357:{frequencies:[261.6255653006,286.15296204753,305.22982618403,327.03195662575,343.38355445704,348.83408706747,381.53728273004,392.4383479509,429.2294430713,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"Genus enharmonicum vocale [3357]"},efg33577:{frequencies:[261.6255653006,280.31310567921,286.15296204753,299.00064605783,305.22982618403,327.03195662575,343.38355445704,348.83408706747,373.75080757229,381.53728273004,392.4383479509,398.6675280771,429.2294430713,436.04260883433,448.50096908674,457.84473927605,490.54793493862,498.33441009638,523.2511306012],description:"Genus [33577]"},efg337:{frequencies:[261.6255653006,294.32876096318,343.38355445704,392.4383479509,457.84473927605,515.07533168556,523.2511306012],description:"Genus quintum [337]"},efg3377:{frequencies:[261.6255653006,299.00064605783,305.22982618403,343.38355445704,348.83408706747,392.4383479509,398.6675280771,448.50096908674,457.84473927605,523.2511306012],description:"Genus [3377]"},efg33777:{frequencies:[261.6255653006,267.07609791103,299.00064605783,300.46061014991,305.22982618403,343.38355445704,348.83408706747,392.4383479509,398.6675280771,400.61414686654,448.50096908674,457.84473927605,523.2511306012],description:"Genus [33777]"},efg33777a:{frequencies:[261.6255653006,267.07609791103,299.00064605783,305.22982618403,343.38355445704,348.83408706747,392.4383479509,398.6675280771,448.50096908674,457.84473927605,523.2511306012],description:"Genus [33777] with comma discarded which disappears in 31-tET"},efg355:{frequencies:[261.6255653006,313.95067836072,327.03195662575,392.4383479509,418.60090448096,490.54793493862,523.2511306012],description:"Genus tertium [355]"},efg3555:{frequencies:[261.6255653006,306.59245933664,327.03195662575,383.2405741708,392.4383479509,408.78994578219,490.54793493862,510.98743222773,523.2511306012],description:"Genus enharmonicum veterum correctum [3555]"},efg35555:{frequencies:[261.6255653006,306.59245933664,313.95067836072,327.03195662575,334.88072358477,392.4383479509,408.78994578219,418.60090448096,490.54793493862,502.32108537715,523.2511306012],description:"Genus [35555]"},efg35557:{frequencies:[261.6255653006,268.26840191956,274.70684356563,286.15296204753,306.59245933664,313.95067836072,327.03195662575,343.38355445704,357.69120255941,366.27579142084,392.4383479509,408.78994578219,418.60090448096,429.2294430713,457.84473927605,490.54793493862,523.2511306012],description:"Genus [35557]"},efg3557:{frequencies:[261.6255653006,274.70684356563,286.15296204753,313.95067836072,327.03195662575,343.38355445704,366.27579142084,392.4383479509,418.60090448096,429.2294430713,457.84473927605,490.54793493862,523.2511306012],description:"Genus enharmonicum instrumentale [3557]"},efg35577:{frequencies:[261.6255653006,274.70684356563,280.31310567921,286.15296204753,299.00064605783,313.95067836072,327.03195662575,343.38355445704,358.80077526939,366.27579142084,373.75080757229,392.4383479509,418.60090448096,429.2294430713,448.50096908674,457.84473927605,478.40103369253,490.54793493862,523.2511306012],description:"Genus [35577]"},efg357:{frequencies:[261.6255653006,286.15296204753,327.03195662575,343.38355445704,392.4383479509,429.2294430713,457.84473927605,490.54793493862,523.2511306012],description:"Genus sextum [357] & 7-limit Octony, see ch.6 p.118"},efg35711:{frequencies:[261.6255653006,269.80136421624,286.15296204753,295.09524211152,314.76825825228,327.03195662575,337.2517052703,343.38355445704,359.73515228832,392.4383479509,393.46032281536,429.2294430713,449.66894036041,457.84473927605,472.15238737843,490.54793493862,523.2511306012],description:"Genus [3 5 7 11]"},efg3571113:{frequencies:[261.6255653006,265.71346475842,269.80136421624,274.01701053212,278.99913799634,286.15296204753,292.28481123426,295.09524211152,314.76825825228,318.85615771011,319.68651228748,327.03195662575,337.2517052703,343.38355445704,348.74892249543,359.73515228832,365.35601404283,371.99885066179,383.62381474497,392.4383479509,393.46032281536,398.57019713763,425.14154361347,429.2294430713,438.4272168514,449.66894036041,457.84473927605,464.99856332724,472.15238737843,479.52976843121,490.54793493862,511.49841965996,523.2511306012],description:"Genus [3 5 7 11 13]"},efg3577:{frequencies:[261.6255653006,280.31310567921,286.15296204753,299.00064605783,327.03195662575,343.38355445704,373.75080757229,392.4383479509,429.2294430713,448.50096908674,457.84473927605,490.54793493862,523.2511306012],description:"Genus [3577]"},efg35777:{frequencies:[261.6255653006,280.31310567921,286.15296204753,299.00064605783,300.46061014991,327.03195662575,343.38355445704,373.75080757229,375.57576268738,392.4383479509,400.61414686654,429.2294430713,448.50096908674,457.84473927605,490.54793493862,500.76768358318,523.2511306012],description:"Genus [35777]"},efg35777a:{frequencies:[261.6255653006,280.31310567921,286.15296204753,299.00064605783,327.03195662575,343.38355445704,373.75080757229,392.4383479509,400.61414686654,429.2294430713,448.50096908674,457.84473927605,490.54793493862,500.76768358318,523.2511306012],description:"Genus [35777] with comma discarded which disappears in 31-tET"},efg377:{frequencies:[261.6255653006,300.46061014991,343.38355445704,392.4383479509,400.61414686654,457.84473927605,523.2511306012],description:"Genus octavum [377]"},efg3777:{frequencies:[261.6255653006,262.90303388117,300.46061014991,343.38355445704,350.53737850823,392.4383479509,400.61414686654,457.84473927605,523.2511306012],description:"Genus [3777]"},efg37777:{frequencies:[261.6255653006,262.90303388117,299.00064605783,300.46061014991,343.38355445704,350.53737850823,392.4383479509,400.61414686654,448.50096908674,457.84473927605,523.2511306012],description:"Genus [37777]"},efg37777a:{frequencies:[261.6255653006,299.00064605783,343.38355445704,350.53737850823,392.4383479509,400.61414686654,448.50096908674,457.84473927605,523.2511306012],description:"Genus [37777] with comma discarded that disappears in 31-tET"},efg555:{frequencies:[261.6255653006,327.03195662575,408.78994578219,510.98743222773,523.2511306012],description:"Genus quartum [555]"},efg55557:{frequencies:[261.6255653006,286.15296204753,327.03195662575,357.69120255941,366.27579142084,408.78994578219,418.60090448096,447.11400319927,457.84473927605,510.98743222773,523.2511306012],description:"Genus [55557]"},efg5557:{frequencies:[261.6255653006,286.15296204753,327.03195662575,357.69120255941,408.78994578219,447.11400319927,457.84473927605,510.98743222773,523.2511306012],description:"Genus [5557]"},efg55577:{frequencies:[261.6255653006,286.15296204753,291.99281841585,299.00064605783,327.03195662575,357.69120255941,373.75080757229,408.78994578219,447.11400319927,457.84473927605,467.18850946536,510.98743222773,523.2511306012],description:"Genus [55577]"},efg557:{frequencies:[261.6255653006,286.15296204753,327.03195662575,366.27579142084,418.60090448096,457.84473927605,523.2511306012],description:"Genus septimum [557]"},efg5577:{frequencies:[261.6255653006,293.02063313667,320.49131749323,334.88072358477,366.27579142084,400.61414686654,418.60090448096,457.84473927605,512.78610798918,523.2511306012],description:"Genus [5577]"},efg55777:{frequencies:[261.6255653006,286.15296204753,299.00064605783,320.49131749323,327.03195662575,366.27579142084,373.75080757229,400.61414686654,418.60090448096,457.84473927605,478.40103369253,500.76768358318,523.2511306012],description:"Genus [55777]"},efg577:{frequencies:[261.6255653006,286.15296204753,327.03195662575,400.61414686654,457.84473927605,500.76768358318,523.2511306012],description:"Genus nonum [577]"},efg5777:{frequencies:[261.6255653006,286.15296204753,299.00064605783,327.03195662575,373.75080757229,400.61414686654,457.84473927605,500.76768358318,523.2511306012],description:"Genus [5777]"},efg57777:{frequencies:[261.6255653006,286.15296204753,299.00064605783,327.03195662575,350.53737850823,373.75080757229,400.61414686654,438.17172313528,457.84473927605,500.76768358318,523.2511306012],description:"Genus [57777]"},efg777:{frequencies:[261.6255653006,350.53737850823,400.61414686654,457.84473927605,523.2511306012],description:"Genus decimum [777]"},efg77777:{frequencies:[261.6255653006,299.00064605783,341.71502406609,350.53737850823,400.61414686654,457.84473927605,523.2511306012],description:"Genus [77777]"},eikohole1:{frequencies:[261.6255653006,277.4816601673,305.22982618403,332.97799220076,436.04260883433,475.68284600109,523.2511306012],description:"First eikohole ball <6 9 13 17 20|-epimorphic"},eikohole2:{frequencies:[261.6255653006,266.38239376061,274.70684356563,285.40970760065,299.68019298069,313.95067836072,332.97799220076,348.83408706747,366.27579142084,380.54627680087,392.4383479509,399.57359064092,418.60090448096,428.11456140098,443.97065626768,470.92601754108,488.36772189445,499.46698830115,523.2511306012],description:"Second eikohole ball"},eikohole4:{frequencies:[261.6255653006,274.70684356563,279.79400733536,287.78812183066,305.22982618403,313.95067836072,319.76457981184,335.75280880244,348.83408706747,359.73515228832,366.27579142084,373.05867644715,383.71749577421,392.4383479509,406.97310157871,418.60090448096,419.69101100305,431.68218274599,447.67041173658,457.84473927605,470.92601754108,479.64686971777,488.36772189445,503.62921320365,523.2511306012],description:"Fourth eikohole ball"},eikohole5:{frequencies:[261.6255653006,266.38239376061,274.70684356563,279.06726965397,285.40970760065,287.78812183066,294.32876096318,295.98043751179,299.68019298069,305.22982618403,313.95067836072,321.08592105074,325.57848126297,332.97799220076,342.49164912079,348.83408706747,353.19451315581,355.17652501415,363.24871876447,366.27579142084,374.60024122586,380.54627680087,392.4383479509,399.57359064092,406.97310157871,412.06026534844,418.60090448096,428.11456140098,439.53094970501,443.97065626768,448.50096908674,449.52028947103,456.65553216105,457.84473927605,465.11211608996,466.16918908107,470.92601754108,475.68284600109,488.36772189445,499.46698830115,507.3950357345,513.73747368118,523.2511306012],description:"Fifth eikohole ball"},eikohole6:{frequencies:[261.6255653006,266.38239376061,272.43653907335,274.70684356563,279.06726965397,285.40970760065,287.78812183066,293.02063313667,294.32876096318,295.98043751179,299.00064605783,299.68019298069,305.22982618403,310.77945938738,313.95067836072,317.12189733406,321.08592105074,325.57848126297,329.64821227876,332.97799220076,336.37572681506,342.49164912079,348.83408706747,349.6268918108,353.19451315581,355.17652501415,356.76213450082,363.24871876447,366.27579142084,374.60024122586,380.54627680087,383.71749577421,392.4383479509,399.57359064092,406.97310157871,412.06026534844,418.60090448096,428.11456140098,431.68218274599,439.53094970501,443.97065626768,448.50096908674,449.52028947103,456.65553216105,457.84473927605,465.11211608996,466.16918908107,470.92601754108,475.68284600109,484.33162501929,488.36772189445,499.46698830115,507.3950357345,513.73747368118,523.2511306012],description:"Sixth eikohole ball"},eikosany:{frequencies:[261.6255653006,269.80136421624,274.70684356563,287.78812183066,294.32876096318,305.22982618403,323.76163705949,335.75280880244,343.38355445704,359.73515228832,366.27579142084,377.72190990274,392.4383479509,412.06026534844,419.69101100305,431.68218274599,457.84473927605,470.92601754108,479.64686971777,503.62921320365,523.2511306012],description:"3)6 1.3.5.7.9.11 Eikosany (1.3.5 tonic)"},ekring1:{frequencies:[261.6255653006,294.32876096318,313.95067836072,327.03195662575,353.19451315581,367.91095120397,376.74081403286,408.78994578219,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Single-tie circular mirroring of 3:4:5"},ekring2:{frequencies:[261.6255653006,294.32876096318,299.00064605783,305.22982618403,336.37572681506,343.38355445704,384.42940207435,400.61414686654,448.50096908674,457.84473927605,504.56359022259,515.07533168556,523.2511306012],description:"Single-tie circular mirroring of 6:7:8"},ekring3:{frequencies:[261.6255653006,266.96486255163,299.00064605783,305.10270005901,327.03195662575,333.70607818954,341.71502406609,408.78994578219,418.60090448096,427.14378008261,457.84473927605,467.18850946536,523.2511306012],description:"Single-tie circular mirroring of 4:5:7"},ekring4:{frequencies:[261.6255653006,279.06726965397,313.95067836072,334.88072358477,348.83408706747,376.74081403286,392.4383479509,401.85686830172,436.04260883433,446.50763144636,465.11211608996,502.32108537715,523.2511306012],description:"Single-tie circular mirroring of 4:5:6"},ekring5:{frequencies:[261.6255653006,263.718569823,269.10058145205,305.22982618403,322.92069774245,366.27579142084,373.75080757229,376.74081403286,384.42940207435,439.53094970501,448.50096908674,512.78610798918,523.2511306012],description:"Single-tie circular mirroring of 3:5:7"},ekring5bp:{frequencies:[261.6255653006,282.55561052465,336.37572681506,363.28578496026,366.27579142084,395.57785473451,432.48307733364,512.78610798918,560.62621135843,605.4763082671,610.45965236807,659.29642455751,784.8766959018],description:"Single-tie BP circular mirroring of 3:5:7"},ekring6:{frequencies:[261.6255653006,288.32205155576,299.00064605783,336.37572681506,348.83408706747,384.42940207435,392.4383479509,406.97310157871,432.48307733364,465.11211608996,494.26637409559,512.57253609913,523.2511306012],description:"Single-tie circular mirroring of 6:7:9"},ekring7:{frequencies:[261.6255653006,266.96486255163,290.69507255622,296.62762505737,322.99452506247,336.37572681506,343.24053756638,406.97310157871,415.27867508032,432.48307733364,470.92601754108,480.53675259294,523.2511306012],description:"Single-tie circular mirroring of 5:7:9"},ekring7bp:{frequencies:[261.6255653006,311.45900631024,336.37572681506,400.44729382745,432.48307733364,436.04260883433,470.92601754108,514.86080634958,610.45965236807,667.41215637908,720.80512888941,726.73768139056,784.8766959018],description:"Single-tie BP circular mirroring of 5:7:9"},ellis:{frequencies:[261.6255653006,277.10015133873,293.57875905702,310.98767008297,329.52610437773,349.11112716429,369.96685849926,391.93834696391,415.15022554673,439.86813926913,465.98150356841,493.78915701915,523.2511306012],description:"Alexander John Ellis' imitation equal temperament (1875)"},ellis_24:{frequencies:[261.6255653006,264.89588486686,272.52663052146,275.93321340298,294.32876096318,298.00787047521,306.59245933664,310.42486507835,327.03195662575,331.11985608357,348.83408706747,353.19451315581,367.91095120397,372.50983809402,392.4383479509,397.34382730029,408.78994578219,413.89982010446,436.04260883433,441.49314144476,459.88868900496,465.63729761752,490.54793493862,496.67978412536,523.2511306012],description:"Ellis, from p.421 of Helmholtz, 24 tones of JI for 1 manual harmonium"},ellis_eb:{frequencies:[261.6255653006,277.21587437848,293.6537610003,311.19285946782,329.68548178616,349.2169654334,370.02116610622,391.93834696391,415.32381240723,439.98064151826,466.28928903228,494.02822100775,523.2511306012],description:"Ellis' new equal beating temperament for pianofortes (1885)"},ellis_harm:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,353.19451315581,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Ellis's Just Harmonium"},ellis_mteb:{frequencies:[261.6255653006,273.31920907322,292.34465012884,313.05587813274,326.9349299255,350.18846153218,365.78692922515,391.15004079048,408.78346942429,437.23842445073,468.2723780569,489.17031487243,523.2511306012],description:"Ellis' equal beating meantone tuning (1885)"},enh14:{frequencies:[261.6255653006,267.70988077271,274.08392555301,348.83408706747,392.4383479509,401.56482115906,411.12588832951,523.2511306012],description:"14/11 Enharmonic"},enh15:{frequencies:[261.6255653006,270.64713651786,280.31310567921,356.76213450082,392.4383479509,402.50086969323,413.09299784305,523.2511306012],description:"Tonos-15 Enharmonic"},enh15_inv:{frequencies:[261.6255653006,331.39238271409,340.11323489078,348.83408706747,383.71749577421,488.36772189445,505.80942624783,523.2511306012],description:"Inverted Enharmonic Tonos-15 Harmonia"},enh15_inv2:{frequencies:[261.6255653006,270.34641747729,279.06726965397,348.83408706747,383.71749577421,392.4383479509,401.15920012759,523.2511306012],description:"Inverted harmonic form of the enharmonic Tonos-15"},enh17:{frequencies:[261.6255653006,269.55361273395,277.97716313189,370.63621750918,404.33041910093,413.73345210327,423.58424858192,523.2511306012],description:"Tonos-17 Enharmonic"},enh17_con:{frequencies:[261.6255653006,269.55361273395,277.97716313189,370.63621750918,378.52209447746,386.75083566176,494.18162334558,523.2511306012],description:"Conjunct Tonos-17 Enharmonic"},enh19:{frequencies:[261.6255653006,268.69652652494,276.16031892841,355.06326719367,382.37582620857,389.87339142835,397.67085925691,523.2511306012],description:"Tonos-19 Enharmonic"},enh19_con:{frequencies:[261.6255653006,268.69652652494,276.16031892841,355.06326719367,361.51896296083,368.21375857121,451.89870370104,523.2511306012],description:"Conjunct Tonos-19 Enharmonic"},enh2:{frequencies:[261.6255653006,266.71168334607,277.18263097687,349.22823143301,391.99543598175,399.61600264311,415.30469757995,523.2511306012],description:"1:2 Enharmonic. New genus 2 + 4 + 24 parts"},enh21:{frequencies:[261.6255653006,268.0066766494,274.70684356563,343.38355445704,392.4383479509,399.57359064092,406.97310157871,523.2511306012],description:"Tonos-21 Enharmonic"},enh21_inv:{frequencies:[261.6255653006,336.37572681506,342.60490694126,348.83408706747,398.6675280771,498.33441009638,510.79277034879,523.2511306012],description:"Inverted Enharmonic Tonos-21 Harmonia"},enh21_inv2:{frequencies:[261.6255653006,270.06509966514,279.06726965397,348.83408706747,398.6675280771,411.12588832951,423.58424858192,523.2511306012],description:"Inverted harmonic form of the enharmonic Tonos-21"},enh23:{frequencies:[261.6255653006,267.43946675172,273.51763645063,334.29933343966,376.08675011961,388.21858076863,401.15920012759,523.2511306012],description:"Tonos-23 Enharmonic"},enh23_con:{frequencies:[261.6255653006,267.43946675172,273.51763645063,334.29933343966,343.8507429665,353.96400011258,462.87600014722,523.2511306012],description:"Conjunct Tonos-23 Enharmonic"},enh25:{frequencies:[261.6255653006,269.71707762948,278.32506946872,363.36884069528,408.78994578219,421.97671822677,436.04260883433,523.2511306012],description:"Tonos-25 Enharmonic"},enh25_con:{frequencies:[261.6255653006,269.71707762948,278.32506946872,363.36884069528,373.75080757229,384.74347838324,503.12608711654,523.2511306012],description:"Conjunct Tonos-25 Enharmonic"},enh27:{frequencies:[261.6255653006,269.10058145205,277.01530443593,353.19451315581,392.4383479509,403.65087217807,415.52295665389,523.2511306012],description:"Tonos-27 Enharmonic"},enh27_inv:{frequencies:[261.6255653006,329.45441556372,339.14425131559,348.83408706747,387.59343007496,494.18162334558,508.71637697339,523.2511306012],description:"Inverted Enharmonic Tonos-27 Harmonia"},enh27_inv2:{frequencies:[261.6255653006,266.38239376061,271.31540105247,348.83408706747,387.59343007496,397.28326582684,406.97310157871,523.2511306012],description:"Inverted harmonic form of the enharmonic Tonos-27"},enh29:{frequencies:[261.6255653006,266.21548749886,270.96933548991,344.87006335079,379.35706968587,389.08417403679,399.32323124828,523.2511306012],description:"Tonos-29 Enharmonic"},enh29_con:{frequencies:[261.6255653006,266.21548749886,270.96933548991,344.87006335079,352.8902973822,361.29244731988,474.19633710734,523.2511306012],description:"Conjunct Tonos-29 Enharmonic"},enh31:{frequencies:[261.6255653006,270.34641747729,279.66870773512,337.93302184661,352.6257619269,368.65420565085,377.22755927063,386.2091678247,523.2511306012],description:"Tonos-31 Enharmonic. Tone 24 alternates with 23 as MESE or A"},enh31_con:{frequencies:[261.6255653006,270.34641747729,279.66870773512,337.93302184661,352.6257619269,360.46188996972,368.65420565085,450.57736246214,523.2511306012],description:"Conjunct Tonos-31 Enharmonic"},enh33:{frequencies:[261.6255653006,269.80136421624,278.50463402967,359.73515228832,392.4383479509,401.56482115906,411.12588832951,523.2511306012],description:"Tonos-33 Enharmonic"},enh33_con:{frequencies:[261.6255653006,269.80136421624,278.50463402967,359.73515228832,367.38909169871,375.37581108347,479.64686971777,523.2511306012],description:"Conjunct Tonos-33 Enharmonic"},enh_invcon:{frequencies:[261.6255653006,283.42769574232,370.63621750918,381.53728273004,392.4383479509,501.44900015948,512.35006538034,523.2511306012],description:"Inverted Enharmonic Conjunct Phrygian Harmonia"},enh_mod:{frequencies:[261.6255653006,294.32876096318,305.22982618403,348.83408706747,392.4383479509,406.97310157871,418.60090448096,523.2511306012],description:"Enharmonic After Wilson's Purvi Modulations, See page 111"},enh_perm:{frequencies:[261.6255653006,271.31540105247,279.06726965397,348.83408706747,392.4383479509,406.97310157871,465.11211608996,523.2511306012],description:"Permuted Enharmonic, After Wilson's Marwa Permutations, See page 110."},enn45ji:{frequencies:[261.6255653006,267.07609791103,269.10058145205,274.70684356563,276.85245005354,282.55561052465,288.32205155576,290.69507255622,296.75121990114,299.00064605783,305.22982618403,311.45900631024,313.95067836072,320.49131749323,322.92069774245,329.64821227876,336.37572681506,339.14425131559,346.06556256693,348.83408706747,356.10146388137,363.36884069528,366.27579142084,373.75080757229,376.74081403286,384.42940207435,392.4383479509,395.57785473451,403.65087217807,406.97310157871,415.27867508032,423.93031414449,427.32175665765,436.04260883433,439.53094970501,448.50096908674,457.84473927605,461.31528248922,470.92601754108,474.80195184183,484.4917875937,494.47231841813,498.33441009638,508.71637697339,512.78610798918,523.2511306012],description:"Detempered Ennealimma[45], Hahn reduced"},enn72synch:{frequencies:[195.99771799087,197.54967854522,199.11392792408,201.62391554947,203.22042578925,204.82957760946,207.41161549338,209.05395423619,211.68924370912,213.36545381699,215.05493658943,217.76587316352,219.49019959291,221.22817968434,224.01693484168,225.790758792,228.63703016722,230.44743589451,232.27217821307,235.20015301436,237.06252857463,238.93964952543,241.95167308427,243.86750892427,246.94165062806,248.89699839908,250.8678291188,254.03021536301,256.04169222048,258.06909647124,261.3222603528,263.39147750593,266.71173418544,268.8236265844,270.95224149283,274.36780754746,276.54032271274,278.73004041423,282.24365173996,284.47852987378,288.0646054292,290.34557537779,292.64460663558,296.33362372129,298.68006816723,301.0450940916,304.84000597616,307.25380610435,311.12698372207,313.59056753865,316.0736586482,320.05801564518,322.59231767928,325.14668697146,329.24541662461,331.85246687263,336.03572815421,338.69654584276,341.37843257302,345.68177614255,348.4189737305,351.17784515594,355.60471802638,358.42048803112,362.93866010991,365.81250216232,368.70910003837,373.35696816148,376.31330506793,379.29305101359,384.07434037944,387.11553797119,391.99543598174],description:"Poptimal synchonized beating ennealimmal tuning, TM 10-10-2005"},ennea45:{frequencies:[261.6255653006,267.02028728287,269.13615104392,274.68574138534,276.8623300691,282.57123430547,288.39787286736,290.68311542614,296.67700440585,299.02785016604,305.1938252949,311.48692526882,313.95512370264,320.42888174436,322.96795420876,329.62755691287,336.42448069667,339.09030198792,346.08234767737,348.824677577,356.01744619623,363.3585507705,366.23777597441,373.78960287068,376.751482929,384.52012478698,392.44893391322,395.5586690753,403.715093104,406.91412394911,415.30469757995,423.86828492968,427.22700928979,436.03643483576,439.49155400205,448.55387459245,457.80308677504,461.43068321685,470.94538888861,474.67712392136,484.46499932732,494.45467284607,498.37269363637,508.649143962,512.67967026301,523.2511306012],description:"Ennealimmal-45, in a 7-limit least-squares tuning, g=48.999, G.W. Smith"},epimore_enh:{frequencies:[261.6255653006,265.11390617127,279.06726965397,348.83408706747,392.4383479509,397.67085925691,418.60090448096,523.2511306012],description:"New Epimoric Enharmonic, Dorian mode of the 4th new Enharmonic on Hofmann's list"},eratos_chrom:{frequencies:[261.6255653006,275.39533189537,290.69507255622,348.83408706747,392.4383479509,413.09299784305,436.04260883433,523.2511306012],description:"Dorian mode of Eratosthenes's Chromatic. same as Ptol. Intense Chromatic"},eratos_diat:{frequencies:[261.6255653006,275.62199471997,310.07474405997,348.83408706747,392.4383479509,413.43299207996,465.11211608996,523.2511306012],description:"Dorian mode of Eratosthenes's Diatonic, Pythagorean"},eratos_enh:{frequencies:[261.6255653006,268.33391312882,275.39533189537,348.83408706747,392.4383479509,402.50086969323,413.09299784305,523.2511306012],description:"Dorian mode of Eratosthenes's Enharmonic"},erlangen:{frequencies:[261.6255653006,275.62199471997,293.99679436797,310.07474405997,327.03195662575,348.83408706747,367.49599295996,392.4383479509,413.43299207996,440.99519155196,465.11211608996,490.54793493862,523.2511306012],description:"Anonymus: Pro clavichordiis faciendis, Erlangen 15th century"},erlangen2:{frequencies:[261.6255653006,275.93321340298,294.32876096318,310.07474405997,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.89982010446,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:"Revised Erlangen"},erlich1:{frequencies:[261.6255653006,278.64199172491,296.7651860139,326.1838132033,347.39918201406,369.99442271164,394.05928374402,433.12277132725,461.29357245868,491.2966347616,523.2511306012],description:"Asymmetrical Major decatonic mode of 22-tET, Paul Erlich"},erlich10:{frequencies:[261.6255653006,274.70684356563,299.00064605783,313.95067836072,348.83408706747,366.27579142084,392.4383479509,418.60090448096,448.50096908674,470.92601754108,523.2511306012],description:"Canonical JI interpretation of the Pentachordal decatonic mode of 22-tET"},erlich10s1:{frequencies:[261.6255653006,280.31310567921,299.00064605783,313.95067836072,348.83408706747,366.27579142084,392.4383479509,418.60090448096,448.50096908674,470.92601754108,523.2511306012],description:"Superparticular version of erlich10 using 50/49 decatonic comma"},erlich10s2:{frequencies:[261.6255653006,274.70684356563,293.02063313667,313.95067836072,348.83408706747,366.27579142084,392.4383479509,418.60090448096,448.50096908674,470.92601754108,523.2511306012],description:"Other superparticular version of erlich10 using 50/49 decatonic comma"},erlich11:{frequencies:[261.6255653006,280.31310567921,305.22982618403,327.03195662575,348.83408706747,373.75080757229,392.4383479509,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"Canonical JI interpretation of the Symmetrical decatonic mode of 22-tET"},erlich11s1:{frequencies:[261.6255653006,274.70684356563,305.22982618403,327.03195662575,348.83408706747,373.75080757229,392.4383479509,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"Superparticular version of erlich11 using 50/49 decatonic comma"},erlich11s2:{frequencies:[261.6255653006,280.31310567921,305.22982618403,311.45900631024,348.83408706747,373.75080757229,392.4383479509,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"Other superparticular version of erlich11 using 50/49 decatonic comma"},erlich12:{frequencies:[261.6255653006,267.01308914069,282.57123920205,288.39008844866,305.19382000629,311.47852302926,329.62755691287,336.41541160581,356.01745236555,363.34874301751,384.52011812375,392.4383479509,415.30469757995,423.85685859121,448.5538823653,457.7907297806,484.46499093218,494.44133512215,523.2511306012],description:"Two 9-tET scales 3/2 shifted, Paul Erlich, TL 5-12-2001"},erlich13:{frequencies:[261.6255653006,269.80136421624,294.32876096318,327.03195662575,343.38355445704,359.73515228832,392.4383479509,441.49314144476,457.84473927605,490.54793493862,523.2511306012],description:"Just scale by Paul Erlich (2002)"},erlich2:{frequencies:[261.6255653006,278.64199172491,296.7651860139,316.06713361714,347.39918201406,369.99442271164,394.05928374402,419.68935090103,446.98642698175,476.05893615592,523.2511306012],description:"Asymmetrical Minor decatonic mode of 22-tET, Paul Erlich"},erlich3:{frequencies:[261.6255653006,278.64199172491,296.7651860139,326.1838132033,347.39918201406,369.99442271164,394.05928374402,419.68935090103,461.29357245868,491.2966347616,523.2511306012],description:"Symmetrical Major decatonic mode of 22-tET, Paul Erlich"},erlich4:{frequencies:[261.6255653006,278.64199172491,296.7651860139,316.06713361714,347.39918201406,369.99442271164,394.05928374402,419.68935090103,446.98642698175,491.2966347616,523.2511306012],description:"Symmetrical Minor decatonic mode of 22-tET, Paul Erlich"},erlich5:{frequencies:[261.6255653006,269.33066959279,278.10477655849,287.16472157287,295.62197660533,306.17967660611,315.19693888202,326.45372959864,335.05049156411,348.07025322573,357.23626005287,368.87410717392,380.89108570115,393.29954676976,406.11224388345,419.34234602259,433.00345117936,444.40607048653,461.67529188567,473.83294924974,490.75518955849,505.2083639382,523.2511306012],description:"Unequal 22-note compromise between decatonic & Indian srutis, Paul Erlich"},erlich6:{frequencies:[261.6255653006,274.70684356563,280.31310567921,285.40970760065,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,343.38355445704,348.83408706747,359.73515228832,366.27579142084,373.75080757229,392.4383479509,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,490.54793493862,523.2511306012],description:"Scale of consonant tones against 1/1-3/2 drone. TL 23-9-1998"},erlich7:{frequencies:[261.6255653006,272.64118737561,277.98432293805,281.84855879469,292.47977325983,303.51199286577,307.73108663824,313.76190292287,326.97270111135,337.05955506058,340.85784563832,350.05627231138,365.1325261687,373.60234843661,378.13992750117,391.18115131013,406.9458559663,413.62886206386,420.42161880722,437.36472209676,452.44848028305,457.94368329907,468.56640608675,488.7466646507,501.93603498211,507.59230220159,523.2511306012],description:"Meantone-like circle of sinuoidally varying fifths, TL 08-12-99"},erlich8:{frequencies:[261.6255653006,263.902226729,277.18263097687,279.59466973861,293.66476791741,296.22023396764,311.12698372208,313.83440569119,329.62755691287,332.49597057,349.22823143301,352.26720984209,369.99442271164,373.21410818061,391.99543598175,395.40657391157,415.30469757995,418.91867232636,440,443.82887286778,466.16376151809,470.22031101449,493.88330125613,498.18106573801,523.2511306012],description:"Two 12-tET scales 15 cents shifted, Paul Erlich"},erlich9:{frequencies:[261.6255653006,271.31540105247,280.31310567921,290.69507255622,302.70726563706,308.34441624714,319.76457981184,332.97799220076,345.34574619679,356.76213450082,369.97554688974,383.71749577421,396.40237166758,411.12588832951,428.11456140098,436.04260883433,452.23847716247,470.92601754108,488.36772189445,504.56359022259,523.2511306012],description:"11-limit periodicity block, u.v.: 9801/9800 243/242 126/125 100/99"},erlich_bpf:{frequencies:[261.6255653006,269.93113880221,277.4816601673,282.55561052465,293.6613488068,301.87565226992,311.45900631024,319.76457981184,328.70904358281,336.37572681506,347.05432131712,356.76213450082,366.27579142084,377.90359432309,388.47432423422,400.44729382745,411.12588832951,422.62591317789,436.04260883433,447.67041173658,458.69417292962,470.92601754108,485.87604984397,499.46698830115,512.78610798918,528.59042785223,543.37617408586,560.62621135843,575.57624366132,591.67627844905,610.45965236807,624.69777837082,642.17184210147,659.29642455751,680.22646978156,699.2537836216,726.73768139056,740.02659899313,760.72664372021,784.8766959018],description:"Erlich's 39-tone Triple Bohlen-Pierce scale"},erlich_bpp:{frequencies:[261.6255653006,268.60224704195,277.4816601673,282.55561052465,293.6613488068,299.68019298069,311.45900631024,319.76457981184,323.65460841914,336.37572681506,345.34574619679,356.76213450082,366.27579142084,380.67211882362,385.30310526088,400.44729382745,411.12588832951,419.55227017296,436.04260883433,447.67041173658,458.69417292962,470.92601754108,489.43558134466,499.46698830115,512.78610798918,528.59042785223,539.42434736524,560.62621135843,575.57624366132,594.60355750136,610.45965236807,629.27431887171,642.17184210147,659.29642455751,685.20981388252,699.2537836216,720.80512888941,740.02659899313,764.49028821604,784.8766959018],description:"Periodicity block for erlich_bpf, 1625/1617 1331/1323 275/273 245/243"},erlich_bpp2:{frequencies:[261.6255653006,268.60224704195,277.4816601673,282.55561052465,293.92501780685,299.68019298069,311.45900631024,319.76457981184,326.02570445152,336.37572681506,345.34574619679,356.76213450082,366.27579142084,377.90359432309,385.30310526088,400.44729382745,411.12588832951,422.62591317789,436.04260883433,447.67041173658,458.69417292962,470.92601754108,485.87604984397,499.46698830115,512.78610798918,528.59042785223,543.37617408586,560.62621135843,575.57624366132,594.60355750136,610.45965236807,629.83932387181,642.17184210147,659.29642455751,685.20981388252,698.62650953896,726.73768139056,740.02659899313,764.49028821604,784.8766959018],description:"Improved shape for erlich_bpp"},erlich_bppe:{frequencies:[261.6255653006,269.03526454087,276.77324548748,284.61195549492,292.79795257063,301.09050901183,309.7504615497,318.52314490095,327.68449417797,337.10934179701,346.6568752383,356.62740568226,366.72772736951,377.27553481706,387.96064596243,399.11915372018,410.59860200806,422.22748385656,434.37157296247,446.67374500165,459.5209564409,472.53540627884,486.12644973042,499.89441151621,514.27235352402,529.06383329425,544.0478609495,559.69574261012,575.54731703113,592.10118472076,608.870542156,626.38285104305,644.39884822068,662.64936456684,681.70845767885,701.01565227402,721.17823493702,741.60327945962,762.93324174612,784.8766959018],description:"LS optimal 3:5:7:11:13 tempering, virtually equal, g=780.2702 cents"},erlich_bppm:{frequencies:[261.6255653006,269.3148593258,276.83859227209,284.97500405989,292.93622770824,301.54575630263,309.96990811138,319.08006614158,327.99406628962,337.15709295818,347.06629484351,356.76213450082,367.24753706379,377.50717076432,388.60227773252,399.45849178361,410.61798882758,422.6862401977,434.49464068244,447.26463523836,459.75967424319,473.27221959449,486.49381977384,500.79209531182,514.78250488433,529.16376146212,544.7161244152,559.93362036345,576.39032675477,592.49269103014,609.9063234692,626.94500947499,644.45969779399,663.40066444061,681.93379843592,701.97614206495,721.5869464624,742.79471409673,763.54584931731,784.8766959018],description:"MM optimal 3:5:7:11:13 tempering, g=780.352 cents"},erlich_paj:{frequencies:[261.6255653006,269.74106841426,278.59741216196,287.23937405609,296.67040683594,305.87298460253,315.91563888094,325.71519477697,336.4093235789,346.84458402385,358.23265591403,369.99442271164,381.47147728046,393.99623872149,406.21781843768,419.55531290213,432.56972318844,446.77218107119,460.63084592459,475.75462791404,490.51231476219,506.61748047856,523.2511306012],description:"Erlich's Pajara or Twintone, with RMS optimal generator"},erlich_paj2:{frequencies:[261.6255653006,270.25447814202,278.68577354399,287.87753105276,296.85845221806,306.64959036092,316.21614384055,326.645747324,336.83612131731,347.94582350257,358.80069640371,369.99442271164,382.1975482805,394.12120058634,407.1203087173,419.82124923186,433.66800958456,447.19715926063,461.9468459571,476.35821106408,492.06970256841,507.42081104304,523.2511306012],description:"Erlich's Pajara or Twintone with minimax optimal generator"},escapade:{frequencies:[261.6255653006,270.11362843741,278.8770761192,287.9248395776,297.26614463769,306.91051483225,316.86778450163,327.1481015562,337.76194863153,348.72014864112,360.03386958939,371.71464785337,383.77439429365,392.56657056143,405.30282760495,418.45229174958,432.02837124332,446.04490958069,460.51619165905,475.45697355792,490.88248752006,506.80846290374,523.2511306012],description:"Escapade temperament, g=55.275493, 5-limit"},"et-mix6":{frequencies:[261.6255653006,293.66476791741,300.52885648597,311.12698372208,329.62755691287,345.21700307457,369.99442271164,396.55020354877,415.30469757995,440,455.51656649021,466.16376151809,523.2511306012],description:"Mix of equal temperaments from 1-6 (= 4-6)"},euler:{frequencies:[261.6255653006,272.52663052146,294.32876096318,306.59245933664,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,436.04260883433,459.88868900496,490.54793493862,523.2511306012],description:"Euler's Monochord (a mode of Ellis's duodene) (1739), genus [33355]"},euler20:{frequencies:[261.6255653006,274.58143914872,285.65749968142,293.61100773131,305.45468261618,320.58100381398,326.62388782443,329.50688232588,342.79852229325,366.55580177366,381.34192228364,391.95955371998,407.7704102616,411.36965665618,427.96347506501,439.87918162894,457.62301915088,489.33808574423,509.07699553894,513.57043963064,523.2511306012],description:"Genus [3333555] tempered by 225/224-planar"},euler24:{frequencies:[261.6255653006,274.58143914872,285.65749968142,293.61100773131,305.45468261618,308.1508239679,320.58100381398,326.62388782443,329.50688232588,342.79852229325,366.55580177366,381.34192228364,384.70789368407,391.95955371998,407.7704102616,411.36965665618,427.96347506501,439.87918162894,457.62301915088,480.28481865546,489.33808574423,493.65730140218,509.07699553894,513.57043963064,523.2511306012],description:"Genus [33333555] tempered by 225/224-planar"},euler_diat:{frequencies:[261.6255653006,294.32876096318,327.03195662575,348.83408706747,367.91095120397,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"Euler's genus diatonicum veterum correctum"},euler_enh:{frequencies:[261.6255653006,267.90457886781,275.62199471997,348.83408706747,392.4383479509,401.85686830172,413.43299207996,523.2511306012],description:"Euler's Old Enharmonic, From Tentamen Novae Theoriae Musicae"},euler_gm:{frequencies:[261.6255653006,271.31540105247,279.06726965397,289.40309445597,348.83408706747,361.75386806997,372.08969287196,385.87079260796,523.2511306012],description:"Euler's Genus Musicum, Octony based on Archytas's Enharmonic"},exptriad2:{frequencies:[261.6255653006,306.59245933664,327.03195662575,367.91095120397,392.4383479509,459.88868900496,490.54793493862,523.2511306012],description:"Two times expanded major triad"},exptriad3:{frequencies:[261.6255653006,269.46602871384,275.93321340298,279.06726965397,287.4304306281,294.32876096318,297.67175429757,303.14928230307,306.59245933664,313.95067836072,323.35923445661,327.03195662575,344.91651675372,348.83408706747,359.28803828513,367.91095120397,372.08969287196,378.93660287884,383.2405741708,392.4383479509,404.19904307077,408.78994578219,418.60090448096,431.14564594215,436.04260883433,446.50763144636,459.88868900496,490.54793493862,505.24880383846,517.37477513058,523.2511306012],description:"Three times expanded major triad"},iivv17:{frequencies:[261.6255653006,269.80136421624,277.97716313189,283.42769574232,294.32876096318,305.22982618403,318.85615771011,327.03195662575,343.38355445704,348.83408706747,359.73515228832,367.91095120397,370.63621750918,392.4383479509,416.96574469783,425.14154361347,436.04260883433,441.49314144476,457.84473927605,479.64686971777,490.54793493862,523.2511306012],description:"17-limit IIVV"},"indian-ayyar":{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,392.4383479509,406.97310157871,418.60090448096,436.04260883433,441.49314144476,457.84473927605,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Carnatic sruti system, C.Subrahmanya Ayyar, 1976. alt:21/20 25/16 63/40 40/21"},"indian-dk":{frequencies:[261.6255653006,294.32876096318,305.22982618403,313.95067836072,348.83408706747,392.4383479509,406.97310157871,418.60090448096,465.11211608996,523.2511306012],description:"Raga Darbari Kanada"},"indian-ellis":{frequencies:[261.6255653006,269.10058145205,277.01530443593,285.40970760065,294.32876096318,303.82323712328,313.95067836072,324.77656382143,336.37572681506,348.83408706747,358.01393146398,367.68998366571,377.90359432309,388.70083987518,400.13321751856,412.25846653428,425.14154361347,438.85578695585,453.48431318771,469.12170329763,485.87604984397,503.87145909745,523.2511306012],description:"Ellis's Indian Chromatic, theoretical #74 of App.XX, p.517 of Helmholtz"},"indian-hahn":{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,353.19451315581,367.91095120397,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Indian shrutis Paul Hahn proposal"},"indian-hrdaya1":{frequencies:[261.6255653006,282.55561052465,294.32876096318,313.95067836072,328.55303549378,348.83408706747,375.07381928051,392.4383479509,428.11456140098,441.49314144476,470.92601754108,492.82955324067,523.2511306012],description:"From Hrdayakautaka of Hrdaya Narayana (17th c) Bhatkande's interpretation"},"indian-hrdaya2":{frequencies:[261.6255653006,282.55561052465,294.32876096318,313.95067836072,330.47439827444,348.83408706747,376.74081403286,392.4383479509,428.11456140098,448.50096908674,470.92601754108,495.71159741166,523.2511306012],description:"From Hrdayakautaka of Hrdaya Narayana (17th c) Levy's interpretation"},"indian-invrot":{frequencies:[261.6255653006,267.90457886781,279.06726965397,313.95067836072,327.03195662575,334.88072358477,348.83408706747,392.4383479509,418.60090448096,446.50763144636,490.54793493862,502.32108537715,523.2511306012],description:"Inverted and rotated North Indian gamut"},"indian-magrama":{frequencies:[261.6255653006,294.32876096318,327.03195662575,367.91095120397,392.4383479509,441.49314144476,490.54793493862,523.2511306012],description:"Indian mode Ma-grama (Sa Ri Ga Ma Pa Dha Ni Sa)"},"indian-newbengali":{frequencies:[261.6255653006,269.13627541126,277.02257024271,285.46954808622,294.32876096318,303.84527498141,313.95067836072,324.71413568646,336.35938765066,348.83408706747,358.01090280364,367.91095120397,377.98706287655,388.6137256405,400.23209335925,412.19781491431,425.25755219187,438.98455767189,453.41648894489,469.13512554326,485.39868175205,503.9696508909,523.2511306012],description:"Modern Bengali scale,S.M. Tagore: The mus. scales of the Hindus,Calcutta 1884"},"indian-old2ellis":{frequencies:[261.6255653006,270.06509966514,277.97716313189,285.40970760065,294.32876096318,305.22982618403,316.13089140489,327.03195662575,337.93302184661,348.83408706747,359.73515228832,370.63621750918,380.54627680087,392.4383479509,404.33041910093,415.52295665389,428.11456140098,441.49314144476,457.84473927605,474.19633710734,490.54793493862,505.80942624783,523.2511306012],description:"Ellis Old Indian Chrom2, Helmholtz, p. 517. This is a 4 cent appr. to #73"},"indian-oldellis":{frequencies:[261.6255653006,269.44737349144,277.4816601673,285.79952600623,294.32876096318,304.84150796353,315.71315096976,327.03195662575,337.72216249472,348.83408706747,359.25382662183,369.99442271164,381.0561299374,392.4383479509,404.18156579781,416.22249025095,428.71043212875,441.49314144476,457.27414749797,473.58203588493,490.54793493862,506.59641128799,523.2511306012],description:"Ellis Old Indian Chromatic, Helmholtz, p. 517. This is a 0.5 cent appr. to #73"},"indian-raja":{frequencies:[261.6255653006,294.32876096318,327.03195662575,348.83408706747,392.4383479509,490.54793493862,523.2511306012],description:"A folk scale from Rajasthan, India"},"indian-sagrama":{frequencies:[261.6255653006,294.32876096318,327.03195662575,348.83408706747,392.4383479509,441.49314144476,490.54793493862,523.2511306012],description:"Indian mode Sa-grama (Sa Ri Ga Ma Pa Dha Ni Sa), inverse of Didymus' diatonic"},"indian-srutiharm":{frequencies:[261.6255653006,275.04226095704,278.87560257317,292.29229825722,294.20896982953,310.50067090621,313.3756771183,327.75070817877,332.5423844325,351.70909240436,354.58409877157,369.9174668925,374.70914348171,393.87585105695,414.95923028882,421.66757847392,437.95928040996,441.79262140873,467.66767825558,473.41768959156,493.54273382289,499.29274676062,523.2511306012],description:"B. Chaitanya Deva's sruti harmonium. The Music of India, 1981, p. 109"},"indian-srutivina":{frequencies:[261.6255653006,268.56758546278,278.98051393788,288.52577197574,297.52863491406,305.33829130574,314.01573591759,327.57422802312,336.57725592546,350.35262131413,358.2707318239,366.40588882483,378.77125721528,394.82459335461,403.28512412878,416.95215854696,428.77531684666,444.28620821491,453.93981227417,469.5594057965,487.34812384257,504.37765306036,529.32520658991],description:"Raja S.M. Tagore's sruti vina, measured by Ellis and Hipkins, 1886. 1/1=241.2"},"indian-srutivina2":{frequencies:[261.6255653006,275.04226095704,278.87560257317,292.29229825722,294.20896982953,310.50067090621,313.3756771183,327.75070817877,332.5423844325,351.70909240436,354.58409877157,369.9174668925,374.70914348171,393.87585105695,414.95923028882,421.66757847392,437.95928040996,441.79262140873,467.66767825558,473.41768959156,493.54273382289,499.29274676062,523.2511306012],description:"S. Ramanathan's sruti vina, 1973. In B.C. Deva, The Music of India, p. 110"},"indian-vina":{frequencies:[261.6255653006,276.70272600503,292.81785438923,313.29104303136,329.05685050583,352.26720984209,369.14054089803,390.18821123181,411.0090584005,435.70052664441,465.35666077712,491.60634075178,525.37110555681],description:"Observed South Indian tuning of a vina, Ellis"},"indian-vina2":{frequencies:[261.6255653006,277.02257024271,292.81785438923,308.97787266236,326.21810583671,344.81842302716,363.84824628932,386.37547528213,409.11417474979,432.19134773437,455.25352578019,480.93331155807,507.76825077597,539.82938999168,571.59905201246,602.44805673853,637.90290877605,678.5727631795,715.19510239543,756.4109196702,799.53998816902,846.10508618474,890.73947019126,943.16064703194,1001.55531043729],description:"Observed tuning of old vina in Tanjore Palace, Ellis and Hipkins. 1/1=210.7 Hz"},"indian-vina3":{frequencies:[261.6255653006,275.62199471997,294.32876096318,310.07474405997,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.43299207996,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:"Tuning of K.S. Subramanian's vina (1983)"},indian:{frequencies:[261.6255653006,275.62199471997,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,331.11985608357,348.83408706747,353.19451315581,367.91095120397,372.50983809402,392.4383479509,413.43299207996,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,496.67978412536,523.2511306012],description:"Indian shruti scale"},indian2:{frequencies:[261.6255653006,275.62199471997,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,331.11985608357,348.83408706747,353.19451315581,367.91095120397,372.08969287196,392.4383479509,413.43299207996,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,496.67978412536,523.2511306012],description:"Indian shruti scale with tritone 64/45 schisma lower (Mr.Devarajan, Madurai)"},indian2_sm:{frequencies:[261.6255653006,275.80107697063,279.12844116922,290.7446524607,294.25230137258,310.19560923413,313.9379197281,327.00276442799,330.9478443499,348.87940629173,353.08841191408,367.78254402461,372.21960384438,392.38737044642,413.64787586584,418.63827382983,436.06032987759,441.3211172644,465.23297251763,470.84571179248,490.44043044945,496.35728163707,523.2511306012],description:"Shruti/Mathieu's Magic Mode scale in 289-equal (schismic) temperament"},indian3:{frequencies:[261.6255653006,270.06509966514,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,331.11985608357,348.83408706747,353.19451315581,367.91095120397,372.08969287196,392.4383479509,413.43299207996,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,506.89953276991,523.2511306012],description:"Indian shruti scale with 32/31 and 31/16 and tritone schisma lower"},indian4:{frequencies:[261.6255653006,275.93321340298,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,330.74639366397,348.83408706747,367.91095120397,372.08969287196,387.59343007496,392.4383479509,413.89982010446,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,496.11959049595,523.2511306012],description:"Indian shruti scale according to Firoze Framjee: Text book of Indian music"},indian5:{frequencies:[261.6255653006,275.62199471997,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,331.11985608357,348.83408706747,353.19451315581,367.91095120397,372.08969287196,387.59343007496,392.4383479509,413.43299207996,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,496.67978412536,523.2511306012],description:"23 Shrutis, Amit Mitra, 1/1 no. 12:2, Table C."},indian6:{frequencies:[146.8323839587,148.66778875818,150.35636117371,151.0621234143,152.23581568838,152.95039995698,154.68761437624,154.86227995644,156.62120955595,158.5789746754,159.32333328852,163.14709328744,165.18643195354,167.06262352634,169.15090632042,169.94488884109,172.0691999516,174.02356617327,176.19886075044,178.40134650982,179.23874994958,180.42763340845,181.27454809716,183.54047994838,185.62513725149,185.83473594773,187.94545146714,188.82765426788,190.29476961048,191.18799994622,193.3595179703,193.57784994555,195.77651194493,198.22371834425,200.47514823161,202.98108758451,203.93386660931,206.48303994192,208.82827940793,209.0640779412,211.43863290053,212.43111105136,214.08161581178,215.0864999395,217.52945771659,220.24857593805,223.00168313728,225.53454176056,226.59318512145,228.35372353257,229.42559993547,232.03142156437,232.29341993466,234.93181433392,237.86846201309,238.98499993278,240.57017787793,241.69939746288,244.72063993117,247.77964793031,250.59393528951,253.72635948063,254.91733326163,258.1037999274,261.03534925991,264.29829112566,267.60201976473,270.64145011268,271.91182214574,275.31071992256,278.43770587724,278.75210392159,281.9181772007,283.24148140181,285.44215441571,286.78199991934,290.03927695546,293.6647679174],description:"Shrutis calculated by generation method, Amit Mitra, 1/1 no. 12:2, Table B."},indian_12:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,441.49314144476,470.92601754108,490.54793493862,523.2511306012],description:"North Indian Gamut, modern Hindustani gamut out of 22 or more shrutis"},indian_12c:{frequencies:[261.6255653006,277.01530443593,294.32876096318,313.95067836072,328.55303549378,348.83408706747,369.35373924791,392.4383479509,415.52295665389,441.49314144476,470.92601754108,492.82955324067,523.2511306012],description:"Carnatic gamut. Kuppuswami: Carnatic music and the Tamils, p. v"},indian_a:{frequencies:[261.6255653006,290.79521372391,318.76727400207,355.94891173479,388.6137256405,432.69092326853,486.52148746092,523.2511306012],description:"One observed indian mode"},indian_b:{frequencies:[261.6255653006,290.79521372391,305.95868600104,356.15457528086,388.83826257328,432.94092754357,461.60862817266,523.2511306012],description:"Observed Indian mode"},indian_c:{frequencies:[261.6255653006,278.94941459687,313.65318017499,356.15457528086,388.83826257328,422.07621250312,470.76384471612,523.2511306012],description:"Observed Indian mode"},indian_d:{frequencies:[261.6255653006,289.28740724512,320.24370022528,344.61930560862,391.31674786192,442.03793673691,485.39868175205,523.2511306012],description:"Indian D (Ellis, correct)"},indian_e:{frequencies:[261.6255653006,275.58617649731,323.21709932123,347.81902735497,393.58362272115,410.77171881178,488.21056770985,523.2511306012],description:"Observed Indian mode"},indian_g:{frequencies:[261.6255653006,275.48458755707,279.57748987366,290.07776015425,294.38747470873,309.98198497505,314.58741860623,326.40257913196,331.25197518754,348.79929894143,353.98144532328,367.27615246113,372.73281132023,392.47748849606,413.26809526256,419.40806105693,435.16003737285,441.62525396027,465.0193523796,471.92819182319,489.65270022124,496.92751979948,523.2511306012],description:"Shruti/Mathieu's Magic Mode scale in 94-et (garibaldi) temperament"},indian_rat:{frequencies:[261.6255653006,269.55361273395,277.4816601673,285.40970760065,294.32876096318,302.93486508491,315.75499260417,327.03195662575,337.58137458142,348.83408706747,359.73515228832,370.63621750918,380.54627680087,392.4383479509,404.33041910093,416.22249025095,428.77523202043,441.49314144476,457.84473927605,473.41768959156,490.54793493862,506.37206187213,523.2511306012],description:"Indian Raga, From Fortuna, after Helmholtz, ratios by JC"},indian_rot:{frequencies:[261.6255653006,272.52663052146,279.06726965397,306.59245933664,327.03195662575,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,490.54793493862,510.98743222773,523.2511306012],description:"Rotated North Indian Gamut"},ionic:{frequencies:[261.6255653006,294.32876096318,327.03195662575,348.83408706747,392.4383479509,436.04260883433,470.92601754108,523.2511306012],description:"Ancient greek Ionic"},iran_diat:{frequencies:[261.6255653006,297.21429859784,337.6441411202,347.13660997509,394.35734781054,448.00148789644,460.59652406882,523.2511306012],description:"Iranian Diatonic from Dariush Anooshfar, Safi-a-ddin Armavi's scale from 125 ET"},iraq:{frequencies:[261.6255653006,290.3675288125,326.6631048533,348.83408706747,387.1561215731,435.55129321875,465.11211608996,516.20736538157,523.2511306012],description:"Iraq 8-tone scale, Ellis"},isfahan_5:{frequencies:[261.6255653006,283.42769574232,305.22982618403,327.03195662575,348.83408706747,523.2511306012],description:"Isfahan (IG #2, DF #8), from Rouanet"},islamic:{frequencies:[261.6255653006,283.42769574232,305.22982618403,330.6656450327,348.83408706747,523.2511306012],description:"Islamic Genus (DF#7), from Rouanet"},italian:{frequencies:[261.6255653006,274.68983337859,292.34127285051,309.02606224197,326.6631048533,348.44038788768,366.66693712906,391.11111150212,411.56972129721,437.02884834934,464.06284405662,489.44164088633,523.2511306012],description:"Italian organ temperament, G.C. Klop (1974), 1/12 P.comma, also d'Alembert/Rousseau (1752/67)"},iter1:{frequencies:[261.6255653006,264.43874342211,268.51044859798,278.54662176283,304.33994330886,376.91818729747,631.61998662719],description:"McLaren style, IE= 2.414214, PD=5, SD=0"},iter10:{frequencies:[261.6255653006,277.06070189651,293.38358189778,297.59908052943,301.91391280887,310.68035879446,328.97472072452,338.5155215149,348.35227203008,368.89204707385,413.65123162392,438.0707139917,463.89070822207,520.1365405381,535.27989222422,550.79066379074,583.29634230953,654.0639132515],description:"Iterated 5/2 Scale, IE=5/2, PD=4, SD=3"},iter11:{frequencies:[261.6255653006,278.87608544381,297.26403435806,306.90779184711,316.86440944623,337.75715313333,360.02747892105,383.76621672426,396.21625406084,409.07019206122,436.04260883433],description:"Binary 5/3 Scale #2"},iter12:{frequencies:[261.6255653006,297.26403435806,306.90779184711,316.86440944623,337.75715313333,360.02747892105,383.76621672426,396.21625406084,409.07019206122,436.04260883433],description:"Binary 5/3 Scale #4"},iter13:{frequencies:[261.6255653006,297.26403435806,337.75715313333,383.76621672426,409.07019206122,436.04260883433],description:"Binary 5/3 Scale #6"},iter14:{frequencies:[261.6255653006,280.22072913446,300.13755324878,344.3186075731,368.79121945838,395.0032340925,453.14877154631,519.85349135637,596.37732215892,638.76512932755,684.16567043124,784.8766959018],description:"Binary Divided 3/1 Scale #2"},iter15:{frequencies:[261.6255653006,285.30470202322,311.12698372208,324.90175210669,339.28638158975,369.99442271164,403.48177901006,440,459.48046426806,479.82340237272,523.2511306012],description:"Binary Division Scale"},iter16:{frequencies:[261.6255653006,273.20871865617,285.30470202322,311.12698372208,324.90175210669,339.28638158975,369.99442271164,403.48177901006,440,459.48046426806,479.82340237272,523.2511306012],description:"Binary Division Scale 4+2"},iter17:{frequencies:[261.6255653006,278.49896488475,296.46060526524,301.12918013362,305.87127435301,315.58067012184,335.93387506143,346.5975621448,357.59974896504,380.66295170881,431.34763334053,459.16716607109,488.78090454553,553.8613271114,571.44277158458,589.58231097183,627.60710380636,711.17202040031],description:"Binary E Scale #2"},iter18:{frequencies:[261.6255653006,296.46060526524,335.93387506143,357.59974896504,380.66295170881,431.34763334053,488.78090454553,553.8613271114,589.58231097183,627.60710380636,711.17202040031],description:"Binary E Scale #4"},iter19:{frequencies:[261.6255653006,322.51878830959,331.06584352035,339.83940187549,358.09020513941,397.58488163802,418.936859706,441.43552612833,490.12256936272,604.19836236377,670.83693141722,744.82523718317,918.18295398723,967.49323514067,1019.45167961503,1131.88958971281,1395.33634826987],description:"Binary Kidjel Ratio scale #2, IE=16/3"},iter2:{frequencies:[261.6255653006,264.43874342211,268.51044859798,278.54662176283,304.33994330886,376.91818729747,466.76379263857,529.06503205232,631.63886479716],description:"Iterated 1 + SQR(2) Scale, IE=2.414214, PD=5, SD=1"},iter20:{frequencies:[261.6255653006,269.61366892789,277.84567157694,295.07138236029,304.08067308856,313.36504071103,332.79286022776,353.42515415018,375.3365967665,386.79659161311,398.60648967463,423.31905787312],description:"Binary PHI Scale #2"},iter21:{frequencies:[261.6255653006,265.58958666715,269.61366892789,277.84567157694,295.07138236029,304.08067308856,313.36504071103,332.79286022776,353.42515415018,375.3365967665,386.79659161311,398.60648967463,423.31905787312],description:"Binary PHI Scale 5+2 #2"},iter22:{frequencies:[261.6255653006,301.8727519909,307.3207469799,312.86706369289,324.26179396336,348.311367392,360.99698978488,374.14462916403,401.89387036212,463.7192413329,498.11197631533,535.05552246568,617.36582527423,639.85050556571,663.15408964479,712.33833913185,821.92095613931],description:"Binary PI Scale #2"},iter23:{frequencies:[261.6255653006,280.22072913446,282.63618845904,285.07246866924,290.00821285991,300.13755151512,305.33413252207,310.62068712289,321.46997343155,344.3186075731,356.34488692223,368.79121945838,395.00323181087,401.84231702948,408.7998141568,423.07827792492,453.14877154631],description:"Binary SQR(3) Scale #2"},iter24:{frequencies:[261.6255653006,289.31157243481,292.97226416221,296.67927674571,304.23460945445,319.92739457651,328.07477344771,336.42963427227,353.78307729046,391.22147055517,411.40114203819,432.62170761687,478.4030399831,490.58621022536,503.07964402145,529.02909391167,585.01254970054],description:"Binary SQR(5) Scale #2"},iter25:{frequencies:[261.6255653006,295.4600775297,299.98610231105,304.581459303,313.98443628203,333.67021037701,343.97120738708,354.59021667251,376.82183739983,425.55401329039,452.23482674104,480.58843796626,542.7401414615,559.49550492793,576.76813324226,612.92956630767,692.19618110881],description:"Binary SQR(7) Scale #2"},iter26:{frequencies:[261.6255653006,266.56189672137,275.04226095704,276.16031892841,278.32506946872,283.8915708581,299.68019298069,302.93486508491,309.19384990071,326.13597866239,377.90359432309,389.87339142835,411.92110281371,477.08191319521,486.74523776856,503.12608711654,552.32063785682,711.29450566101],description:"E Scale"},iter27:{frequencies:[261.6255653006,264.53251602616,264.59858308811,264.97973921471,266.91093025617,277.4816601673,277.93638607994,279.98525409362,291.05844139692,358.0999925052,361.3330282979,375.61956161015,462.09190754392,465.48964215821,480.4396744611,568.53247844169,1395.33634826987],description:"Iterated Kidjel Ratio Scale, IE=16/3, PD=3, SD=3"},iter28:{frequencies:[261.6255653006,265.20947715403,272.47639519786,295.60291144354,377.3445653374,784.8766959018],description:"McLaren 3-Division Scale"},iter29:{frequencies:[261.6255653006,264.46932144517,267.35459227799,273.20191774753,285.29018929764,311.12229387098,370.01329949656,523.2511306012],description:"Iterated Binary Division of the Octave, IE=2, PD=6, SD=0"},iter3:{frequencies:[261.6255653006,291.72408166262,314.40967058055,328.65360269166,338.82655178274,356.71329642628,384.4758307461,404.77917650282,417.30358762823,426.15298265459,441.49314144476],description:"Iterated 27/16 Scale, analog of Hexachord, IE=27/16, PD=3, SD=2"},iter30:{frequencies:[261.6255653006,263.40533105094,266.47048317654,274.97380842818,299.54231389489,377.98194879009,711.1793535636],description:"Iterated E-scale, IE= 2.71828, PD=5, SD=0"},iter31:{frequencies:[261.6255653006,264.53251602616,277.4816601673,358.0999925052,1395.33634826987],description:"Iterated Kidjel Ratio Scale, IE=16/3, PD=3, SD=0"},iter32:{frequencies:[261.6255653006,264.32273607689,265.98599138894,268.74462830198,273.21657135822,280.65287914064,293.09931751721,314.43072526953,352.25402909754,423.30428543018],description:"Iterated PHI scale, IE= 1.61803339, PD=8, SD=0"},iter33:{frequencies:[261.6255653006,264.70351312767,271.46111286829,293.79264300149,376.62581378438,821.87425059077],description:"Iterated PI Scale, IE= 3.14159, PD=4, SD=0"},iter34:{frequencies:[261.6255653006,263.41752122732,264.70351312767,267.00143308075,271.01725226011,278.10591587072,290.81088732616,314.21361862735,359.24704489038,453.1728541814],description:"Iterated SQR3 Scale, IE= 1.73205, PD=8, SD=0"},iter35:{frequencies:[261.6255653006,263.32443260775,265.41724016003,270.17542037578,281.14986121856,307.30621955943,374.94109676838,585.0238335194],description:"Iterated SQR 5 Scale, IE= 2.23607, PD=6, SD=0"},iter36:{frequencies:[261.6255653006,263.60757715894,266.85807660661,275.72514666411,300.63990398578,377.90359432309,692.2176415245],description:"Iterated SQR 7 Scale, IE= 2.64575, PD=5, SD=0"},iter37:{frequencies:[261.6255653006,295.02271214403,313.28742377221,326.0879260201,332.68289475257,342.82647426905,364.05069339959,375.15068445646,382.73792346942,386.58911684499,392.4383479509],description:"Iterated 3/2 scale, IE=3/2, PD=3, SD=2"},iter4:{frequencies:[261.6255653006,267.82522324611,277.41331493081,278.97828136646,281.37089098366,287.35922746131,302.93486508491,307.2300216374,313.76772341995,330.79094463294,377.42704502382,390.96854140427,412.14986314478,470.26367433779,480.2976795817,495.79659597089,536.59937372878,654.0639132515],description:"Iterated 5/2 Scale, IE=5/2, PD=4, SD=3"},iter5:{frequencies:[261.6255653006,292.148547919,314.45380444784,328.62723446295,338.43307070995,355.46951807147,382.59222452561,401.8431885336,413.81298563886,422.03832066739,436.04260883433],description:"Iterated 5/3 Scale, analog of Hexachord, IE=5/3, PD=3, SD=2"},iter6:{frequencies:[261.6255653006,276.4345595629,292.10621368514,326.13597866239,344.58001283494,364.1180547998,406.52587839016,453.84026633778,506.69255051888,535.41976154541,565.73733351326,631.63886479716],description:"Iterated binary 1+SQR(2) scale, IE= 2.414214, G=2, PD=4, SD=2"},iter7:{frequencies:[261.6255653006,279.30296836145,298.19688088025,308.09852755794,318.34159693919,339.84351781315,362.8203594263,387.34174602946,400.24806631808,413.53718386224,441.49314144476],description:"Iterated 27/16 Scale, analog of Hexachord, IE=27/16, PD=3, SD=2"},iter8:{frequencies:[261.6255653006,298.19688088025,308.09852755794,318.34159693919,339.84351781315,362.8203594263,387.34174602946,400.24806631808,413.53718386224,441.49314144476],description:"Iterated 27/16 Scale, analog of Hexachord, IE=27/16, PD=2, SD=2"},iter9:{frequencies:[261.6255653006,298.19688088025,339.84351781315,387.34174602946,413.53718386224,441.49314144476],description:"Iterated 27/16 Scale, analog of Hexachord, IE=27/16, PD=2, SD=12"},ives:{frequencies:[261.6255653006,302.26980244078,349.22823143301,375.37611551499,433.69180740168,501.06699929295,578.9091089468,622.25396744417],description:`Charles Ives' stretched major scale, "Scrapbook" pp. 108-110`},ives2a:{frequencies:[261.6255653006,303.72829164664,352.60650301302,379.92060676531,441.0602510811,512.03893786214,594.44004134205,640.48740045057],description:"Speculation by Joe Monzo for Ives' other stretched scale"},ives2b:{frequencies:[261.6255653006,300.81831683262,345.88232658126,370.885984045,426.44646246473,490.3301667422,563.78395315523,604.53960488156],description:"Alt. speculation by Joe Monzo for Ives' other stretched scale"},abell1:{frequencies:[261.6255653006,273.68256372566,292.6487650037,305.95868600104,327.16162250699,342.04121835587,365.95599773772,391.31674786192,409.35055662695,437.71854962063,457.62637091093,489.33987776603,523.2511306012],description:"Ross Abell's French Baroque Meantone 1, a'=520"},abell2:{frequencies:[261.6255653006,275.90473010106,294.68429813772,308.79945157961,330.00857764288,348.01999353916,369.14054089803,392.90218486657,412.67427966689,441.52756934418,463.21121723949,493.59810545034,523.2511306012],description:"Ross Abell's French Baroque Meantone 2, a'=520"},abell3:{frequencies:[261.6255653006,275.90505521365,293.49576926806,308.08682543008,329.24698751194,350.03632176331,368.71497179837,392.44893164635,412.28324979826,440.25465969448,462.14293627657,492.7440237889,523.2511306012],description:"Ross Abell's French Baroque Meantone 3, a' = 520"},abell4:{frequencies:[261.6255653006,274.95017225036,292.98704147282,308.2648062752,328.10786809908,346.01554587335,367.43868454848,391.54284657258,411.48414905414,438.47771564426,461.87534079415,491.0387427573,523.2511306012],description:"Ross Abell's French Baroque Meantone 4, a'=520"},abell5:{frequencies:[261.6255653006,277.98432293805,295.87822452474,311.66659310186,331.15428443044,349.43001184052,371.27895029721,395.6350356808,416.26536455926,442.29334161825,466.70260620202,495.88429116026,523.2511306012],description:"Ross Abell's French Baroque Meantone 5, a'=520"},abell6:{frequencies:[261.6255653006,277.02257024271,293.32570896007,311.66659310186,330.00857764288,349.43001184052,369.99442271164,391.76907592069,414.82519580403,440.76312290327,466.70260620202,494.16866184506,523.2511306012],description:"Ross Abell's French Baroque Meantone 6, a'=520"},abell7:{frequencies:[261.6255653006,277.50302994288,294.34406205295,310.05056613125,328.86683469969,348.82502010853,369.99442271164,392.44854854484,416.26536455926,438.47771564426,465.08793784701,493.31307433255,523.2511306012],description:"Ross Abell's French Baroque Meantone 7, a'=520"},abell8:{frequencies:[261.6255653006,277.82379926216,294.68429813772,311.48661940174,329.62755691287,350.03605285217,371.27895029721,392.44854854484,415.30469757995,441.01779121056,467.78216486233,494.45418731234,523.2511306012],description:"Ross Abell's French Baroque Meantone 8, a'=520"},abell9:{frequencies:[261.6255653006,276.06414495892,293.32570896007,309.69258848748,330.19925313612,348.62358905703,369.14054089803,391.99543598175,412.67427966689,440,464.55095742407,493.88330125613,523.2511306012],description:"Ross Abell's French Baroque Meantone 9, a'=520"},"ad-dik":{frequencies:[261.6255653006,269.0348830679,275.62199471997,285.40970760065,294.32876096318,300.46061014991,310.07474405997,321.08592105074,327.03195662575,336.37572681506,348.83408706747,358.80077526939,367.49599295996,378.42269266694,392.4383479509,400.61414686654,413.43299207996,428.11456140098,441.49314144476,453.48431318771,470.92601754108,479.64686971777,490.54793493862,508.71637697339,523.2511306012],description:"Amin Ad-Dik, d'Erlanger, vol 5, p.42"},adjeng:{frequencies:[261.6255653006,285.30470202322,305.78200836532,383.0422478503,417.71053321823,523.2511306012],description:"Soeroepan adjeng"},aeolic:{frequencies:[261.6255653006,294.32876096318,310.07474405997,348.83408706747,392.4383479509,413.43299207996,465.11211608996,523.2511306012],description:"Ancient Greek Aeolic, also tritriadic scale of the 54:64:81 triad"},agricola:{frequencies:[261.6255653006,275.93321340298,294.32876096318,310.42486507835,331.11985608357,348.83408706747,367.91095120397,392.4383479509,413.89982010446,441.49314144476,465.11211608996,496.67978412536,523.2511306012],description:"Agricola's Monochord, Rudimenta musices (1539)"},"al-din":{frequencies:[261.6255653006,275.62199471997,290.36720431405,294.32876096318,310.07474405997,326.6631048533,331.11985608357,348.83408706747,367.49599295996,387.15627241873,392.4383479509,413.43299207996,435.55080647107,441.49314144476,465.11211608996,489.99465727995,516.20836322497,523.2511306012,551.24398943995,580.73440862809,588.65752192635,620.14948811994,653.3262097066,688.27781763329,697.66817413493,734.99198591993,774.31254483746,784.8766959018,826.86598415992,871.10161294214,917.70375684439,930.22423217991,979.98931455991,1032.41672644994,1046.5022612024,1102.48797887989],description:"Safi al-Din's complete lute tuning on 5 strings 4/3 apart"},"al-din_19":{frequencies:[261.6255653006,275.62199471997,290.36720431405,294.32876096318,310.07474405997,326.6631048533,331.11985608357,344.13890881665,348.83408706747,367.49599295996,387.15627241873,392.4383479509,413.43299207996,435.55080647107,441.49314144476,458.8518784222,465.11211608996,489.99465727995,516.20836322497,523.2511306012],description:"Arabic scale by Safi al-Din"},"al-farabi":{frequencies:[261.6255653006,279.06726965397,299.00064605783,348.83408706747,392.4383479509,418.60090448096,448.50096908674,523.2511306012],description:"Al-Farabi Syn Chrom"},"al-farabi_19":{frequencies:[261.6255653006,275.62199471997,285.40970760065,294.32876096318,310.07474405997,326.6631048533,331.11985608357,336.87132687997,348.83408706747,367.49599295996,380.54627680087,392.4383479509,413.43299207996,435.55080647107,441.49314144476,455.28980211491,465.11211608996,489.99465727995,507.3950357345,523.2511306012],description:"Arabic scale by Al Farabi"},"al-farabi_22":{frequencies:[261.6255653006,275.62199471997,277.01530443593,285.40970760065,294.32876096318,310.07474405997,321.08592105074,326.6631048533,331.11985608357,348.83408706747,367.49599295996,369.35373924791,380.54627680087,392.4383479509,413.43299207996,428.11456140098,435.55080647107,441.49314144476,465.11211608996,489.99465727995,492.47165233054,507.3950357345,523.2511306012],description:"Al-Farabi 22 note ud scale"},"al-farabi_9":{frequencies:[261.6255653006,294.32876096318,321.08592105074,331.11985608357,348.83408706747,392.4383479509,428.11456140098,441.49314144476,465.11211608996,523.2511306012],description:"Al-Farabi 9 note ud scale"},"al-farabi_blue":{frequencies:[261.6255653006,294.32876096318,367.91095120397,380.81054504865,392.4383479509,490.54793493862,506.89953276991,523.2511306012],description:"Another tuning from Al Farabi, c700 AD"},"al-farabi_chrom":{frequencies:[261.6255653006,294.32876096318,353.19451315581,372.50983809402,392.4383479509,470.92601754108,497.08857407114,523.2511306012],description:"Al Farabi's Chromatic c700 AD"},"al-farabi_chrom2":{frequencies:[261.6255653006,279.06726965397,325.57848126297,348.83408706747,392.4383479509,418.60090448096,488.36772189445,523.2511306012],description:"Al-Farabi's Chromatic permuted"},"al-farabi_diat":{frequencies:[261.6255653006,299.00064605783,341.71502406609,348.83408706747,392.4383479509,448.50096908674,512.57253609913,523.2511306012],description:"Al-Farabi's Diatonic"},"al-farabi_diat2":{frequencies:[261.6255653006,290.69507255622,313.95067836072,348.83408706747,392.4383479509,436.04260883433,470.92601754108,523.2511306012],description:"Old Phrygian, permuted form of Al-Farabi's reduplicated 10/9 diatonic genus, same as ptolemy_diat"},"al-farabi_div":{frequencies:[261.6255653006,275.62199471997,277.01530443593,284.45195690401,288.32205155576,294.32876096318,310.07474405997,311.64221749042,321.08592105074,331.11985608357,348.83408706747],description:"Al Farabi's 10 intervals for the division of the tetrachord"},"al-farabi_div2":{frequencies:[261.6255653006,275.62199471997,277.01530443593,279.38237857051,284.45195690401,288.32205155576,294.32876096318,310.07474405997,311.64221749042,314.30517589183,321.08592105074,331.11985608357,348.83408706747],description:"Al-Farabi's tetrachord division, incl. extra 2187/2048 & 19683/16384"},"al-farabi_divo":{frequencies:[261.6255653006,275.62199471997,277.01530443593,284.45195690401,288.32205155576,294.32876096318,310.07474405997,311.64221749042,321.08592105074,331.11985608357,348.83408706747,367.49599295996,369.35373924791,379.26927587201,392.4383479509,413.43299207996,415.52295665389,426.67793535601,432.48307733364,441.49314144476,465.11211608996,467.46332623563,481.6288815761,496.67978412536,523.2511306012],description:"Al Farabi's theoretical octave division with identical tetrachords, 10th c."},"al-farabi_dor":{frequencies:[261.6255653006,282.55561052465,313.95067836072,348.83408706747,392.4383479509,423.83341578697,470.92601754108,523.2511306012],description:"Dorian mode of Al-Farabi's 10/9 Diatonic"},"al-farabi_dor2":{frequencies:[261.6255653006,267.07609791103,305.22982618403,348.83408706747,392.4383479509,400.61414686654,457.84473927605,523.2511306012],description:"Dorian mode of Al-Farabi's Diatonic"},"al-farabi_g1":{frequencies:[261.6255653006,294.32876096318,331.11985608357,367.91095120397,392.4383479509,441.49314144476,490.54793493862,523.2511306012],description:"Al-Farabi's Greek genus conjunctum medium, Land"},"al-farabi_g10":{frequencies:[261.6255653006,294.32876096318,343.38355445704,367.91095120397,392.4383479509,457.84473927605,490.54793493862,523.2511306012],description:"Al-Farabi's Greek genus chromaticum forte"},"al-farabi_g11":{frequencies:[261.6255653006,294.32876096318,353.19451315581,372.50983809402,392.4383479509,470.92601754108,496.67978412536,523.2511306012],description:"Al-Farabi's Greek genus chromaticum mollissimum"},"al-farabi_g12":{frequencies:[261.6255653006,294.32876096318,367.91095120397,380.17464957743,392.4383479509,490.54793493862,506.89953276991,523.2511306012],description:"Al-Farabi's Greek genus mollissimum ordinantium"},"al-farabi_g3":{frequencies:[261.6255653006,294.32876096318,336.37572681506,378.42269266694,392.4383479509,448.50096908674,504.56359022259,523.2511306012],description:"Al-Farabi's Greek genus conjunctum primum"},"al-farabi_g4":{frequencies:[261.6255653006,294.32876096318,336.37572681506,384.42940207435,392.4383479509,448.50096908674,512.57253609913,523.2511306012],description:"Al-Farabi's Greek genus forte duplicatum primum"},"al-farabi_g5":{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,392.4383479509,436.04260883433,479.64686971777,523.2511306012],description:"Al-Farabi's Greek genus conjunctum tertium, or forte aequatum"},"al-farabi_g6":{frequencies:[261.6255653006,294.32876096318,336.37572681506,373.75080757229,392.4383479509,448.50096908674,498.33441009638,523.2511306012],description:"Al-Farabi's Greek genus forte disjunctum primum"},"al-farabi_g7":{frequencies:[261.6255653006,294.32876096318,343.38355445704,374.60024122586,392.4383479509,457.84473927605,499.46698830115,523.2511306012],description:"Al-Farabi's Greek genus non continuum acre"},"al-farabi_g8":{frequencies:[261.6255653006,294.32876096318,353.19451315581,378.42269266694,392.4383479509,470.92601754108,504.56359022259,523.2511306012],description:"Al-Farabi's Greek genus non continuum mediocre"},"al-farabi_g9":{frequencies:[261.6255653006,294.32876096318,367.91095120397,383.71749577421,392.4383479509,490.54793493862,511.62332769895,523.2511306012],description:"Al-Farabi's Greek genus non continuum laxum"},"al-hwarizmi":{frequencies:[261.6255653006,294.32876096318,302.73815413355,311.64221749042,321.08592105074,331.11985608357,348.83408706747],description:"Al-Hwarizmi's tetrachord division"},"al-kindi":{frequencies:[261.6255653006,275.62199471997,279.38237857051,294.32876096318,310.07474405997,331.11985608357,348.83408706747],description:"Al-Kindi's tetrachord division"},"al-kindi2":{frequencies:[261.6255653006,275.62199471997,294.32876096318,310.07474405997,326.6631048533,331.11985608357,348.83408706747,367.49599295996,392.4383479509,413.43299207996,435.55080647107,441.49314144476,465.11211608996,489.99465727995,523.2511306012],description:"Arabic mode by al-Kindi"},"al-mausili":{frequencies:[261.6255653006,275.62199471997,294.32876096318,310.07474405997,331.11985608357,348.83408706747,367.49599295996,392.4383479509,413.43299207996,441.49314144476,465.11211608996,523.2511306012],description:"Arabic mode by Ishaq al-Mausili, ? - 850 AD"},albion:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,372.08969287196,392.4383479509,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Terry Riley's Harp of New Albion scale, inverse Malcolm's Monochord, 1/1 on C#"},alembert:{frequencies:[261.6255653006,273.70610837433,292.50627485027,307.8325111191,327.03195662575,347.99121610009,365.92863081328,391.22147055517,409.45161370755,437.39890198442,462.86717295458,489.22460251523,523.2511306012],description:"Jean-Le Rond d'Alembert modified meantone (1752)"},alembert2:{frequencies:[261.6255653006,274.99999938609,292.5775112526,309.28790118232,327.03195662575,348.53877105022,367.08095907728,391.31674786192,412.03444522126,437.50542525192,464.32494005553,489.99429388332,523.2511306012],description:"d'Alembert (?)"},alves:{frequencies:[261.6255653006,267.07609791103,294.32876096318,305.22982618403,327.03195662575,336.37572681506,348.83408706747,359.73515228832,392.4383479509,425.14154361347,448.50096908674,457.84473927605,504.56359022259,523.2511306012],description:'Bill Alves, tuning for "Instantaneous Motion", 1/1 vol. 6/3'},alves_22:{frequencies:[261.6255653006,269.80136421624,279.06726965397,287.78812183066,297.30177875068,305.22982618403,317.12189733406,327.03195662575,336.37572681506,348.83408706747,359.73515228832,370.01329949656,380.54627680087,392.4383479509,406.97310157871,418.60090448096,431.68218274599,448.50096908674,460.46099492906,475.68284600109,490.54793493862,507.3950357345,523.2511306012],description:"11-limit rational interpretation of 22-tET, Bill Alves, tuning list 9-1-98"},amity:{frequencies:[261.6255653006,265.19165427121,275.22357733525,278.97501409741,282.77758484276,286.63198489776,290.53892403345,294.49911672845,305.63971046081,309.80573452349,314.02854360428,318.30891171173,322.64762154083,327.04547204619,339.41726037801,344.04368955469,348.73317930436,353.48658917459,358.304790429,371.85908609843,376.92771379174,382.0654272409,387.27317253358,392.55190203235,397.90258328792,412.95482206782,418.58360545772,424.28911201625,430.07238503487,435.93448947821,452.42543551278,458.59222335614,464.84306764133,471.17911410024,477.60152408164,484.11147196776,502.42490579041,509.27320879713,516.21486058423,523.2511306012],description:"Amity temperament, g=339.508826, 5-limit"},angklung:{frequencies:[261.6255653006,294.70472480469,326.28010551578,372.13971319976,421.00655337609,533.77627782773,589.40944960937,672.10704388342,757.81210779894],description:"Scale of an anklung set from Tasikmalaya. 1/1=174 Hz"},appunn:{frequencies:[261.6255653006,272.52663052146,275.93321340298,279.38237857051,287.10624449997,290.69507255622,294.32876096318,302.46583782713,306.24666079997,310.07474405997,322.99452506247,327.03195662575,331.11985608357,340.27406755552,344.52749339997,348.83408706747,363.36884069528,367.91095120397,372.50983809402,382.80832599996,387.59343007496,392.4383479509,408.78994578219,413.89982010446,419.07356785577,430.65936674996,436.04260883433,441.49314144476,453.6987567407,459.36999119996,465.11211608996,484.4917875937,490.54793493862,496.67978412536,510.41110133328,516.79124009995,523.2511306012],description:"Probable tuning of A. Appunn's 36-tone harmonium w. 3 manuals 80/81 apart,1887"},arabic:{frequencies:[261.6255653006,275.62199471997,290.36720431405,294.32876096318,310.07474405997,326.6631048533,331.11985608357,348.83408706747,367.49599295996,387.15627241873,392.4383479509,413.43299207996,435.55080647107,441.49314144476,465.11211608996,489.99465727995,516.20836322497,523.2511306012],description:"Arabic 17-tone Pythagorean mode, Safi al-Din"},arabic_s:{frequencies:[261.6255653006,275.62199471997,290.69507255622,294.32876096318,310.07474405997,327.03195662575,331.11985608357,348.83408706747,367.91095120397,387.59343007496,392.4383479509,413.43299207996,436.04260883433,441.49314144476,465.11211608996,490.54793493862,516.79124009995,523.2511306012],description:"Schimatically altered Arabic 17-tone Pythagorean mode"},arch_chrom:{frequencies:[261.6255653006,271.31540105247,294.32876096318,348.83408706747,392.4383479509,406.97310157871,441.49314144476,523.2511306012],description:"Archytas' Chromatic"},arch_chromc2:{frequencies:[261.6255653006,271.31540105247,294.32876096318,305.22982618403,331.11985608357,343.38355445704,348.83408706747,361.75386806997,392.4383479509,406.97310157871,422.04617941496,441.49314144476,457.84473927605,496.67978412536,523.2511306012],description:"Product set of 2 of Archytas' Chromatic"},arch_dor:{frequencies:[261.6255653006,271.31540105247,294.32876096318,348.83408706747,392.4383479509,406.97310157871,465.11211608996,441.49314144476,523.2511306012],description:"Dorian mode of Archytas' Chromatic with added 16/9"},arch_enh:{frequencies:[261.6255653006,271.31540105247,279.06726965397,348.83408706747,392.4383479509,406.97310157871,418.60090448096,523.2511306012],description:"Archytas' Enharmonic"},arch_enh2:{frequencies:[261.6255653006,271.31540105247,279.06726965397,348.83408706747,392.4383479509,406.97310157871,465.11211608996,418.60090448096,523.2511306012],description:"Archytas' Enharmonic with added 16/9"},arch_enh3:{frequencies:[261.6255653006,271.31540105247,279.06726965397,336.37572681506,348.83408706747,358.80077526939,448.50096908674,523.2511306012],description:"Complex 9 of p. 113 based on Archytas's Enharmonic"},arch_enhp:{frequencies:[261.6255653006,269.10058145205,279.06726965397,348.83408706747,392.4383479509,403.65087217807,418.60090448096,523.2511306012],description:"Permutation of Archytas's Enharmonic with the 36/35 first"},arch_enht:{frequencies:[261.6255653006,269.10058145205,271.31540105247,279.06726965397,336.37572681506,348.83408706747,504.56359022259,523.2511306012],description:"Complex 6 of p. 113 based on Archytas's Enharmonic"},arch_enht2:{frequencies:[261.6255653006,271.31540105247,279.06726965397,327.03195662575,348.83408706747,490.54793493862,508.71637697339,523.2511306012],description:"Complex 5 of p. 113 based on Archytas's Enharmonic"},arch_enht3:{frequencies:[261.6255653006,271.31540105247,279.06726965397,281.36411960997,289.40309445597,348.83408706747,361.75386806997,523.2511306012],description:"Complex 1 of p. 113 based on Archytas's Enharmonic"},arch_enht4:{frequencies:[261.6255653006,271.31540105247,279.06726965397,327.03195662575,339.14425131559,348.83408706747,436.04260883433,523.2511306012],description:"Complex 8 of p. 113 based on Archytas's Enharmonic"},arch_enht5:{frequencies:[261.6255653006,263.77886213435,271.31540105247,279.06726965397,339.14425131559,348.83408706747,508.71637697339,523.2511306012],description:"Complex 10 of p. 113 based on Archytas's Enharmonic"},arch_enht6:{frequencies:[261.6255653006,271.31540105247,279.06726965397,289.40309445597,297.67175429757,348.83408706747,372.08969287196,523.2511306012],description:"Complex 2 of p. 113 based on Archytas's Enharmonic"},arch_enht7:{frequencies:[261.6255653006,269.10058145205,271.31540105247,279.06726965397,287.04062021552,348.83408706747,358.80077526939,523.2511306012],description:"Complex 11 of p. 113 based on Archytas's Enharmonic"},arch_mult:{frequencies:[261.6255653006,271.31540105247,279.06726965397,327.03195662575,336.37572681506,348.83408706747,361.75386806997,392.4383479509,406.97310157871,418.60090448096,490.54793493862,504.56359022259,523.2511306012],description:"Multiple Archytas"},arch_ptol:{frequencies:[261.6255653006,271.31540105247,279.06726965397,290.69507255622,310.07474405997,348.83408706747,361.75386806997,392.4383479509,406.97310157871,418.60090448096,436.04260883433,465.11211608996,523.2511306012],description:"Archytas/Ptolemy Hybrid 1"},arch_ptol2:{frequencies:[261.6255653006,271.31540105247,279.06726965397,294.32876096318,313.95067836072,348.83408706747,361.75386806997,392.4383479509,406.97310157871,418.60090448096,441.49314144476,470.92601754108,523.2511306012],description:"Archytas/Ptolemy Hybrid 2"},arch_sept:{frequencies:[261.6255653006,271.31540105247,279.06726965397,294.32876096318,310.07474405997,348.83408706747,361.75386806997,392.4383479509,406.97310157871,418.60090448096,441.49314144476,465.11211608996,523.2511306012],description:"Archytas Septimal"},ariel1:{frequencies:[261.6255653006,282.55561052465,294.32876096318,313.95067836072,327.03195662575,348.83408706747,363.36884069528,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Ariel 1"},ariel2:{frequencies:[261.6255653006,279.06726965397,290.69507255622,313.95067836072,327.03195662575,348.83408706747,363.36884069528,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Ariel 2"},ariel3:{frequencies:[261.6255653006,279.06726965397,290.69507255622,310.07474405997,322.99452506247,348.83408706747,363.36884069528,392.4383479509,418.60090448096,436.04260883433,465.11211608996,484.4917875937,523.2511306012],description:"Ariel's 12-tone JI scale"},ariel_19:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,302.80736724606,313.95067836072,327.03195662575,334.88072358477,348.83408706747,363.36884069528,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,452.08897683944,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Ariel 19-tone scale"},ariel_31:{frequencies:[261.6255653006,267.90457886781,272.52663052146,279.06726965397,283.88190679319,294.32876096318,301.39265122629,306.59245933664,313.95067836072,319.36714514233,327.03195662575,334.88072358477,340.65828815182,348.83408706747,357.20610515709,363.36884069528,376.74081403286,383.2405741708,392.4383479509,401.85686830172,408.78994578219,418.60090448096,428.6473261885,436.04260883433,446.50763144636,454.2110508691,465.11211608996,482.22824196207,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"Ariel's 31-tone system"},arist_archenh:{frequencies:[261.6255653006,271.89678302796,279.86396690685,349.22823143301,391.99543598175,407.38487419079,419.32216217931,523.2511306012],description:"PsAristo Arch. Enharmonic, 4 + 3 + 23 parts, similar to Archytas' enharmonic"},arist_chrom:{frequencies:[261.6255653006,277.18263097687,329.62755691287,349.22823143301,391.99543598175,415.30469757995,493.88330125613,523.2511306012],description:"Dorian, Neo-Chromatic,6+18+6 parts = Athanasopoulos' Byzant.liturg. 2nd chromatic"},arist_chrom2:{frequencies:[261.6255653006,282.57123920205,336.03572815422,349.22823143301,391.99543598175,423.37848741825,503.48470957687,523.2511306012],description:"Dorian Mode, a 1:2 Chromatic, 8 + 18 + 4 parts"},arist_chrom3:{frequencies:[261.6255653006,279.86388595857,299.37253740865,349.22869576324,391.99491478937,419.32387668214,448.55625766774,523.2511306012],description:"PsAristo 3 Chromatic, 7 + 7 + 16 parts"},arist_chrom4:{frequencies:[261.6255653006,275.85166538713,290.85115308106,349.22823143301,391.99543598175,413.31050241775,435.7843409791,523.2511306012],description:"PsAristo Chromatic, 5.5 + 5.5 + 19 parts"},arist_chromenh:{frequencies:[261.6255653006,269.29177952703,293.66476791741,349.22823143301,391.99543598175,403.48177901006,440,523.2511306012],description:"Aristoxenos' Chromatic/Enharmonic, 3 + 9 + 18 parts"},arist_chrominv:{frequencies:[261.6255653006,311.12698372208,329.62755691287,349.22823143301,391.99543598175,466.16376151809,493.88330125613,523.2511306012],description:"Aristoxenos' Inverted Chromatic, Dorian mode, 18 + 6 + 6 parts"},arist_chromrej:{frequencies:[261.6255653006,277.18263097687,285.30470202322,349.22823143301,391.99543598175,415.30469757995,427.47405410759,523.2511306012],description:"Aristoxenos Rejected Chromatic, 6 + 3 + 21 parts"},arist_chromunm:{frequencies:[261.6255653006,273.20871865617,282.57118533961,349.22823143301,391.99543598175,409.35055662695,423.37840671577,523.2511306012],description:"Unmelodic Chromatic, genus of Aristoxenos, Dorian Mode, 4.5 + 3.5 + 22 parts"},arist_diat:{frequencies:[261.6255653006,293.66476791741,311.12698372208,349.22823143301,391.99543598175,440,466.16376151809,523.2511306012],description:"Phrygian octave species on E, 12 + 6 + 12 parts"},arist_diat2:{frequencies:[261.6255653006,279.86396690685,311.12698372208,349.22823143301,391.99543598175,419.32216217931,466.16376151809,523.2511306012],description:"PsAristo 2 Diatonic, 7 + 11 + 12 parts"},arist_diat3:{frequencies:[261.6255653006,286.68133251996,314.13668154225,349.22823143301,391.99543598175,429.53666932309,470.6732130613,523.2511306012],description:"PsAristo Diat 3, 9.5 + 9.5 + 11 parts"},arist_diat4:{frequencies:[261.6255653006,282.57123920205,305.19382000629,349.22823143301,391.99543598175,423.37848741825,457.27406033445,523.2511306012],description:"PsAristo Diatonic, 8 + 8 + 14 parts"},arist_diatdor:{frequencies:[261.6255653006,299.37379946195,305.19382000629,349.22823143301,391.99543598175,448.5538823653,457.27406033445,523.2511306012],description:"PsAristo Redup. Diatonic, 14 + 2 + 14 parts"},arist_diatinv:{frequencies:[261.6255653006,293.66476791741,329.62755691287,349.22823143301,391.99543598175,440,493.88330125613,523.2511306012],description:"Lydian octave species on E, major mode, 12 + 12 + 6 parts"},arist_diatred:{frequencies:[261.6255653006,299.37379946195,342.56848033562,349.22823143301,391.99543598175,448.5538823653,513.27277840175,523.2511306012],description:"Aristo Redup. Diatonic, Dorian Mode, 14 + 14 + 2 parts"},arist_diatred2:{frequencies:[261.6255653006,271.89678302796,308.14612137864,349.22823143301,391.99543598175,407.38487419079,461.69751437372,523.2511306012],description:"PsAristo 2 Redup. Diatonic 2, 4 + 13 + 13 parts"},arist_diatred3:{frequencies:[261.6255653006,282.57123920205,314.13668154225,349.22823143301,391.99543598175,423.37848741825,470.6732130613,523.2511306012],description:"PsAristo 3 Redup. Diatonic, 8 + 11 + 11 parts"},arist_enh:{frequencies:[261.6255653006,269.29177952703,277.18263097687,349.22823143301,391.99543598175,403.48177901006,415.30469757995,523.2511306012],description:"Aristoxenos' Enharmonion, Dorian mode"},arist_enh2:{frequencies:[261.6255653006,270.59109411209,279.86402025325,349.22823143301,391.99543598175,405.42855124795,419.32224210861,523.2511306012],description:"PsAristo 2 Enharmonic, 3.5 + 3.5 + 23 parts"},arist_enh3:{frequencies:[261.6255653006,267.99870394401,274.52693220706,349.22823143301,391.99543598175,401.54435471309,411.32564531909,523.2511306012],description:"PsAristo Enharmonic, 2.5 + 2.5 + 25 parts"},arist_hemchrom:{frequencies:[261.6255653006,273.20871865617,285.30470202322,349.22823143301,391.99543598175,409.35055662695,427.47405410759,523.2511306012],description:"Aristoxenos's Chromatic Hemiolion, Dorian Mode"},arist_hemchrom2:{frequencies:[261.6255653006,273.20871865617,293.66476791741,349.22823143301,391.99543598175,409.35055662695,440,523.2511306012],description:"PsAristo C/H Chromatic, 4.5 + 7.5 + 18 parts"},arist_hemchrom3:{frequencies:[261.6255653006,271.81876914348,282.83844897362,348.83408706747,392.4383479509,407.72815371522,424.25767346043,523.2511306012],description:"Dorian mode of Aristoxenos' Hemiolic Chromatic according to Ptolemy's interpret"},arist_hypenh2:{frequencies:[261.6255653006,267.3544191957,273.20871865617,349.22823143301,391.99543598175,400.57901831518,409.35055662695,523.2511306012],description:"PsAristo 2nd Hyperenharmonic, 37.5 + 37.5 + 425 cents"},arist_hypenh3:{frequencies:[261.6255653006,265.43099677612,269.29177952703,349.22823143301,391.99543598175,397.69714089209,403.48177901006,523.2511306012],description:"PsAristo 3 Hyperenharmonic, 1.5 + 1.5 + 27 parts"},arist_hypenh4:{frequencies:[261.6255653006,266.71168334607,271.8968348557,349.22823143301,391.99543598175,399.61600264311,407.38495184466,523.2511306012],description:"PsAristo 4 Hyperenharmonic, 2 + 2 + 26 parts"},arist_hypenh5:{frequencies:[261.6255653006,265.12453591719,268.67030163715,349.22823143301,391.99543598175,397.23796841836,402.55061428954,523.2511306012],description:"PsAristo Hyperenharmonic, 23 + 23 + 454 cents"},arist_intdiat:{frequencies:[261.6255653006,275.39533189537,307.79478270659,348.83408706747,392.4383479509,413.09299784305,461.69217405988,523.2511306012],description:"Dorian mode of Aristoxenos's Intense Diatonic according to Ptolemy"},arist_penh2:{frequencies:[261.6255653006,269.29177952703,339.28638158975,349.22823143301,391.99543598175,403.48177901006,508.3551866238,523.2511306012],description:"Permuted Aristoxenos's Enharmonion, 3 + 24 + 3 parts"},arist_penh3:{frequencies:[261.6255653006,329.62755691287,339.28638158975,349.22823143301,391.99543598175,493.88330125613,508.3551866238,523.2511306012],description:"Permuted Aristoxenos's Enharmonion, 24 + 3 + 3 parts"},arist_pschrom2:{frequencies:[261.6255653006,278.52001838539,296.50560089735,349.22823143301,391.99543598175,417.30851459865,444.25644015807,523.2511306012],description:"PsAristo 2 Chromatic, 6.5 + 6.5 + 17 parts"},arist_softchrom:{frequencies:[261.6255653006,271.89678302796,282.57123920205,349.22823143301,391.99543598175,407.38487419079,423.37848741825,523.2511306012],description:"Aristoxenos's Chromatic Malakon, Dorian Mode"},arist_softchrom2:{frequencies:[261.6255653006,277.18263097687,324.90175210669,349.22823143301,391.99543598175,415.30469757995,486.80259447109,523.2511306012],description:"Aristoxenos' Soft Chromatic, 6 + 16.5 + 9.5 parts"},arist_softchrom3:{frequencies:[261.6255653006,281.2143451833,329.62755691287,349.22823143301,391.99543598175,421.34544350737,493.88330125613,523.2511306012],description:"Aristoxenos's Chromatic Malakon, 9.5 + 16.5 + 6 parts"},arist_softchrom4:{frequencies:[261.6255653006,277.18263097687,297.93622032612,349.22823143301,391.99543598175,415.30469757995,446.39994737251,523.2511306012],description:"PsAristo S. Chromatic, 6 + 7.5 + 16.5 parts"},arist_softchrom5:{frequencies:[261.6255653006,270.64713651786,280.31310567921,348.83408706747,392.4383479509,405.97070477679,420.46965851882,523.2511306012],description:"Dorian mode of Aristoxenos' Soft Chromatic according to Ptolemy's interpretati"},arist_softdiat:{frequencies:[261.6255653006,277.18263097687,302.26980244078,349.22823143301,391.99543598175,415.30469757995,452.89298412314,523.2511306012],description:"Aristoxenos's Diatonon Malakon, Dorian Mode"},arist_softdiat2:{frequencies:[261.6255653006,277.18263097687,320.24370022528,349.22823143301,391.99543598175,415.30469757995,479.82340237272,523.2511306012],description:"Dorian Mode, 6 + 15 + 9 parts"},arist_softdiat3:{frequencies:[261.6255653006,285.30470202322,329.62755691287,349.22823143301,391.99543598175,427.47405410759,466.16376151809,523.2511306012],description:"Dorian Mode, 9 + 15 + 6 parts"},arist_softdiat4:{frequencies:[261.6255653006,285.30470202322,302.26980244078,349.22823143301,391.99543598175,427.47405410759,452.89298412314,523.2511306012],description:"Dorian Mode, 9 + 6 + 15 parts"},arist_softdiat5:{frequencies:[261.6255653006,302.26980244078,320.24370022528,349.22823143301,391.99543598175,452.89298412314,479.82340237272,523.2511306012],description:"Dorian Mode, 15 + 6 + 9 parts"},arist_softdiat6:{frequencies:[261.6255653006,302.26980244078,329.62755691287,349.22823143301,391.99543598175,452.89298412314,493.88330125613,523.2511306012],description:"Dorian Mode, 15 + 9 + 6 parts"},arist_softdiat7:{frequencies:[261.6255653006,275.39533189537,299.00064605783,348.83408706747,392.4383479509,413.09299784305,448.50096908674,523.2511306012],description:"Dorian mode of Aristoxenos's Soft Diatonic according to Ptolemy"},arist_synchrom:{frequencies:[261.6255653006,277.18263097687,293.66476791741,349.22823143301,391.99543598175,415.30469757995,440,523.2511306012],description:"Aristoxenos's Chromatic Syntonon, Dorian Mode"},arist_syndiat:{frequencies:[261.6255653006,277.18263097687,311.12698372208,349.22823143301,391.99543598175,415.30469757995,466.16376151809,523.2511306012],description:"Aristoxenos's Diatonon Syntonon, Dorian Mode"},arist_unchrom:{frequencies:[261.6255653006,271.89678302796,293.66476791741,349.22823143301,391.99543598175,407.38487419079,440,523.2511306012],description:"Aristoxenos's Unnamed Chromatic, Dorian Mode, 4 + 8 + 18 parts"},arist_unchrom2:{frequencies:[261.6255653006,282.57123920205,293.66476791741,349.22823143301,391.99543598175,423.37848741825,440,523.2511306012],description:"Dorian Mode, a 1:2 Chromatic, 8 + 4 + 18 parts"},arist_unchrom3:{frequencies:[261.6255653006,311.12698372208,323.3415889232,349.22823143301,391.99543598175,466.16376151809,484.46499093218,523.2511306012],description:"Dorian Mode, a 1:2 Chromatic, 18 + 4 + 8 parts"},arist_unchrom4:{frequencies:[261.6255653006,311.12698372208,336.03572815422,349.22823143301,391.99543598175,466.16376151809,503.48470957687,523.2511306012],description:"Dorian Mode, a 1:2 Chromatic, 18 + 8 + 4 parts"},arith13:{frequencies:[261.6255653006,269.80136421624,294.32876096318,318.85615771011,327.03195662575,343.38355445704,367.91095120397,371.99885066179,392.4383479509,449.66894036041,457.84473927605,490.54793493862,523.2511306012],description:"The first 13 terms of the arithmetic series, octave reduced"},arith22:{frequencies:[261.6255653006,269.80136421624,277.97716313189,294.32876096318,312.72430852337,318.85615771011,327.03195662575,343.38355445704,349.51540364377,367.91095120397,371.99885066179,388.35044849308,392.4383479509,429.2294430713,449.66894036041,457.84473927605,472.15238737843,490.54793493862,517.11928141447,523.2511306012],description:"The first 22 terms of the arithmetic series, octave reduced"},arnautoff_21:{frequencies:[261.6255653006,271.31540105247,279.06726965397,294.32876096318,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,361.75386806997,367.91095120397,372.08969287196,378.42269266694,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,465.11211608996,490.54793493862,504.56359022259,523.2511306012],description:"Philip Arnautoff, transposed Archytas enharmonic (2005), 1/1 vol 12/1"},"aron-neidhardt":{frequencies:[261.6255653006,275.62199471997,292.53519855339,310.07474405997,327.04005607367,348.83408706747,367.49599295996,391.42133845759,413.43299207996,437.43855491017,465.11211608996,489.99465727995,523.2511306012],description:"Aron-Neidhardt equal beating well temperament"},art_nam:{frequencies:[261.6255653006,287.78812183066,317.68818643644,324.77656382143,348.83408706747,353.19451315581,392.4383479509,431.68218274599,473.41768959156,523.2511306012],description:"Artificial Nam System"},artusi:{frequencies:[261.6255653006,276.63528606528,292.50629850443,309.28767786778,327.03195662575,349.91920725962,369.99442271164,391.22137338448,413.66637442451,437.39882871549,462.49310482954,489.02679755603,523.2511306012],description:"Lute tuning of Giovanni Maria Artusi (1603). 1/4-comma w. acc. 1/2-way naturals"},astro:{frequencies:[13.75,13.8316453704,13.91377553836,13.99639338254,14.07098381034,14.15453513289,14.23858257025,14.32312915102,14.40817767355,14.49373120103,14.57979273211,14.66636528323,14.75345188876,14.84105560105,14.92917949063,15.01782664621,15.10700017487,15.1875093157,15.27769039377,15.36840704189,15.45966226264,15.55145934276,15.64380149972,15.73669197012,15.83013400973,15.92413089371,16.01868591662,16.11380239262,16.20948365552,16.30573305894,16.39263055969,16.48996755631,16.58788242969,16.68637870643,16.78545983879,16.88512929958,16.98539058219,17.08624720077,17.18770269033,17.28976060687,17.39242452751,17.49569805061,17.59958489756,17.69337767194,17.7984382082,17.90412257766,18.01043448453,18.11737765504,18.22495583753,18.33317280261,18.44203234327,18.55153827502,18.66169443603,18.77250468726,18.88397302169,18.99610312873,19.09733831271,19.21073534981,19.32480572095,19.43955342429,19.55498248173,19.67109693902,19.78790086598,19.90539835657,20.02359352906,20.14249064253,20.26209363229,20.38240680608,20.50343438087,20.62518059864,20.73509756099,20.85821935885,20.98207223488,21.1066605301,21.23198861133,21.35806087129,21.4848817288,21.61245575376,21.74078716869,21.86988059568,21.99974055944,22.13037161156,22.26177833063,22.38041714879,22.51330859954,22.64698913914,22.78146345308,22.91673625467,23.0528122852,23.18969644807,23.32739327396,23.46590772227,23.60524464792,23.74540893465,23.88640549521,24.02823927151,24.15629202037,24.29972834105,24.44401636439,24.58916114767,24.73516777819,24.8820415172,25.02978722599,25.17841022592,25.32791572621,25.478308967,25.62959521956,25.78177978645,25.93486800174,26.07308167197,26.22789959273,26.38363679833,26.54029874734,26.69789108494,26.85641902723,27.01588828389,27.17630444429,27.33767313101,27.5],description:"Astro temperament, g=132.194511, 5-limit"},athan_chrom:{frequencies:[261.6255653006,285.30470202322,329.62755691287,349.22823143301,391.99543598175,427.47405410759,493.88330125613,523.2511306012],description:"Athanasopoulos's Byzantine Liturgical mode Chromatic"},auftetf:{frequencies:[261.6255653006,264.29521392612,269.80136421624,287.78812183066,359.73515228832,380.54627680087,384.42940207435,392.4383479509,418.60090448096],description:"5/4 C.I. again"},augmented:{frequencies:[261.6255653006,312.71213182188,329.62755691287,393.99259743989,415.30469757995,496.39956701727,523.2511306012],description:"Augmented temperament, g=91.2, oct=1/3, 5-limit"},augteta:{frequencies:[261.6255653006,280.76889934699,302.93486508491,328.90071066361,359.73515228832,380.54627680087,408.39112632289,440.63253103259,478.40103369253],description:"Linear Division of the 11/8, duplicated on the 16/11"},augteta2:{frequencies:[261.6255653006,281.75060878526,305.22982618403,332.97799220076,366.27579142084,373.75080757229,402.50086969323,436.04260883433,475.68284600109],description:"Linear Division of the 7/5, duplicated on the 10/7"},augtetb:{frequencies:[261.6255653006,270.8594087818,280.76889934699,302.93486508491,359.73515228832,380.54627680087,295.48299139832,408.39112632289,440.63253103259],description:"Harmonic mean division of 11/8"},augtetc:{frequencies:[261.6255653006,280.31310567921,301.87565226992,327.03195662575,359.73515228832,380.54627680087,407.72815371522,439.09185784716,475.68284600109],description:"11/10 C.I."},augtetd:{frequencies:[261.6255653006,271.68808704293,282.55561052465,294.32876096318,359.73515228832,380.54627680087,395.18267206244,410.98997894494,428.11456140098],description:"11/9 C.I."},augtete:{frequencies:[261.6255653006,269.80136421624,278.50463402967,287.78812183066,359.73515228832,380.54627680087,392.4383479509,405.0976494977,418.60090448096],description:"5/4 C.I."},augtetg:{frequencies:[261.6255653006,278.50463402967,297.71185016965,319.76457981184,359.73515228832,380.54627680087,405.0976494977,433.03541842858,465.11211608996],description:"9/8 C.I."},augteth:{frequencies:[261.6255653006,278.50463402967,287.78812183066,319.76457981184,359.73515228832,380.54627680087,405.0976494977,418.60090448096,465.11211608996],description:"9/8 C.I. A gapped version of this scale is called AugTetI"},augtetj:{frequencies:[261.6255653006,287.78812183066,319.76457981184,359.73515228832,380.54627680087,428.11456140098,475.68284600109],description:"9/8 C.I. comprised of 11:10:9:8 subharmonic series on 1 and 8:9:10:11 on 16/11"},augtetk:{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,380.54627680087,418.60090448096,465.11211608996],description:"9/8 C.I. This is the converse form of AugTetJ"},augtetl:{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,380.54627680087,428.11456140098,475.68284600109],description:"9/8 C.I. This is the harmonic form of AugTetI"},avg_bac:{frequencies:[261.6255653006,290.69507255622,307.79478270659,348.83408706747,392.4383479509,436.04260883433,461.69217405988,523.2511306012],description:"Average Bac System"},avicenna:{frequencies:[261.6255653006,290.69507255622,299.00064605783,348.83408706747,392.4383479509,436.04260883433,448.50096908674,523.2511306012],description:"Soft diatonic of Avicenna (Ibn Sina)"},avicenna_17:{frequencies:[261.6255653006,278.99913799634,283.42769574232,294.32876096318,310.07474405997,318.85615771011,331.11985608357,348.83408706747,371.99885066179,377.90359432309,392.4383479509,413.43299207996,425.14154361347,441.49314144476,465.11211608996,495.99846754905,503.87145909745,523.2511306012],description:"Tuning by Avicenna (Ibn Sina), Ahmed Mahmud Hifni, Cairo, 1977"},avicenna_19:{frequencies:[261.6255653006,275.62199471997,283.49690885483,294.32876096318,310.07474405997,326.6631048533,331.11985608357,348.83408706747,358.80077526939,372.50983809402,377.99587847311,392.4383479509,413.43299207996,425.24536328225,441.49314144476,465.11211608996,478.40103369253,496.67978412536,503.45611792634,523.2511306012],description:"Arabic scale by Ibn Sina"},avicenna_chrom:{frequencies:[261.6255653006,269.10058145205,299.00064605783,348.83408706747,392.4383479509,403.65087217807,448.50096908674,523.2511306012],description:"Dorian mode a chromatic genus of Avicenna"},avicenna_chrom2:{frequencies:[261.6255653006,271.8968348557,323.34165055711,349.22823143301,391.99543598175,407.38495184466,484.46508327871,523.2511306012],description:"Dorian Mode, a 1:2 Chromatic, 4 + 18 + 8 parts"},avicenna_chrom3:{frequencies:[261.6255653006,290.69507255622,339.14425131559,348.83408706747,392.4383479509,436.04260883433,508.71637697339,523.2511306012],description:"Avicenna's Chromatic permuted"},avicenna_diat:{frequencies:[261.6255653006,281.75060878526,305.22982618403,348.83408706747,392.4383479509,422.62591317789,457.84473927605,523.2511306012],description:"Dorian mode a soft diatonic genus of Avicenna"},avicenna_diff:{frequencies:[261.6255653006,269.80136421624,286.15296204753,294.32876096318,310.68035879446,343.38355445704,367.91095120397,392.4383479509,400.61414686654,441.49314144476,457.84473927605,515.07533168556,523.2511306012],description:"Difference tones of Avicenna's Soft diatonic reduced by 2/1"},avicenna_enh:{frequencies:[261.6255653006,268.33391312882,279.06726965397,348.83408706747,392.4383479509,402.50086969323,418.60090448096,523.2511306012],description:"Dorian mode of Avicenna's (Ibn Sina) Enharmonic genus"},awad:{frequencies:[261.6255653006,268.33391312882,275.39533189537,282.83844897362,290.69507255622,299.00064605783,307.79478270659,317.12189733406,327.03195662575,337.58137458142,348.83408706747,358.80077526939,369.35373924791,380.54627680087,392.4383479509,402.50086969323,413.09299784305,424.25767346043,436.04260883433,448.50096908674,461.69217405988,475.68284600109,490.54793493862,506.37206187213,523.2511306012],description:"d'Erlanger vol.5, p.37, after Mans.ur 'Awad"},awraamoff:{frequencies:[261.6255653006,294.32876096318,299.00064605783,313.95067836072,327.03195662575,343.38355445704,348.83408706747,392.4383479509,418.60090448096,448.50096908674,457.84473927605,490.54793493862,523.2511306012],description:"Awraamoff Septimal Just"},ayers:{frequencies:[261.6255653006,268.89294211451,276.57559760349,284.71017400359,293.33775503401,302.50455987882,312.26277148781,322.67153053741,333.7981350387,345.71949700436,358.52392281934,372.31330446624,387.20583664489,403.33941317176,420.87590939662,440.00663255101,460.95932933915,484.00729580611,509.48136400643,537.78588422901,569.42034800719,605.00911975764,645.34306107481,691.43899400873,744.62660893248,806.67882634352,880.01326510202,968.01459161222,1075.57176845802,1210.01823951527,1382.87798801746,1613.35765268703,1936.02918322444,2420.03647903055,3226.71530537407,4840.0729580611,9680.1459161222],description:"Lydia Ayers, algorithmic composition, subharmonics 1-37"},ayers_19:{frequencies:[261.6255653006,268.89294211451,276.57559760349,284.71017400359,293.33775503401,302.50455987882,312.26277148781,322.67153053741,333.7981350387,345.71949700436,358.52392281934,372.31330446624,387.20583664489,403.33941317176,420.87590939662,440.00663255101,460.95932933915,484.00729580611,509.48136400643,523.2511306012],description:"Scale for NINETEEN, for 19 for the 90's CD. Repeats at 37/19 (or 2/1)"},ayers_ap:{frequencies:[261.6255653006,299.00064605783,336.37572681506,388.70083987518,448.50096908674,523.2511306012],description:"Lydia Ayers' Appetizer, ICMC 96, Balinese Slendro from Singaraja,"},ayers_me:{frequencies:[261.6255653006,280.31310567921,299.00064605783,308.34441624714,336.37572681506,392.4383479509,420.46965851882,448.50096908674,504.56359022259,523.2511306012],description:"Scale for Merapi (1996), Lydia Ayers. Slendro 0 2 4 5 7 9, Pelog 0 1 3 6 8 9"},h10_27:{frequencies:[261.6255653006,281.00523680435,300.3849083081,319.76457981184,348.83408706747,368.21375857121,397.28326582684,426.35277308246,455.42228033808,484.4917875937,523.2511306012],description:"10-tET harmonic approximation, fundamental=27"},h12_24:{frequencies:[261.6255653006,272.52663052146,294.32876096318,316.13089140489,327.03195662575,348.83408706747,370.63621750918,392.4383479509,414.24047839262,436.04260883433,468.74580449691,490.54793493862,523.2511306012],description:"12-tET harmonic approximation, fundamental=24"},h14_27:{frequencies:[261.6255653006,271.31540105247,290.69507255622,300.3849083081,319.76457981184,339.14425131559,348.83408706747,368.21375857121,387.59343007496,406.97310157871,426.35277308246,455.42228033808,474.80195184183,494.18162334558,523.2511306012],description:"14-tET harmonic approximation, fundamental=27"},h15_24:{frequencies:[261.6255653006,272.52663052146,283.42769574232,305.22982618403,316.13089140489,327.03195662575,348.83408706747,359.73515228832,381.53728273004,392.4383479509,414.24047839262,436.04260883433,457.84473927605,479.64686971777,501.44900015948,523.2511306012],description:"15-tET harmonic approximation, fundamental=24"},hahn9:{frequencies:[261.6255653006,286.15296204753,313.95067836072,327.03195662575,366.27579142084,392.4383479509,418.60090448096,457.84473927605,490.54793493862,523.2511306012],description:"Paul Hahn's just version of 9 out of 31 scale. TL 6-8-'98"},hahn_7:{frequencies:[261.6255653006,274.70684356563,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,488.36772189445,523.2511306012],description:"Paul Hahn's scale with 32 consonant 7-limit dyads. TL '99, see also smithgw_hahn12"},hahn_g:{frequencies:[261.6255653006,280.50183143454,294.66523452594,309.54379154736,331.87735433448,348.63486612079,373.78884718875,392.66259958718,420.99317852788,442.25042328711,464.58101193362,498.10049926644,523.2511306012],description:'fourth of sqrt(2)-1 octave "recursive" meantone, Paul Hahn'},hahnmaxr:{frequencies:[261.6255653006,275.93321340298,306.59245933664,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,436.04260883433,459.88868900496,490.54793493862,523.2511306012],description:"Paul Hahn's hahn_7 marvel projected to the 5-limit"},halfefg357777:{frequencies:[261.6255653006,280.31310567921,299.00064605783,320.35783506196,341.71502406609,375.57576268738,400.61414686654,429.2294430713,457.84473927605,490.54793493862,523.2511306012],description:"Half genus [357777]"},hamilton:{frequencies:[261.6255653006,274.08392555301,287.78812183066,302.93486508491,319.76457981184,338.57426097725,359.73515228832,383.71749577421,411.12588832951,426.35277308246,442.75095666255,479.64686971777,523.2511306012],description:"Elsie Hamilton's gamut, from article The Modes of Ancient Greek Music (1953)"},hamilton_jc:{frequencies:[261.6255653006,274.08392555301,287.78812183066,302.93486508491,319.76457981184,359.73515228832,338.57426097725,411.12588832951,383.71749577421,442.75095666255,426.35277308246,479.64686971777,523.2511306012],description:"Chalmers' permutation of Hamilton's gamut. Diatonic notes on white"},hamilton_jc2:{frequencies:[261.6255653006,274.08392555301,287.78812183066,302.93486508491,319.76457981184,359.73515228832,383.71749577421,411.12588832951,426.35277308246,442.75095666255,460.46099492906,479.64686971777,523.2511306012],description:"EH gamut, diatonic notes on white and drops 17 for 25. JC Dorian Harmonia on C"},hammond:{frequencies:[261.6255653006,226.52945288223,240.12209418,254.35818848669,269.43528366778,285.40970760065,302.50455987882,320.49131749323,339.40613876835,359.73515228832,381.06332337261,403.65087217807,427.65717404906,453.05890576445],description:'Hammond organ pitch wheel ratios, 1/1=320 Hz. Do "del 0" to get 12-tone scale'},hammond12:{frequencies:[261.6255653006,277.32410877127,293.76579515365,311.17877832054,329.62811300357,349.37146352202,370.1449018936,391.99018843668,415.46876743159,440.10130305006,466.18833124791,493.91391932426,523.2511306012],description:"Hammond organ scale, 1/1=277.0731707 Hz, A=440, see hammond for the ratios"},handblue:{frequencies:[261.6255653006,279.06726965397,294.32876096318,305.22982618403,327.03195662575,348.83408706747,366.27579142084,392.4383479509,406.97310157871,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:'"Handy Blues" of Pitch Palette, 7-limit'},handel:{frequencies:[261.6255653006,276.07055536165,292.89641271707,310.57937447136,328.79480940231,349.02322090701,368.4933346061,391.37619916626,414.10583283548,438.86859125239,465.61660972366,492.3908742288,523.2511306012],description:"Well temperament according to Georg Friedrich H\xEF\xBF\xBDndel's rules (c. 1780)"},hanson_19:{frequencies:[261.6255653006,272.52663052146,282.55561052465,294.32876096318,302.80736724606,313.95067836072,327.03195662575,340.65828815182,348.83408706747,363.36884069528,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,454.2110508691,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"JI version of Hanson's 19 out of 53-tET scale"},"harm-doreninv1":{frequencies:[261.6255653006,321.08592105074,327.03195662575,332.97799220076,380.54627680087,499.46698830115,511.35905945117,523.2511306012],description:"1st Inverted Schlesinger's Enharmonic Dorian Harmonia"},"harm-dorinv1":{frequencies:[261.6255653006,309.19384990071,321.08592105074,332.97799220076,380.54627680087,475.68284600109,499.46698830115,523.2511306012],description:"1st Inverted Schlesinger's Chromatic Dorian Harmonia"},"harm-lydchrinv1":{frequencies:[261.6255653006,322.00069575458,342.12573923925,362.25078272391,402.50086969323,483.00104363188,503.12608711654,523.2511306012],description:"1st Inverted Schlesinger's Chromatic Lydian Harmonia"},"harm-lydeninv1":{frequencies:[261.6255653006,342.12573923925,352.18826098158,362.25078272391,402.50086969323,503.12608711654,513.18860885887,523.2511306012],description:"1st Inverted Schlesinger's Enharmonic Lydian Harmonia"},"harm-mixochrinv1":{frequencies:[261.6255653006,336.37572681506,355.06326719367,373.75080757229,411.12588832951,485.87604984397,504.56359022259,523.2511306012],description:"1st Inverted Schlesinger's Chromatic Mixolydian Harmonia"},"harm-mixoeninv1":{frequencies:[261.6255653006,355.06326719367,364.40703738298,373.75080757229,411.12588832951,504.56359022259,513.90736041189,523.2511306012],description:"1st Inverted Schlesinger's Enharmonic Mixolydian Harmonia"},harm10:{frequencies:[261.6255653006,286.15296204753,294.32876096318,327.03195662575,331.11985608357,343.38355445704,367.91095120397,392.4383479509,400.61414686654,408.78994578219,441.49314144476,457.84473927605,515.07533168556,523.2511306012],description:"6/7/8/9/10 harmonics"},harm11s:{frequencies:[261.6255653006,65.40639132515,95.13656920022,104.65022612024,116.27802902249,130.8127826503,149.50032302891,174.41704353373,196.21917397545,209.30045224048,261.6255653006,327.03195662575,348.83408706747,392.4383479509,457.84473927605,523.2511306012,588.65752192635,654.0639132515,719.47030457665,1046.5022612024],description:"Harm. 1/4-11/4 and subh. 4/1-4/11. Joseph Pehrson 1999"},harm12s:{frequencies:[261.6255653006,294.32876096318,299.00064605783,327.03195662575,348.83408706747,359.73515228832,380.54627680087,392.4383479509,418.60090448096,457.84473927605,465.11211608996,523.2511306012],description:"Harmonics 1 to 12 and subharmonics mixed"},"harm15-30":{frequencies:[261.6255653006,279.06726965397,296.50897400735,313.95067836072,331.39238271409,348.83408706747,366.27579142084,383.71749577421,418.60090448096,436.04260883433,453.48431318771,488.36772189445,523.2511306012],description:"Harmonics 15 to 30"},harm15:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,408.78994578219,425.14154361347,441.49314144476,457.84473927605,474.19633710734,490.54793493862,506.89953276991],description:"Fifth octave of the harmonic overtone series"},"harm16-32":{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,408.78994578219,425.14154361347,441.49314144476,457.84473927605,474.19633710734,490.54793493862,506.89953276991,523.2511306012],description:"Harmonics 16-32 & Tom Stone's Guitar Scale"},harm16:{frequencies:[261.6255653006,523.2511306012,784.8766959018,1046.5022612024,1308.127826503,1569.7533918036,1831.3789571042,2093.0045224048,2354.6300877054,2616.255653006,2877.8812183066,3139.5067836072,3401.1323489078,3662.7579142084,3924.383479509,4186.0090448096,2093.0045224048,1395.33634826987,1046.5022612024,837.20180896192,697.66817413493,598.00129211566,523.2511306012,465.11211608996,418.60090448096,380.54627680087,348.83408706747,322.00069575458,299.00064605783,279.06726965397,261.6255653006],description:"First 16 harmonics and subharmonics"},"harm1c-dorian":{frequencies:[261.6255653006,309.19384990071,321.08592105074,332.97799220076,380.54627680087,475.68284600109,499.46698830115,523.2511306012],description:"Harm1C-Dorian"},"harm1c-hypod":{frequencies:[261.6255653006,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,457.84473927605,490.54793493862,523.2511306012],description:"HarmC-Hypodorian"},"harm1c-hypol":{frequencies:[261.6255653006,274.70684356563,287.78812183066,340.11323489078,366.27579142084,392.4383479509,418.60090448096,444.76346101102,523.2511306012],description:"HarmC-Hypolydian"},"harm1c-lydian":{frequencies:[261.6255653006,271.68808704293,281.75060878526,362.25078272391,382.37582620857,402.50086969323,422.62591317789,442.75095666255,523.2511306012],description:"Harm1C-Lydian"},"harm1c-mix":{frequencies:[261.6255653006,299.00064605783,373.75080757229,392.4383479509,411.12588832951,485.87604984397,504.56359022259,523.2511306012],description:"Harm1C-Con Mixolydian"},"harm1c-mixolydian":{frequencies:[261.6255653006,280.31310567921,299.00064605783,373.75080757229,411.12588832951,429.81342870813,448.50096908674,523.2511306012],description:"Harm1C-Mixolydian"},harm24:{frequencies:[261.6255653006,283.42769574232,305.22982618403,327.03195662575,348.83408706747,370.63621750918,392.4383479509,414.24047839262,436.04260883433,457.84473927605,479.64686971777,501.44900015948,523.2511306012],description:"Harmonics 12 to 24"},harm24_2:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,425.14154361347,457.84473927605,490.54793493862,523.2511306012],description:"Harmonics 12 to 24, mode 9"},harm3:{frequencies:[261.6255653006,327.03195662575,392.4383479509,457.84473927605],description:"Third octave of the harmonic overtone series"},"harm30-60":{frequencies:[261.6255653006,270.34641747729,279.06726965397,287.78812183066,296.50897400735,305.22982618403,313.95067836072,322.67153053741,331.39238271409,340.11323489078,348.83408706747,357.55493924415,366.27579142084,374.99664359753,383.71749577421,392.4383479509,401.15920012759,409.88005230427,418.60090448096,427.32175665765,436.04260883433,444.76346101102,453.48431318771,462.20516536439,470.92601754108,479.64686971777,488.36772189445,497.08857407114,505.80942624783,514.53027842451,523.2511306012],description:"Harmonics 30-60"},harm30:{frequencies:[261.6255653006,279.06726965397,288.69027895239,299.00064605783,310.07474405997,322.00069575458,334.88072358477,348.83408706747,364.00078650518,398.6675280771,418.60090448096,440.63253103259,465.11211608996,492.47165233054,523.2511306012,558.13453930795,598.00129211566,644.00139150917,697.66817413493,761.09255360175,837.20180896192,930.22423217991,1046.5022612024,1196.00258423131,1395.33634826987,1674.40361792384,2093.0045224048,2790.67269653973,4186.0090448096,8372.0180896192,8633.6436549198,8895.2692202204,9156.894785521,9418.5203508216,9680.1459161222,9941.7714814228,10203.3970467234,10465.022612024,10726.6481773246,10988.2737426252,11249.8993079258,11511.5248732264,11773.150438527,12034.7760038276,12296.4015691282,12558.0271344288,12819.6526997294,13081.27826503,13342.9038303306,13604.5293956312,13866.1549609318,14127.7805262324,14389.406091533,14651.0316568336,14912.6572221342,15174.2827874348,15435.9083527354,15697.533918036,15959.1594833366,16220.7850486372],description:"First 30 harmonics and subharmonics"},"harm32-64":{frequencies:[261.6255653006,269.80136421624,277.97716313189,286.15296204753,294.32876096318,302.50455987882,310.68035879446,318.85615771011,327.03195662575,335.20775554139,343.38355445704,351.55935337268,359.73515228832,367.91095120397,376.08675011961,384.26254903526,392.4383479509,400.61414686654,408.78994578219,416.96574469783,425.14154361347,433.31734252912,441.49314144476,449.66894036041,457.84473927605,466.02053819169,474.19633710734,482.37213602298,490.54793493862,498.72373385427,506.89953276991,515.07533168556,523.2511306012],description:"Harmonics 32-64"},harm37odd:{frequencies:[261.6255653006,269.80136421624,277.97716313189,286.15296204753,294.32876096318,302.50455987882,310.68035879446,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,408.78994578219,425.14154361347,441.49314144476,457.84473927605,474.19633710734,490.54793493862,506.89953276991,523.2511306012],description:"Odd harmonics until 37"},harm4:{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,392.4383479509,425.14154361347,457.84473927605,490.54793493862],description:"Fourth octave of the harmonic overtone series"},"harm6-12":{frequencies:[261.6255653006,269.80136421624,286.15296204753,294.32876096318,314.76825825228,327.03195662575,331.11985608357,343.38355445704,359.73515228832,367.91095120397,392.4383479509,400.61414686654,404.70204632437,408.78994578219,441.49314144476,449.66894036041,457.84473927605,490.54793493862,494.63583439645,515.07533168556,523.2511306012],description:"First 12 harmonics of 6th through 12th harmonics"},harm6:{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,392.4383479509,457.84473927605,523.2511306012],description:"Harmonics 6-12"},"harm60-30":{frequencies:[261.6255653006,280.31310567921,290.69507255622,313.95067836072,327.03195662575,348.83408706747,373.75080757229,392.4383479509,413.09299784305,436.04260883433,448.50096908674,490.54793493862,523.2511306012],description:"Harmonics 60 to 30 (Perkis)"},harm7lim:{frequencies:[261.6255653006,523.2511306012,784.8766959018,1046.5022612024,1308.127826503,1569.7533918036,1831.3789571042,2093.0045224048,2354.6300877054,2616.255653006,3139.5067836072,3662.7579142084,3924.383479509,4186.0090448096,4709.2601754108,5232.511306012,5494.1368713126,5755.7624366132,6279.0135672144,6540.639132515,7325.5158284168,7848.766959018,8372.0180896192,9156.894785521,9418.5203508216,10465.022612024,10988.2737426252,11773.150438527,12558.0271344288,12819.6526997294,13081.27826503,14651.0316568336,15697.533918036,16482.4106139378,16744.0361792384,18313.789571042,18837.0407016432,19621.917397545,20930.045224048,21191.6707893486,21976.5474852504,23546.300877054,25116.0542688576,25639.3053994588,26162.55653006,27470.684356563,29302.0633136672,31395.067836072],description:"7-limit harmonics"},harm8:{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,392.4383479509,425.14154361347,457.84473927605,490.54793493862,523.2511306012],description:"Harmonics 8-16"},harm9:{frequencies:[261.6255653006,294.32876096318,305.22982618403,327.03195662575,348.83408706747,356.10146388137,392.4383479509,406.97310157871,457.84473927605,465.11211608996,523.2511306012],description:"6/7/8/9 harmonics, First 9 overtones of 5th through 9th harmonics"},harm_bastard:{frequencies:[261.6255653006,299.00064605783,322.00069575458,348.83408706747,380.54627680087,418.60090448096,465.11211608996,523.2511306012],description:`Schlesinger's "Bastard" Hypodorian Harmonia & inverse 1)7 from 1.3.5.7.9.11.13`},harm_bastinv:{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,392.4383479509,425.14154361347,457.84473927605,523.2511306012],description:`Inverse Schlesinger's "Bastard" Hypodorian Harmonia & 1)7 from 1.3.5.7.9.11.13`},harm_darreg:{frequencies:[261.6255653006,1046.5022612024,1308.127826503,1569.7533918036,1831.3789571042,2093.0045224048,2354.6300877054,2616.255653006,2877.8812183066,3139.5067836072,3401.1323489078,3662.7579142084,3924.383479509,4186.0090448096,5232.511306012,6279.0135672144,7325.5158284168,8372.0180896192,9418.5203508216,10465.022612024,11511.5248732264,12558.0271344288,13604.5293956312,14651.0316568336,15697.533918036],description:"Darreg Harmonics 4-15"},harm_mean:{frequencies:[261.6255653006,270.06509966514,279.06726965397,299.00064605783,348.83408706747,392.4383479509,405.0976494977,418.60090448096,448.50096908674,523.2511306012],description:"Harm. Mean 9-tonic 8/7 is HM of 1/1 and 4/3, etc."},"harmc-hypop":{frequencies:[261.6255653006,319.76457981184,334.29933343966,348.83408706747,363.36884069528,377.90359432309,406.97310157871,465.11211608996,494.18162334558,523.2511306012],description:"HarmC-Hypophrygian"},"harmd-15":{frequencies:[261.6255653006,279.06726965397,313.95067836072,348.83408706747,383.71749577421,418.60090448096,453.48431318771,523.2511306012],description:"HarmD-15-Harmonia"},"harmd-conmix":{frequencies:[261.6255653006,299.00064605783,336.37572681506,392.4383479509,411.12588832951,448.50096908674,485.87604984397,523.2511306012],description:"HarmD-ConMixolydian"},"harmd-hypod":{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,376.08675011961,392.4383479509,425.14154361347,457.84473927605,490.54793493862,523.2511306012],description:"HarmD-Hypodorian"},"harmd-hypol":{frequencies:[261.6255653006,287.78812183066,313.95067836072,340.11323489078,366.27579142084,392.4383479509,418.60090448096,470.92601754108,523.2511306012],description:"HarmD-Hypolydian"},"harmd-hypop":{frequencies:[261.6255653006,290.69507255622,319.76457981184,348.83408706747,363.36884069528,377.90359432309,406.97310157871,436.04260883433,465.11211608996,523.2511306012],description:"HarmD-Hypophrygian"},"harmd-lyd":{frequencies:[261.6255653006,281.75060878526,301.87565226992,322.00069575458,362.25078272391,382.37582620857,402.50086969323,442.75095666255,483.00104363188,523.2511306012],description:"HarmD-Lydian"},"harmd-mix":{frequencies:[261.6255653006,299.00064605783,336.37572681506,373.75080757229,411.12588832951,448.50096908674,485.87604984397,523.2511306012],description:"HarmD-Mixolydian. Harmonics 7-14"},"harmd-phr":{frequencies:[261.6255653006,272.52663052146,283.42769574232,294.32876096318,305.22982618403,348.83408706747,327.03195662575,392.4383479509,414.24047839262,436.04260883433,457.84473927605,479.64686971777,523.2511306012],description:"HarmD-Phryg (with 5 extra tones)"},"harme-hypod":{frequencies:[261.6255653006,343.38355445704,351.55935337268,359.73515228832,376.08675011961,392.4383479509,490.54793493862,506.89953276991,523.2511306012],description:"HarmE-Hypodorian"},"harme-hypol":{frequencies:[261.6255653006,281.24748269815,274.70684356563,340.11323489078,366.27579142084,392.4383479509,405.51962621593,418.60090448096,523.2511306012],description:"HarmE-Hypolydian"},"harme-hypop":{frequencies:[261.6255653006,334.29933343966,341.56671025356,348.83408706747,363.36884069528,377.90359432309,406.97310157871,494.18162334558,508.71637697339,523.2511306012],description:"HarmE-Hypophrygian"},"harmjc-15":{frequencies:[261.6255653006,280.31310567921,301.87565226992,313.95067836072,327.03195662575,356.76213450082,373.75080757229,392.4383479509,413.09299784305,436.04260883433,461.69217405988,490.54793493862,523.2511306012],description:"Rationalized JC Sub-15 Harmonia on C. MD=15, No planetary assignment."},"harmjc-17-2":{frequencies:[261.6255653006,277.97716313189,296.50897400735,317.68818643644,342.12573923925,370.63621750918,386.75083566176,404.33041910093,423.58424858192,444.76346101102,468.17206422213,494.18162334558,523.2511306012],description:"Rationalized JC Sub-17 Harmonia on C. MD=17, No planetary assignment."},"harmjc-17":{frequencies:[261.6255653006,269.55361273395,277.97716313189,296.50897400735,317.68818643644,342.12573923925,355.81076880882,370.63621750918,386.75083566176,404.33041910093,423.58424858192,444.76346101102,523.2511306012],description:"Rationalized JC Sub-17 Harmonia on C. MD=17, No planetary assignment."},"harmjc-19-2":{frequencies:[261.6255653006,276.16031892841,292.40504357126,310.68035879446,331.39238271409,355.06326719367,368.21375857121,382.37582620857,397.67085925691,414.24047839262,432.2509339749,451.89870370104,523.2511306012],description:"Rationalized JC Sub-19 Harmonia on C. MD=19, No planetary assignment."},"harmjc-19":{frequencies:[261.6255653006,276.16031892841,292.40504357126,310.68035879446,331.39238271409,355.06326719367,382.37582620857,414.24047839262,432.2509339749,451.89870370104,473.41768959156,497.08857407114,523.2511306012],description:"Rationalized JC Sub-19 Harmonia on C. MD=19, No planetary assignment."},"harmjc-21":{frequencies:[261.6255653006,268.0066766494,274.70684356563,289.16509849014,305.22982618403,343.38355445704,366.27579142084,392.4383479509,406.97310157871,422.62591317789,439.53094970501,457.84473927605,523.2511306012],description:"Rationalized JC Sub-21 Harmonia on C. MD=21, No planetary assignment."},"harmjc-23-2":{frequencies:[261.6255653006,273.51763645063,286.54228580542,300.86940009569,316.70463167967,334.29933343966,353.96400011258,376.08675011961,401.15920012759,429.81342870813,462.87600014722,501.44900015948,523.2511306012],description:"Rationalized JC Sub-23 Harmonia on C. MD=23, No planetary assignment."},"harmjc-23":{frequencies:[261.6255653006,273.51763645063,300.86940009569,316.70463167967,334.29933343966,376.08675011961,401.15920012759,429.81342870813,445.73244458621,462.87600014722,481.3910401531,501.44900015948,523.2511306012],description:"Rationalized JC Sub-23 Harmonia on C. MD=23, No planetary assignment."},"harmjc-25":{frequencies:[261.6255653006,272.52663052146,297.30177875068,311.45900631024,327.03195662575,363.36884069528,384.74347838324,408.78994578219,436.04260883433,467.18850946536,484.4917875937,503.12608711654,523.2511306012],description:"Rationalized JC Sub-25 Harmonia on C. MD=25, No planetary assignment."},"harmjc-27":{frequencies:[261.6255653006,271.68808704293,294.32876096318,307.12566361375,321.08592105074,353.19451315581,371.78369805875,392.4383479509,415.52295665389,441.49314144476,470.92601754108,504.56359022259,523.2511306012],description:"Rationalized JC Sub-27 Harmonia on C. MD=27, No planetary assignment."},"harmjc-hypod16":{frequencies:[261.6255653006,279.06726965397,299.00064605783,310.07474405997,322.00069575458,348.83408706747,364.00078650518,380.54627680087,398.6675280771,418.60090448096,440.63253103259,465.11211608996,523.2511306012],description:"Rationalized JC Hypodorian Harmonia on C. Saturn Scale on C, MD=16. (Steiner)"},"harmjc-hypol20":{frequencies:[261.6255653006,275.39533189537,290.69507255622,307.79478270659,327.03195662575,348.83408706747,373.75080757229,402.50086969323,418.60090448096,436.04260883433,455.00098313148,575.57624366132,523.2511306012],description:"Rationalized JC Hypolydian Harmonia on C. Mars scale on C., MD=20"},"harmjc-hypop18":{frequencies:[261.6255653006,277.01530443593,294.32876096318,313.95067836072,336.37572681506,362.25078272391,376.74081403286,392.4383479509,409.50088481833,428.11456140098,448.50096908674,470.92601754108,523.2511306012],description:"Rationalized JC Hypophrygian Harmonia on C. Jupiter scale on C, MD =18"},"harmjc-lydian13":{frequencies:[261.6255653006,272.09058791262,283.42769574232,295.75063903546,309.19384990071,340.11323489078,358.01393146398,377.90359432309,400.13321751856,425.14154361347,453.48431318771,485.87604984397,523.2511306012],description:"Rationalized JC Lydian Harmonia on C. Mercury scale on C, MD = 26 or 13"},"harmjc-mix14":{frequencies:[261.6255653006,271.31540105247,281.75060878526,293.02063313667,305.22982618403,332.97799220076,348.83408706747,366.27579142084,385.55346465352,406.97310157871,430.91269578922,457.84473927605,523.2511306012],description:"Rationalized JC Mixolydian Harmonia on C. Moon Scale on C, MD = 14"},"harmjc-phryg12":{frequencies:[261.6255653006,273.00058987889,285.40970760065,299.00064605783,313.95067836072,348.83408706747,369.35373924791,392.4383479509,418.60090448096,448.50096908674,465.11211608996,483.00104363188,523.2511306012],description:"Rationalized JC Phrygian Harmonia on C. Venus scale on C, MD = 24 or 12"},harmonical:{frequencies:[261.6255653006,290.69507255622,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,457.84473927605,470.92601754108,490.54793493862,523.2511306012],description:"See pp 17 and 466-468 Helmholtz. lower 4 oct. Instr. designed & tuned by Ellis"},harmonical_up:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,359.73515228832,457.84473927605,392.4383479509,408.78994578219,425.14154361347,474.19633710734,490.54793493862,523.2511306012],description:"Upper 2 octaves of Ellis's Harmonical"},harmsub16:{frequencies:[261.6255653006,280.31310567921,294.32876096318,301.87565226992,327.03195662575,356.76213450082,359.73515228832,392.4383479509,425.14154361347,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"16 harmonics on 1/1 and 16 subharmonics on 15/8"},harrison_16:{frequencies:[261.6255653006,279.06726965397,290.69507255622,299.00064605783,305.22982618403,313.95067836072,327.03195662575,348.83408706747,370.63621750918,392.4383479509,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,490.54793493862,523.2511306012],description:'Lou Harrison 16-tone superparticular "Ptolemy Duple"'},harrison_5:{frequencies:[261.6255653006,279.06726965397,313.95067836072,392.4383479509,418.60090448096,523.2511306012],description:"From Lou Harrison, a pelog style pentatonic"},harrison_5_1:{frequencies:[261.6255653006,285.40970760065,313.95067836072,392.4383479509,418.60090448096,523.2511306012],description:"From Lou Harrison, a pelog style pentatonic"},harrison_5_3:{frequencies:[261.6255653006,271.31540105247,348.83408706747,392.4383479509,406.97310157871,523.2511306012],description:"From Lou Harrison, a pelog style pentatonic"},harrison_5_4:{frequencies:[261.6255653006,279.06726965397,313.95067836072,392.4383479509,490.54793493862,523.2511306012],description:"From Lou Harrison, a pelog style pentatonic"},harrison_8:{frequencies:[261.6255653006,279.06726965397,313.95067836072,327.03195662575,367.91095120397,392.4383479509,436.04260883433,465.11211608996,523.2511306012],description:'Lou Harrison 8-tone tuning for "Serenade for Guitar"'},harrison_cinna:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,343.38355445704,367.91095120397,392.4383479509,418.60090448096,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:`Lou Harrison, "Incidental Music for Corneille's Cinna" (1955-56) 1/1=C`},harrison_diat:{frequencies:[261.6255653006,274.70684356563,313.95067836072,348.83408706747,392.4383479509,412.06026534844,470.92601754108,523.2511306012],description:"From Lou Harrison, a soft diatonic"},harrison_joy:{frequencies:[261.6255653006,294.32876096318,327.03195662575,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"Lou Harrison's Joyous 6"},harrison_mid:{frequencies:[261.6255653006,294.32876096318,313.95067836072,348.83408706747,392.4383479509,436.04260883433,457.84473927605,523.2511306012],description:"Lou Harrison mid mode"},harrison_mid2:{frequencies:[261.6255653006,294.32876096318,313.95067836072,348.83408706747,392.4383479509,448.50096908674,470.92601754108,523.2511306012],description:"Lou Harrison mid mode 2"},harrison_min:{frequencies:[261.6255653006,313.95067836072,348.83408706747,392.4383479509,436.04260883433,523.2511306012],description:"From Lou Harrison, a symmetrical pentatonic with minor thirds"},harrison_mix1:{frequencies:[261.6255653006,285.40970760065,313.95067836072,392.4383479509,425.14154361347,523.2511306012],description:'A "mixed type" pentatonic, Lou Harrison'},harrison_mix2:{frequencies:[261.6255653006,313.95067836072,348.83408706747,392.4383479509,490.54793493862,523.2511306012],description:'A "mixed type" pentatonic, Lou Harrison'},harrison_mix3:{frequencies:[261.6255653006,313.95067836072,336.37572681506,392.4383479509,418.60090448096,523.2511306012],description:'A "mixed type" pentatonic, Lou Harrison'},harrison_mix4:{frequencies:[261.6255653006,280.31310567921,327.03195662575,392.4383479509,448.50096908674,523.2511306012],description:'A "mixed type" pentatonic, Lou Harrison'},harrison_songs:{frequencies:[261.6255653006,271.31540105247,294.32876096318,310.07474405997,327.03195662575,348.83408706747,367.91095120397,392.4383479509,406.97310157871,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:'Shared gamut of "Four Strict Songs" (1951-55), each pentatonic'},harrisonj:{frequencies:[261.6255653006,272.17712546173,292.13970819848,313.56642833783,326.21280531667,350.13858362887,364.25994396351,390.97625694066,406.744629928,436.57694340361,468.59728067062,487.49616921257,523.2511306012],description:"John Harrison's temperament (1775), almost 3/10-comma. Third = 1200/pi"},harrisonm_rev:{frequencies:[261.6255653006,257.53766584278,294.32876096318,289.72987407313,331.11985608357,343.38355445704,372.50983809402,392.4383479509,386.30649876417,441.49314144476,457.84473927605,496.67978412536,523.2511306012],description:'Michael Harrison, piano tuning for "Revelation" (2001), 1/1=F'},haverstick13:{frequencies:[261.6255653006,283.85429714132,301.75671459889,307.97166902637,320.78822215662,341.02002673508,362.52783176564,377.61479489998,401.43059675514,426.7484383229,444.50800708553,482.27514684959,502.34551296122,523.2511306012],description:"Neil Haverstick, scale in 34-tET, MMM 21-5-2006"},hawkes:{frequencies:[261.6255653006,274.56549986328,292.86986732103,310.24975557428,327.84547867349,349.70184487387,366.99801003998,391.46454285105,411.84824958905,438.2147004401,467.42901507992,490.54793493862,523.2511306012],description:"William Hawkes' modified 1/5-comma meantone (1807)"},hawkes2:{frequencies:[261.6255653006,275.15193010334,293.04845178801,312.10900487995,328.24542585003,349.59527202198,367.66978141816,391.58387939843,411.8292495232,438.61558204759,467.14415995873,491.2960898965,523.2511306012],description:"Meantone with fifth tempered 1/6 of 53-tET step by William Hawkes (1808)"},hawkes3:{frequencies:[261.6255653006,274.56549986328,292.86986732103,311.6193417424,327.84547867349,349.70184487387,366.99801003998,391.46454285105,411.84824958905,438.2147004401,467.42901237995,490.54793493862,523.2511306012],description:"William Hawkes' modified 1/5-comma meantone (1811)"},hbarnes:{frequencies:[261.6255653006,276.71351472429,293.33333347996,310.95136287868,328.88393162803,349.42547049952,369.15973155124,391.77416758435,414.83597850347,439.25532436715,466.16376151809,493.04743111995,523.2511306012],description:"Variation on Barnes with 1/6P -> 1/8P. OdC '99"},hebdome1:{frequencies:[261.6255653006,265.71346475842,267.23182741418,269.80136421624,273.30527803723,280.31310567921,283.42769574232,287.78812183066,289.07289023169,292.28481123426,294.32876096318,300.63580584096,303.67253115248,308.34441624714,311.77046531655,315.35224388912,318.85615771011,323.76163705949,327.03195662575,334.03978426773,336.37572681506,340.11323489078,341.63159754654,346.88746827803,350.74177348112,359.73515228832,364.40703738298,367.91095120397,370.01329949656,375.7947573012,382.62738925213,385.43052030892,389.71308164569,392.4383479509,400.84774112128,404.70204632437,409.95791705585,411.12588832951,417.54973033466,420.46965851882,425.14154361347,431.68218274599,437.28844485957,441.49314144476,445.38637902364,449.66894036041,455.50879672872,462.5166243707,467.65569797482,470.92601754108,478.28423656516,479.64686971777,485.87604984397,490.54793493862,501.0596764016,504.56359022259,510.16985233617,513.90736041189,523.2511306012],description:"Wilson 1.3.5.7.9.11.13.15 hebdomekontany, 1.3.5.7 tonic"},helmholtz:{frequencies:[261.6255653006,279.06726965397,327.03195662575,348.83408706747,392.4383479509,418.60090448096,490.54793493862,523.2511306012],description:"Helmholtz's Chromatic scale and Gipsy major from Slovakia"},helmholtz_24:{frequencies:[261.6255653006,275.93321340298,279.06726965397,290.69507255622,294.32876096318,306.59245933664,310.07474405997,327.03195662575,331.11985608357,344.91651675372,348.83408706747,367.91095120397,372.50983809402,388.03108134794,392.4383479509,408.78994578219,413.89982010446,436.04260883433,441.49314144476,459.88868900496,465.63729761752,490.54793493862,496.67978412536,517.37477513058,523.2511306012],description:"Simplified Helmholtz 24"},helmholtz_hd:{frequencies:[261.6255653006,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,470.92601754108,523.2511306012],description:"Helmholtz Harmonic Decad"},helmholtz_pure:{frequencies:[261.6255653006,275.93321340298,279.06726965397,290.69507255622,294.32876096318,306.59245933664,310.07474405997,327.03195662575,330.74639366397,344.91651675372,348.83408706747,367.91095120397,372.08969287196,387.59343007496,392.4383479509,408.78994578219,413.43299207996,436.04260883433,441.49314144476,459.88868900496,465.11211608996,490.54793493862,496.11959049595,516.79124009995,523.2511306012],description:"Helmholtz's two-keyboard harmonium tuning untempered"},helmholtz_temp:{frequencies:[261.6255653006,275.81645389904,279.10671937395,290.77707354032,294.24580701304,306.54917537161,310.20605716322,327.03195662575,330.9330448436,344.77062435684,348.88325535732,367.80710710303,372.19474608839,387.75741156435,392.38304142029,408.78994578219,413.66637442451,436.10414127513,441.30625330017,459.75895986689,465.24324076996,490.4788828408,496.3296094287,517.08305349316,523.2511306012],description:"Helmholtz's two-keyboard harmonium tuning"},hem_chrom:{frequencies:[261.6255653006,269.55361273395,285.40970760065,348.83408706747,392.4383479509,404.33041910093,428.11456140098,523.2511306012],description:"Hemiolic Chromatic genus has the strong or 1:2 division of the 12/11 pyknon"},hem_chrom11:{frequencies:[261.6255653006,273.00058987889,285.40970760065,348.83408706747,392.4383479509,409.50088481833,428.11456140098,523.2511306012],description:"11'al Hemiolic Chromatic genus with a CI of 11/9, Winnington-Ingram"},hem_chrom13:{frequencies:[261.6255653006,272.09058791262,283.42769574232,348.83408706747,392.4383479509,408.13588186894,425.14154361347,523.2511306012],description:"13'al Hemiolic Chromatic or neutral-third genus has a CI of 16/13"},hem_chrom2:{frequencies:[261.6255653006,269.29177952703,285.30470202322,349.22823143301,391.99543598175,403.48177901006,427.47405410759,523.2511306012],description:"1:2 Hemiolic Chromatic genus 3 + 6 + 21 parts"},hemiwuer24:{frequencies:[261.6255653006,274.60778382002,280.48822448524,286.49458884928,292.62957327549,307.15025309186,313.72755695954,320.44570714783,327.30771955335,350.90592546776,358.42021185082,366.09540888186,373.9349620795,392.49012653442,400.89489544613,409.47964376542,418.24822532303,439.00227453173,448.4030528436,458.00513880662,467.8128437444,491.02635713596,501.54117720983,512.28116095218,523.2511306012],description:"Hemiw\xEF\xBF\xBDrschmidt[24] in 229-tET tuning."},hen12:{frequencies:[261.6255653006,280.31310567921,299.00064605783,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,448.50096908674,457.84473927605,490.54793493862,523.2511306012],description:"Adjusted Hahn12"},hen22:{frequencies:[261.6255653006,272.52663052146,280.31310567921,290.69507255622,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,363.36884069528,366.27579142084,381.53728273004,392.4383479509,415.27867508032,418.60090448096,436.04260883433,448.50096908674,457.84473927605,484.4917875937,490.54793493862,508.71637697339,523.2511306012],description:"Adjusted Hahn22"},hept_diamond:{frequencies:[261.6255653006,269.10058145205,271.31540105247,279.06726965397,294.32876096318,305.22982618403,313.95067836072,316.53463456122,325.57848126297,327.03195662575,334.88072358477,336.37572681506,348.83408706747,392.4383479509,406.97310157871,408.78994578219,418.60090448096,420.46965851882,432.48307733364,436.04260883433,448.50096908674,465.11211608996,490.54793493862,504.56359022259,508.71637697339,523.2511306012],description:"Inverted-Prime Heptatonic Diamond based on Archytas's Enharmonic"},hept_diamondi:{frequencies:[261.6255653006,269.10058145205,271.31540105247,279.06726965397,281.36411960997,289.40309445597,294.32876096318,297.67175429757,327.03195662575,336.37572681506,348.83408706747,361.75386806997,367.91095120397,372.08969287196,378.42269266694,392.4383479509,406.97310157871,418.60090448096,459.88868900496,465.11211608996,473.02836583367,486.54346200035,490.54793493862,504.56359022259,508.71637697339,523.2511306012],description:"Prime-Inverted Heptatonic Diamond based on Archytas's Enharmonic"},hept_diamondp:{frequencies:[261.6255653006,269.10058145205,271.31540105247,279.06726965397,294.32876096318,305.22982618403,313.95067836072,327.03195662575,336.37572681506,339.14425131559,348.83408706747,358.80077526939,361.75386806997,367.91095120397,372.08969287196,378.42269266694,381.53728273004,392.4383479509,403.65087217807,406.97310157871,418.60090448096,436.04260883433,448.50096908674,465.11211608996,490.54793493862,504.56359022259,508.71637697339,523.2511306012],description:"Heptatonic Diamond based on Archytas's Enharmonic, 27 tones"},herf:{frequencies:[261.6255653006,269.80136421624,277.97716313189,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,425.14154361347,441.49314144476,457.84473927605,490.54793493862,523.2511306012],description:"Sims:Reflections on This and That, 1991. Used by Herf in Ekmelischer Gesang"},heun:{frequencies:[261.6255653006,275.15237829755,293.0485888979,312.10878854255,328.24573110938,349.59519124833,367.67029324081,391.58396987353,411.83001550364,438.61588607285,467.14394139401,491.29666030217,523.2511306012],description:"Well temperament for organ of Jan Heun (1805), subset of 55-tET"},hexagonal13:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Star hexagonal 13-tone scale"},hexagonal37:{frequencies:[261.6255653006,272.52663052146,279.06726965397,282.55561052465,283.88190679319,290.69507255622,294.32876096318,297.67175429757,301.39265122629,306.59245933664,313.95067836072,322.99452506247,327.03195662575,334.88072358477,340.65828815182,348.83408706747,353.19451315581,363.36884069528,367.91095120397,372.08969287196,376.74081403286,387.59343007496,392.4383479509,401.85686830172,408.78994578219,418.60090448096,423.83341578697,436.04260883433,446.50763144636,454.2110508691,459.88868900496,465.11211608996,470.92601754108,482.22824196207,484.4917875937,490.54793493862,502.32108537715,523.2511306012],description:"Star hexagonal 37-tone scale"},hexany1:{frequencies:[261.6255653006,305.22982618403,327.03195662575,381.53728273004,436.04260883433,457.84473927605,523.2511306012],description:"Two out of 1 3 5 7 hexany on 1.3"},hexany10:{frequencies:[261.6255653006,294.32876096318,327.03195662575,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"1.3.5.9 Hexany"},hexany11:{frequencies:[261.6255653006,294.32876096318,305.22982618403,343.38355445704,392.4383479509,457.84473927605,523.2511306012],description:"1.3.7.9 Hexany on 1.3"},hexany12:{frequencies:[261.6255653006,290.69507255622,305.22982618403,339.14425131559,406.97310157871,436.04260883433,523.2511306012],description:"3.5.7.9 Hexany on 3.9"},hexany13:{frequencies:[261.6255653006,285.40970760065,327.03195662575,356.76213450082,392.4383479509,475.68284600109,523.2511306012],description:"1.3.5.11 Hexany on 1.11"},hexany14:{frequencies:[261.6255653006,287.78812183066,340.11323489078,383.71749577421,453.48431318771,498.83274450648,523.2511306012],description:"5.11.13.15 Hexany (5.15), used in The Giving, by Stephen J. Taylor"},hexany15:{frequencies:[261.6255653006,327.03195662575,348.83408706747,392.4383479509,418.60090448096,523.2511306012],description:"1.3.5.15 2)4 hexany (1.15 tonic) degenerate, symmetrical pentatonic"},hexany16:{frequencies:[261.6255653006,294.32876096318,348.83408706747,392.4383479509,465.11211608996,523.2511306012],description:"1.3.9.27 Hexany, a degenerate pentatonic form"},hexany17:{frequencies:[261.6255653006,327.03195662575,334.88072358477,408.78994578219,418.60090448096,523.2511306012],description:"1.5.25.125 Hexany, a degenerate pentatonic form"},hexany18:{frequencies:[261.6255653006,299.00064605783,341.71502406609,400.61414686654,457.84473927605,523.2511306012],description:"1.7.49.343 Hexany, a degenerate pentatonic form"},hexany19:{frequencies:[261.6255653006,299.00064605783,327.03195662575,418.60090448096,457.84473927605,523.2511306012],description:"1.5.7.35 Hexany, a degenerate pentatonic form"},hexany2:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,340.65828815182,348.83408706747,363.36884069528,392.4383479509,408.78994578219,436.04260883433,490.54793493862,523.2511306012],description:"Hexany Cluster 2"},hexany20:{frequencies:[261.6255653006,279.06726965397,305.22982618403,398.6675280771,436.04260883433,465.11211608996,523.2511306012],description:"3.5.7.105 Hexany"},hexany21:{frequencies:[261.6255653006,279.06726965397,310.07474405997,392.4383479509,436.04260883433,465.11211608996,523.2511306012],description:"3.5.9.135 Hexany"},hexany21a:{frequencies:[261.6255653006,279.06726965397,310.07474405997,348.83408706747,392.4383479509,436.04260883433,465.11211608996,523.2511306012],description:"3.5.9.135 Hexany + 4/3. Is Didymos Diatonic tetrachord on 1/1 and inv. on 3/2"},hexany22:{frequencies:[261.6255653006,276.76092858245,359.73515228832,380.54627680087,494.63583439645,523.2511306012],description:"1.11.121.1331 Hexany, a degenerate pentatonic form"},hexany23:{frequencies:[261.6255653006,348.83408706747,359.73515228832,380.54627680087,392.4383479509,523.2511306012],description:"1.3.11.33 Hexany, degenerate pentatonic form"},hexany24:{frequencies:[261.6255653006,327.03195662575,359.73515228832,380.54627680087,418.60090448096,523.2511306012],description:"1.5.11.55 Hexany, a degenerate pentatonic form"},hexany25:{frequencies:[261.6255653006,299.00064605783,359.73515228832,380.54627680087,457.84473927605,523.2511306012],description:"1.7.11.77 Hexany, a degenerate pentatonic form"},hexany26:{frequencies:[261.6255653006,294.32876096318,359.73515228832,380.54627680087,465.11211608996,523.2511306012],description:"1.9.11.99 Hexany, a degenerate pentatonic form"},hexany3:{frequencies:[261.6255653006,272.52663052146,290.69507255622,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Hexany Cluster 3"},hexany4:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,376.74081403286,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Hexany Cluster 4"},hexany49:{frequencies:[261.6255653006,299.00064605783,305.22982618403,392.4383479509,400.61414686654,457.84473927605,523.2511306012],description:"1.3.21.49 2)4 hexany (1.21 tonic)"},hexany5:{frequencies:[261.6255653006,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Hexany Cluster 5"},hexany6:{frequencies:[261.6255653006,272.52663052146,290.69507255622,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,490.54793493862,523.2511306012],description:"Hexany Cluster 6"},hexany7:{frequencies:[261.6255653006,272.52663052146,313.95067836072,327.03195662575,348.83408706747,363.36884069528,392.4383479509,408.78994578219,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Hexany Cluster 7"},hexany8:{frequencies:[261.6255653006,272.52663052146,313.95067836072,327.03195662575,340.65828815182,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,490.54793493862,502.32108537715,523.2511306012],description:"Hexany Cluster 8"},hexany9:{frequencies:[261.6255653006,299.00064605783,313.95067836072,358.80077526939,418.60090448096,448.50096908674,523.2511306012],description:"1.3.5.7 Hexany on 5.7"},hexany_cl:{frequencies:[261.6255653006,294.32876096318,301.39265122629,313.95067836072,327.03195662575,348.83408706747,353.19451315581,376.74081403286,392.4383479509,418.60090448096,470.92601754108,502.32108537715,523.2511306012],description:"Hexany Cluster 1"},hexany_cl2:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,408.78994578219,418.60090448096,490.54793493862,502.32108537715,523.2511306012],description:"Composed of 1.3.5.45, 1.3.5.75, 1.3.5.9, and 1.3.5.25 hexanies"},hexany_flank:{frequencies:[261.6255653006,267.07609791103,299.00064605783,305.22982618403,327.03195662575,348.83408706747,373.75080757229,381.53728273004,427.14378008261,436.04260883433,457.84473927605,498.33441009638,523.2511306012],description:"Hexany Flanker, 7-limit, from Wilson"},hexany_tetr:{frequencies:[261.6255653006,269.10058145205,279.06726965397,336.37572681506,348.83408706747,358.80077526939,523.2511306012],description:"Complex 12 of p. 115, a hexany based on Archytas's Enharmonic"},hexany_trans:{frequencies:[261.6255653006,271.31540105247,279.06726965397,339.14425131559,348.83408706747,361.75386806997,523.2511306012],description:"Complex 1 of p. 115, a hexany based on Archytas's Enharmonic"},hexany_trans2:{frequencies:[261.6255653006,271.31540105247,279.06726965397,348.83408706747,358.80077526939,372.08969287196,523.2511306012],description:"Complex 2 of p. 115, a hexany based on Archytas's Enharmonic"},hexany_trans3:{frequencies:[261.6255653006,271.31540105247,279.06726965397,327.03195662575,336.37572681506,348.83408706747,523.2511306012],description:"Complex 9 of p. 115, a hexany based on Archytas's Enharmonic"},hexany_u2:{frequencies:[261.6255653006,274.70684356563,279.06726965397,280.31310567921,286.15296204753,299.00064605783,305.22982618403,313.95067836072,327.03195662575,343.38355445704,348.83408706747,358.80077526939,366.27579142084,373.75080757229,381.53728273004,392.4383479509,398.6675280771,418.60090448096,436.04260883433,448.50096908674,457.84473927605,478.40103369253,488.36772189445,490.54793493862,498.33441009638,523.2511306012],description:"Hexany union = genus [335577] minus two corners"},hexany_union:{frequencies:[261.6255653006,274.70684356563,280.31310567921,299.00064605783,305.22982618403,313.95067836072,327.03195662575,348.83408706747,358.80077526939,366.27579142084,373.75080757229,381.53728273004,392.4383479509,418.60090448096,436.04260883433,448.50096908674,457.84473927605,488.36772189445,498.33441009638,523.2511306012],description:"The union of all of the pitches of the 1.3.5.7 hexany on each tone as 1/1"},hexany_urot:{frequencies:[261.6255653006,267.07609791103,280.31310567921,286.15296204753,290.69507255622,299.00064605783,305.22982618403,327.03195662575,333.84512238879,343.38355445704,348.83408706747,356.10146388137,373.75080757229,381.53728273004,392.4383479509,400.61414686654,406.97310157871,436.04260883433,445.12682985172,448.50096908674,457.84473927605,490.54793493862,498.33441009638,508.71637697339,523.2511306012],description:"Aggregate rotations of 1.3.5.7 hexany, 1.3 = 1/1"},hexanys:{frequencies:[261.6255653006,286.15296204753,294.32876096318,327.03195662575,343.38355445704,367.91095120397,392.4383479509,429.2294430713,441.49314144476,457.84473927605,490.54793493862,515.07533168556,523.2511306012],description:"Hexanys 1 3 5 7 9"},hexanys2:{frequencies:[261.6255653006,314.76825825228,425.14154361347,457.84473927605,269.80136421624,371.99885066179,392.4383479509,472.15238737843,318.85615771011,359.73515228832,343.38355445704,292.28481123426,523.2511306012],description:"Hexanys 1 3 7 11 13"},higgs:{frequencies:[261.6255653006,392.4383479509,418.60090448096,422.62591317789,423.58424858192,425.14154361347,436.04260883433,523.2511306012],description:"From Greg Higgs announcement of the formation of an Internet Tuning list"},hinsz_gr:{frequencies:[261.6255653006,274.68983337859,292.34127285051,310.07474405997,326.6631048533,348.83408706747,366.25311135453,391.11111150212,412.03474986192,437.02884834934,465.11211608996,489.99465727995,523.2511306012],description:"Reconstructed Hinsz temperament, organ Pelstergasthuiskerk Groningen. Ortgies,2002"},hipkins:{frequencies:[261.6255653006,275.62199471997,299.00064605783,348.83408706747,392.4383479509,413.43299207996,448.50096908674,523.2511306012],description:"Hipkins' Chromatic"},hirajoshi:{frequencies:[261.6255653006,291.13134764929,317.84796618517,388.16504068057,412.91271853531,523.2511306012],description:"Observed Japanese pentatonic koto scale. Helmholtz/Ellis p.519, nr.112"},hirajoshi2:{frequencies:[261.6255653006,294.32876096318,313.95067836072,392.4383479509,418.60090448096,523.2511306012],description:"Japanese pentatonic koto scale, theoretical. Helmholz/Ellis p.519, nr.110"},hirajoshi3:{frequencies:[261.6255653006,292.47977325983,321.54118165335,396.32121331049,415.54465627623,522.94897617031],description:"Observed Japanese pentatonic koto scale. Helmholtz/Ellis p.519, nr.111"},hirashima:{frequencies:[261.6255653006,277.33928225406,292.50627485027,312.00669222389,327.03195662575,349.91912034749,369.78570985692,391.22147055517,416.00892317314,437.39889945791,468.01003810189,489.02683710225,523.2511306012],description:"Tatsushi Hirashima, temperament of chapel organ of Kobe Shoin Women's Univ."},hjelmboogie:{frequencies:[261.6255653006,294.32876096318,327.03195662575,343.38355445704,367.91095120397,392.4383479509,441.49314144476,457.84473927605,490.54793493862,515.07533168556,523.2511306012],description:`Paul Hjelmstad's "Boogie Woogie" scale, TL 20-3-2006`},ho_mai_nhi:{frequencies:[261.6255653006,287.78812183066,348.83408706747,392.4383479509,431.68218274599,523.2511306012],description:"Ho Mai Nhi (Nam Hue) dan tranh scale, Vietnam"},hochgartz:{frequencies:[261.6255653006,274.56549986328,292.86986732103,309.86458629683,327.84547867349,349.70184487387,366.99801003998,391.46454285105,412.49999887294,438.2147004401,465.53241962975,490.54793493862,523.2511306012],description:"Michael Hochgartz, modified 1/5-comma meantone temperament"},hofmann1:{frequencies:[261.6255653006,262.65154790962,279.06726965397,348.83408706747,392.4383479509,393.97732186443,418.60090448096,523.2511306012],description:"Hofmann's Enharmonic #1, Dorian mode"},hofmann2:{frequencies:[261.6255653006,263.56353245097,279.06726965397,348.83408706747,392.4383479509,395.34529867646,418.60090448096,523.2511306012],description:"Hofmann's Enharmonic #2, Dorian mode"},hofmann_chrom:{frequencies:[261.6255653006,264.26824777838,290.69507255622,348.83408706747,392.4383479509,396.40237166758,436.04260883433,523.2511306012],description:"Hofmann's Chromatic"},holder:{frequencies:[261.6255653006,274.23214485994,292.57879058083,312.45989404005,327.40114268825,349.76744711215,366.57630213591,391.03837375367,409.94826565972,437.46806069696,467.28984664562,489.70152554512,523.2511306012],description:"William Holder's equal beating meantone temperament (1694). 3/2 beats 2.8 Hz"},holder2:{frequencies:[261.6255653006,274.23214485994,292.57879058083,312.45989404005,327.40114268825,349.76744711215,366.57630213591,391.03837375367,410.64811919433,437.46806069696,467.46154552107,489.70152554512,523.2511306012],description:"Holder's irregular e.b. temperament with improved Eb and G#"},hummel:{frequencies:[261.6255653006,277.1703574486,293.54676487235,311.03465677994,329.45811370906,349.13199096171,369.8583804246,391.99149393462,415.308682162,439.8732919971,466.10512967869,493.74031485884,523.2511306012],description:"Johann Nepomuk Hummel's quasi-equal temperament (1829)"},hummel2:{frequencies:[261.6255653006,277.22760066578,293.66431501254,311.21660561883,329.70790803338,349.18845812715,369.99117208793,391.90679138833,415.30984563838,439.96491544382,466.29335337935,494.03030700757,523.2511306012],description:"Johann Nepomuk Hummel's temperament according to the second bearing plan"},husmann:{frequencies:[261.6255653006,275.62199471997,294.32876096318,310.07474405997,314.30517589183,331.11985608357,348.83408706747],description:"Tetrachord division according to Husmann"},hwerck3:{frequencies:[261.6255653006,276.40121172404,293.00227310437,310.60041853231,328.69828757761,349.03110370139,368.74309237173,391.5530240856,414.36778843034,438.51190905657,465.63764214343,492.7691222293,523.2511306012],description:"Variation on Werckmeister III with 1/4P -> 1/6P and 0P -> 1/24P. OdC '99"},hyper_enh:{frequencies:[261.6255653006,264.93728131706,268.33391312882,348.83408706747,392.4383479509,397.40592197559,402.50086969323,523.2511306012],description:"13/10 HyperEnharmonic. This genus is at the limit of usable tunings"},hyper_enh2:{frequencies:[261.6255653006,267.19206668997,273.00058987889,348.83408706747,392.4383479509,400.78810003496,409.50088481833,523.2511306012],description:"Hyperenharmonic genus from Kathleen Schlesinger's enharmonic Phrygian Harmonia"},hypo_chrom:{frequencies:[261.6255653006,275.39533189537,282.83844897362,290.69507255622,348.83408706747,373.75080757229,387.59343007496,402.50086969323,418.60090448096,427.14378008261,436.04260883433,455.00098313148,523.2511306012],description:"Hypolydian Chromatic Tonos"},hypo_diat:{frequencies:[261.6255653006,290.69507255622,307.79478270659,327.03195662575,348.83408706747,373.75080757229,387.59343007496,402.50086969323,436.04260883433,455.00098313148,475.68284600109,498.33441009638,523.2511306012],description:"Hypolydian Diatonic Tonos"},hypo_enh:{frequencies:[261.6255653006,268.33391312882,271.81876914348,275.39533189537,348.83408706747,373.75080757229,387.59343007496,402.50086969323,410.39304360878,414.45634107026,418.60090448096,465.11211608996,523.2511306012],description:"Hypolydian Enharmonic Tonos"},hypod_chrom:{frequencies:[261.6255653006,279.06726965397,288.69027895239,299.00064605783,322.00069575458,348.83408706747,364.00078650518,380.54627680087,398.6675280771,408.39112632289,418.60090448096,465.11211608996,523.2511306012],description:"Hypodorian Chromatic Tonos"},hypod_chrom2:{frequencies:[261.6255653006,279.06726965397,299.00064605783,348.83408706747,380.54627680087,398.6675280771,418.60090448096,523.2511306012],description:"Schlesinger's Chromatic Hypodorian Harmonia"},hypod_chrom2inv:{frequencies:[261.6255653006,327.03195662575,343.38355445704,359.73515228832,392.4383479509,457.84473927605,490.54793493862,523.2511306012],description:"Inverted Schlesinger's Chromatic Hypodorian Harmonia"},hypod_chromenh:{frequencies:[261.6255653006,270.06509966514,279.06726965397,348.83408706747,380.54627680087,398.6675280771,418.60090448096,523.2511306012],description:"Schlesinger's Hypodorian Harmonia in a mixed chromatic-enharmonic genus"},hypod_chrominv:{frequencies:[261.6255653006,277.97716313189,294.32876096318,359.73515228832,392.4383479509,408.78994578219,425.14154361347,523.2511306012],description:"A harmonic form of Schlesinger's Chromatic Hypodorian Inverted"},hypod_diat:{frequencies:[261.6255653006,279.06726965397,299.00064605783,322.00069575458,334.88072358477,348.83408706747,364.00078650518,380.54627680087,418.60090448096,440.63253103259,465.11211608996,492.47165233054,523.2511306012],description:"Hypodorian Diatonic Tonos"},hypod_diat2:{frequencies:[261.6255653006,279.06726965397,322.00069575458,348.83408706747,364.00078650518,380.54627680087,418.60090448096,465.11211608996,523.2511306012],description:"Schlesinger's Hypodorian Harmonia, a subharmonic series through 13 from 16"},hypod_diatcon:{frequencies:[261.6255653006,279.06726965397,322.00069575458,348.83408706747,364.00078650518,418.60090448096,465.11211608996,523.2511306012],description:"A Hypodorian Diatonic with its own trite synemmenon replacing paramese"},hypod_diatinv:{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,376.08675011961,392.4383479509,425.14154361347,457.84473927605,490.54793493862,523.2511306012],description:"Inverted Schlesinger's Hypodorian Harmonia, a harmonic series from 8 from 16"},hypod_enh:{frequencies:[261.6255653006,270.06509966514,274.49239638096,279.06726965397,310.07474405997,348.83408706747,364.00078650518,380.54627680087,389.39619021485,393.97732186443,398.6675280771,452.54151835779,523.2511306012],description:"Hypodorian Enharmonic Tonos"},hypod_enhinv:{frequencies:[261.6255653006,343.38355445704,351.55935337268,359.73515228832,392.4383479509,490.54793493862,506.89953276991,523.2511306012],description:"Inverted Schlesinger's Enharmonic Hypodorian Harmonia"},hypod_enhinv2:{frequencies:[261.6255653006,269.80136421624,277.97716313189,359.73515228832,392.4383479509,400.61414686654,408.78994578219,523.2511306012],description:"A harmonic form of Schlesinger's Hypodorian enharmonic inverted"},hypodorian_pis:{frequencies:[261.6255653006,285.40970760065,313.95067836072,348.83408706747,392.4383479509,418.60090448096,483.00104363188,523.2511306012,546.00117975777,570.81941520131,627.90135672144,697.66817413493,784.8766959018,897.00193817349,966.00208726375,1046.5022612024],description:"Diatonic Perfect Immutable System in the Hypodorian Tonos"},hypol_chrom:{frequencies:[261.6255653006,275.39533189537,290.69507255622,348.83408706747,373.75080757229,402.50086969323,418.60090448096,436.04260883433,523.2511306012],description:"Schlesinger's Hypolydian Harmonia in the chromatic genus"},hypol_chrominv:{frequencies:[261.6255653006,313.95067836072,327.03195662575,340.11323489078,366.27579142084,392.4383479509,470.92601754108,497.08857407114,523.2511306012],description:"Inverted Schlesinger's Chromatic Hypolydian Harmonia"},hypol_chrominv2:{frequencies:[261.6255653006,274.70684356563,287.78812183066,340.11323489078,366.27579142084,392.4383479509,418.60090448096,523.2511306012],description:"harmonic form of Schlesinger's Chromatic Hypolydian inverted"},hypol_chrominv3:{frequencies:[261.6255653006,274.70684356563,287.78812183066,340.11323489078,392.4383479509,418.60090448096,444.76346101102,523.2511306012],description:"A harmonic form of Schlesinger's Chromatic Hypolydian inverted"},hypol_diat:{frequencies:[261.6255653006,290.69507255622,327.03195662575,348.83408706747,373.75080757229,402.50086969323,436.04260883433,475.68284600109,523.2511306012],description:"Schlesinger's Hypolydian Harmonia, a subharmonic series through 13 from 20"},hypol_diatcon:{frequencies:[261.6255653006,290.69507255622,327.03195662575,348.83408706747,402.50086969323,436.04260883433,475.68284600109,523.2511306012],description:"A Hypolydian Diatonic with its own trite synemmenon replacing paramese"},hypol_diatinv:{frequencies:[261.6255653006,287.78812183066,313.95067836072,340.11323489078,366.27579142084,392.4383479509,418.60090448096,470.92601754108,523.2511306012],description:"Inverted Schlesinger's Hypolydian Harmonia, a harmonic series from 10 from 20"},hypol_enh:{frequencies:[261.6255653006,268.33391312882,275.39533189537,348.83408706747,373.75080757229,402.50086969323,418.60090448096,436.04260883433,523.2511306012],description:"Schlesinger's Hypolydian Harmonia in the enharmonic genus"},hypol_enhinv:{frequencies:[261.6255653006,327.03195662575,333.57259575826,340.11323489078,366.27579142084,392.4383479509,497.08857407114,510.16985233617,523.2511306012],description:"Inverted Schlesinger's Enharmonic Hypolydian Harmonia"},hypol_enhinv2:{frequencies:[261.6255653006,268.16620443312,274.70684356563,340.11323489078,366.27579142084,379.35706968587,392.4383479509,523.2511306012],description:"A harmonic form of Schlesinger's Hypolydian enharmonic inverted"},hypol_enhinv3:{frequencies:[261.6255653006,268.16620443312,274.70684356563,340.11323489078,392.4383479509,405.51962621593,418.60090448096,523.2511306012],description:"A harmonic form of Schlesinger's Hypolydian enharmonic inverted"},hypol_pent:{frequencies:[261.6255653006,272.52663052146,290.69507255622,348.83408706747,373.75080757229,402.50086969323,415.27867508032,436.04260883433,523.2511306012],description:"Schlesinger's Hypolydian Harmonia in the pentachromatic genus"},hypol_tri:{frequencies:[261.6255653006,270.64713651786,280.31310567921,348.83408706747,373.75080757229,402.50086969323,413.09299784305,424.25767346043,523.2511306012],description:"Schlesinger's Hypolydian Harmonia in the first trichromatic genus"},hypol_tri2:{frequencies:[261.6255653006,270.64713651786,290.69507255622,348.83408706747,373.75080757229,402.50086969323,413.09299784305,436.04260883433,2093.0045224048],description:"Schlesinger's Hypolydian Harmonia in the second trichromatic genus"},hypolydian_pis:{frequencies:[261.6255653006,281.75060878526,305.22982618403,332.97799220076,366.27579142084,406.97310157871,457.84473927605,488.36772189445,523.2511306012,563.50121757052,610.45965236807,665.95598440153,732.55158284168,813.94620315742,915.6894785521,1046.5022612024],description:"The Diatonic Perfect Immutable System in the Hypolydian Tonos"},hypop_chrom:{frequencies:[261.6255653006,277.01530443593,285.40970760065,294.32876096318,336.37572681506,362.25078272391,376.74081403286,392.4383479509,409.50088481833,418.60090448096,428.11456140098,470.92601754108,523.2511306012],description:"Hypophrygian Chromatic Tonos"},hypop_chromenh:{frequencies:[261.6255653006,269.10058145205,277.01530443593,362.25078272391,392.4383479509,409.50088481833,428.11456140098,523.2511306012],description:"Schlesinger's Hypophrygian Harmonia in a mixed chromatic-enharmonic genus"},hypop_chrominv:{frequencies:[261.6255653006,319.76457981184,334.29933343966,348.83408706747,377.90359432309,465.11211608996,494.18162334558,523.2511306012],description:"Inverted Schlesinger's Chromatic Hypophrygian Harmonia"},hypop_chrominv2:{frequencies:[261.6255653006,276.16031892841,290.69507255622,348.83408706747,377.90359432309,406.97310157871,436.04260883433,523.2511306012],description:"A harmonic form of Schlesinger's Chromatic Hypophrygian inverted"},hypop_diat:{frequencies:[261.6255653006,294.32876096318,303.82323712328,313.95067836072,336.37572681506,362.25078272391,376.74081403286,392.4383479509,428.11456140098,448.50096908674,470.92601754108,495.71159741166,523.2511306012],description:"Hypophrygian Diatonic Tonos"},hypop_diat2:{frequencies:[261.6255653006,294.32876096318,313.95067836072,362.25078272391,376.74081403286,392.4383479509,428.11456140098,470.92601754108,523.2511306012],description:"Schlesinger's Hypophrygian Harmonia"},hypop_diat2inv:{frequencies:[261.6255653006,290.69507255622,319.76457981184,348.83408706747,363.36884069528,377.90359432309,436.04260883433,465.11211608996,523.2511306012],description:"Inverted Schlesinger's Hypophrygian Harmonia, a harmonic series from 9 from 18"},hypop_diatcon:{frequencies:[261.6255653006,294.32876096318,313.95067836072,362.25078272391,376.74081403286,428.11456140098,470.92601754108,523.2511306012],description:"A Hypophrygian Diatonic with its own trite synemmenon replacing paramese"},hypop_enh:{frequencies:[261.6255653006,269.10058145205,273.00058987889,277.01530443593,313.95067836072,362.25078272391,376.74081403286,392.4383479509,400.78810003496,405.0976494977,409.50088481833,470.92601754108,523.2511306012],description:"Hypophrygian Enharmonic Tonos"},hypop_enhinv:{frequencies:[261.6255653006,334.29933343966,341.56671025356,348.83408706747,377.90359432309,494.18162334558,508.71637697339,523.2511306012],description:"Inverted Schlesinger's Enharmonic Hypophrygian Harmonia"},hypop_enhinv2:{frequencies:[261.6255653006,268.89294211451,276.16031892841,348.83408706747,377.90359432309,392.4383479509,406.97310157871,523.2511306012],description:"A harmonic form of Schlesinger's Hypophrygian enharmonic inverted"},hypophryg_pis:{frequencies:[261.6255653006,283.42769574232,309.19384990071,340.11323489078,377.90359432309,425.14154361347,453.48431318771,523.2511306012,544.18117582525,566.85539148463,618.38769980142,680.22646978156,755.80718864618,850.28308722695,971.75209968794,1046.5022612024],description:"The Diatonic Perfect Immutable System in the Hypophrygian Tonos"},kanzelmeyer_11:{frequencies:[261.6255653006,277.97716313189,310.68035879446,327.03195662575,359.73515228832,376.08675011961,392.4383479509,425.14154361347,457.84473927605,474.19633710734,506.89953276991,523.2511306012],description:"Bruce Kanzelmeyer, 11 harmonics from 16 to 32. Base 388.3614815 Hz"},kanzelmeyer_18:{frequencies:[261.6255653006,277.97716313189,302.50455987882,310.68035879446,327.03195662575,335.20775554139,351.55935337268,359.73515228832,376.08675011961,384.26254903526,392.4383479509,425.14154361347,433.31734252912,457.84473927605,474.19633710734,482.37213602298,498.72373385427,506.89953276991,523.2511306012],description:"Bruce Kanzelmeyer, 18 harmonics from 32 to 64. Base 388.3614815 Hz"},kayolonian:{frequencies:[261.6255653006,267.90457886781,279.06726965397,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,357.20610515709,372.08969287196,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,465.11211608996,490.54793493862,510.98743222773,523.2511306012],description:"19-tone 5-limit scale of the Kayenian Imperium on Kayolonia (reeks van Sjauriek)"},kayolonian_12:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"See Barnard: De Keiaanse Muziek, p. 11. (uitgebreide reeks)"},kayolonian_40:{frequencies:[261.6255653006,267.90457886781,272.52663052146,275.93321340298,279.06726965397,290.69507255622,294.32876096318,297.67175429757,306.59245933664,310.07474405997,313.95067836072,319.36714514233,327.03195662575,331.11985608357,334.88072358477,340.65828815182,348.83408706747,353.19451315581,357.20610515709,363.36884069528,367.91095120397,372.08969287196,376.74081403286,383.2405741708,387.59343007496,392.4383479509,401.85686830172,408.78994578219,413.43299207996,418.60090448096,436.04260883433,441.49314144476,446.50763144636,459.88868900496,465.11211608996,470.92601754108,490.54793493862,496.11959049595,502.32108537715,510.98743222773,523.2511306012],description:"See Barnard: De Keiaanse Muziek"},kayolonian_f:{frequencies:[261.6255653006,279.06726965397,306.59245933664,327.03195662575,348.83408706747,392.4383479509,418.60090448096,446.50763144636,490.54793493862,523.2511306012],description:"Kayolonian scale F and periodicity block (128/125, 16875/16384)"},kayolonian_p:{frequencies:[261.6255653006,279.06726965397,306.59245933664,327.03195662575,348.83408706747,392.4383479509,418.60090448096,459.88868900496,490.54793493862,523.2511306012],description:"Kayolonian scale P"},kayolonian_s:{frequencies:[261.6255653006,287.4304306281,306.59245933664,327.03195662575,359.28803828513,392.4383479509,418.60090448096,459.88868900496,490.54793493862,523.2511306012],description:"Kayolonian scale S"},kayolonian_t:{frequencies:[261.6255653006,279.06726965397,297.67175429757,317.51653791741,348.83408706747,381.01984550089,418.60090448096,446.50763144636,476.27480687611,523.2511306012],description:"Kayolonian scale T"},kayolonian_z:{frequencies:[261.6255653006,279.06726965397,297.67175429757,327.03195662575,348.83408706747,392.4383479509,418.60090448096,446.50763144636,476.27480687611,523.2511306012],description:"Kayolonian scale Z"},kayoloniana:{frequencies:[261.6255653006,267.90457886781,279.06726965397,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,367.91095120397,372.08969287196,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,465.11211608996,490.54793493862,510.98743222773,523.2511306012],description:"Amendment by Rasch of Kayolonian scale's note 9"},"kebyar-b":{frequencies:[261.6255653006,280.40333801024,299.48910562989,384.37207420335,402.78320381033,523.2511306012],description:"Gamelan Kebyar tuning begbeg, Andrew Toth, 1993"},"kebyar-s":{frequencies:[261.6255653006,283.00682726281,309.51375468789,385.26118901859,416.26536455926,523.2511306012],description:"Gamelan kebyar tuning sedung, Andrew Toth, 1993"},"kebyar-t":{frequencies:[261.6255653006,293.15632631094,325.27731021818,397.46748834812,422.07621250312,523.2511306012],description:"Gamelan kebyar tuning tirus, Andrew Toth, 1993"},keenan:{frequencies:[261.6255653006,279.77706779472,292.57243455474,305.95298478736,327.17991022208,349.87955533643,365.88099775759,391.26571058456,418.41160951721,437.54730686196,457.55816161244,489.30340830564,523.2511306012],description:"Dave Keenan 31-ET mode has 3 4:5:6:7 tetrads + 3 inv. is Fokker's 12-tone mode"},keenan2:{frequencies:[261.6255653006,278.14493936283,295.70736791055,306.84360659709,326.21810583671,346.81593583087,369.99442271164,393.35634555235,418.19337019276,433.94238997708,461.34206956593,490.47180009913,523.2511306012],description:"Dave Keenan strange 9-limit temperament TL 19-11-98"},keenan3:{frequencies:[261.6255653006,272.10155294862,282.99701916355,314.19580976213,326.77681046955,339.86157848985,377.32935907335,392.4383479509,408.1523292189,453.14877154631,471.29371440761,523.2511306012],description:"Chain of 1/6 kleisma tempered 6/5s, 10 tetrads, Dave Keenan, 30-Jun-99, TD235"},keenan3eb:{frequencies:[261.6255653006,272.52625793573,283.88113057344,314.31833892864,327.41448875753,341.05629284549,377.62371824792,393.35750206077,409.74683779238,453.67913385439,472.5817850056,523.2511306012],description:"Chain of 11 equal beating minor thirds, 6/5=3/2 same"},keenan3eb2:{frequencies:[261.6255653006,271.88912362492,282.55531921581,314.13446783,326.45794787121,339.26487744082,377.18204004818,391.97887331053,407.35618327602,452.88341485066,470.6500094,523.2511306012],description:"Chain of 11 equal beating minor thirds, 6/5=3/2 opposite"},keenan3j:{frequencies:[261.6255653006,291.88463270656,302.72962012827,313.97755176024,350.29154279212,363.30663963964,405.32593044476,420.38583225541,436.00528786292,486.43275040712,504.50618240233,523.2511306012],description:"Chain of 11 nearly just 19-tET minor thirds, Dave Keenan, 1-Jul-99"},keenan7:{frequencies:[261.6255653006,269.29177952703,279.86396690685,288.06460709314,296.5055443788,305.19382000629,314.13668154225,326.46944327063,336.03572815422,349.22823143301,359.46139971304,369.99442271164,380.8360868427,391.99543598175,407.38487419079,419.32216217931,435.78442404634,448.5538823653,461.69751437372,475.22628419761,489.15147723638,508.3551866238,523.2511306012],description:"Dave Keenan, 22 out of 72-tET periodicity block. TL 29-04-2001"},keenanmt:{frequencies:[261.6255653006,279.93529690293,292.50627485027,305.64177427204,327.03195662575,349.91912034749,365.63284274659,391.22147055517,418.60090448096,437.39890198442,457.04105241293,489.02683710225,523.2511306012],description:"Dave Keenan 1/4-comma tempered version of keenan with 6 7-limit tetrads"},keenanst:{frequencies:[261.6255653006,268.50609092997,277.46533822773,286.72352888229,294.26410920268,304.08282473376,314.22916151277,322.49311613356,333.25374941849,342.01803421352,353.43015577174,365.22306367425,374.82811589307,387.33500976677,397.52158713557,410.7856943143,424.4923875554,435.65616946139,450.19271626925,462.0323945472,477.44903730562,493.38008744487,506.35555615636,523.2511306012],description:"Dave Keenan, 7-limit temperament, g=260.353"},kelletat:{frequencies:[261.6255653006,275.58617649731,292.98704147282,310.05056613125,327.14272545641,348.82502010853,367.43868454848,391.99543598175,413.39000965417,437.97145880542,465.08793784701,489.90551202062,523.2511306012],description:"Herbert Kelletat's Bach-tuning (1967)"},kellner:{frequencies:[261.6255653006,275.62199471997,292.73769384471,310.07474405997,327.54963108844,348.83408706747,367.49599295996,391.37619916626,413.43299207996,437.91808280662,465.11211608996,491.32444638706,523.2511306012],description:"Herbert Anton Kellner's Bach tuning. 5 1/5 Pyth. comma and 7 pure fifths"},kellners:{frequencies:[261.6255653006,275.84425785506,292.86986732103,310.2247482054,327.84547867349,348.89032888179,367.85164222246,391.46454285105,413.69968681881,438.2147004401,465.26210635182,491.68894399626,523.2511306012],description:"Kellner's temperament with 1/5 synt. comma instead of 1/5 Pyth. comma"},kepler1:{frequencies:[261.6255653006,275.93321340298,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.89982010446,441.49314144476,470.92601754108,490.54793493862,523.2511306012],description:"Kepler's Monochord no.1, Harmonices Mundi (1619)"},kepler2:{frequencies:[261.6255653006,275.93321340298,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,441.49314144476,470.92601754108,490.54793493862,523.2511306012],description:"Kepler's Monochord no.2"},kepler3:{frequencies:[261.6255653006,275.93321340298,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.89982010446,441.49314144476,470.92601754108,496.67978412536,523.2511306012],description:"Kepler's choice system, Harmonices Mundi, Liber III (1619)"},kilroy:{frequencies:[261.6255653006,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,436.04260883433,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:"Kilroy"},kimball:{frequencies:[261.6255653006,272.52663052146,275.93321340298,290.69507255622,294.32876096318,306.59245933664,327.03195662575,331.11985608357,348.83408706747,363.36884069528,367.91095120397,392.4383479509,408.78994578219,436.04260883433,441.49314144476,459.88868900496,465.11211608996,490.54793493862,523.2511306012],description:"Buzz Kimball 18-note just scale"},kimball_53:{frequencies:[261.6255653006,277.01530443593,277.97716313189,279.06726965397,281.75060878526,283.42769574232,285.40970760065,287.78812183066,296.50897400735,299.00064605783,305.22982618403,307.79478270659,309.19384990071,313.95067836072,317.68818643644,319.76457981184,322.00069575458,327.03195662575,332.97799220076,338.57426097725,340.11323489078,342.12573923925,348.83408706747,359.73515228832,362.25078272391,366.27579142084,369.35373924791,370.63621750918,373.75080757229,377.90359432309,380.54627680087,392.4383479509,400.13321751856,402.50086969323,404.33041910093,411.12588832951,418.60090448096,425.14154361347,428.11456140098,430.91269578922,436.04260883433,442.75095666255,444.76346101102,448.50096908674,457.84473927605,461.69217405988,475.68284600109,479.64686971777,483.00104363188,485.87604984397,490.54793493862,492.47165233054,494.18162334558,523.2511306012],description:"Buzz Kimball 53-note just scale"},kirkwood:{frequencies:[261.6255653006,294.32876096318,305.22982618403,327.03195662575,348.83408706747,392.4383479509,436.04260883433,457.84473927605,523.2511306012],description:"Scale based on Kirkwood gaps of the asteroid belt"},"kirn-stan":{frequencies:[261.6255653006,276.16031892841,292.60754013883,310.68035879446,327.03195662575,348.83408706747,368.21375857121,392.4383479509,414.24047839262,437.1900893839,465.11211608996,490.54793493862,523.2511306012],description:"Kirnberger temperament improved by Charles Earl Stanhope (1806)"},kirnberger:{frequencies:[261.6255653006,275.62199471997,292.50627485027,310.07474405997,327.03195662575,348.83408706747,367.91095120397,391.22147055517,413.43299207996,437.39890198442,465.11211608996,490.54793493862,523.2511306012],description:"Kirnberger's well-temperament, also called Kirnberger III, letter to Forkel 1779"},kirnberger1:{frequencies:[261.6255653006,275.62199471997,294.32876096318,310.07474405997,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.43299207996,438.75944753732,465.11211608996,490.54793493862,523.2511306012],description:"Kirnberger's temperament 1 (1766)"},kirnberger2:{frequencies:[261.6255653006,275.93321340298,294.32876096318,310.07474405997,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.89982010446,438.75941205608,465.11211608996,490.54793493862,523.2511306012],description:'Kirnberger 2: 1/2 synt. comma. "Die Kunst des reinen Satzes" (1774)'},kirnberger3:{frequencies:[261.6255653006,275.93321340298,292.50627485027,310.07474405997,327.03195662575,348.83408706747,367.91095120397,391.22147055517,413.89982010446,437.39890198442,465.11211608996,490.54793493862,523.2511306012],description:"Kirnberger 3: 1/4 synt. comma (1744)"},kirnberger3v:{frequencies:[261.6255653006,275.93321340298,292.50063201309,310.07474405997,327.03195662575,348.83408706747,367.91095120397,391.21579858034,413.43299207996,437.39258595147,465.11211608996,490.54793493862,523.2511306012],description:"Variant well-temperament like Kirnberger 3, Kenneth Scholz, MTO 4.4, 1998"},klais:{frequencies:[261.6255653006,275.62199471997,293.00227310437,310.07474405997,327.21690075602,348.83408706747,367.49599295996,391.99543598175,413.43299207996,438.01699797506,465.11211608996,489.99465727995,523.2511306012],description:"Johannes Klais, Bach temperament"},klonaris:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,392.4383479509,408.78994578219,425.14154361347,457.84473927605,490.54793493862,523.2511306012],description:"Johnny Klonaris, 19-limit harmonic scale"},knot:{frequencies:[261.6255653006,268.26840191956,280.31310567921,286.15296204753,294.32876096318,299.00064605783,306.59245933664,327.03195662575,348.83408706747,357.69120255941,366.27579142084,367.91095120397,381.53728273004,392.4383479509,408.78994578219,418.60090448096,429.2294430713,436.04260883433,448.50096908674,457.84473927605,459.88868900496,476.92160341255,478.40103369253,490.54793493862,523.2511306012],description:"Smallest knot in 3-D, American Scientist, Nov-Dec '97 p506-510, trefoil knot"},koepf_36:{frequencies:[261.6255653006,272.26348829648,274.95017225036,277.18263097687,288.45311779165,291.29956028699,293.66476791741,305.60543275312,308.62113352716,311.12698372208,323.77767743764,326.97270111135,329.62755691287,343.03050002254,346.41550969045,349.22823143301,363.4281550135,367.0144478307,369.99442271164,385.03871768789,388.83826257328,391.99543598175,407.93431128975,411.95978887118,415.30469757995,432.19134773437,436.45619266906,440,457.89078262597,462.40922843744,466.16376151809,485.11838543951,489.90551202062,493.88330125613,513.96502576833,519.03680970905,523.2511306012],description:"Siegfried Koepf, 36-tone subset of 48-tone scale (1991)"},koepf_48:{frequencies:[261.6255653006,269.44737349144,272.26348829648,274.95017225036,277.18263097687,285.46954808622,288.45311779165,291.29956028699,293.66476791741,302.44445076078,305.60543275312,308.62113352716,311.12698372208,320.42873367481,323.77767743764,326.97270111135,329.62755691287,339.48241770075,343.03050002254,346.41550969045,349.22823143301,359.66909273781,363.4281550135,367.0144478307,369.99442271164,381.0561299374,385.03871768789,388.83826257328,391.99543598175,403.71490654806,407.93431128975,411.95978887118,415.30469757995,427.72104413038,432.19134773437,436.45619266906,440,453.15466093696,457.89078262597,462.40922843744,466.16376151809,480.10063929961,485.11838543951,489.90551202062,493.88330125613,508.64890891624,513.96502576833,519.03680970905,523.2511306012],description:"Siegfried Koepf, 48-tone scale (1991)"},kolinsky:{frequencies:[261.6255653006,277.2273508585,293.75953199293,311.27759533081,329.84032939425,349.51003591412,370.35272620855,392.4383479509,415.84102607989,440.63929776914,466.91639276282,494.76049384407,524.26505360912],description:"Kolinsky's 7th root of 3/2, also invented by Augusto Novaro"},kora1:{frequencies:[261.6255653006,293.66476791741,326.78388880949,349.22823143301,391.99543598175,440,489.62261321254,523.2511306012],description:"Kora tuning Tomora Ba, also called Silaba, 1/1=F, R. King"},kora2:{frequencies:[261.6255653006,298.79793764201,315.65242990842,349.22823143301,391.99543598175,447.69106452518,472.94426956511,523.2511306012],description:"Kora tuning Tomora Mesengo, also called Tomora, 1/1=F, R. King"},kora3:{frequencies:[261.6255653006,291.13134764929,330.58093469714,349.22823143301,391.99543598175,436.20415848357,495.31175393723,523.2511306012],description:"Kora tuning Hardino, 1/1=F, R.King"},kora4:{frequencies:[261.6255653006,291.13134764929,330.58093469714,371.06455309218,391.99543598175,436.20415848357,495.31175393723,523.2511306012],description:"Kora tuning Sauta, 1/1=F, R. King"},korea_5:{frequencies:[261.6255653006,294.32876096318,348.83408706747,392.4383479509,470.92601754108,523.2511306012],description:'According to Lou Harrison, called "the Delightful" in Korea'},kornerup:{frequencies:[261.6255653006,272.97226153513,280.22976278938,292.38332274669,305.0639823888,313.17470478367,326.75708630452,340.92853547661,349.99278713323,365.17196824772,374.88056242272,391.13935185123,408.10305876469,418.95303445734,437.12302030357,456.08130156398,468.2068441924,488.51296691354,509.70006023951,523.2511306012],description:"Kornerup's temperament with fifth of (15 - sqrt 5) / 22 octaves"},kornerup_11:{frequencies:[261.6255653006,279.06726965397,290.69507255622,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Kornerup's doric minor"},kraeh_22:{frequencies:[261.6255653006,267.07609791103,274.70684356563,286.15296204753,294.32876096318,305.22982618403,313.95067836072,320.49131749323,336.37572681506,343.38355445704,353.19451315581,366.27579142084,381.53728273004,392.4383479509,400.61414686654,412.06026534844,436.04260883433,441.49314144476,457.84473927605,470.92601754108,488.36772189445,504.56359022259,523.2511306012],description:"Kraehenbuehl & Schmidt 7-limit 22-tone tuning"},kraeh_22a:{frequencies:[261.6255653006,267.07609791103,269.10058145205,272.52663052146,274.70684356563,279.06726965397,280.31310567921,286.15296204753,294.32876096318,299.00064605783,305.22982618403,311.45900631024,313.95067836072,318.93402246168,320.49131749323,327.03195662575,336.37572681506,343.38355445704,348.83408706747,350.39138209902,353.19451315581,358.80077526939,366.27579142084,367.91095120397,373.75080757229,381.53728273004,392.4383479509,398.6675280771,400.61414686654,403.65087217807,408.78994578219,412.06026534844,418.60090448096,420.46965851882,436.04260883433,441.49314144476,448.50096908674,457.84473927605,467.18850946536,470.92601754108,476.92160341255,478.40103369253,488.36772189445,490.54793493862,498.33441009638,504.56359022259,523.2511306012],description:'Kraehenbuehl & Schmidt 7-limit 22-tone tuning with "inflections" for some tones'},kraeh_22b:{frequencies:[261.6255653006,269.10058145205,279.06726965397,286.15296204753,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,358.80077526939,367.91095120397,381.53728273004,392.4383479509,408.78994578219,420.46965851882,436.04260883433,448.50096908674,457.84473927605,476.92160341255,490.54793493862,504.56359022259,523.2511306012],description:"Best 22-tET approximation of KRAEH_22A"},kring1:{frequencies:[261.6255653006,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,523.2511306012],description:"Double-tie circular mirroring of 4:5:6 and Partch's 5-limit tonality Diamond"},kring1p3:{frequencies:[261.6255653006,267.90457886781,272.52663052146,279.06726965397,282.55561052465,290.69507255622,294.32876096318,301.39265122629,306.59245933664,310.07474405997,313.95067836072,327.03195662575,334.88072358477,340.65828815182,348.83408706747,353.19451315581,363.36884069528,367.91095120397,372.08969287196,376.74081403286,387.59343007496,392.4383479509,401.85686830172,408.78994578219,418.60090448096,436.04260883433,441.49314144476,446.50763144636,454.2110508691,465.11211608996,470.92601754108,484.4917875937,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"Third carthesian power of double-tie mirroring of 4:5:6 with kleismas removed"},kring2:{frequencies:[261.6255653006,299.00064605783,305.22982618403,348.83408706747,392.4383479509,448.50096908674,457.84473927605,523.2511306012],description:"Double-tie circular mirroring of 6:7:8"},kring2p3:{frequencies:[261.6255653006,265.7783520514,271.31540105247,288.32205155576,294.32876096318,299.00064605783,305.22982618403,310.07474405997,329.51091606373,336.37572681506,343.38355445704,348.83408706747,356.10146388137,384.42940207435,392.4383479509,398.6675280771,406.97310157871,415.4517078616,441.49314144476,448.50096908674,457.84473927605,465.11211608996,474.80195184183,504.56359022259,515.07533168556,523.2511306012],description:"Third power of 6:7:8 mirroring with 1029/1024 intervals removed"},kring3:{frequencies:[261.6255653006,305.22982618403,313.95067836072,366.27579142084,373.75080757229,436.04260883433,448.50096908674,523.2511306012],description:"Double-tie circular mirroring of 3:5:7"},kring3bp:{frequencies:[261.6255653006,336.37572681506,366.27579142084,436.04260883433,470.92601754108,560.62621135843,610.45965236807,784.8766959018],description:"Double-tie BP circular mirroring of 3:5:7"},kring4:{frequencies:[261.6255653006,299.00064605783,327.03195662575,366.27579142084,373.75080757229,418.60090448096,457.84473927605,523.2511306012],description:"Double-tie circular mirroring of 4:5:7"},kring4p3:{frequencies:[261.6255653006,267.90457886781,273.37201925287,280.42990280658,286.15296204753,293.02063313667,299.00064605783,305.10270005901,320.49131749323,327.03195662575,334.88072358477,341.71502406609,350.53737850823,357.69120255941,366.27579142084,373.75080757229,382.72082695402,390.53145607553,400.61414686654,408.78994578219,418.60090448096,427.14378008261,448.68784449053,457.84473927605,467.18850946536,478.40103369253,488.16432009441,500.76768358318,510.98743222773,523.2511306012],description:"Third power of 4:5:7 mirroring with 3136/3125 intervals removed"},kring5:{frequencies:[261.6255653006,290.69507255622,336.37572681506,366.27579142084,373.75080757229,406.97310157871,470.92601754108,523.2511306012],description:"Double-tie circular mirroring of 5:7:9"},kring5p3:{frequencies:[261.6255653006,266.96486255163,272.4643387202,278.02483542877,284.8811711051,290.69507255622,296.68339105088,302.73815413355,308.91648380975,316.53463456122,322.99452506247,329.64821227876,336.37572681506,343.24053756638,351.70514951247,358.88280562497,366.27579142084,373.75080757229,381.45007420827,389.23476960028,398.83363954714,406.97310157871,415.27867508032,423.83341578697,432.48307733364,443.14848838571,452.19233508746,461.42075008924,470.92601754108,480.53675259294,492.38720931745,502.43592787495,512.78610798918,523.2511306012],description:"Third power of 5:7:9 mirroring with 250047/250000 intervals removed"},kring6:{frequencies:[261.6255653006,305.22982618403,336.37572681506,348.83408706747,392.4383479509,406.97310157871,448.50096908674,523.2511306012],description:"Double-tie circular mirroring of 6:7:9"},kring6p3:{frequencies:[261.6255653006,267.07609791103,271.31540105247,276.96780524107,288.32205155576,294.32876096318,299.00064605783,305.22982618403,310.07474405997,316.53463456122,324.36230800023,329.51091606373,336.37572681506,343.38355445704,348.83408706747,356.10146388137,361.75386806997,369.29040698809,378.42269266694,384.42940207435,392.4383479509,398.6675280771,406.97310157871,415.4517078616,422.04617941496,432.48307733364,441.49314144476,448.50096908674,457.84473927605,465.11211608996,474.80195184183,494.26637409559,504.56359022259,512.57253609913,523.2511306012],description:"Third power of 6:7:9 mirroring with 118098/117649 intervals removed"},krousseau:{frequencies:[261.6255653006,274.70684356563,294.32876096318,305.22982618403,343.38355445704,348.83408706747,366.27579142084,392.4383479509,406.97310157871,457.84473927605,465.11211608996,488.36772189445,523.2511306012],description:"Kami Rousseau's tri-blues scale"},krousseau2:{frequencies:[261.6255653006,271.34627406517,291.88463270656,302.72962012827,337.74269681563,350.29154279212,363.30663963964,390.80553229045,405.32593044476,452.20508247496,469.00678383895,486.43275040712,523.2511306012],description:"19-tET version of Kami Rousseau's tri-blues scale"},kukuya:{frequencies:[261.6255653006,307.37578701508,361.96165147221,412.67427966689,460.80941404108],description:"African Kukuya Horns (aerophone, ivory, one note only)"},kurzw_arab:{frequencies:[261.6255653006,282.02769802256,290.29174037004,302.26980244078,321.16993719469,349.63190883464,374.94271441196,393.35634555235,411.95978887118,429.20598402782,447.69106452518,496.7443381147,523.2511306012],description:'Kurzweil "Empirical Arabic"'},kurzw_harmp:{frequencies:[261.6255653006,285.46954808622,287.62123438446,306.48933163909,308.79945157961,324.90175210669,345.81573716922,348.42227432308,427.72104413038,430.94493093825,458.94995811222,462.40922843744,523.2511306012],description:'Kurzweil "Empirical Bali/Java Harmonic Pelog"'},kurzw_melp:{frequencies:[261.6255653006,281.53940445957,283.98935579354,303.66981774726,307.02089761314,323.96475278212,344.02264297658,347.0163224393,421.10213511252,424.76655906637,451.06547253417,454.99063696457,523.2511306012],description:'Kurzweil "Empirical Bali/Java Melodic Pelog"'},kurzw_slen:{frequencies:[261.6255653006,266.96862289802,288.95340229325,306.66641795878,318.95145438803,352.26720984209,352.26720984209,389.06292924114,404.41509766528,429.20598402782,464.81937009253,474.03826620294,523.2511306012],description:'Kurzweil "Empirical Bali/Java Slendro, Siam 7"'},kurzw_tibet:{frequencies:[261.6255653006,270.53905136894,299.14332201883,312.9293240034,325.46525203475,353.69443592699,373.86139962101,397.69714089209,408.87792937274,438.98455767189,471.30800669535,489.90551202062,523.2511306012],description:'Kurzweil "Empirical Tibetian Ceremonial"'},kwazy:{frequencies:[13.75,13.8425266748,13.92142234948,14.00076777204,14.0805654254,14.16081788707,14.25610896047,14.337361936,14.41907801447,14.50125983535,14.58391005315,14.66703125278,14.76572882594,14.84988638999,14.93452361174,15.01964313826,15.10524789197,15.20689431811,15.29356631363,15.38073220905,15.46839499707,15.55655742089,15.66124080485,15.75050226619,15.84027256598,15.93055451337,16.0213510245,16.11266503216,16.22109048883,16.31354291552,16.40652227664,16.50003157548,16.59407373656,16.70573878851,16.80095347779,16.89671084507,16.99301388521,17.08986590459,17.18726993397,17.30292672931,17.40154500258,17.50072545316,17.60047118468,17.70078541898,17.81989766631,17.92146252619,18.023606257,18.12633215803,18.22964354736,18.35231459047,18.45691397115,18.56210951808,18.66790462912,18.77430261304,18.88130712282,19.00836345475,19.11670199894,19.22565790976,19.335234928,19.44543648263,19.57628896102,19.68786429416,19.80007566685,19.91292659048,20.02642071019,20.16118263857,20.27609169854,20.39165568498,20.50787833065,20.62476338959,20.74231451743,20.88189396397,21.00091073243,21.12060583931,21.24098302814,21.36204643183,21.50579618625,21.62836889778,21.75164008927,21.875613993,22.00029448845,22.14833914981,22.27457391904,22.40152829449,22.52920624893,22.65761190639,22.78674941445,22.94008616579,23.07083364148,23.202326315,23.33456843363,23.46756413327,23.62548236417,23.76013626908,23.89555763659,24.03175070206,24.16872014141,24.30647024079,24.47003364934,24.60950094889,24.74976328722,24.89082505353,25.03269080417,25.2011409598,25.3447753621,25.48922841152,25.63450477396,25.78060914191,25.95409219477,26.10201805756,26.25078702673,26.40040390759,26.55087337946,26.70220060843,26.88188539622,27.03509923475,27.18918616153,27.34415146685,27.5],description:"Kwazy temperament, g=162.741892, p=600, 5-limit"},lambdoma5_12:{frequencies:[261.6255653006,21.80213044172,23.78414230005,26.16255653006,29.06950725562,32.70319566257,37.37508075723,43.60426088343,47.56828460011,52.32511306012,58.13901451124,65.40639132515,71.35242690016,74.75016151446,78.48766959018,87.20852176687,95.13656920022,98.10958698772,104.65022612024,109.01065220858,112.12524227169,116.27802902249,118.92071150027,130.8127826503,145.34753627811,149.50032302891,156.97533918036,163.51597831288,174.41704353373,186.87540378614,196.21917397545,209.30045224048,218.02130441717,261.6255653006,327.03195662575,348.83408706747,392.4383479509,436.04260883433,523.2511306012,654.0639132515,784.8766959018,1046.5022612024,1308.127826503],description:"5x12 Lambdoma"},lambdoma_prim:{frequencies:[261.6255653006,8.43953436454,9.02157121726,11.37502457829,13.76976659477,15.38973913533,16.87906872907,18.04314243452,20.12504348466,22.75004915657,23.78414230005,25.31860309361,27.06471365179,27.53953318954,30.77947827066,34.12507373486,37.37508075723,40.25008696932,41.30929978431,42.19767182268,45.10785608631,46.16921740599,47.56828460011,52.32511306012,56.87512289143,59.07674055175,60.37513045398,63.15099852083,68.84883297384,71.35242690016,74.75016151446,76.94869567665,79.62517204801,87.20852176687,96.38836616338,100.62521742331,104.65022612024,107.72817394731,112.12524227169,118.92071150027,130.8127826503,140.87530439263,156.97533918036,166.48899610038,174.41704353373,186.87540378614,261.6255653006,366.27579142084,392.4383479509,436.04260883433,523.2511306012,610.45965236807,654.0639132515,784.8766959018,915.6894785521,1308.127826503,1831.3789571042],description:"Prime Lambdoma"},lambert:{frequencies:[261.6255653006,276.15600972046,293.19138048956,310.67551062492,328.56569462012,349.50994910362,368.20801314466,391.67947347082,414.23401437362,438.93663604468,466.01326570444,491.89550004992,523.2511306012],description:"Lambert's temperament (1774) 1/7 Pyth. comma, 5 pure"},lara:{frequencies:[261.6255653006,286.4606265643,298.28060863281,313.11013128311,341.05478972476,377.11473546037,395.40657391157,420.13030572059,450.02449304881,492.74350578058,523.2511306012,577.23956595248,599.67057787333],description:"Sundanese 'multi-laras' gamelan Ki Barong tuning, Weintraub, TL 15-2-99 1/1=497"},lebanon:{frequencies:[261.6255653006,285.30470202322,311.12698372208,349.22823143301,391.99543598175,415.30469757995,466.16376151809,523.2511306012],description:"Lebanese scale? Dastgah Shur"},leedy:{frequencies:[261.6255653006,269.80136421624,290.69507255622,294.32876096318,305.22982618403,327.03195662575,348.83408706747,359.73515228832,392.4383479509,436.04260883433,441.49314144476,457.84473927605,490.54793493862,523.2511306012],description:'Douglas Leedy, scale for "Pastorale" (1987), 1/1=f, 10/9 only in vocal parts'},leeuw1:{frequencies:[261.6255653006,311.12698372208,349.22823143301,380.8360868427,415.30469757995,466.16376151809,508.3551866238,554.36526195375,604.53960488156,659.25511382574,739.98884542327,806.96355802011,880,987.76660251225],description:'Ton de Leeuw: non-oct. mode from "Car nos vignes sont en fleurs",part 5. 1/1=A'},leftpistol:{frequencies:[261.6255653006,275.93321340298,279.06726965397,294.32876096318,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,436.04260883433,441.49314144476,490.54793493862,523.2511306012],description:"Left Pistol"},legros1:{frequencies:[261.6255653006,274.22463192287,292.50627485027,309.49749487796,327.03195662575,348.83408706747,365.63284274659,391.22147055517,411.33694767869,437.39890198442,465.11211608996,489.02683710225,523.2511306012],description:"Example of temperament with 3 just major thirds"},legros2:{frequencies:[261.6255653006,275.07759559501,292.50627485027,309.49749487796,327.03195662575,348.83408706747,366.77012764335,391.22147055517,412.61639318626,437.39890198442,465.11211608996,489.02683710225,523.2511306012],description:"Example of temperament with 2 just major thirds"},"lehman-bach":{frequencies:[261.6255653006,276.86979852503,293.00227310437,310.77584116741,328.14198392915,349.6228209638,369.15973155124,391.5530240856,414.83597850347,438.51190905657,465.63764214343,492.21297564769,523.2511306012],description:"Brad Lehman's Bach keyboard temperament"},lemba10:{frequencies:[261.6255653006,283.65327551057,298.9489942119,324.1191713102,341.59697290141,370.35792032269,401.5404117335,423.19307614937,458.82405293702,483.56568031466,524.27976214079],description:"10-note Lemba scale, Herman Miller"},lemba12:{frequencies:[261.6255653006,276.1173031791,283.29759227608,298.9897683987,323.75689816556,341.69016129748,369.99442271164,390.48883496177,400.64329718448,422.83538548023,457.86139629758,483.22286023634,523.2511306012],description:"Lemba[12] in 270-et (poptimal)"},lemba22:{frequencies:[261.6255653006,268.42900262332,276.1173031791,283.29759227608,298.9897683987,306.76484424299,315.55115201964,323.75689816556,341.69016129748,350.57563899649,360.61677037127,369.99442271164,379.61593604418,390.48883496177,400.64329718448,422.83538548023,433.83100318771,446.25671880862,457.86139629758,483.22286023634,495.78882330645,509.98912747823,523.2511306012],description:"Lemba[22] in 270-et (poptimal)"},lemba24:{frequencies:[261.6255653006,275.73346179752,283.65327551057,290.60211247891,298.9489942119,307.53562105228,315.06951922004,324.1191713102,332.05932738876,341.59697290141,351.40856549044,360.01724743313,370.35792032269,390.32910012969,401.5404117335,411.37720579947,423.19307614937,435.34833037897,446.01333880095,458.82405293702,470.06416125332,483.56568031466,497.45499966368,509.64147516102,524.27976214079],description:"24-note Lemba scale for mapping millerlemba24.kbm"},lemba8:{frequencies:[261.6255653006,275.73334871592,283.6533803711,298.94898212432,307.53584843097,324.11927802481,341.59694330429,351.4088110982,370.358025147],description:"Lemba temperament (4 down, 3 up) TOP tuning, Herman Miller, TL 22-11-2004"},leusden:{frequencies:[261.6255653006,275.54404190554,292.50627485027,310.51268695591,327.03195662575,349.91912034749,367.08095907728,391.22147055517,413.66634097248,437.39890198442,466.16376151809,489.02683710225,523.2511306012],description:"Organ in Gereformeerde kerk De Koningshof, Henk van Eeken, 1984, a'=415, modif. 1/4 mean"},leven:{frequencies:[261.6255653006,279.06726965397,298.97057995496,313.95067836072,330.39003879965,348.83408706747,369.35382642901,392.4383479509,418.60090448096,448.46752658184,465.11211608996,502.32108537715,523.2511306012],description:"Leven's monochord ?"},ligon:{frequencies:[261.6255653006,279.66870773512,292.40504357126,309.19384990071,329.87571277032,342.12573923925,366.27579142084,392.4383479509,411.12588832951,436.04260883433,462.87600014722,485.87604984397,523.2511306012],description:"Jacky Ligon, strictly proper all prime scale, TL 08-09-2000"},ligon2:{frequencies:[261.6255653006,276.16031892841,292.40504357126,310.68035879446,331.39238271409,355.06326719367,382.37582620857,411.78935130154,441.2028763945,470.61640148747,500.02992658044,529.4434516734,558.85697676637],description:"Jacky Ligon, 19-limit symmetrical non-octave scale, 2001"},ligon3:{frequencies:[261.6255653006,273.51763645063,286.54228580542,300.86940009569,316.70463167967,334.29933343966,341.25073734861,376.08675011961,401.15920012759,427.90314680276,471.58492637221,481.3910401531,508.13498682828,534.87893350345,561.62288017862,588.36682685379,615.11077352897],description:"Jacky Ligon, 23-limit non-octave scale (2001)"},ligon4:{frequencies:[261.6255653006,278.49926570678,289.46759601673,308.13698517552,320.27237341115,340.92853547661,362.91692931321,386.32347802158,401.53832428939,427.43578342293,444.26952759254,472.92296174596,491.54841572131,523.2511306012,556.99853141357,592.92249142473,616.27397035104,640.54474682231,681.85707095323,725.83385862642,754.41987838254,803.07664857879],description:"Jacky Ligon, 2/1 Phi Scale, TL 12-04-2001"},ligon5:{frequencies:[261.6255653006,273.22765669781,280.653851324,293.09977429907,314.41721066027,328.36040925687,337.28508524374,352.24238645938,377.86132347501,394.61802538749,405.34378524393,423.31898451752,454.1076550834,474.24531572837,487.13535379632,508.73764640933,545.73895363303],description:'Jacky Ligon, scale for "Two Golden Flutes" (2001)'},ligon6:{frequencies:[261.6255653006,280.653851324,293.09977429907,314.41721066027,328.36040925687,352.24238645938,377.86132347501,394.61802538749,423.31898451752,442.09155952525,474.24531572837,508.73764640933,531.29821178855,569.94005600595],description:'Jacky Ligon, "Primal Golden Tuning" (2001)'},ligon7:{frequencies:[261.6255653006,294.32876096318,321.08592105074,361.22166118208,394.05999401681,443.31749326891,483.61908356609,527.58445479937],description:"Jacky Ligon, 7 tone, 27/22=generator, MMM 22-01-2002"},lindley_ea:{frequencies:[261.6255653006,275.62199471997,293.00227310437,310.07474405997,328.14198392915,349.6228209638,367.9112241576,391.5530240856,413.43299207996,438.51190905657,465.63764214343,491.10256480205,523.2511306012],description:"Mark Lindley +J. de Boer +W. Drake (1991), for organ Grosvenor Chapel, London"},lindley_sf:{frequencies:[261.6255653006,276.24519242498,293.00227310437,310.07474405997,328.14198392915,349.6228209638,368.32692341742,391.5530240856,413.90012676351,438.51190905657,465.63764214343,491.10256480205,523.2511306012],description:"Lindley (1988) suggestion nr. 2 for Stanford Fisk organ"},"ling-lun":{frequencies:[261.6255653006,279.38237857051,294.32876096318,314.30517589183,331.11985608357,353.59332287831,372.50983809402,392.4383479509,419.07356785577,441.49314144476,471.45776383774,496.67978412536,523.2511306012],description:"Scale of Ling Lun from C"},liu_major:{frequencies:[261.6255653006,290.69507255622,322.99452506247,348.83408706747,392.4383479509,436.04260883433,484.4917875937,523.2511306012],description:`Linus Liu's Major Scale, see his 1978 book, "Intonation Theory"`},liu_mel:{frequencies:[261.6255653006,290.69507255622,313.95067836072,348.83408706747,392.4383479509,423.83341578697,436.04260883433,470.92601754108,484.4917875937,523.2511306012],description:"Linus Liu's Melodic Minor, use 5 and 7 descending and 6 and 8 ascending"},liu_minor:{frequencies:[261.6255653006,290.69507255622,313.95067836072,348.83408706747,387.59343007496,418.60090448096,484.4917875937,523.2511306012],description:"Linus Liu's Harmonic Minor"},liu_pent:{frequencies:[261.6255653006,294.32876096318,331.11985608357,353.19451315581,392.4383479509,441.49314144476,496.67978412536,529.79176973372],description:`Linus Liu's "pentatonic scale"`},lorina:{frequencies:[261.6255653006,271.31540105247,293.02063313667,305.22982618403,313.95067836072,348.83408706747,348.83408706747,385.55346465352,406.97310157871,457.84473927605,457.84473927605,465.11211608996,523.2511306012],description:"Lorina"},lt46a:{frequencies:[261.6255653006,265.62583852249,273.73233506765,277.91772325275,286.39934942254,290.77841553921,299.65253047503,308.79746990018,313.51900484808,323.08712797864,328.02715279963,338.03804253716,348.35444940179,353.68081538041,364.47461587782,370.04745828823,381.3407438317,387.1714705201,398.98735486934,411.16384203565,417.45056598488,430.19052226982,436.76816801564,450.09766813034,463.83396431287,470.92601754108,485.29796386361,492.71820372913,507.75521382755,523.2511306012],description:"13-limit temperament, minimax g=495.66296 cents"},lucy_19:{frequencies:[261.6255653006,272.17716319349,280.81422591737,292.13972001074,301.4102593031,313.56641022552,326.2128298123,336.56461921066,350.13857756143,364.25998604447,375.81913491042,390.97626371576,406.74469336313,419.65201956185,436.57696862128,450.43096951372,468.59726172356,487.49621708267,502.96605061019,523.2511306012],description:"Lucy's 19-tone scale"},lucy_24:{frequencies:[261.6255653006,269.92785558198,272.17712546173,280.81425349217,292.13970819848,301.41031849758,303.92192719902,313.56642833783,326.21280343239,336.56467170065,339.36921655583,350.13858362887,364.25994396351,375.81917832675,390.97625694066,403.38329512334,406.744629928,419.65205349792,436.57694340361,450.43105016925,454.18442712942,468.59728067062,487.49616921257,502.96612033609,523.2511306012],description:"Lucy/Harrison, meantone tuning from Bbb to Cx, third=1200.0/pi, 1/1=A"},lucy_31:{frequencies:[261.6255653006,269.92785558198,272.17712546173,280.81425349217,283.15423815518,292.13970819848,301.41031849758,303.92192719902,313.56642833783,323.51698308414,326.21280343239,336.56467170065,339.36921655583,350.13858362887,361.24970022276,364.25994396351,375.81917832675,378.95082751155,390.97625694066,403.38329512334,406.744629928,419.65205349792,432.96907456701,436.57694340361,450.43105016925,454.18442712942,468.59728067062,483.46750424654,487.49616921257,502.96612033609,507.15726445705,523.2511306012],description:"Lucy/Harrison's meantone tuning, 1/1=A"},lucy_7:{frequencies:[261.6255653006,292.13972001074,326.2128298123,350.13857756143,390.97626371576,436.57696862128,487.49621708267,523.2511306012],description:"Diatonic Lucy's scale"},lumma5:{frequencies:[261.6255653006,279.06726965397,294.32876096318,306.59245933664,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,436.04260883433,459.88868900496,490.54793493862,523.2511306012],description:"Carl Lumma's 5-limit version of lumma7, also Fokker 12-tone just."},lumma7:{frequencies:[261.6255653006,279.06726965397,293.02063313667,305.22982618403,327.03195662575,348.83408706747,366.27579142084,390.69417751556,418.60090448096,436.04260883433,457.84473927605,488.36772189445,523.2511306012],description:"Carl Lumma's 7-limit 12-tone scale, a.k.a GW Smith's Prism. TL 21-11-98"},lumma7t:{frequencies:[261.6255653006,279.68948643792,293.67396186758,305.56991806333,326.66797434652,349.22276480589,366.68390442934,392.00157215927,419.06732091375,436.04260883433,457.84473927605,489.45662770953,523.2511306012],description:"Tempered lumma7, 6 tetrads + 4 triads within 2c of Just, TL 19-2-99"},lumma7t72:{frequencies:[261.6255653006,279.86396690685,293.66476791741,305.19382000629,326.46944327063,349.22823143301,366.44956000397,391.99543598175,419.32216217931,435.78442404634,457.27406033445,489.15147723638,523.2511306012],description:"72-tET version of lumma7t"},lumma7t_keen:{frequencies:[261.6255653006,279.95098841649,293.39965821869,305.14186035122,326.51537799354,349.38597341375,366.17023517096,391.81845653432,419.26317124465,436.04260556019,456.98979229899,488.99939844699,523.2511306012],description:"Dave Keenan's adaptation of lumma7t to include 6:8:11, TL 17-04-9"},lumma_10:{frequencies:[261.6255653006,281.2143451833,302.26980244078,324.90175210669,349.22823143301,375.37611551499,391.99543598175,421.34544350737,452.89298412314,486.80259447109,523.2511306012],description:"Carl Lumma's 10-tone 125 cent Pyth. scale, TL 29-12-1999"},lumma_12_fun:{frequencies:[261.6255653006,276.16031892841,293.246794009,310.68035879446,327.94037872749,348.23056788569,368.93292606842,390.99572534534,413.52379936426,439.8701910135,464.30742384759,491.05951174505,522.34585182853],description:"Rational well temperament based on 577/289, 3/2, and 19/16."},"lumma_12_moh-ha-ha":{frequencies:[261.6255653006,276.16031892841,293.42033886144,310.68035879446,330.09788121912,349.51540364377,368.93292606842,391.72740891476,414.24047839262,440.13050829216,466.02053819169,493.4335110265,523.2511306012],description:"Rational well temperament."},lumma_12_strangeion:{frequencies:[261.6255653006,277.97716313189,292.40504357126,310.68035879446,330.09788121912,349.23197505989,368.93292606842,391.9912339477,414.71297038361,440.63253103259,468.17206422213,492.47165233054,523.2511306012],description:'19-limit "dodekaphonic" scale.'},lumma_22:{frequencies:[261.6255653006,263.29318697558,262.98919438538,262.83732973433,262.68555277841,262.53386346698,263.29318697558,262.38226174944,262.98919438538,262.23074757519,263.29318697558,262.68555277841,262.07932089369,263.29318697558,262.83732973433,263.59753095473,262.38226174944,263.44531501617,262.68555277841,262.98919438538,263.29318697558,263.902226729,261.92798165442],description:"Carl Lumma, intervals of attraction by trial and error, 1999."},lumma_5151:{frequencies:[261.6255653006,276.7826524273,292.81785438923,309.78204413166,327.729041887,346.71578592374,369.67398581173,391.09077971329,413.74834001613,437.71854962063,463.0774559108,489.90551202062,522.3451906503],description:"Carl Lumma's 5151 temperament III (1197/709.5/696). June 2003"},lumma_al1:{frequencies:[261.6255653006,274.63272075836,292.81785438923,309.78204413166,327.729041887,346.71578592374,366.8025131876,391.09077971329,413.74834001613,437.71854962063,463.0774559108,489.90551202062,522.3451906503],description:"Alaska I (1197/709.5/696), Carl Lumma, 6 June 2003."},lumma_al2:{frequencies:[261.6255653006,275.18850165466,292.98704147282,310.05056613125,328.10786809908,347.216824829,367.43868454848,391.20374747207,413.98739946535,438.09796819065,463.6127330944,490.61347436729,522.3451906503],description:"Alaska II (1197/707/696.5), Carl Lumma, 6 June 2003."},lumma_al3:{frequencies:[261.6255653006,275.18850165466,292.98704147282,310.05056613125,328.10786809908,349.32910706765,367.43868454848,391.20374747207,413.98739946535,438.09796819065,463.6127330944,490.61347436729,522.3451906503],description:"Alaska III (1197/707/696.5), Carl Lumma, 6 June 2003."},lumma_al4:{frequencies:[261.6255653006,276.38325105256,293.32570896007,309.87152561537,328.86683469969,349.02656754477,368.7143392539,391.31674786192,413.39000965417,438.73106346722,464.55095742407,491.89038573682,522.04355935974],description:"Alaska IV (1196/701/697), Carl Lumma, 6 June 2003."},lumma_al5:{frequencies:[261.6255653006,276.84261239447,293.89809826895,310.99222741882,329.08061019985,349.35433052883,369.67398581173,391.17550247358,415.27471248744,439.42852501549,464.98720675925,493.63374591774,522.3451906503],description:"Alaska V (1197/702/696.375), Carl Lumma, 6 June 2003."},lumma_al6:{frequencies:[261.6255653006,276.86260193655,293.83444433876,310.94732162256,329.05685050583,349.22823143301,369.56723519412,391.09077971329,415.06487744922,439.23819834286,464.81937009253,493.31307433255,522.04355935974],description:"Alaska VI (1196/701/696), Carl Lumma, 6 June 2003."},lumma_al7:{frequencies:[261.6255653006,276.11677207256,293.26810788146,310.16878953668,328.73958549954,348.42227432308,368.499294457,391.39134599911,413.94674961638,438.72852926454,464.99660740427,491.79379203259,522.3451906503],description:"Alaska VII, Carl Lumma, 27 Jan 2004"},lumma_dec1:{frequencies:[261.6255653006,286.10322937235,299.18791603519,327.17991022208,342.14320575162,374.15409293384,391.26571058456,427.87249484695,457.55816161244,489.30340830564,523.2511306012],description:"Carl Lumma, two 5-tone 7/4-chains, 5/4 apart in 31-tET, TL 9-2-2000"},lumma_dec2:{frequencies:[261.6255653006,286.10322937235,292.57243455474,327.17991022208,342.14320575162,382.6142546815,391.26571058456,437.54730686196,457.55816161244,511.68128147674,523.2511306012],description:"Carl Lumma, two 5-tone 3/2-chains, 7/4 apart in 31-tET, TL 9-2-2000"},lumma_magic:{frequencies:[261.6255653006,293.02063313667,299.00064605783,313.95067836072,327.03195662575,348.83408706747,366.27579142084,373.75080757229,418.60090448096,436.04260883433,457.84473927605,467.18850946536,523.2511306012],description:"Magic chord test, Carl Lumma, TL 24-06-99"},"lumma_synchtrines+2":{frequencies:[261.6255653006,277.1478691313,293.59111644706,311.009943641,329.46223568632,349.00930447981,369.71610741159,391.65144749868,414.88821865981,439.50363030131,465.57948255979,493.20241832805,522.46423212702],description:"The 12-tone equal temperament with 2:3:4 brats of +2"},"lumma_synchtrines-2":{frequencies:[261.6255653006,277.19623399848,293.69359242342,311.17279259662,329.69226891672,349.31393351076,370.10338321153,392.13011885309,415.46777761785,440.19437666896,466.39258399594,494.14997995304,523.55935978973],description:"The 12-tone equal temperament with 2:3:4 brats of -2"},lydian_chrom:{frequencies:[261.6255653006,275.39533189537,290.69507255622,307.79478270659,317.12189733406,327.03195662575,373.75080757229,402.50086969323,418.60090448096,427.14378008261,436.04260883433,475.68284600109,523.2511306012,550.79066379074,581.39014511244,615.58956541318,634.24379466812,654.0639132515,747.50161514457,805.00173938646,837.20180896192,854.28756016522,872.08521766867,951.36569200218,1046.5022612024],description:"Lydian Chromatic Tonos"},lydian_chrom2:{frequencies:[261.6255653006,272.09058791262,283.42769574232,340.11323489078,377.90359432309,400.13321751856,425.14154361347,523.2511306012],description:"Schlesinger's Lydian Harmonia in the chromatic genus"},lydian_chrominv:{frequencies:[261.6255653006,271.68808704293,281.75060878526,362.25078272391,402.50086969323,422.62591317789,442.75095666255,523.2511306012],description:"A harmonic form of Schlesinger's Chromatic Lydian inverted"},lydian_diat:{frequencies:[261.6255653006,275.39533189537,290.69507255622,327.03195662575,348.83408706747,373.75080757229,387.59343007496,402.50086969323,436.04260883433,455.00098313148,475.68284600109,498.33441009638,523.2511306012,550.79066379074,581.39014511244,654.0639132515,697.66817413493,747.50161514457,852.70554616492,805.00173938646,872.08521766867,910.00196626296,951.36569200218,996.66882019276,1046.5022612024],description:"Lydian Diatonic Tonos"},lydian_diat2:{frequencies:[261.6255653006,283.42769574232,309.19384990071,340.11323489078,358.01393146398,377.90359432309,425.14154361347,485.87604984397,523.2511306012],description:"Schlesinger's Lydian Harmonia, a subharmonic series through 13 from 26"},lydian_diat2inv:{frequencies:[261.6255653006,281.75060878526,322.00069575458,362.25078272391,382.37582620857,402.50086969323,442.75095666255,483.00104363188,523.2511306012],description:"Inverted Schlesinger's Lydian Harmonia, a harmonic series from 13 from 26"},lydian_diatcon:{frequencies:[261.6255653006,283.42769574232,309.19384990071,340.11323489078,358.01393146398,425.14154361347,485.87604984397,523.2511306012],description:"A Lydian Diatonic with its own trite synemmenon replacing paramese"},lydian_enh:{frequencies:[261.6255653006,275.39533189537,290.69507255622,299.00064605783,303.33398875432,307.79478270659,373.75080757229,402.50086969323,410.39304360878,414.45634107026,418.60090448096,475.68284600109,523.2511306012,550.79066379074,581.39014511244,598.00129211566,606.66797750864,615.58956541318,747.50161514457,805.00173938646,820.78608721757,828.91268214051,837.20180896192,951.36569200218,1046.5022612024],description:"Lydian Enharmonic Tonos"},lydian_enh2:{frequencies:[261.6255653006,266.75547834571,272.09058791262,340.11323489078,377.90359432309,388.70083987518,400.13321751856,523.2511306012],description:"Schlesinger's Lydian Harmonia in the enharmonic genus"},lydian_enhinv:{frequencies:[261.6255653006,266.65682617177,271.68808704293,362.25078272391,402.50086969323,412.56339143556,422.62591317789,523.2511306012],description:"A harmonic form of Schlesinger's Enharmonic Lydian inverted"},lydian_pent:{frequencies:[261.6255653006,269.93113880221,283.42769574232,340.11323489078,377.90359432309,395.48050568695,425.14154361347,523.2511306012],description:"Schlesinger's Lydian Harmonia in the pentachromatic genus"},lydian_pis:{frequencies:[261.6255653006,290.69507255622,327.03195662575,373.75080757229,402.50086969323,436.04260883433,475.68284600109,523.2511306012,550.79066379074,581.39014511244,654.0639132515,747.50161514457,805.00173938646,872.08521766867,951.36569200218,1046.5022612024],description:"The Diatonic Perfect Immutable System in the Lydian Tonos"},lydian_tri:{frequencies:[261.6255653006,268.51044859798,275.76748774928,340.11323489078,377.90359432309,392.4383479509,408.13588186894,523.2511306012],description:"Schlesinger's Lydian Harmonia in the first trichromatic genus"},lydian_tri2:{frequencies:[261.6255653006,268.51044859798,283.42769574232,340.11323489078,377.90359432309,392.4383479509,425.14154361347,523.2511306012],description:"Schlesinger's Lydian Harmonia in the second trichromatic genus"},nachbaur_6:{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,392.4383479509,457.84473927605,523.2511306012],description:`Fred Nachbaur's harmonic hexatonic, as used in "Void of Sensation"`},nassarre:{frequencies:[261.6255653006,277.66336828161,294.34406205295,311.66659310186,331.15428443044,350.6431449633,372.56793743951,394.49404533893,419.16071913933,443.82887286778,471.58032351597,495.88429116026,523.2511306012],description:"Nassarre's Equal Semitones"},negri5_19:{frequencies:[261.6255653006,271.22480440713,281.41555648081,291.74090527404,302.70251050738,313.80889368201,325.59966315504,337.54616011163,350.22880998446,363.07896889448,376.72096510961,390.54314115106,405.21705098851,420.08476989056,435.86864979507,451.86099895106,468.83881245397,486.04086171852,504.30291533224,523.2511306012],description:"Negri temperament, g=126.238272, 5-limit"},negri_19:{frequencies:[261.6255653006,269.02825605326,281.18681366715,289.14299126725,302.21061955257,310.76166549402,324.80633749066,333.99672707734,349.09149261831,358.96903024071,375.19240283292,392.14898023137,403.24482870584,421.46921730446,433.39468387282,452.98167562873,465.79878414581,486.85025820508,500.62567766841,523.2511306012],description:"Negri temperament, 13-limit, g=124.831"},negri_29:{frequencies:[261.6255653006,269.02825605326,276.64040740805,281.18681366715,289.14299126725,297.32428710198,302.21061955257,310.76166549402,319.55466133443,324.80633749066,333.99672707734,343.44715857517,349.09149261831,358.96903024071,369.1260526158,375.19240283292,385.80846524917,392.14898023137,403.24482870584,414.65463641221,421.46921730446,433.39468387282,445.65757880387,452.98167562873,465.79878414581,478.97855252217,486.85025820508,500.62567766841,514.79087238232,523.2511306012],description:"Negri temperament, 13-limit, g=124.831"},"neid-mar-morg":{frequencies:[261.6255653006,277.49581689502,293.99657683935,311.12698372208,329.99999983505,349.6228209638,369.99442271164,392.4383479509,415.77394625748,440,466.69047534984,494.44133512215,523.2511306012],description:"Neidhardt-Marpurg-de Morgan temperament (1858)"},neidhardt1:{frequencies:[261.6255653006,276.24519242498,293.00227310437,310.42509491746,328.14198392915,348.83408706747,368.32692341742,391.5530240856,414.36778843034,438.51190905657,465.11211608996,491.65745674141,523.2511306012],description:"Neidhardt I temperament (1724)"},neidhardt2:{frequencies:[261.6255653006,276.55731914056,293.00227310437,310.77584116741,328.51274831708,349.22823143301,369.15973155124,391.5530240856,414.36778843034,438.51190905657,466.16376151809,492.7691222293,523.2511306012],description:"Neidhardt II temperament (1724)"},neidhardt3:{frequencies:[261.6255653006,276.55731914056,293.00227310437,310.77584116741,328.51274831708,348.83408706747,369.15973155124,391.5530240856,414.36778843034,438.51190905657,465.63764214343,492.7691222293,523.2511306012],description:"Neidhardt III temperament (1724) 'Grosse Stadt'"},neidhardt4:{frequencies:[261.6255653006,277.18263097687,293.66476791741,311.12698372208,329.62755691287,349.22823143301,369.99442271164,391.99543598175,415.30469757995,440,466.16376151809,493.88330125613,523.2511306012],description:"Neidhardt IV temperament (1724), equal temperament"},neidhardtn:{frequencies:[261.6255653006,276.86979852503,293.66476791741,310.77584116741,329.62755691287,348.83408706747,369.99442271164,391.5530240856,415.30469757995,439.50340943686,466.16376151809,493.32589719545,523.2511306012],description:"Johann Georg Neidhardt's temperament (1732), alt. 1/6 & 0 P, also Marpurg nr.10"},neogeb24:{frequencies:[261.6255653006,270.11478301563,282.39420473706,291.55732426372,295.23185084282,304.81152420286,308.65309481038,318.66826025208,333.15492371116,343.96512368902,348.30015108876,359.6017829051,375.94928703407,388.14807710176,393.03994675222,405.79329398283,424.24066266408,438.00640969567,443.52664897728,457.91818970179,463.68937649142,478.73515685363,500.49846361623,516.73862125829,523.2511306012],description:"Neo-Gothic e-based lineotuning (T/S or Blackwood's R=e, ~2.71828), 24 notes"},neogji12:{frequencies:[261.6255653006,282.52678126125,294.32876096318,317.84262891891,332.97799220076,348.83408706747,374.60024122586,392.4383479509,423.79017189188,441.49314144476,443.97065626768,499.46698830115,523.2511306012],description:"M. Schulter, neo-Gothic 12-note JI (prim. 2/3/7/11) 1/1=F with Eb key as D+1"},neogp16a:{frequencies:[261.6255653006,274.38778799819,281.28352228595,295.02457363685,309.19384990071,317.19205704586,332.33517754401,348.83408706747,366.27579142084,374.86334014511,392.4383479509,411.12588832951,422.62591317789,442.75095666255,464.34856430463,498.91386871277,523.2511306012],description:"M. Schulter, scale from mainly prime-to-prime ratios and octave complements (Gb-D#)"},neutr_diat:{frequencies:[261.6255653006,294.32876096318,320.24370022528,348.83408706747,392.4383479509,427.47405410759,479.82340237272,523.2511306012],description:"Neutral Diatonic, 9 + 9 + 12 parts, geometric mean of major and minor"},neutr_pent1:{frequencies:[261.6255653006,302.32287545847,348.83408706747,392.4383479509,453.48431318771,523.2511306012],description:"Quasi-Neutral Pentatonic 1, 15/13 x 52/45 in each trichord, after Dudon"},neutr_pent2:{frequencies:[261.6255653006,301.87565226992,348.83408706747,392.4383479509,452.81347840488,523.2511306012],description:"Quasi-Neutral Pentatonic 2, 15/13 x 52/45 in each trichord, after Dudon"},new_enh:{frequencies:[261.6255653006,264.89588486686,279.06726965397,348.83408706747,392.4383479509,397.34382730029,418.60090448096,523.2511306012],description:"New Enharmonic"},new_enh2:{frequencies:[261.6255653006,327.03195662575,331.11985608357,348.83408706747,392.4383479509,490.54793493862,496.67978412536,523.2511306012],description:"New Enharmonic permuted"},newcastle:{frequencies:[261.6255653006,273.65745935891,291.9012907804,312.65334602246,327.03195662575,350.28154752005,366.3906401674,390.81668391305,410.48618883318,436.04260883433,467.04206359353,490.54793493862,523.2511306012],description:"Newcastle modified 1/3-comma meantone"},norden:{frequencies:[261.6255653006,274.87601291722,292.73769384471,310.07474405997,327.54963108844,349.78078158391,366.5013507395,391.37619916626,412.31401916973,437.91808280662,466.37437567834,489.99465727995,523.2511306012],description:"Reconstructed Schnitger temperament, organ in Norden. Ortgies, 2002"},novaro:{frequencies:[261.6255653006,274.70684356563,279.06726965397,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,490.54793493862,498.33441009638,523.2511306012],description:"9-limit diamond with 21/20, 16/15, 15/8 and 40/21 added for evenness"},novaro15:{frequencies:[261.6255653006,279.06726965397,280.31310567921,281.75060878526,283.42769574232,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,301.87565226992,305.22982618403,309.19384990071,313.95067836072,319.76457981184,322.00069575458,327.03195662575,332.97799220076,336.37572681506,340.11323489078,348.83408706747,356.76213450082,359.73515228832,362.25078272391,366.27579142084,373.75080757229,377.90359432309,380.54627680087,383.71749577421,392.4383479509,402.50086969323,406.97310157871,411.12588832951,418.60090448096,425.14154361347,428.11456140098,436.04260883433,442.75095666255,448.50096908674,453.48431318771,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,483.00104363188,485.87604984397,488.36772189445,490.54793493862,523.2511306012],description:"1-15 diamond, see Novaro, 1927, Sistema Natural base del Natural-Aproximado, p"},novaro_eb:{frequencies:[261.6255653006,277.27733921611,293.70273468471,311.34510173929,329.85947563084,349.74559786079,370.61463194963,392.51515715445,416.03831243363,440.72414616847,467.23897542105,495.06435356607,524.26505360912],description:"Novaro (?) equal beating 4/3 with strectched octave, almost pure 3/2"},janke1:{frequencies:[261.6255653006,276.38325105256,293.32570896007,310.58830860439,328.86683469969,349.02656754477,368.7143392539,391.76907592069,414.34624765043,439.23819834286,465.62553897253,492.45896815637,523.2511306012],description:"Rainer Janke, Temperatur I"},janke2:{frequencies:[261.6255653006,276.38325105256,292.98704147282,310.58830860439,328.48713220126,349.02656754477,368.7143392539,391.54284657258,414.34624765043,438.73106346722,465.62553897253,491.89038573682,523.2511306012],description:"Rainer Janke, Temperatur II"},janke3:{frequencies:[261.6255653006,276.22365192501,292.98704147282,310.40895756597,328.29744538229,349.02656754477,368.50142299854,391.54284657258,414.10698098223,438.47771564426,465.62553897253,491.60634075178,523.2511306012],description:"Rainer Janke, Temperatur III"},janke4:{frequencies:[261.6255653006,275.90473010106,292.98704147282,310.76776326996,328.10786809908,349.22823143301,368.07595926604,391.54284657258,413.86785247997,438.47771564426,465.89457252293,491.32245979018,523.2511306012],description:"Rainer Janke, Temperatur IV"},janke5:{frequencies:[261.6255653006,275.58617649731,292.98704147282,310.05056613125,328.10786809908,348.82502010853,367.43868454848,391.54284657258,413.39000965417,438.47771564426,465.08793784701,491.0387427573,523.2511306012],description:"Rainer Janke, Temperatur V"},janke6:{frequencies:[261.6255653006,275.74540729824,292.98704147282,310.58830860439,328.10786809908,349.43001184052,367.65098676472,391.54284657258,413.86785247997,438.47771564426,465.89457252293,491.0387427573,523.2511306012],description:"Rainer Janke, Temperatur VI"},janke7:{frequencies:[261.6255653006,275.42703764514,292.81785438923,311.12698372208,327.91840028839,349.63190883464,367.0144478307,391.54284657258,413.62886206386,438.22451411849,467.24207374344,490.75518955849,523.2511306012],description:"Rainer Janke, Temperatur VII"},jemblung1:{frequencies:[261.6255653006,298.87388797409,337.89601991959,388.44742741354,452.30188977628,523.2511306012],description:"Scale of bamboo gamelan jemblung from Kalijering, slendro-like. 1/1=590 Hz."},jemblung2:{frequencies:[261.6255653006,300.03885820455,355.06324470257,391.40016308218,451.61555914985,523.2511306012],description:"Bamboo gamelan jemblung at Royal Batavia Society. 1/1=504 Hz."},ji_10coh:{frequencies:[261.6255653006,283.42769574232,299.7792935736,327.03195662575,348.83408706747,370.63621750918,392.4383479509,436.04260883433,457.84473927605,485.0974023282,523.2511306012],description:"Differentially coherent 10-tone scale"},ji_10coh2:{frequencies:[261.6255653006,305.22982618403,313.95067836072,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,470.92601754108,479.64686971777,523.2511306012],description:"Other diff. coherent 10-tone scale"},ji_11:{frequencies:[261.6255653006,276.96780524107,294.32876096318,316.53463456122,336.37572681506,356.10146388137,384.42940207435,406.97310157871,432.48307733364,465.11211608996,494.26637409559,523.2511306012],description:"3 and 7 prime rational interpretation of 11-tET. OdC 2000"},ji_12:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Basic JI with 7-limit tritone"},ji_12a:{frequencies:[261.6255653006,279.06726965397,294.32876096318,305.22982618403,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,448.50096908674,457.84473927605,490.54793493862,523.2511306012],description:"7-limit 12-tone scale"},ji_12b:{frequencies:[261.6255653006,272.52663052146,290.69507255622,305.22982618403,327.03195662575,343.38355445704,366.27579142084,392.4383479509,418.60090448096,448.50096908674,457.84473927605,490.54793493862,523.2511306012],description:"alternate 7-limit 12-tone scale"},ji_12c:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:'Kurzweil "Just with natural b7th", is Sauveur Just with 7/4'},ji_13:{frequencies:[261.6255653006,279.06726965397,294.32876096318,310.07474405997,327.03195662575,348.83408706747,367.91095120397,372.08969287196,392.4383479509,418.60090448096,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:"5-limit 12-tone symmetrical scale with two tritones"},ji_17:{frequencies:[261.6255653006,271.31540105247,283.8170195002,294.32876096318,310.07474405997,321.55899383997,336.37572681506,348.83408706747,361.75386806997,378.42269266694,392.4383479509,406.97310157871,425.72552925031,441.49314144476,465.11211608996,482.33849075995,504.56359022259,523.2511306012],description:"3 and 7 prime rational interpretation of 17-tET. OdC"},ji_17a:{frequencies:[261.6255653006,272.52663052146,282.55561052465,294.32876096318,310.07474405997,321.08592105074,334.88072358477,348.83408706747,363.36884069528,376.74081403286,392.4383479509,408.78994578219,426.35277308246,441.49314144476,465.11211608996,484.4917875937,502.32108537715,523.2511306012],description:"3, 5 and 11 prime rational interpretation of 17-tET, OdC"},ji_17b:{frequencies:[261.6255653006,272.52663052146,285.40970760065,294.32876096318,310.07474405997,319.76457981184,334.88072358477,348.83408706747,359.73515228832,380.54627680087,392.4383479509,408.78994578219,428.11456140098,441.49314144476,465.11211608996,479.64686971777,502.32108537715,523.2511306012],description:"Alt. 3, 5 and 11 prime rational interpretation of 17-tET, OdC"},ji_19:{frequencies:[261.6255653006,272.52663052146,275.93321340298,279.06726965397,294.32876096318,306.59245933664,313.95067836072,327.03195662575,348.83408706747,353.19451315581,367.91095120397,392.4383479509,408.78994578219,418.60090448096,436.04260883433,441.49314144476,459.88868900496,470.92601754108,490.54793493862,523.2511306012],description:"5-limit 19-tone scale"},ji_20:{frequencies:[261.6255653006,271.31540105247,279.38237857051,288.32205155576,299.00064605783,310.07474405997,321.55899383997,331.11985608357,348.83408706747,356.10146388137,372.50983809402,384.42940207435,392.4383479509,413.43299207996,425.72552925031,441.49314144476,457.84473927605,474.80195184183,489.99465727995,504.56359022259,523.2511306012],description:"3 and 7 prime rational interpretation of 20-tET. OdC"},ji_21:{frequencies:[261.6255653006,271.31540105247,279.06726965397,290.69507255622,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,490.54793493862,504.56359022259,523.2511306012],description:"7-limit 21-tone just scale, Op de Coul, 2001"},ji_22:{frequencies:[261.6255653006,272.52663052146,279.06726965397,282.55561052465,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,340.65828815182,348.83408706747,363.36884069528,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,454.2110508691,470.92601754108,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"5-limit 22-tone scale (Zarlino?)"},ji_27:{frequencies:[261.6255653006,267.90457886781,275.62199471997,282.55561052465,290.69507255622,299.00064605783,305.22982618403,313.95067836072,320.49131749323,331.11985608357,336.37572681506,348.83408706747,356.10146388137,366.27579142084,373.75080757229,384.42940207435,392.4383479509,406.97310157871,413.43299207996,427.14378008261,436.04260883433,448.50096908674,457.84473927605,470.92601754108,484.4917875937,496.67978412536,510.98743222773,523.2511306012],description:"7-limit rational interpretation of 27-tET, OdC"},ji_29:{frequencies:[261.6255653006,267.90457886781,275.62199471997,282.55561052465,287.78812183066,294.32876096318,301.39265122629,310.07474405997,317.12189733406,323.76163705949,331.11985608357,340.65828815182,348.83408706747,356.76213450082,367.91095120397,372.08969287196,383.71749577421,392.4383479509,401.85686830172,413.43299207996,422.82919644541,431.68218274599,441.49314144476,454.2110508691,465.11211608996,475.68284600109,484.4917875937,496.67978412536,510.98743222773,523.2511306012],description:"3,5,11-prime rational interpretation of 29-tET, OdC"},ji_30:{frequencies:[261.6255653006,267.57160087561,274.70684356563,280.31310567921,286.15296204753,294.32876096318,299.7792935736,308.34441624714,313.95067836072,321.92208230347,329.64821227876,336.37572681506,344.91651675372,353.19451315581,360.81424763342,370.01329949656,379.40816842909,387.59343007496,396.89567239676,406.97310157871,415.27867508032,425.24536328225,436.04260883433,443.97065626768,456.65553216105,465.11211608996,478.40103369253,488.36772189445,498.33441009638,511.62332769895,523.2511306012],description:"11-limit rational interpretation of 30-tET"},ji_31:{frequencies:[261.6255653006,267.57160087561,274.08392555301,280.31310567921,285.40970760065,293.02063313667,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,334.88072358477,343.38355445704,348.83408706747,356.76213450082,366.27579142084,373.75080757229,383.71749577421,392.4383479509,398.6675280771,408.78994578219,418.60090448096,428.11456140098,436.04260883433,448.50096908674,457.84473927605,467.18850946536,479.64686971777,490.54793493862,499.46698830115,512.78610798918,523.2511306012],description:"A just 11-limit 31-tone scale, optimized for Mann complexity"},ji_31a:{frequencies:[261.6255653006,267.90457886781,272.52663052146,279.06726965397,286.15296204753,294.32876096318,299.00064605783,305.22982618403,313.95067836072,318.93402246168,327.03195662575,334.88072358477,343.38355445704,348.83408706747,358.80077526939,366.27579142084,373.75080757229,381.53728273004,392.4383479509,398.6675280771,408.78994578219,418.60090448096,429.2294430713,436.04260883433,448.50096908674,457.84473927605,465.11211608996,478.40103369253,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"A just 7-limit 31-tone scale"},ji_31b:{frequencies:[261.6255653006,267.90457886781,275.93321340298,282.55561052465,287.4304306281,294.32876096318,301.39265122629,306.59245933664,313.95067836072,319.36714514233,327.03195662575,334.88072358477,344.91651675372,353.19451315581,359.28803828513,367.91095120397,376.74081403286,383.2405741708,392.4383479509,401.85686830172,408.78994578219,418.60090448096,431.14564594215,441.49314144476,452.08897683944,459.88868900496,470.92601754108,479.0507177135,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"A just 5-limit 31-tone scale, corner clipped genus"},ji_31c:{frequencies:[261.6255653006,267.57160087561,272.52663052146,279.06726965397,285.40970760065,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,334.88072358477,343.38355445704,348.83408706747,359.73515228832,366.27579142084,373.75080757229,380.54627680087,392.4383479509,398.6675280771,408.78994578219,418.60090448096,428.11456140098,436.04260883433,448.50096908674,457.84473927605,465.11211608996,479.64686971777,490.54793493862,502.32108537715,511.62332769895,523.2511306012],description:"A just 11-limit 31-tone scale"},ji_5coh:{frequencies:[261.6255653006,305.22982618403,348.83408706747,381.53728273004,446.94367405519,523.2511306012],description:"Differential fully coherent pentatonic scale"},ji_6coh:{frequencies:[261.6255653006,294.32876096318,330.74639366397,372.08969287196,418.60090448096,465.11211608996,523.2511306012],description:"Differential coherent 6-tone scale, OdC 2003"},ji_7:{frequencies:[261.6255653006,290.69507255622,318.93402246168,348.83408706747,392.4383479509,429.2294430713,470.92601754108,523.2511306012],description:"7-limit rational interpretation of 7-tET. OdC"},ji_7a:{frequencies:[261.6255653006,287.78812183066,319.76457981184,348.83408706747,392.4383479509,428.11456140098,470.92601754108,523.2511306012],description:"Superparticular approximation to 7-tET. Op de Coul, 1998"},ji_8coh:{frequencies:[261.6255653006,286.99041781007,312.35527031954,339.96223546814,370.00947616612,405.83764015148,441.71144237774,480.75585116768,523.2511306012],description:"Differential coherent 8-tone scale, OdC, 2003"},ji_8coh3:{frequencies:[261.6255653006,277.97716313189,302.50455987882,327.03195662575,359.73515228832,392.4383479509,425.14154361347,466.02053819169,523.2511306012],description:"Differential fully coherent 8-tone scale, OdC, 2003"},ji_9coh:{frequencies:[261.6255653006,287.78812183066,313.95067836072,327.03195662575,366.27579142084,392.4383479509,418.60090448096,470.92601754108,497.08857407114,523.2511306012],description:"Differentially coherent 9-tone scale"},ji_ri24a:{frequencies:[261.6255653006,269.10058145205,277.01530443593,285.40970760065,294.32876096318,301.87565226992,310.68035879446,319.76457981184,329.87571277032,340.11323489078,348.83408706747,359.73515228832,370.63621750918,380.54627680087,392.4383479509,402.50086969323,414.99227599406,428.11456140098,440.63253103259,453.48431318771,465.11211608996,479.64686971777,494.18162334558,508.71637697339,523.2511306012],description:"M. Schulter, just/rational intonation system - with circulating 24-note set"},jioct12:{frequencies:[261.6255653006,272.52663052146,282.55561052465,302.80736724606,313.95067836072,327.03195662575,363.36884069528,376.74081403286,392.4383479509,436.04260883433,454.2110508691,470.92601754108,523.2511306012],description:"12-tone JI version of Messiaen's octatonic scale, Erlich & Par\xEF\xBF\xBDzek"},"jobin-bach":{frequencies:[261.6255653006,275.07759559501,292.50627485027,309.76836826904,327.03195662575,348.83408706747,366.77012764335,391.22147055517,412.61639318626,437.39890198442,464.6525521713,489.02683710225,523.2511306012],description:"Emile Jobin, WTC temperament after Bach's signet"},"johnson-secor_rwt":{frequencies:[261.6255653006,276.16031892841,293.03678286293,310.07474405997,327.94037872749,348.83408706747,368.21375857121,391.52992584916,414.24047839262,438.40450629885,465.11211608996,490.95167809495,523.2511306012],description:"Johnson/Secor proportional-beating well-temperament with five 24/19s."},johnson_44:{frequencies:[261.6255653006,265.7783520514,269.99705605222,274.2827236086,278.63641763414,283.05921791404,287.55222124002,292.11654190835,296.75331210627,301.46368356757,306.24882108355,311.17820103386,316.11753722951,321.13527558179,326.23266245367,331.4109583385,336.67144939063,342.01544029518,347.44425644654,352.9592442771,358.56177366235,364.2532300084,370.03502692537,375.90859839047,381.87540114246,387.93691728375,394.09464571975,400.35011587045,406.70487919155,413.16051176499,419.71861468993,426.38081694263,433.14876596753,440.02414274758,447.00865248514,454.10402744924,461.31203006992,468.63444275836,476.07308421189,483.62979961065,491.30646309654,499.10497838378,507.02727962797,515.07533168556,523.2511306012],description:"Aaron Johnson, 44-tET approximation"},johnson_7:{frequencies:[261.6255653006,288.83389952765,318.87182567809,352.10227751942,388.71994014354,429.2294430713,473.86811641255,523.2511306012],description:"Aaron Johnson, 7-tET approximation"},johnson_eb:{frequencies:[261.6255653006,273.1678696521,292.40504357126,312.71949922989,327.03195662575,349.65487315468,365.50630446407,390.89937403737,408.78994578219,437.06859144336,467.84806971401,488.62421754671,523.2511306012],description:'Aaron Johnson, "1/4-comma tempered" equal beating C-G-D-A-E plus just thirds'},johnson_ratwell:{frequencies:[261.6255653006,276.16031892841,292.90688289089,310.07474405997,327.94037872749,348.83408706747,368.21375857121,391.49724879514,414.24047839262,438.30776524386,465.11211608996,490.95167809495,523.2511306012],description:"Aaron Johnson, rational well-temperament with five 24/19's"},johnson_temp:{frequencies:[261.6255653006,275.52965735686,292.50638298357,309.88336774144,327.03195662575,348.76230617841,367.55223824197,391.22154286826,413.09299784305,437.39914452994,464.92072007996,490.30891677011,523.2511306012],description:"Aaron Johnson, temperament with just 5/4, 24/19 and 19/15"},johnston:{frequencies:[261.6255653006,275.93321340298,294.32876096318,315.35224388912,327.03195662575,359.73515228832,367.91095120397,392.4383479509,401.35740131342,441.49314144476,457.84473927605,490.54793493862,523.2511306012],description:"Ben Johnston's combined otonal-utonal scale"},johnston_21:{frequencies:[261.6255653006,272.52663052146,282.55561052465,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,340.65828815182,348.83408706747,363.36884069528,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,454.2110508691,470.92601754108,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"Johnston 21-note just enharmonic scale"},johnston_22:{frequencies:[261.6255653006,271.31540105247,279.06726965397,290.69507255622,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,343.38355445704,353.19451315581,367.91095120397,378.42269266694,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,490.54793493862,504.56359022259,523.2511306012],description:"Johnston 22-note scale from end of string quartet nr. 4"},johnston_25:{frequencies:[261.6255653006,272.52663052146,275.93321340298,279.06726965397,290.69507255622,294.32876096318,306.59245933664,313.95067836072,327.03195662575,331.11985608357,334.88072358477,348.83408706747,353.19451315581,367.91095120397,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,441.49314144476,459.88868900496,465.11211608996,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Johnston 25-note just enharmonic scale"},"johnston_6-qt":{frequencies:[261.6255653006,262.79353657426,266.47048317654,267.57160087561,271.31540105247,272.52663052146,277.4816601673,280.31310567921,284.23518205497,290.69507255622,294.32876096318,297.30177875068,299.7792935736,300.33547037059,305.22982618403,306.59245933664,310.07474405997,311.45900631024,316.53463456122,317.12189733406,319.76457981184,322.99452506247,327.03195662575,334.46450109452,339.14425131559,342.60490694126,348.83408706747,350.39138209902,355.29397756872,356.76213450082,361.75386806997,363.36884069528,367.91095120397,373.75080757229,381.53728273004,382.24514410802,387.59343007496,390.82337532559,392.4383479509,396.40237166758,399.70572476481,406.97310157871,408.78994578219,413.43299207996,420.46965851882,426.35277308246,436.04260883433,445.95266812602,452.19233508746,459.88868900496,465.11211608996,467.18850946536,475.68284600109,479.64686971777,484.4917875937,486.49381977384,490.54793493862,248.7057842981,498.33441009638,508.71637697339,516.79124009995,523.2511306012],description:"11-limit complete system from Ben Johnston's _6th Quartet_"},"johnston_6-qt_row":{frequencies:[261.6255653006,272.52663052146,290.69507255622,306.59245933664,327.03195662575,350.39138209902,363.36884069528,399.70572476481,408.78994578219,436.04260883433,445.95266812602,490.54793493862,508.71637697339],description:`11-limit 'prime row' from Ben Johnston's "6th Quartet"`},johnston_81:{frequencies:[116.54094037952,117.99770213426,119.33792294863,119.89808681021,120.82964698549,121.39681289533,122.77564089365,122.91427305652,124.31033640482,124.45070146973,125.86421560988,127.43751830501,127.89129259755,128.03570110055,129.48993375502,131.10855792696,132.74741490105,134.25516331721,134.88534766148,135.93335285867,136.57141450725,138.12259600536,138.27855718859,139.84912845542,141.59724256112,142.26189011172,143.87770417225,145.6761754744,147.49712766783,149.17240368579,151.03705873186,151.74601611917,153.46955111706,155.38792050603,157.33026951235,159.11723059817,159.29689788126,161.10619598065,161.86241719378,163.70085452487,163.8856974087,165.74711520643,165.93426862631,167.81895414651,169.91669107334,170.71426813406,172.6532450067,174.81141056928,176.9965532014,179.00688442294,179.84713021531,181.24447047823,182.095219343,184.16346134048,184.37140958479,186.46550460723,188.79632341482,189.68252014896,191.15627745751,191.83693889633,194.23490063253,196.66283689044,198.89653824771,199.12112235157,199.83014468368,201.38274497581,202.32802149222,204.62606815608,204.85712176088,207.18389400804,207.41783578289,209.77369268314,212.39586384168,213.39283516758,215.81655625837,218.5142632116,221.24569150175,223.75860552868,226.55558809779,227.61902417875,230.2043266756,233.08188075904],description:"Johnston 81-note 5-limit scale of Sonata for Microtonal Piano"},jorgensen:{frequencies:[261.6255653006,269.51415085551,288.85811466493,309.59046173614,318.92511007349,352.12195684808,355.62605411908,388.77403176757,408.50706336067,429.24143792307,469.25139168707,473.92081401802,523.2511306012],description:"Jorgensen's 5&7 temperament"},jousse:{frequencies:[261.6255653006,276.90198715646,293.15566421679,311.51473523959,328.62702621286,349.28097970329,369.20264759391,391.76800554826,415.35298052707,439.0631553946,466.60176257857,492.27019703794,523.2511306012],description:"Temperament of Jean Jousse (1832)"},jousse2:{frequencies:[261.6255653006,277.21176919085,293.63180098233,311.16627887077,329.63881547742,349.36510452864,370.14670828388,392.04008509316,415.41939014292,440.0494382652,466.3511549761,494.0599599767,523.2511306012],description:"Jean Jousse's quasi-equal temperament"},quasi_5:{frequencies:[261.6255653006,302.26980244078,349.22823143301,391.99543598175,452.89298412314,523.2511306012],description:"Quasi-Equal 5-Tone in 24-tET, 5 5 4 5 5 steps"},quasi_9:{frequencies:[261.6255653006,281.2143451833,302.26980244078,324.90175210669,349.22823143301,391.99543598175,421.34544350737,452.89298412314,486.80259447109,523.2511306012],description:'Quasi-Equal Enneatonic, Each "tetrachord" has 125 + 125 + 125 + 125 cents'},quint_chrom:{frequencies:[261.6255653006,277.01530443593,294.32876096318,348.83408706747,392.4383479509,415.52295665389,441.49314144476,523.2511306012],description:"Aristides Quintilianus' Chromatic genus"},oconnell:{frequencies:[261.6255653006,267.57429119961,272.27874977392,278.46970304972,283.3657217904,288.34782337261,294.90414810658,300.08911516052,305.36524364276,312.30850472426,317.79947295261,323.38698268281,330.74001416845,336.55504284097,344.20748191927,350.25929591231,356.41751010259,364.52157313929,370.93054700815,377.45220049416,386.03454097812,392.82175095637,399.72829510222,408.81713953112,416.00491024634,423.31905787312],description:"Walter O'Connell, Pythagorean scale of 25 octaves reduced by Phi. XH 15 (1993)"},oconnell_11:{frequencies:[261.6255653006,272.27874977392,288.34782337261,300.08911516052,312.30850472426,323.38698268281,344.20748191927,356.41751010259,370.93054700815,386.03454097812,408.81713953112,423.31905787312],description:"Walter O'Connell, 11-note mode of 25-tone scale"},oconnell_14:{frequencies:[261.6255653006,272.27874977392,283.3657217904,288.34782337261,300.08911516052,312.30850472426,323.38698268281,336.55504284097,344.20748191927,356.41751010259,370.93054700815,386.03454097812,399.72829510222,408.81713953112,423.31905787312],description:"Walter O'Connell, 14-note mode of 25-tone scale"},oconnell_7:{frequencies:[261.6255653006,283.3657217904,300.08911516052,323.38698268281,344.20748191927,370.93054700815,392.82175095637,423.31905787312],description:"Walter O'Connell, 7-note mode of 25-tone scale"},oconnell_9:{frequencies:[261.6255653006,278.46970304972,294.90414810658,305.36524364276,323.38698268281,344.20748191927,364.52157313929,377.45220049416,399.72829510222,423.31905787312],description:"Walter O'Connell, 9-tone mode of 25-tone scale"},oconnell_9a:{frequencies:[261.6255653006,272.27874977392,288.34782337261,305.36524364276,323.38698268281,344.20748191927,356.41751010259,377.45220049416,399.72829510222,423.31905787312],description:"Walter O'Connell, 7+2 major mode analogy for 25-tone scale"},octony_min:{frequencies:[261.6255653006,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,490.54793493862,523.2511306012],description:"Octony on Harmonic Minor, from Palmer on an album of Turkish music"},octony_rot:{frequencies:[261.6255653006,327.03195662575,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,490.54793493862,523.2511306012],description:"Rotated Octony on Harmonic Minor"},octony_trans:{frequencies:[261.6255653006,271.31540105247,279.06726965397,327.03195662575,348.83408706747,408.78994578219,420.46965851882,436.04260883433,523.2511306012],description:"Complex 10 of p. 115, an Octony based on Archytas's Enharmonic,"},octony_trans2:{frequencies:[261.6255653006,271.31540105247,279.06726965397,315.35224388912,324.36230800023,336.37572681506,348.83408706747,504.56359022259,523.2511306012],description:"Complex 6 of p. 115 based on Archytas's Enharmonic, an Octony"},octony_trans3:{frequencies:[261.6255653006,271.31540105247,279.06726965397,306.59245933664,315.35224388912,327.03195662575,348.83408706747,490.54793493862,523.2511306012],description:"Complex 5 of p. 115 based on Archytas's Enharmonic, an Octony"},octony_trans4:{frequencies:[261.6255653006,271.31540105247,279.06726965397,336.37572681506,348.83408706747,420.46965851882,432.48307733364,448.50096908674,523.2511306012],description:"Complex 11 of p. 115, an Octony based on Archytas's Enharmonic, 8 tones"},octony_trans5:{frequencies:[261.6255653006,271.31540105247,279.06726965397,317.94773560837,327.03195662575,339.14425131559,348.83408706747,508.71637697339,523.2511306012],description:"Complex 15 of p. 115, an Octony based on Archytas's Enharmonic, 8 tones"},octony_trans6:{frequencies:[261.6255653006,269.10058145205,271.31540105247,279.06726965397,336.37572681506,345.98646186692,348.83408706747,358.80077526939,523.2511306012],description:"Complex 14 of p. 115, an Octony based on Archytas's Enharmonic, 8 tones"},octony_u:{frequencies:[261.6255653006,280.31310567921,301.87565226992,327.03195662575,356.76213450082,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"7)8 octony from 1.3.5.7.9.11.13.15, 1.3.5.7.9.11.13 tonic (subharmonics 8-16)"},odd1:{frequencies:[261.6255653006,272.52663052146,313.95067836072,327.03195662575,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"ODD-1"},odd2:{frequencies:[261.6255653006,290.69507255622,294.32876096318,306.59245933664,313.95067836072,327.03195662575,348.83408706747,363.36884069528,392.4383479509,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"ODD-2"},oettingen:{frequencies:[261.6255653006,264.89588486686,267.90457886781,272.52663052146,275.93321340298,279.06726965397,282.55561052465,287.4304306281,290.69507255622,294.32876096318,298.00787047521,301.39265122629,306.59245933664,310.42486507835,313.95067836072,317.87506184023,323.35923445661,327.03195662575,331.11985608357,334.88072358477,339.06673262958,344.91651675372,348.83408706747,353.19451315581,357.20610515709,363.36884069528,367.91095120397,372.50983809402,376.74081403286,383.2405741708,388.03108134794,392.4383479509,397.34382730029,401.85686830172,408.78994578219,413.89982010446,418.60090448096,423.83341578697,431.14564594215,436.04260883433,441.49314144476,446.50763144636,452.08897683944,459.88868900496,465.11211608996,470.92601754108,476.81259276034,485.03885168492,490.54793493862,496.67978412536,502.32108537715,510.98743222773,517.37477513058,523.2511306012],description:"von Oettingen's Orthotonophonium tuning"},oettingen2:{frequencies:[261.6255653006,264.89588486686,267.90457886781,272.52663052146,275.93321340298,279.06726965397,282.55561052465,287.4304306281,290.69507255622,294.32876096318,297.67175429757,301.39265122629,306.59245933664,310.07474405997,313.95067836072,317.51653791741,322.99452506247,327.03195662575,331.11985608357,334.88072358477,340.65828815182,344.91651675372,348.83408706747,353.19451315581,357.20610515709,363.36884069528,367.91095120397,372.08969287196,376.74081403286,383.2405741708,387.59343007496,392.4383479509,396.89567239676,401.85686830172,408.78994578219,413.43299207996,418.60090448096,423.83341578697,431.14564594215,436.04260883433,441.49314144476,446.50763144636,454.2110508691,459.88868900496,465.11211608996,470.92601754108,476.27480687611,484.4917875937,490.54793493862,496.11959049595,502.32108537715,510.98743222773,516.79124009995,523.2511306012],description:"von Oettingen's Orthotonophonium tuning with central 1/1"},ogr10:{frequencies:[261.6255653006,264.15640940857,271.89678302796,296.5055443788,342.56848033562,359.46139971304,411.32572372413,440,484.46499093218,513.27277840175,523.2511306012],description:"Optimal Golomb Ruler of 10 segments, length 72"},ogr10a:{frequencies:[261.6255653006,264.15640940857,285.30470202322,314.13668154225,329.62755691287,352.60650301302,431.60923940535,448.5538823653,457.27406033445,508.3551866238,523.2511306012],description:"2nd Optimal Golomb Ruler of 10 segments, length 72"},ogr11:{frequencies:[261.6255653006,265.92749183559,274.74472021414,318.1829357186,331.4244391468,362.52783176564,371.50609336774,409.69842558521,455.51656649021,482.27514684959,486.22402266421,523.2511306012],description:"Optimal Golomb Ruler of 11 segments, length 85"},ogr12:{frequencies:[261.6255653006,265.06964174786,270.3209511875,308.09015504092,333.2396629384,346.57411320722,384.79959982017,413.49815209867,456.11269186454,468.20039948765,496.58195036371,499.83980314828,523.2511306012],description:"Optimal Golomb Ruler of 12 segments, length 106"},ogr2:{frequencies:[261.6255653006,329.62755691287,523.2511306012],description:"Optimal Golomb Ruler of 2 segments, length 3"},ogr3:{frequencies:[261.6255653006,293.66476791741,415.30469757995,523.2511306012],description:"Optimal Golomb Ruler of 3 segments, length 6"},ogr4:{frequencies:[261.6255653006,278.64197723942,336.62443200122,461.29362042034,523.2511306012],description:"Optimal Golomb Ruler of 4 segments, length 11"},ogr4a:{frequencies:[261.6255653006,296.76515515861,406.67242132093,433.12283887627,523.2511306012],description:"2nd Optimal Golomb Ruler of 4 segments, length 11"},ogr5:{frequencies:[261.6255653006,272.51337835337,307.97166902637,393.32961502355,426.7484383229,523.2511306012],description:"Optimal Golomb Ruler of 5 segments, length 17"},ogr5a:{frequencies:[261.6255653006,272.51337835337,307.97166902637,393.32961502355,482.27514684959,523.2511306012],description:"2nd Optimal Golomb Ruler of 5 segments, length 17"},ogr5b:{frequencies:[261.6255653006,272.51337835337,362.52783176564,426.7484383229,463.0066556268,523.2511306012],description:"3rd Optimal Golomb Ruler of 5 segments, length 17"},ogr5c:{frequencies:[261.6255653006,272.51337835337,362.52783176564,409.69842558521,444.50800708553,523.2511306012],description:"4th Optimal Golomb Ruler of 5 segments, length 17"},ogr6:{frequencies:[261.6255653006,268.98086109226,292.31087910123,345.21700307457,430.94493093825,495.02573326308,523.2511306012],description:"Optimal Golomb Ruler of 6 segments, length 25"},ogr6a:{frequencies:[261.6255653006,276.5429423948,284.31762274025,345.21700307457,407.69874723177,468.32288027948,523.2511306012],description:"2nd Optimal Golomb Ruler of 6 segments, length 25"},ogr6b:{frequencies:[261.6255653006,268.98086109226,354.92237405774,407.69874723177,443.06044202496,495.02573326308,523.2511306012],description:"3rd Optimal Golomb Ruler of 6 segments, length 25"},ogr6c:{frequencies:[261.6255653006,268.98086109226,317.66442301495,354.92237405774,455.51656649021,495.02573326308,523.2511306012],description:"4th Optimal Golomb Ruler of 6 segments, length 25"},ogr6d:{frequencies:[261.6255653006,276.5429423948,317.66442301495,375.1593523779,468.32288027948,481.48922855473,523.2511306012],description:"5th Optimal Golomb Ruler of 6 segments, length 25"},ogr7:{frequencies:[261.6255653006,267.01398215014,283.85429714132,314.3146261019,355.21191871351,409.69842558521,502.34551296122,523.2511306012],description:"Optimal Golomb Ruler of 7 segments, length 34"},ogr8:{frequencies:[261.6255653006,265.77967818767,283.06627815664,316.06708432391,387.90015179087,400.3161696196,454.08364189083,499.09751029017,523.2511306012],description:"Optimal Golomb Ruler of 8 segments, length 44"},ogr9:{frequencies:[261.6255653006,264.94361147373,282.17583275232,296.76515515861,349.59519124833,363.06573983159,401.57942110183,438.61588607285,510.2272282764,523.2511306012],description:"Optimal Golomb Ruler of 9 segments, length 55"},oldani:{frequencies:[261.6255653006,272.52663052146,294.32876096318,310.07474405997,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"This scale by Norbert L. Oldani appeared in Interval 5(3), p.10-11"},oljare:{frequencies:[261.6255653006,286.15296204753,305.22982618403,327.03195662575,348.83408706747,381.53728273004,392.4383479509,406.97310157871,436.04260883433,457.84473927605,490.54793493862,508.71637697339,523.2511306012],description:'Mats \xEF\xBF\xBDljare, scale for "Tampere" (2001)'},oljare17:{frequencies:[261.6255653006,272.51337835337,320.78822215662,334.13814720468,393.32961502355,409.69842558521,426.7484383229,502.34551296122,523.2511306012],description:'Mats \xEF\xBF\xBDljare, scale for "Fafner" (2001), MOS in 17-tET'},olympos:{frequencies:[261.6255653006,279.06726965397,348.83408706747,372.08969287196,465.11211608996,523.2511306012],description:"Scale of ancient Greek flutist Olympos, 6th century BC as reported by Partch"},opelt:{frequencies:[261.6255653006,272.52663052146,282.55561052465,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,363.36884069528,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,454.2110508691,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Friederich Wilhelm Opelt 19-tone"},organ1373a:{frequencies:[261.6255653006,277.01530443593,294.32876096318,311.64221749042,331.11985608357,348.83408706747,369.35373924791,392.4383479509,415.52295665389,441.49314144476,465.11211608996,496.67978412536,523.2511306012],description:"English organ tuning (1373) with 18:17:16 ficta semitones (Eb-G#)"},organ1373b:{frequencies:[261.6255653006,277.01530443593,294.32876096318,311.64221749042,331.11985608357,348.83408706747,369.35373924791,392.4383479509,415.52295665389,441.49314144476,467.46332623563,496.67978412536,523.2511306012],description:"English organ tuning (1373) with 18:17:16 accidental semitones (Eb-G#)"},ragib:{frequencies:[261.6255653006,269.99542342683,281.01564479119,288.12007609225,294.32876096318,303.49446183192,311.45900631024,323.77767743764,335.77702597132,341.99420300732,348.83408706747,360.36579242507,371.06455309218,381.37837507376,392.4383479509,407.46331920162,417.22825371678,432.79663407874,450.28451247858,458.15534711532,465.11211608996,476.50902003141,487.19844562495,503.12608711654,523.2511306012],description:"Idris Ragib Bey, vol.5 d'Erlanger, p 40. Idris Rag'ib Bey"},ragib7:{frequencies:[261.6255653006,270.30192333353,281.29980781121,288.32205155576,294.32876096318,303.74668805875,311.45900631024,324.36230800023,336.37572681506,341.71502406609,348.83408706747,360.4025644447,370.6997805717,381.53728273004,392.4383479509,406.97310157871,417.13259773693,432.48307733364,450.69091522486,457.84473927605,465.11211608996,476.92160341255,486.65469735975,502.32108537715,523.2511306012],description:"7-limit version of Idris Rag'ib Bey scale"},"rameau-flat":{frequencies:[261.6255653006,276.01120901503,292.50629850443,312.00666699279,327.03195662575,349.91920725962,366.20974703841,391.22137338448,415.30469757995,437.39882871549,468.01000025525,489.02679755603,523.2511306012],description:'Rameau bemols, see Pierre-Yves Asselin in "Musique et temperament"'},"rameau-gall":{frequencies:[261.6255653006,274.65078342868,292.50627485027,310.49874388777,327.03195662575,349.91912034749,366.20104475463,391.22147055517,412.61639318626,437.39890198442,468.01003810189,489.02683710225,523.2511306012],description:"Rameau's temperament, after Gallimard (1st solution)"},"rameau-merc":{frequencies:[261.6255653006,273.37431312998,292.50627485027,308.72950296259,327.03195662575,348.83408706747,365.63284274659,391.22147055517,409.55238583376,437.39890198442,464.53468854848,489.02683710225,523.2511306012],description:"Rameau's temperament, after Mercadier"},"rameau-minor":{frequencies:[261.6255653006,294.32876096318,313.95067836072,353.19451315581,392.4383479509,418.60090448096,441.49314144476,470.92601754108,490.54793493862,523.2511306012],description:"Rameau's systeme diatonique mineur on E. Asc. 4-6-8-9, desc. 9-7-5-4"},"rameau-nouv":{frequencies:[261.6255653006,275.98004852257,292.50627485027,311.49614460359,327.03195662575,349.91912034749,367.37127028704,391.22147055517,414.64857675456,437.39890198442,468.01003810189,489.02683710225,523.2511306012],description:"Temperament by Rameau in Nouveau Systeme (1726)"},"rameau-sharp":{frequencies:[261.6255653006,273.37431312998,292.50629850443,308.54983514133,327.03195662575,348.83408706747,365.63293356166,391.22137338448,409.42528169498,437.39882871549,464.33633889105,489.02679755603,523.2511306012],description:'Rameau dieses, see Pierre-Yves Asselin in "Musique et temperament"'},rameau:{frequencies:[261.6255653006,275.07757335026,292.50629850443,310.73186404381,327.03195662575,349.91920725962,366.77009798369,391.22137338448,412.61635981914,437.39882871549,468.01000025525,489.02679755603,523.2511306012],description:"Rameau's modified meantone temperament (1725)"},ramis:{frequencies:[261.6255653006,275.93321340298,290.69507255622,310.07474405997,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.43299207996,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Monochord of Ramos de Pareja (Ramis de Pareia), Musica practica (1482). Carlos: Switched on Bach"},rapoport_8:{frequencies:[261.6255653006,297.86386736488,316.53463456122,336.37572681506,382.96782946913,406.97310157871,432.48307733364,492.38720931745,523.2511306012],description:"Paul Rapoport, cycle of 14/9 close to 8 out of 11-tET, XH 13, 1991"},rast_moha:{frequencies:[261.6255653006,293.66476791741,320.24370022528,349.22823143301,391.99543598175,427.47405410759,479.82340237272,523.2511306012],description:"Rast + Mohajira (Dudon) 4 + 3 + 3 Rast and 3 + 4 + 3 Mohajira tetrachords"},rat_dorenh:{frequencies:[261.6255653006,267.70988077271,274.08392555301,359.73515228832,411.12588832951,418.60090448096,426.35277308246,523.2511306012],description:"Rationalized Schlesinger's Dorian Harmonia in the enharmonic genus"},rat_hypodenh:{frequencies:[261.6255653006,270.06509966514,279.06726965397,348.83408706747,380.54627680087,389.39619021485,398.6675280771,523.2511306012],description:"1+1 rationalized enharmonic genus derived from K.S.'s 'Bastard' Hypodorian"},rat_hypodenh2:{frequencies:[261.6255653006,270.06509966514,288.69027895239,348.83408706747,380.54627680087,389.39619021485,408.39112632289,523.2511306012],description:"1+2 rationalized enharmonic genus derived from K.S.'s 'Bastard' Hypodorian"},rat_hypodenh3:{frequencies:[261.6255653006,270.06509966514,299.00064605783,348.83408706747,380.54627680087,389.39619021485,418.60090448096,523.2511306012],description:"1+3 rationalized enharmonic genus derived from K.S.'s 'Bastard' Hypodorian"},rat_hypodhex:{frequencies:[261.6255653006,267.19206668997,273.00058987889,348.83408706747,380.54627680087,386.4008349055,392.4383479509,523.2511306012],description:"1+1 rationalized hexachromatic/hexenharmonic genus derived from K.S.'Bastard'"},rat_hypodhex2:{frequencies:[261.6255653006,267.19206668997,279.06726965397,348.83408706747,380.54627680087,386.4008349055,398.6675280771,523.2511306012],description:"1+2 rat. hexachromatic/hexenharmonic genus derived from K.S.'s 'Bastard' Hypodo"},rat_hypodhex3:{frequencies:[261.6255653006,267.19206668997,285.40970760065,348.83408706747,380.54627680087,386.4008349055,405.0976494977,523.2511306012],description:"1+3 rat. hexachromatic/hexenharmonic genus from K.S.'s 'Bastard' Hypodorian"},rat_hypodhex4:{frequencies:[261.6255653006,267.19206668997,292.04714266113,348.83408706747,380.54627680087,386.4008349055,411.73859457144,523.2511306012],description:"1+4 rat. hexachromatic/hexenharmonic genus from K.S.'s 'Bastard' Hypodorian"},rat_hypodhex5:{frequencies:[261.6255653006,267.19206668997,299.00064605783,348.83408706747,380.54627680087,386.4008349055,418.60090448096,523.2511306012],description:"1+5 rat. hexachromatic/hexenharmonic genus from K.S.'s 'Bastard' Hypodorian"},rat_hypodhex6:{frequencies:[261.6255653006,273.00058987889,292.04714266113,348.83408706747,380.54627680087,392.4383479509,411.73859457144,523.2511306012],description:"2+3 rationalized hexachromatic/hexenharmonic genus from K.S.'s 'Bastard' hypod"},rat_hypodpen:{frequencies:[261.6255653006,268.33391312882,275.39533189537,348.83408706747,380.54627680087,387.59343007496,394.90651366128,523.2511306012],description:"1+1 rationalized pentachromatic/pentenharmonic genus derived from K.S.'s 'Bastar"},rat_hypodpen2:{frequencies:[261.6255653006,268.33391312882,282.83844897362,348.83408706747,380.54627680087,387.59343007496,402.50086969323,523.2511306012],description:"1+2 rationalized pentachromatic/pentenharmonic genus from K.S.'s 'Bastard' hyp"},rat_hypodpen3:{frequencies:[261.6255653006,268.33391312882,290.69507255622,348.83408706747,380.54627680087,387.59343007496,410.39304360878,523.2511306012],description:"1+3 rationalized pentachromatic/pentenharmonic genus from 'Bastard' Hypodorian"},rat_hypodpen4:{frequencies:[261.6255653006,268.33391312882,299.00064605783,348.83408706747,380.54627680087,387.59343007496,418.60090448096,523.2511306012],description:"1+4 rationalized pentachromatic/pentenharmonic genus from 'Bastard' Hypodorian"},rat_hypodpen5:{frequencies:[261.6255653006,275.39533189537,290.69507255622,348.83408706747,380.54627680087,394.90651366128,410.39304360878,523.2511306012],description:"2+3 rationalized pentachromatic/pentenharmonic genus from 'Bastard' Hypodorian"},rat_hypodpen6:{frequencies:[261.6255653006,268.33391312882,299.00064605783,348.83408706747,380.54627680087,394.90651366128,418.60090448096,523.2511306012],description:"2+3 rationalized pentachromatic/pentenharmonic genus from 'Bastard' Hypodorian"},rat_hypodtri:{frequencies:[261.6255653006,273.00058987889,285.40970760065,348.83408706747,380.54627680087,392.4383479509,405.0976494977,523.2511306012],description:"rationalized first (1+1) trichromatic genus derived from K.S.'s 'Bastard' hyp"},rat_hypodtri2:{frequencies:[261.6255653006,273.00058987889,299.00064605783,348.83408706747,380.54627680087,392.4383479509,418.60090448096,523.2511306012],description:"rationalized second (1+2) trichromatic genus derived from K.S.'s 'Bastard' hyp"},rat_hypolenh:{frequencies:[261.6255653006,268.33391312882,275.39533189537,348.83408706747,373.75080757229,402.50086969323,410.39304360878,418.60090448096,523.2511306012],description:"Rationalized Schlesinger's Hypolydian Harmonia in the enharmonic genus"},rat_hypopchrom:{frequencies:[261.6255653006,277.01530443593,294.32876096318,362.25078272391,392.4383479509,409.50088481833,428.11456140098,523.2511306012],description:"Rationalized Schlesinger's Hypophrygian Harmonia in the chromatic genus"},rat_hypopenh:{frequencies:[261.6255653006,269.10058145205,277.01530443593,362.25078272391,392.4383479509,400.78810003496,409.50088481833,523.2511306012],description:"Rationalized Schlesinger's Hypophrygian Harmonia in the enharmonic genus"},rat_hypoppen:{frequencies:[261.6255653006,273.79419624481,294.32876096318,362.25078272391,392.4383479509,405.97070477679,428.11456140098,523.2511306012],description:"Rationalized Schlesinger's Hypophrygian Harmonia in the pentachromatic genus"},rat_hypoptri:{frequencies:[261.6255653006,271.68808704293,282.55561052465,362.25078272391,392.4383479509,403.65087217807,415.52295665389,523.2511306012],description:"Rationalized Schlesinger's Hypophrygian Harmonia in first trichromatic genus"},rat_hypoptri2:{frequencies:[261.6255653006,271.68808704293,294.32876096318,362.25078272391,392.4383479509,403.65087217807,428.11456140098,523.2511306012],description:"Rationalized Schlesinger's Hypophrygian Harmonia in second trichromatic genus"},rectsp10:{frequencies:[261.6255653006,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,336.37572681506,340.11323489078,348.83408706747,359.73515228832,366.27579142084,373.75080757229,377.90359432309,392.4383479509,406.97310157871,411.12588832951,418.60090448096,425.14154361347,436.04260883433,444.76346101102,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,485.87604984397,490.54793493862,494.18162334558,497.08857407114,523.2511306012],description:"Rectangle minimal beats spectrum of order 10"},rectsp10a:{frequencies:[261.6255653006,275.39533189537,277.01530443593,279.06726965397,281.75060878526,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,307.79478270659,313.95067836072,319.76457981184,322.00069575458,327.03195662575,332.97799220076,336.37572681506,340.11323489078,348.83408706747,359.73515228832,362.25078272391,366.27579142084,373.75080757229,377.90359432309,380.54627680087,392.4383479509,402.50086969323,406.97310157871,411.12588832951,418.60090448096,425.14154361347,428.11456140098,436.04260883433,444.76346101102,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,485.87604984397,490.54793493862,494.18162334558,497.08857407114,523.2511306012],description:"Rectangle minimal beats spectrum of order 10 union with inversion"},rectsp11:{frequencies:[261.6255653006,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,309.19384990071,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,340.11323489078,348.83408706747,356.76213450082,359.73515228832,366.27579142084,373.75080757229,377.90359432309,380.54627680087,392.4383479509,404.33041910093,406.97310157871,411.12588832951,418.60090448096,425.14154361347,428.11456140098,436.04260883433,444.76346101102,448.50096908674,451.89870370104,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,485.87604984397,490.54793493862,494.18162334558,497.08857407114,499.46698830115,523.2511306012],description:"Rectangle minimal beats spectrum of order 11"},rectsp12:{frequencies:[261.6255653006,283.42769574232,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,309.19384990071,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,340.11323489078,348.83408706747,356.76213450082,359.73515228832,366.27579142084,370.63621750918,373.75080757229,377.90359432309,380.54627680087,392.4383479509,404.33041910093,406.97310157871,411.12588832951,414.24047839262,418.60090448096,425.14154361347,428.11456140098,436.04260883433,444.76346101102,448.50096908674,451.89870370104,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,485.87604984397,490.54793493862,494.18162334558,497.08857407114,499.46698830115,501.44900015948,523.2511306012],description:"Rectangle minimal beats spectrum of order 12"},rectsp6:{frequencies:[261.6255653006,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,470.92601754108,479.64686971777,523.2511306012],description:"Rectangle minimal beats spectrum of order 6 (=songlines)"},rectsp6a:{frequencies:[261.6255653006,285.40970760065,290.69507255622,299.00064605783,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,373.75080757229,392.4383479509,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,479.64686971777,523.2511306012],description:"Rectangle minimal beats spectrum of order 6 union with inversion"},rectsp7:{frequencies:[261.6255653006,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,411.12588832951,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,479.64686971777,485.87604984397,523.2511306012],description:"Rectangle minimal beats spectrum of order 7"},rectsp7a:{frequencies:[261.6255653006,281.75060878526,285.40970760065,290.69507255622,299.00064605783,305.22982618403,313.95067836072,327.03195662575,332.97799220076,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,406.97310157871,411.12588832951,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,479.64686971777,485.87604984397,523.2511306012],description:"Rectangle minimal beats spectrum of order 7 union with inversion"},rectsp8:{frequencies:[261.6255653006,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,392.4383479509,411.12588832951,418.60090448096,425.14154361347,436.04260883433,448.50096908674,457.84473927605,470.92601754108,479.64686971777,485.87604984397,490.54793493862,523.2511306012],description:"Rectangle minimal beats spectrum of order 8"},rectsp8a:{frequencies:[261.6255653006,279.06726965397,281.75060878526,285.40970760065,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,322.00069575458,327.03195662575,332.97799220076,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,380.54627680087,392.4383479509,406.97310157871,411.12588832951,418.60090448096,425.14154361347,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,485.87604984397,490.54793493862,523.2511306012],description:"Rectangle minimal beats spectrum of order 8 union with inversion"},rectsp9:{frequencies:[261.6255653006,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,377.90359432309,392.4383479509,406.97310157871,411.12588832951,418.60090448096,425.14154361347,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,485.87604984397,490.54793493862,494.18162334558,523.2511306012],description:"Rectangle minimal beats spectrum of order 9"},rectsp9a:{frequencies:[261.6255653006,277.01530443593,279.06726965397,281.75060878526,285.40970760065,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,322.00069575458,327.03195662575,332.97799220076,336.37572681506,348.83408706747,359.73515228832,362.25078272391,366.27579142084,373.75080757229,377.90359432309,380.54627680087,392.4383479509,406.97310157871,411.12588832951,418.60090448096,425.14154361347,428.11456140098,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,485.87604984397,490.54793493862,494.18162334558,523.2511306012],description:"Rectangle minimal beats spectrum of order 9 union with inversion"},redfield:{frequencies:[261.6255653006,290.69507255622,327.03195662575,348.83408706747,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"Redfield New Diatonic"},reinhard:{frequencies:[261.6255653006,277.01530443593,294.32876096318,309.81974838229,327.03195662575,348.83408706747,369.35373924791,392.4383479509,413.09299784305,436.04260883433,461.69217405988,490.54793493862,523.2511306012],description:"Reinhard 19-limit superparticular"},reinhard17:{frequencies:[261.6255653006,277.01530443593,277.97716313189,286.94416839421,292.40504357126,296.50897400735,307.79478270659,317.68818643644,338.57426097725,342.12573923925,369.35373924791,400.13321751856,404.33041910093,430.91269578922,444.76346101102,477.08191319521,492.47165233054,523.2511306012],description:`Reinhard's Harmonic-17 tuning for "Tresspass", 1998`},renteng1:{frequencies:[261.6255653006,285.40970760065,313.15788183285,391.64553850062,426.52890806662,523.2511306012],description:"Gamelan Renteng from Chileunyi (Tg. Sari). 1/1=330 Hz"},renteng2:{frequencies:[261.6255653006,294.32876096318,311.77048523333,396.07199334683,425.86840190162,523.2511306012],description:"Gamelan Renteng from Chikebo (Tg. Sari). 1/1=360 Hz"},renteng3:{frequencies:[261.6255653006,278.97471276149,312.97903559457,379.60005211265,409.44065404912,468.42785143649,523.2511306012],description:"Gamelan Renteng from Lebakwangi (Pameungpeuk). 1/1=377 Hz"},renteng4:{frequencies:[261.6255653006,296.45730715573,311.93819010347,397.0826586675,424.17395032031,523.2511306012],description:"Gamelan Renteng Bale` bandung from Kanoman (Cheribon). 1/1=338 Hz"},robot:{frequencies:[261.6255653006,272.52663052146,279.06726965397,294.32876096318,306.59245933664,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"Dead Robot (see lattice)"},robot_live:{frequencies:[261.6255653006,294.32876096318,313.95067836072,327.03195662575,334.88072358477,348.83408706747,376.74081403286,392.4383479509,418.60090448096,446.50763144636,490.54793493862,502.32108537715,523.2511306012],description:"Live Robot"},romieu:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Romieu's Monochord, Memoire theorique & pratique (1758)"},romieu_inv:{frequencies:[261.6255653006,272.52663052146,290.69507255622,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Romieu inverted, Pure (just) C minor in Wilkinson: Tuning In"},rosati_21:{frequencies:[261.6255653006,279.06726965397,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,490.54793493862,523.2511306012],description:"Dante Rosati, JI guitar tuning"},rosati_21a:{frequencies:[261.6255653006,280.31310567921,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,488.36772189445,523.2511306012],description:"Alternative version of rosati_21 with more tetrads"},rousseau:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,363.36884069528,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Rousseau's Monochord, Dictionnaire de musique (1768)"},rousseauw:{frequencies:[261.6255653006,276.81658657456,293.31219032635,311.14941643136,328.83652403056,349.33732971591,369.19521129916,391.76004912942,415.1051791302,439.20783490896,466.32059269121,492.40223109551,523.2511306012],description:"Jean-Jacques Rousseau's temperament (1768)"},rsr_12:{frequencies:[261.6255653006,279.06726965397,299.00064605783,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"RSR - 7 limit JI"},"rvf-1":{frequencies:[261.6255653006,272.14556467328,280.20095193414,292.09989854643,304.19649364034,313.29104303136,326.0297292803,340.21856244106,350.08660369014,364.11104988921,374.67209286633,390.97784457618,406.87534373272,419.03967825638,436.39317047385,454.92493848389,468.39051363853,487.22455955444,508.94280091833,523.2511306012],description:"D-A 695 cents, the increment is 0.25 cents, interval range 49.5 to 75.5"},"rvf-2":{frequencies:[261.6255653006,272.87751533003,278.75612859219,292.27711197479,305.71136588092,312.51386339015,326.29348693151,342.97106251658,349.87433921674,364.79522794952,372.13777859784,391.13596290168,408.38225803817,417.4934384938,436.65792486176,457.83788806384,467.7011114131,487.81592522452,513.9947144098,523.2511306012],description:"695 cents, 0.607 cents, 31-90 cents, C-A# is 7/4."},"rvf-3":{frequencies:[261.6255653006,272.98787180262,278.19314238431,292.29399505039,306.11778315204,312.24320803046,326.25579420701,343.90343447252,349.81371586656,364.81629995674,371.08598724028,391.15855645336,408.71263878415,416.89098941754,436.60748307387,458.73792719255,467.48503753613,487.78774868553,515.83876338215,523.2511306012],description:"694.737, 0.082, 25-97, the fifth E#-B# is 3/2."},majmin:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,313.95067836072,327.03195662575,348.83408706747,363.36884069528,367.91095120397,392.4383479509,408.78994578219,418.60090448096,436.04260883433,465.11211608996,470.92601754108,490.54793493862,523.2511306012],description:"Malcolm & Marpurg 4 (Yamaha major & minor) mixed. Mersenne/Ban without D#"},major_clus:{frequencies:[261.6255653006,275.93321340298,290.69507255622,294.32876096318,327.03195662575,348.83408706747,367.91095120397,392.4383479509,436.04260883433,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:"Chalmers' Major Mode Cluster"},major_wing:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Chalmers' Major Wing with 7 major and 6 minor triads"},malcolm:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Malcolm's Monochord (1721), and C major in Yamaha synths, Wilkinson: Tuning In"},malcolm2:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,348.83408706747,370.63621750918,392.4383479509,414.24047839262,436.04260883433,463.29527188648,490.54793493862,523.2511306012],description:"Malcolm 2"},malcolm_ap:{frequencies:[261.6255653006,279.47938236087,293.66476791741,313.97746652079,326.1838132033,349.22823143301,369.99442271164,391.99543598175,419.68935090103,436.0054062308,466.16376151809,489.82458627646,523.2511306012],description:"Best approximations in mix of all ETs from 12-23 to Malcolm's Monochord"},malcolm_me:{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,392.4383479509,457.84473927605,490.54793493862,523.2511306012],description:"Malcolm's Mid-East"},malcolme:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,372.08969287196,392.4383479509,418.60090448096,436.04260883433,465.11211608996,496.11959049595,523.2511306012],description:"Most equal interval permutation of Malcolm's Monochord"},malcolme2:{frequencies:[261.6255653006,275.93321340298,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Inverse most equal interval permutation of Malcolm's Monochord"},malcolms:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,369.99442271164,392.4383479509,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Symmetrical version of Malcolm's Monochord and Albion scale"},malerbi:{frequencies:[261.6255653006,275.62199471997,292.73769384471,310.07474405997,327.54963108844,348.83408706747,367.49599295996,391.37619916626,413.43299207996,437.91808280662,465.11211608996,489.99465727995,523.2511306012],description:"Luigi Malerbi's well-temperament nr.1 (1794) (nr.2 = Young)"},malgache:{frequencies:[261.6255653006,275.93321340298,294.32876096318,306.59245933664,327.03195662575,353.19451315581,367.91095120397,392.4383479509,413.89982010446,441.49314144476,459.88868900496,490.54793493862,523.2511306012],description:"tuning from Madagascar"},malgache1:{frequencies:[261.6255653006,279.06726965397,294.32876096318,310.07474405997,327.03195662575,353.19451315581,376.74081403286,392.4383479509,418.60090448096,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:"tuning from Madagascar"},malgache2:{frequencies:[261.6255653006,275.93321340298,294.32876096318,313.95067836072,327.03195662575,353.19451315581,367.91095120397,392.4383479509,408.78994578219,441.49314144476,470.92601754108,490.54793493862,523.2511306012],description:"tuning from Madagascar"},malkauns:{frequencies:[261.6255653006,313.95067836072,348.83408706747,418.60090448096,465.11211608996,523.2511306012],description:"Raga Malkauns, inverse of prime_5"},mambuti:{frequencies:[261.6255653006,294.34406205295,331.72862856444,394.26624244126,466.16376151809,525.06772693396,590.39077962608,792.18471060794,999.82182774046],description:"African Mambuti Flutes (aerophone; vertical wooden; one note each)"},mandelbaum5:{frequencies:[261.6255653006,272.52663052146,282.55561052465,290.69507255622,302.80736724606,313.95067836072,327.03195662575,340.65828815182,348.83408706747,363.36884069528,376.74081403286,392.4383479509,403.74315632809,418.60090448096,436.04260883433,454.2110508691,470.92601754108,484.4917875937,502.32108537715,523.2511306012],description:"Mandelbaum's 5-limit 19-tone scale, kleismic detempered circle of minor thirds"},mandelbaum7:{frequencies:[261.6255653006,272.52663052146,280.31310567921,294.32876096318,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,376.74081403286,392.4383479509,406.97310157871,418.60090448096,436.04260883433,457.84473927605,470.92601754108,490.54793493862,504.56359022259,523.2511306012],description:"Mandelbaum's 7-limit 19-tone scale"},marimba1:{frequencies:[261.6255653006,284.4818984792,319.50463429683,342.83241505062,371.92288545737,411.72190027758,457.09800545097,500.48847822777,547.68138927822,612.97866327818,651.68292300609,728.11694797601,807.8963375694,903.69557412727,1013.19282257599,1069.7265813247,1225.95732655636,1303.36584601218],description:"Marimba of the Bakwese, SW Belgian Congo (Zaire). 1/1=140.5 Hz"},marimba2:{frequencies:[261.6255653006,279.11058864149,318.03161540472,343.03050002254,379.95718438213,421.58889248327,458.6849347701,519.33670373121,571.2689787911,613.68721319418,694.83488613378,761.23234162637,846.59395682498,953.56868388592,1049.52904699774,1145.8425062572,1271.3918647407,1389.66977226756],description:"Marimba of the Bakubu, S. Belgian Congo (Zaire). 1/1=141.5 Hz"},marimba3:{frequencies:[261.6255653006,296.73398952435,348.2210758395,420.13030572059,476.50902003141,518.73708886244,603.49292471609,696.44215167899,840.26061144117,953.01804006282,1037.47417772488],description:"Marimba from the Yakoma tribe, Zaire. 1/1=185.5 Hz"},marion:{frequencies:[261.6255653006,269.91407136119,278.46532473603,287.28749371714,296.38899008685,305.77900572762,315.46632790985,325.46074015958,335.7715953476,346.4093067252,357.3838291689,368.70624618807,380.38737313392,392.4383479509,411.71310103548,431.93429139282,453.14890242083,475.40520223986,498.75490298644,523.2511306012],description:"scale with two different ET step sizes"},marion1:{frequencies:[261.6255653006,262.79353657426,272.52663052146,280.31310567921,286.15296204753,294.32876096318,305.22982618403,311.45900631024,327.03195662575,336.37572681506,343.38355445704,350.39138209902,367.91095120397,373.75080757229,381.53728273004,392.4383479509,408.78994578219,420.46965851882,436.04260883433,457.84473927605,467.18850946536,476.92160341255,490.54793493862,515.07533168556,523.2511306012],description:"Marion's 7-limit Scale # 1"},marion10:{frequencies:[261.6255653006,267.07609791103,272.52663052146,286.15296204753,290.69507255622,296.75121990114,305.22982618403,317.94773560837,327.03195662575,339.14425131559,356.10146388137,363.36884069528,370.93902487643,381.53728273004,400.61414686654,406.97310157871,408.78994578219,423.93031414449,436.04260883433,445.12682985172,457.84473927605,474.80195184183,476.92160341255,484.4917875937,508.71637697339,523.2511306012],description:"Marion's 7-limit Scale # 10"},marion15:{frequencies:[261.6255653006,269.10058145205,280.31310567921,288.32205155576,299.00064605783,313.95067836072,320.35783506196,327.03195662575,336.37572681506,353.19451315581,358.80077526939,360.4025644447,373.75080757229,384.42940207435,392.4383479509,403.65087217807,418.60090448096,420.46965851882,427.14378008261,448.50096908674,461.31528248922,470.92601754108,480.53675259294,504.56359022259,523.2511306012],description:"Marion's 7-limit Scale # 15"},marion19:{frequencies:[261.6255653006,274.70684356563,280.31310567921,286.15296204753,294.32876096318,309.04519901133,313.95067836072,315.35224388912,327.03195662575,336.37572681506,343.38355445704,353.19451315581,366.27579142084,367.91095120397,373.75080757229,392.4383479509,403.65087217807,412.06026534844,420.46965851882,441.49314144476,457.84473927605,470.92601754108,490.54793493862,504.56359022259,515.07533168556,523.2511306012],description:"Marion's 7-limit Scale # 19"},marion26:{frequencies:[261.6255653006,271.31540105247,279.06726965397,284.8811711051,293.02063313667,303.87324917877,305.22982618403,310.07474405997,325.57848126297,334.88072358477,341.85740532612,348.83408706747,366.27579142084,379.84156147346,390.69417751556,406.97310157871,418.60090448096,427.32175665765,434.10464168396,455.80987376816,465.11211608996,474.80195184183,488.36772189445,512.78610798918,523.2511306012],description:"Marion's 7-limit Scale # 26"},marissing:{frequencies:[261.6255653006,290.69507255622,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,436.04260883433,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:"Peter van Marissing, just scale, Mens en Melodie, 1979"},"marpurg-1":{frequencies:[261.6255653006,276.86979852503,294.32876096318,311.47852302926,329.62755691287,348.83408706747,370.83100115625,392.4383479509,415.30469757995,439.50340943686,467.21778431035,494.44133512215,523.2511306012],description:"Other temperament by Marpurg, 3 fifths 1/3 Pyth. comma flat"},"marpurg-t1":{frequencies:[261.6255653006,275.62199471997,294.32876096318,310.07474405997,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.43299207996,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Marpurg's temperament nr.1, Kirnbergersche Temperatur (1766)"},"marpurg-t11":{frequencies:[261.6255653006,278.12325072816,294.32876096318,311.47852302926,331.11985608357,348.83408706747,371.66947115233,392.4383479509,416.24372513446,441.49314144476,466.16376151809,496.67978412536,523.2511306012],description:"Marpurg's temperament nr.11, 6 tempered fifths"},"marpurg-t12":{frequencies:[261.6255653006,279.06706247425,294.66131982972,310.42509491746,330.74614861362,349.22823143301,372.08941681833,392.88175996935,418.60059350213,441.99197952365,465.63764214343,496.11922267243,523.2511306012],description:"Marpurg's temperament nr.12, 4 tempered fifths"},"marpurg-t2":{frequencies:[261.6255653006,278.75210322491,294.32876096318,313.59611581451,331.11985608357,348.83408706747,371.66947115233,392.4383479509,418.12815462835,441.49314144476,470.39417348663,495.55929511749,523.2511306012],description:"Marpurg's temperament nr.2, 2 tempered fifths, Neue Methode (1790)"},"marpurg-t3":{frequencies:[261.6255653006,276.55731914056,294.32876096318,311.12698372208,331.11985608357,348.83408706747,368.74309237173,392.4383479509,414.83597850347,441.49314144476,465.11211608996,491.65745674141,523.2511306012],description:"Marpurg's temperament nr.3, 2 tempered fifths"},"marpurg-t4":{frequencies:[261.6255653006,276.86979852503,294.32876096318,310.07474405997,331.11985608357,348.83408706747,369.15973155124,392.4383479509,415.30469757995,441.49314144476,465.11211608996,492.21297564769,523.2511306012],description:"Marpurg's temperament nr.4, 2 tempered fifths"},"marpurg-t5":{frequencies:[261.6255653006,277.80935667884,294.32876096318,312.53552595124,331.11985608357,348.83408706747,370.41247575694,392.4383479509,416.71403480995,441.49314144476,468.80328869252,493.88330125613,523.2511306012],description:"Marpurg's temperament nr.5, 2 tempered fifths"},"marpurg-t7":{frequencies:[261.6255653006,276.86979852503,293.00227310437,310.07474405997,329.62755691287,348.83408706747,369.15973155124,390.66969766777,415.30469757995,439.50340943686,465.11211608996,492.21297564769,523.2511306012],description:"Marpurg's temperament nr.7, 3 tempered fifths"},"marpurg-t8":{frequencies:[261.6255653006,277.49581689502,293.33333347996,311.12698372208,329.99999983505,348.83408706747,369.99442271164,391.11111150212,414.83597850347,440,466.69047534984,493.32589719545,523.2511306012],description:"Marpurg's temperament nr.8, 4 tempered fifths"},"marpurg-t9":{frequencies:[261.6255653006,277.49581689502,294.32876096318,312.18279369479,331.11985608357,350.01785633742,371.24999944327,392.4383479509,416.24372513446,441.49314144476,468.27419030811,496.67978412536,523.2511306012],description:"Marpurg's temperament nr.9, 4 tempered fifths"},marpurg:{frequencies:[261.6255653006,277.49581689502,293.83071040301,311.12698372208,329.99999983505,349.42557141756,369.99442271164,392.4383479509,415.53937569366,440,466.69047534984,494.16238213869,523.2511306012],description:"Marpurg, Versuch ueber die musikalische Temperatur (1776), p. 153"},marpurg1:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Marpurg's Monochord no.1 (1776)"},marpurg3:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:"Marpurg 3"},marpurg4:{frequencies:[261.6255653006,272.52663052146,290.69507255622,313.95067836072,327.03195662575,348.83408706747,363.36884069528,392.4383479509,408.78994578219,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Marpurg 4, also Yamaha Pure Minor"},marsh:{frequencies:[261.6255653006,275.50659558095,293.15632631094,311.93674864629,328.48713220126,349.53094576004,368.07595926604,391.65594491223,412.43597848639,438.85779226656,466.97226207056,491.74834273545,523.2511306012],description:"John Marsh's meantone temperament (1809)"},marsh2:{frequencies:[261.6255653006,277.22760066578,293.66431501254,311.21660561883,329.70790803338,349.18845812715,369.99117208793,391.90679138833,415.30984563838,439.96491544382,466.29335337935,494.03030700757,523.2511306012],description:"John Marsh's quasi-equal temperament (1840)"},mavila12:{frequencies:[261.6255653006,256.98292999787,287.53945699376,321.72930260925,316.02010771872,353.59644178868,347.32175377489,388.62000642034,381.72381344999,427.11263899087,477.89842030218,469.41794908116,525.2340355968],description:"A 12-note mavila scale (for warping meantone-based music)"},mavila9:{frequencies:[261.6255653006,287.53945699376,316.02010771872,321.72930260925,353.59644178868,388.62000642034,427.11263899087,434.82882549415,477.89842030218,525.2340355968],description:"9-note scale of mavila temperament (TOP tuning)"},mavlim1:{frequencies:[261.6255653006,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,465.11211608996,523.2511306012],description:"First 27/25&135/128 scale"},mbira_banda:{frequencies:[261.6255653006,291.13134764929,327.53979283172,368.50142299854,404.88256627495,443.57258128492,480.10063929961,555.00605988575],description:"Mubayiwa Bandambira's tuning of keys R2-R9 from Berliner: The soul of mbira."},mbira_banda2:{frequencies:[261.6255653006,321.16993719469,360.29289210659,380.8360868427,422.32008370967,461.34206956593,587.32953583482,513.96502576833,761.67217368541,711.48673390068,849.04255025658,936.10488897708,1046.50286568598,633.49659152295,1055.60951665979,1174.65975017952,1321.5609185619,1486.83332446121,1633.62433483289,1789.73120457747,1937.11498804338,2239.34414798534],description:"Mubayiwa Bandambira's Mbira DzaVadzimu tuning B1=114 Hz"},mbira_gondo:{frequencies:[261.6255653006,315.28798447451,345.21700307457,379.51849407657,422.56409582244,461.07566488503,564.05539604512,516.94239487354,778.57545143809,697.24717811406,842.69088701475,926.42243447898,1029.11884353824,628.3943418294,1040.47545270591,1153.813137635,1308.64724593201,1415.59600512246,1572.51770682594,1715.83353717518,1883.05646656025,2103.91477035149],description:"John Gondo's Mbira DzaVadzimu tuning B1=122 Hz"},mbira_kunaka:{frequencies:[261.6255653006,292.98704147282,325.27731021818,350.44066402496,386.59871897734,434.19311733646,479.82340237272,507.76825077597],description:"John Kunaka's mbira tuning of keys R2-R9"},mbira_kunaka2:{frequencies:[261.6255653006,340.26769547546,358.83903996308,405.11650317313,448.98591596033,490.75518955849,622.61349925697,541.70354187177,817.28364083393,724.3415782324,907.35693646861,997.5144154576,1094.73088724383,673.88551872153,1085.91380691742,1216.08403680913,1350.10935126711,1454.55340013417,1604.63250673428,1802.17976955899,1991.5747030301,2107.56373750553],description:"John Kunaka's Mbira DzaVadzimu tuning B1=113 Hz"},mbira_mude:{frequencies:[261.6255653006,289.28740724512,309.15639683494,364.68988616898,372.56793743951,408.17001145418,507.1819925915,459.74594725879,689.63684605432,610.50517472746,760.79276355093,824.39562982862,887.65774573556,562.75365576207,888.68380073365,1015.53708814899,1126.80895076279,1206.28956516212,1365.00817887311,1507.58874420517,1666.02447560859,1935.99638964471],description:"Hakurotwi Mude's Mbira DzaVadzimu tuning B1=132 Hz"},mbira_mujuru:{frequencies:[261.6255653006,281.37682788104,301.05008478933,329.43721154897,394.9500460767,419.64523240241,533.01280425363,488.77489658044,700.88132804992,602.10016957865,765.19999119503,809.29752893,942.6160133907,577.57308891646,937.72844143307,1046.50286568598,1145.18149427149,1243.7900049313,1411.51350174391,1540.15576038017,1658.34356815416,1904.9365287586],description:"Ephat Mujuru's Mbira DzaVadzimu tuning, B1=106 Hz"},mbira_zimb:{frequencies:[261.6255653006,276.86260193655,305.95868600104,343.62544191138,379.08031027329,408.40584780369,453.41648894489,507.76825077597],description:"Shona mbira scale"},mboko_bow:{frequencies:[261.6255653006,347.61817721989,375.37611551499],description:"African Mboko Mouth Bow (chordophone, single string, plucked)"},mboko_zither:{frequencies:[261.6255653006,294.68429813772,319.3201344739,354.92237405774,396.55020354877,418.67676528474,472.67116512585,513.07516347663],description:"African Mboko Zither (chordophone; idiochordic palm fibre, plucked)"},mcclain:{frequencies:[261.6255653006,275.93321340298,294.32876096318,306.59245933664,327.03195662575,331.11985608357,367.91095120397,392.4383479509,408.78994578219,441.49314144476,490.54793493862,510.98743222773,523.2511306012],description:"McClain's 12-tone scale, see page 119 of The Myth of Invariance"},mcclain_18:{frequencies:[261.6255653006,275.93321340298,294.32876096318,306.59245933664,319.36714514233,327.03195662575,331.11985608357,344.91651675372,367.91095120397,383.2405741708,392.4383479509,408.78994578219,413.89982010446,441.49314144476,459.88868900496,490.54793493862,496.67978412536,510.98743222773,523.2511306012],description:"McClain's 18-tone scale, see page 143 of The Myth of Invariance"},mcclain_8:{frequencies:[261.6255653006,294.32876096318,327.03195662575,367.91095120397,392.4383479509,408.78994578219,441.49314144476,490.54793493862,523.2511306012],description:"McClain's 8-tone scale, see page 51 of The Myth of Invariance"},mccoskey_22:{frequencies:[261.6255653006,270.06509966514,279.06726965397,287.78812183066,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,382.37582620857,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,490.54793493862,506.89953276991,523.2511306012],description:"31-limit rational interpretation of 22-tET, Marion McCoskey"},mclaren_bar:{frequencies:[261.6255653006,281.77400528964,292.14326370913,304.76756192248,325.50548568708,328.66136118639,353.45752508165,360.67039921732,379.1552038283,397.63971531932,405.75513620619,436.411067852,476.98680497297,521.16951219839],description:"Metal bar scale. see McLaren, Xenharmonicon 15, pp.31-33"},mclaren_cps:{frequencies:[261.6255653006,275.93321340298,286.15296204753,294.32876096318,306.59245933664,327.03195662575,343.38355445704,367.91095120397,392.4383479509,408.78994578219,429.2294430713,441.49314144476,457.84473927605,490.54793493862,515.07533168556,523.2511306012],description:"2)12 [1,2,3,4,5,6,8,9,10,12,14,15] a degenerate CPS"},mclaren_harm:{frequencies:[261.6255653006,279.06726965397,299.00064605783,304.4370214407,307.2300216374,348.83408706747,380.54627680087,389.39619021485,393.97732186443,398.6675280771,465.11211608996,523.2511306012],description:'from "Wilson part 9", claimed to be Schlesingers Dorian Enharmonic, prov. unkn'},mclaren_rath1:{frequencies:[261.6255653006,279.06726965397,299.00064605783,334.88072358477,341.71502406609,348.83408706747,372.08969287196,380.54627680087,389.39619021485,398.6675280771,492.47165233054,507.3950357345,523.2511306012],description:"McLaren Rat H1"},mclaren_rath2:{frequencies:[261.6255653006,279.06726965397,299.00064605783,334.88072358477,341.71502406609,348.83408706747,380.54627680087,389.39619021485,398.6675280771,440.63253103259,452.54151835779,465.11211608996,523.2511306012],description:"McLaren Rat H2"},mean10:{frequencies:[261.6255653006,272.18829429226,292.14313377277,313.56091500001,326.220453695,350.13653284039,364.27275363262,390.97854693193,406.76370320307,436.58461973079,468.59178605305,487.51045723915,523.2511306012],description:"3/10-comma meantone scale"},mean11:{frequencies:[261.6255653006,272.83457350033,292.34115464648,313.24237654315,326.6628419965,350.01792709981,365.01399145768,391.11103243201,407.86767761879,437.02858581415,468.2743796482,488.33699124025,523.2511306012],description:"3/11-comma meantone scale. A.J. Ellis no. 10"},mean11ls_19:{frequencies:[261.6255653006,272.93479580544,280.25721516838,292.37183188538,305.01012622427,313.1930753928,326.73140514978,340.85495140859,349.99956372811,365.12891753666,374.92476290643,391.13155279262,408.03891236124,418.98596425085,437.09738047696,455.99169236578,468.2252457596,488.46511500326,509.57988860269,523.2511306012],description:"Least squares appr. to 3/2, 5/4, 7/6, 15/14 and 11/8, Petr Par\xEF\xBF\xBDzek"},mean13:{frequencies:[261.6255653006,273.83184954717,292.64606374809,312.75295135888,327.34460995374,349.8355370417,366.15730590163,391.31494185909,409.57195510156,437.7124891801,467.78648270341,489.61131479929,523.2511306012],description:"3/13-comma meantone scale"},mean14:{frequencies:[261.6255653006,274.22463192287,292.76593693997,312.56088569186,327.61283758281,349.76390952171,366.60744235102,391.39507854003,410.24343789088,437.98145930734,467.59494724206,490.11285326462,523.2511306012],description:"3/14-comma meantone scale (Giordano Riccati, 1762)"},mean14_15:{frequencies:[261.6255653006,274.22463192287,279.31500250577,292.76593693997,306.86462618694,312.56088569186,327.61283758281,349.76390952171,366.60744235102,391.39507854003,410.24343789088,417.8586951835,437.98145930734,467.59494724206,490.11285326462,523.2511306012],description:"15 of 3/14-comma meantone scale"},mean14_19:{frequencies:[261.6255653006,274.22463192287,279.31500250577,292.76593693997,306.86462618694,312.56088569186,327.61283758281,343.38964426558,349.76390952171,366.60744235102,373.41269440635,391.39507854003,410.24343789088,417.8586951835,437.98145930734,459.07327263526,467.59494724206,490.11285326462,513.71515101261,523.2511306012],description:"19 of 3/14-comma meantone scale"},mean14_7:{frequencies:[261.6255653006,292.76593693997,327.61283758281,349.76390952171,391.39507854003,437.98145930734,490.11285326462,523.2511306012],description:"Least squares appr. of 5L+2S to Ptolemy's Intense Diatonic scale"},mean14a:{frequencies:[261.6255653006,274.24690838881,292.77273178776,312.55000460003,327.62804498858,349.75985073129,366.63296888199,391.39962048672,410.28152481852,437.9967071602,467.58409501387,490.1412915133,523.2511306012],description:'fifth of sqrt(5/2)-1 octave "recursive" meantone, Paul Hahn'},mean16:{frequencies:[261.6255653006,274.864106667,292.9608347655,312.24903186879,328.04917632434,349.64754658398,367.34009701877,391.52533508436,411.33694767869,438.41888642025,467.28387071703,490.92894854125,523.2511306012],description:"3/16-comma meantone scale"},mean17:{frequencies:[261.6255653006,273.72412433093,292.61316553779,312.80569569783,327.2710181906,349.85520131118,366.03383354947,391.29294726693,409.38781813791,437.63868343995,467.83907547741,489.47372981579,523.2511306012],description:"4/17-comma meantone scale, least squares error of 5/4 and 3/2"},mean17_17:{frequencies:[261.6255653006,273.72412433093,279.67971414776,292.61316553779,306.14471057197,312.80569569783,327.2710181906,349.85520131118,366.03383354947,373.99786656393,391.29294726693,409.38781813791,418.29512920081,437.63868343995,457.8767570375,467.83907547741,489.47372981579,523.2511306012],description:"4/17-comma meantone scale with split C#/Db, D#/Eb, F#/Gb, G#/Ab and A#/Bb"},mean17_19:{frequencies:[261.6255653006,273.72412433093,279.67971414776,292.61316553779,306.14471057197,312.80569569783,327.2710181906,342.40527209253,349.85520131118,366.03383354947,373.99786656393,391.29294726693,409.38781813791,418.29512920081,437.63868343995,457.8767570375,467.83907547741,489.47372981579,512.10885267608,523.2511306012],description:"4/17-comma meantone scale, least squares error of 5/4 and 3/2"},mean18:{frequencies:[261.6255653006,272.71477685134,292.30447317753,313.30134186202,326.58087306932,350.03988839382,364.87661266094,391.0864943589,407.66301227525,436.94633423564,468.33314368944,488.18382342185,523.2511306012],description:"5/18-comma meantone scale (Smith). 3/2 and 5/3 eq. beat. A.J. Ellis no. 9"},mean19:{frequencies:[261.6255653006,273.06170311607,292.41066686775,313.13068664042,326.81820677503,349.97632128221,365.27443420834,391.15752841841,408.25574814862,437.18446858874,468.16306089008,488.62733218513,523.2511306012],description:"5/19-comma meantone scale, fifths beats three times third. A.J. Ellis no. 11"},mean19r:{frequencies:[261.6255653006,273.04332227389,292.40504357126,313.13971948727,326.80563693258,349.97968716666,365.25335892465,391.15376651139,408.22434232755,437.17185753972,468.17206422213,488.60384173026,523.2511306012],description:"Approximate 5/19-comma meantone with 19/17 tone, Petr Parizek, 2002"},mean23:{frequencies:[261.6255653006,274.15058593695,292.74334833321,312.59706303545,327.56228503462,349.77740346966,366.52259116395,391.37997903742,410.11684180717,437.93077103284,467.63102771476,490.01832104213,523.2511306012],description:"5/23-comma meantone scale, A.J. Ellis no. 4"},mean23six:{frequencies:[261.6255653006,273.11604376732,292.42729246507,313.10398392891,326.85537164611,349.96637341293,365.33674088125,391.16864715511,408.34860251967,437.22175336101,468.13644404983,488.69678846289,523.2511306012],description:"6/23-comma meantone scale"},mean25:{frequencies:[261.6255653006,272.66208311698,292.28833573479,313.32728859832,326.54481265413,350.04955123355,364.81618195011,391.07569872695,407.57299290994,436.91015056532,468.35900068872,488.11644468937,523.2511306012],description:"7/25-comma meantone scale, least square weights 3/2:0 5/4:1 6/5:1"},mean26:{frequencies:[261.6255653006,272.91754119498,292.36655103694,313.20156187458,326.7196004604,350.00272362315,365.10913291207,391.12802157824,408.00943064927,437.08553692506,468.23370304224,488.44305713046,523.2511306012],description:"7/26-comma meantone scale (Woolhouse 1835). Almost equal to meaneb742"},mean26_21:{frequencies:[261.6255653006,272.91754592428,280.26986822267,292.36655272572,304.98534036063,313.20156006546,326.71960423481,335.52133892506,340.8210986211,350.00272362315,365.10913712997,374.9450750913,391.12802157824,408.00943771953,419.00109777107,437.08553944976,455.95052092314,468.23370033762,488.44306277317,501.60158217053,509.52467838008,523.2511306012],description:"21 of 7/26-comma meantone scale (Woolhouse 1835)"},mean27:{frequencies:[261.6255653006,273.15429014256,292.43899158768,313.08519355925,326.88152513903,349.9593710588,365.38059276675,391.17647406766,408.41395592075,437.24799400905,468.11771609009,488.74567091648,523.2511306012],description:"7/27-comma meantone scale, least square weights 3/2:2 5/4:1 6/5:1"},mean29:{frequencies:[261.6255653006,273.57932033947,292.56893127899,312.87664195194,327.1720749345,349.88164908166,365.86785468743,391.26336919078,409.14031659695,437.53944680455,467.90980928584,489.28875967044,523.2511306012],description:"7/29-comma meantone scale, least square weights 3/2:4 5/4:1 6/5:1"},mean2sev:{frequencies:[261.6255653006,272.52663052146,292.24684137387,313.39402123097,326.45210604021,350.07440004945,364.66083404534,391.04793957621,407.34160211012,436.81711699543,468.42550014967,487.94322738789,523.2511306012],description:"2/7-comma meantone scale. Zarlino's temperament (1558). See also meaneb371"},mean2sev_15:{frequencies:[261.6255653006,272.52663052146,280.55692507618,292.24689370448,304.42377254813,313.39402847191,326.45203249943,350.07447082328,364.66081719444,391.04786051887,407.34165622677,419.34452602299,436.81710690282,468.42541627199,487.94330348661,523.2511306012],description:"15 of 2/7-comma meantone scale"},mean2sev_19:{frequencies:[261.6255653006,272.52663052146,280.55692507618,292.24689370448,304.42377254813,313.39402847191,326.45203249943,340.0543130973,350.07447082328,364.66081719444,375.40603866065,391.04786051887,407.34165622677,419.34452602299,436.81710690282,455.01770749831,468.42541627199,487.94330348661,508.27414914183,523.2511306012],description:"19 of 2/7-comma meantone scale"},mean2sev_31:{frequencies:[261.6255653006,264.72620698393,272.52663052146,280.55692507618,283.88190679319,292.24689370448,300.8583415146,304.42377254813,313.39402847191,317.10820138491,326.45203249943,336.07138073182,340.0543130973,350.07447082328,354.22315547012,364.66081719444,375.40603866065,379.85514366424,391.04786051887,395.6823437549,407.34165622677,419.34452602299,424.31412061457,436.81710690282,449.68851049921,455.01770749831,468.42541627199,473.97693555703,487.94330348661,502.32108537715,508.27414914183,523.2511306012],description:"31 of 2/7-comma meantone scale"},mean2seveb:{frequencies:[261.6255653006,274.26749945295,292.59076110537,312.44357330613,327.42660602987,349.76102048238,366.6169314736,391.04794861134,410.01084835752,437.49574139527,467.27496094916,489.74950989452,523.2511306012],description:'"2/7-comma" meantone with equal beating fifths. A.J. Ellis no. 8'},mean2sevr:{frequencies:[261.6255653006,272.52663052146,292.24289114742,313.39346366789,326.45152465405,350.07234194042,364.65868952128,391.04531121882,407.33886585294,436.81651812993,468.41855142334,487.93599106598,523.2511306012],description:"Rational approximation to 2/7-comma meantone, 1/1 = 262.9333"},mean9:{frequencies:[261.6255653006,274.03547926168,292.70827332867,306.59245933664,327.48360691354,349.79835961887,366.39065074918,391.35653176554,409.92008797511,437.85206746661,467.68706357679,489.87127257422,523.2511306012],description:"2/9-comma meantone scale, Lemme Rossi, Sistema musico (1666)"},mean94:{frequencies:[261.6255653006,268.79084150406,291.09659021292,315.25339315665,323.88740273232,350.76536842075,360.37196303797,390.27761906502,400.96635635801,434.24075936811,470.27645613296,483.15616342113,523.2511306012],description:"4/9-comma meantone scale"},mean9_15:{frequencies:[261.6255653006,274.03547926168,279.45274708261,292.70827332867,306.59245933664,312.65343270838,327.48360691354,349.79835961887,366.39065074918,391.35653176554,409.92008797511,418.0235894185,437.85206746661,467.68706357679,489.87127257422,523.2511306012],description:"15 of 2/9-comma meantone scale"},mean9_19:{frequencies:[261.6255653006,274.03547926168,279.45274708261,292.70827332867,306.59245933664,312.65343270838,327.48360691354,343.0174228875,349.79835961887,366.39065074918,373.63364091796,391.35653176554,409.92008797511,418.0235894185,437.85206746661,458.62082212371,467.68706357679,489.87127257422,513.10776453427,523.2511306012],description:"19 of 2/9-comma meantone scale"},mean9_31:{frequencies:[261.6255653006,268.72322665693,274.03547926168,279.45274708261,287.03404351137,292.70827332867,298.49467410529,306.59245933664,312.65343270838,321.13524775754,327.48360691354,333.95746354843,343.0174228875,349.79835961887,359.28803828513,366.39065074918,373.63364091796,383.76997851754,391.35653176554,401.97367512027,409.92008797511,418.0235894185,429.36393755067,437.85181455341,446.50763144636,458.62082212371,467.68706357679,480.3749841712,489.87127257422,499.55528826613,513.10776453427,523.2511306012],description:"31 of 2/9-comma meantone scale"},meaneb1071:{frequencies:[261.6255653006,273.45959631537,292.5323192343,305.76452283047,327.09038632535,349.9034421565,365.73073124967,391.23900009103,408.93579686983,437.45744778434,457.24482979639,489.13584427285,523.2511306012],description:"Equal beating 7/4 = 3/2 same."},meaneb1071a:{frequencies:[261.6255653006,273.94115519525,292.67936294368,306.45675889694,327.41929816594,349.81553441422,366.28252094772,391.33731744348,409.75863641311,437.78732645584,458.39517452459,489.75074612717,523.2511306012],description:"Equal beating 7/4 = 3/2 opposite."},meaneb341:{frequencies:[261.6255653006,272.43747957464,292.21954801903,313.43802026715,326.39113133433,350.09085029289,364.55867287416,391.02956482064,407.18921698842,436.75579855003,468.46925117002,487.82916876009,523.2511306012],description:"Equal beating 6/5 = 5/4 same. Almost 4/15 Pyth. comma"},meaneb371:{frequencies:[261.6255653006,272.52577151658,292.24657972098,313.39444482621,326.45151771442,350.07455777399,364.65985037488,391.0477633913,407.34013625771,436.81652657765,468.42591953828,487.94213100406,523.2511306012],description:"Equal beating 6/5 = 3/2 same. Practically 2/7-comma (Zarlino)"},meaneb371a:{frequencies:[261.6255653006,269.83862220337,291.42039690163,314.72828847419,324.6081803116,350.57044084899,361.57569171511,390.49462500658,421.72650333798,434.96526321606,469.75391665508,484.50062400899,523.2511306012],description:"Equal beating 6/5 = 3/2 opposite. Almost 2/5-comma"},meaneb381:{frequencies:[261.6255653006,275.92799893014,293.28437056932,311.73248946737,328.77414682856,349.45463702831,368.55847249214,391.74146894101,416.38271791821,439.14534885862,466.76838786866,492.28548089506,523.2511306012],description:"Equal beating 6/5 = 8/5 same. Almost 1/7-comma"},meaneb451:{frequencies:[261.6255653006,274.36682021224,292.8092284668,312.49148032108,327.70992276921,349.73795145032,366.77030983847,391.42412846541,410.48661799548,438.07873640926,467.5258138363,490.29448158868,523.2511306012],description:"Equal beating 5/4 = 4/3 same, 5/24 comma meantone. A.J. Ellis no. 6"},meaneb471:{frequencies:[261.6255653006,272.3284467197,292.18612898941,313.49179640307,326.31648163178,350.11087068539,364.43361138613,391.00720457415,407.00321492741,436.68087780422,468.52283272721,487.68970701588,523.2511306012],description:"Equal beating 5/4 = 3/2 same. Almost 5/17-comma"},meaneb471a:{frequencies:[261.6255653006,274.14912748586,292.7429036132,312.59777626068,327.56128980523,349.7776701617,366.52092076205,391.37968062521,410.11434970273,437.92977184699,467.63173811584,490.01645860508,523.2511306012],description:"Equal beating 5/4 = 3/2 opposite. Almost 1/5 Pyth. Gottfried Keller (1707)"},meaneb471b:{frequencies:[261.6255653006,272.31089540773,292.18072491748,313.50040506268,326.30440921209,350.11400731728,364.41338872146,391.00370158472,406.97310157871,436.668886633,468.53149836075,487.66729542944,523.2511306012],description:"21/109-comma meantone with 9/7 major thirds, almost equal beating 5/4 and 3/2"},meaneb472:{frequencies:[261.6255653006,270.83769079127,291.72826852127,314.23020335825,325.29440843388,350.38540704884,362.72286472858,390.7008399429,404.45761497645,435.65472502222,469.25816799182,485.78126704788,523.2511306012],description:"Beating of 5/4 = twice 3/2 same. Almost 5/14-comma"},meaneb472_19:{frequencies:[261.6255653006,270.8378472333,281.80541953687,291.72826852127,302.00051792575,314.23002185182,325.29459633135,336.74877333101,350.38540704884,362.72307424558,377.41153667283,390.7008399429,404.45808222448,420.83660282593,435.65497666633,450.99513069838,469.25816799182,485.78154764623,502.88674365212,523.2511306012],description:"Beating of 5/4 = twice 3/2 same, 19 tones"},meaneb472a:{frequencies:[261.6255653006,274.74648495017,292.92493846141,312.30633997417,327.96897748493,349.66886860972,367.20529370531,391.50146074488,411.13561642091,438.33843670622,467.34113372786,490.7787182415,523.2511306012],description:"Beating of 5/4 = twice 3/2 opposite. Almost 3/17-comma"},meaneb591:{frequencies:[261.6255653006,273.06215106005,292.41085266114,313.13038820279,326.81843330822,349.97621009739,365.27491737756,391.15765268623,418.87439289145,437.18488525956,468.16276342643,488.62782610925,523.2511306012],description:"Equal beating 4/3 = 5/3 same."},meaneb732:{frequencies:[261.6255653006,272.00548436883,292.08705896894,313.65121264041,326.09523618955,350.1701397801,364.06303937825,390.94102347986,406.4514961644,436.45893055948,468.68174619223,487.27655969467,523.2511306012],description:"Beating of 3/2 = twice 6/5 same. Almost 4/13-comma"},meaneb732_19:{frequencies:[261.6255653006,272.00553778846,280.94077405591,292.08707584055,303.67560621907,313.65118727632,326.09527197795,339.03307470248,350.17012966679,364.06310036266,376.02237826726,390.94103477068,406.45158772689,419.80330474394,436.45896585468,453.77543893118,468.68171912011,487.27662724555,506.60928680033,523.2511306012],description:"Beating of 3/2 = twice 6/5 same, 19 tones"},meaneb732a:{frequencies:[261.6255653006,270.68848625127,291.6822692306,314.3042667302,325.1920204578,350.41293324447,362.5515203525,390.67014898736,404.20304509584,435.55206635241,469.33217160858,485.59021720901,523.2511306012],description:"Beating of 3/2 = twice 6/5 opposite. Almost 1/3 Pyth. comma"},meaneb742:{frequencies:[261.6255653006,272.89343543801,292.35917287023,313.21341909223,326.70311046689,350.00714105462,365.08148980199,391.12308516115,407.96824372307,437.06899032128,468.24551969328,488.41224041213,523.2511306012],description:"Beating of 3/2 = twice 5/4 same."},meaneb742a:{frequencies:[261.6255653006,273.78850133971,292.63287562287,312.77409391616,327.31510698093,349.84341999552,366.10759179471,391.30612443552,409.49789158088,437.68290117536,467.80756449982,489.55615570194,523.2511306012],description:"Beating of 3/2 = twice 5/4 opposite. Almost 3/13-comma, 3/14 Pyth. comma"},meaneb781:{frequencies:[261.6255653006,273.88372205101,292.66195046404,312.72748571568,327.38015167213,349.82604176358,366.21672762941,391.32556326448,418.15568884829,437.74813244966,467.76108961433,489.67748280644,523.2511306012],description:"Equal beating 3/2 = 8/5 same."},meaneb891:{frequencies:[261.6255653006,272.7426257605,292.31307409948,313.28760473417,326.59990179186,350.03483972175,364.90860969063,391.092135133,419.1546662649,436.96549358815,468.31936361194,488.21959184068,523.2511306012],description:"Equal beating 8/5 = 5/3 same. Almost 5/18-comma"},meaneight:{frequencies:[261.6255653006,276.08926119362,293.33333347996,311.65444160511,328.88393162803,349.42547049952,368.74309237173,391.77416758435,413.43299207996,439.25532436715,466.69047534984,492.49097043477,523.2511306012],description:"1/8 Pyth. comma meantone scale"},meanfifth:{frequencies:[261.6255653006,274.56546814423,292.86978442859,312.39456569414,327.84548435462,349.70179235499,366.99791252626,391.46460164194,410.82629477826,438.21464222188,467.42914467878,490.54793493862,523.2511306012],description:"1/5-comma meantone scale (Verheijen)"},meanfifth2:{frequencies:[261.6255653006,279.06726965397,292.86986732103,312.39452419152,327.84547867349,349.70184487387,366.99801003998,391.46454285105,417.56218018201,438.2147004401,467.42901237995,490.54793493862,523.2511306012],description:"1/5-comma meantone by John Holden (1770)"},meanfifth_19:{frequencies:[261.6255653006,274.56546814423,279.06726965397,292.86978442859,307.35519222791,312.39456569414,327.84548435462,344.06059968708,349.70179235499,366.99791252626,373.01539917593,391.46460164194,410.82629477826,417.56217294621,438.21464222188,459.88868900496,467.42914467878,490.54793493862,514.81033759999,523.2511306012],description:"19 of 1/5-comma meantone scale"},meanfifth_43:{frequencies:[261.6255653006,265.91515911649,270.13633240739,274.56546814423,279.06726965397,283.49717461664,288.14537375445,292.86978442859,297.67175429757,302.39711110066,307.35519222791,312.39456569414,317.35355938713,322.556865357,327.84548435462,333.22081516619,338.51040756711,344.06059968708,349.70179235499,355.43547760922,361.07770857381,366.99791252626,373.01539917593,378.93660287884,385.14971481892,391.46460164194,397.88302689184,404.19904307077,410.82629477826,417.56217294621,424.19061149626,431.14564594215,438.21464222188,445.39957775044,452.46991103879,459.88868900496,467.42914467878,475.09307907327,482.63477102771,490.54793493862,498.59100550039,506.50570672499,514.81033759999,523.2511306012],description:"Complete 1/5-comma meantone scale"},meanfiftheb:{frequencies:[261.6255653006,275.80023422757,293.11157312801,311.73372470712,328.53333183909,349.48325286892,368.3828117434,391.46459711956,412.7266004334,438.69360944226,466.62683936965,491.82624824197,523.2511306012],description:'"1/5-comma" meantone with equal beating fifths'},meangold:{frequencies:[261.6255653006,272.97231199113,292.38331430233,313.17462880702,326.75706743029,349.99269211627,365.17193449866,391.13923210785,408.10300926149,437.12312635029,468.20685771475,488.51307131873,523.2511306012],description:"Meantone scale with Blackwood's R = phi, and diat./chrom. ST = phi, ~4/15-comma"},meanhalf:{frequencies:[261.6255653006,267.49544939623,290.69507255622,315.90677595028,322.99452506247,351.00752840096,358.88280562497,390.00836666198,398.75867291663,433.34262909025,470.92601754108,481.49180950675,523.2511306012],description:"1/2-comma meantone scale"},meanhar2:{frequencies:[261.6255653006,273.08769296879,292.41861893027,305.22982618403,326.83598255713,349.97156260351,365.30423365264,391.16284711627,408.30015740759,437.20230245522,456.35665612784,488.66055322307,523.2511306012],description:"1/9-Harrison's comma meantone scale"},meanhar3:{frequencies:[261.6255653006,274.22153683641,292.76499331753,306.86017365004,327.61072570921,343.38355445704,366.60389537541,391.39444778107,410.23814647641,437.9793418028,459.06587176894,490.10890120058,523.2511306012],description:"1/11-Harrison's comma meantone scale"},meanharris:{frequencies:[261.6255653006,273.71072489962,292.60907359238,306.12544311476,327.26186315247,349.85764856047,366.01847563765,391.29021017831,409.36491649663,437.62950220286,457.84473927605,489.45661357347,523.2511306012],description:"1/10-Harrison's comma meantone scale"},meanhsev:{frequencies:[261.6255653006,265.69493617871,271.18768033644,275.4057836544,279.68949451567,284.03983498254,289.91182549392,294.4211659268,299.00064605783,305.1819244006,309.92877868547,314.74946639166,321.25632089757,326.25319922315,331.32779988873,336.4813337451,343.43745382287,348.77934146077,354.20431777528,361.52682728594,367.15008027699,372.86080050545,378.66034414493,386.48843610249,392.49994642563,398.60496085649,406.84537033315,413.17351844213,419.60009331305,426.12662827999,434.93599657884,441.70106893056,448.57136642871,457.84473927605,464.96613926104,472.19830582795,481.96011959425,489.45661357347,497.06970936204,504.80122352123,515.23704142273,523.2511306012],description:"1/14-septimal schisma tempered meantone scale"},meanhskl:{frequencies:[261.6255653006,275.0605216927,293.02063313667,312.15345277639,328.18310911307,349.61186736411,367.56508220664,391.56529173291,411.67289207144,438.55312706018,467.18850946536,491.17950266504,523.2511306012],description:"Half septimal kleisma meantone"},meanlst357_19:{frequencies:[261.6255653006,273.71260157103,279.68803244686,292.60971924044,306.12821574316,312.81131320311,327.26311833974,342.38279105966,349.85736361975,366.02068710341,374.01129952811,391.29052886394,409.36829077259,418.30522648629,437.63082426891,457.84952434322,467.84458559023,489.45917220726,512.07206464598,523.2511306012],description:"19 of mean-tone scale, least square error in 3/2, 5/4 and 7/4"},meanmalc:{frequencies:[261.6255653006,279.16226462633,292.82999876562,312.45832383396,327.75622702832,349.72564885805,366.84815356577,391.43789792004,417.67588698136,438.12522309524,467.49265244264,490.38100841085,523.2511306012],description:"Meantone approximation to Malcolm's Monochord, 3/16 Pyth. comma"},meannkleis:{frequencies:[261.6255653006,277.55670411237,293.77792781181,311.66693695111,329.88161264913,349.96913477239,370.42222384066,392.07096746411,415.94530241673,440.25439013544,467.06275302556,494.35929617392,523.2511306012],description:"1/5 kleisma tempered meantone scale"},meanpi:{frequencies:[261.6255653006,275.38456311745,294.43027471344,309.91448590794,326.2128298123,348.77404705732,367.11600789597,392.50613131028,413.14795414706,434.87532652316,464.95175460796,489.40347900327,523.2511306012],description:"Pi-based meantone with Harrison's major third by Erv Wilson"},meanpi2:{frequencies:[261.6255653006,287.5806999253,296.7710142931,326.2128298123,336.6377243117,370.0346037192,381.85992557156,394.06315326167,433.15704755212,446.99959483943,491.34516423327,507.04724898227,523.2511306012],description:"Pi-based meantone by Erv Wilson analogous to 22-tET"},meanpkleis:{frequencies:[261.6255653006,274.33428876064,294.88060759996,309.2047285643,324.22465805628,348.50752497012,365.43662717622,392.80607455881,411.88702081614,442.73537947933,464.24169412807,486.7926967469,523.2511306012],description:"1/5 kleisma positive temperament"},meanquar:{frequencies:[261.6255653006,273.37431312998,292.50627485027,312.977175335,327.03195662575,349.91912034749,365.63284274659,391.22147055517,408.78994578219,437.39890198442,468.01003810189,489.02683710225,523.2511306012],description:"1/4-comma meantone scale. Pietro Aaron's temp. (1523). 6/5 beats twice 3/2"},meanquar_14:{frequencies:[261.6255653006,273.37431312998,292.50627485027,305.64177427204,312.977175335,327.03195662575,349.91912034749,365.63284274659,391.22147055517,408.78994578219,418.60090448096,437.39890198442,468.01003810189,489.02683710225,523.2511306012],description:"1/4-comma meantone scale with split D#/Eb and G#/Ab, Otto Gibelius (1666)"},meanquar_15:{frequencies:[261.6255653006,273.37431312998,279.93529690293,292.50627485027,305.64177427204,312.977175335,327.03195662575,349.91912034749,365.63284274659,391.22147055517,408.78994578219,418.60090448096,437.39890198442,468.01003810189,489.02683710225,523.2511306012],description:"1/4-comma meantone scale with split C#/Db, D#/Eb and G#/Ab"},meanquar_16:{frequencies:[261.6255653006,273.37431312998,279.93548123753,292.50629850443,305.64179898843,312.97722776199,327.03195662575,349.91920725962,365.63293356166,391.22137338448,408.78994578219,418.60090448096,437.39882871549,457.04097849371,468.01000025525,489.02679755603,523.2511306012],description:"1/4-comma meantone scale with split C#/Db, D#/Eb, G#/Ab and A#/Bb"},meanquar_17:{frequencies:[261.6255653006,273.37431312998,279.93529690293,292.50627485027,305.64177250659,312.977175335,327.03195662575,349.91912034749,365.63284274659,374.40803131735,391.22147055517,408.78994578219,418.60090448096,437.39889945791,457.04105241293,468.01003810189,489.02683710225,523.2511306012],description:"1/4-comma meantone scale with split C#/Db, D#/Eb, F#/Gb, G#/Ab and A#/Bb"},meanquar_19:{frequencies:[261.6255653006,273.37431312998,279.93529690293,292.50627485027,305.64177427204,312.977175335,327.03195662575,341.71789064962,349.91912034749,365.63284274659,374.40803131735,391.22147055517,408.78994578219,418.60090448096,437.39890198442,457.04105241293,468.01003810189,489.02683710225,510.98743222773,523.2511306012],description:"19 of 1/4-comma meantone scale"},meanquar_27:{frequencies:[261.6255653006,273.37431312998,279.93529690293,285.65065877038,292.50627485027,299.52642572255,305.64177427204,312.977175335,327.03195662575,334.88072358477,341.71789064962,349.91912034749,365.63284274659,374.40803131735,382.05221698715,391.22147055517,400.61078621746,408.78994578219,418.60090448096,427.14736482575,437.39890198442,447.89647345742,457.04105241293,468.01003810189,489.02683710225,500.76348165392,510.98743222773,523.2511306012],description:"27 of 1/4-comma meantone scale"},meanquar_31:{frequencies:[261.6255653006,267.90457886781,273.37431312998,279.93529690293,285.65065877038,292.50627485027,299.52642572255,305.64177427204,312.977175335,320.48862783822,327.03195662575,334.88072358477,341.71789064962,349.91912034749,358.31717956585,365.63284274659,374.40803131735,382.05221698715,391.22147055517,400.61078621746,408.78994578219,418.60090448096,427.14736482575,437.39890198442,447.89647345742,457.04105241293,468.01003810189,479.24227945773,489.02683710225,500.76348165392,510.98743222773,523.2511306012],description:"31 of 1/4-comma meantone scale"},meanquareb:{frequencies:[261.6255653006,274.90575459855,292.80763523599,312.14798050979,327.88746490679,349.6453532581,367.3522744581,391.22144795733,411.14173398328,437.99455416256,467.00507093977,490.61429903129,523.2511306012],description:"Variation on 1/4-comma meantone with equal beating fifths"},meanquarm23:{frequencies:[261.6255653006,273.51763645063,292.40504357126,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,408.78994578219,436.04260883433,468.17206422213,489.12605686634,523.2511306012],description:"1/4-comma meantone approximation with minimal order 23 beatings"},meanquarr:{frequencies:[261.6255653006,273.37036621967,292.50063201309,312.98169478553,327.03195662575,349.92419358955,365.62579001637,391.21579858034,408.78994578219,437.39258595147,468.01906681552,489.01974822542,523.2511306012],description:"Rational approximation to 1/4-comma meantone, Kenneth Scholz, MTO 4.4, 1998"},meansabat:{frequencies:[261.6255653006,279.13726386405,294.25495796556,313.95067836072,330.95382015833,348.87783040382,372.229687597,392.38914286775,418.65339720992,441.32709511026,470.8669722571,496.36848628125,523.2511306012],description:"1/9-schisma meantone scale of Eduard Sa'bat-Garibaldi"},meansabat_53:{frequencies:[261.6255653006,264.79625752493,268.00537599851,271.25338610366,275.79485124716,279.13726386405,282.52018221184,285.94410045135,290.73152483281,294.25495796556,297.82109228474,301.4304452945,305.08354077075,310.19140758515,313.95067836072,317.75550958044,321.60645175541,326.99095182327,330.95382015833,334.96471528237,339.02421924159,343.13292113612,348.87783040382,353.10595017045,357.38531136087,361.71653498009,367.77258074571,372.229687597,376.74081403286,381.30660995465,385.92774054592,392.38914286775,397.14458487807,401.95765903525,406.82906379475,413.640406907,418.65339720992,423.72714093867,428.86237189887,436.04260883433,441.32709511026,446.67562589029,452.08897683944,457.56793273834,465.22877230071,470.8669722571,476.57350267936,482.349191678,490.42492909292,496.36848628125,502.38407462043,508.4725670703,514.63484717027,523.2511306012],description:"53-tone 1/9-schisma meantone scale"},meanschis:{frequencies:[261.6255653006,275.81646505128,294.24573392894,310.20599265769,327.03195662575,348.88329767713,367.80716871461,392.38299382393,413.66634097248,436.10412364188,465.24335632603,490.47874118496,523.2511306012],description:"1/8-schisma temperament, Helmholtz"},meanschis7:{frequencies:[261.6255653006,275.84425785506,294.23387584933,310.2247482054,327.0846843223,348.89032888179,367.85164222246,392.37508610937,413.69968681881,436.18322603255,465.26210635182,490.54793493862,523.2511306012],description:"1/7-schisma linear temperament"},meanschis_17:{frequencies:[261.6255653006,275.81646505128,290.77709705464,294.24573392894,310.20599265769,327.03195662575,330.93307160522,348.88329767713,367.80716871461,372.19468374184,392.38299382393,413.66634097248,436.10412364188,441.30634506723,465.24335632603,490.47874118496,496.32958936031,523.2511306012],description:"17-tone 1/8-schisma linear temperament"},meansept:{frequencies:[261.6255653006,273.93523095528,292.67762672082,312.70235991264,327.41522444303,349.81667202162,366.27579142084,391.33604481052,409.74867679276,437.78330574787,467.73603562223,489.74334292241,523.2511306012],description:"Meantone scale with septimal diminished fifth"},meansept2:{frequencies:[261.6255653006,273.61459551034,286.15296204753,292.57963558274,305.98714063953,320.00886175336,327.19620693615,342.18982383643,349.87514759905,365.9082279648,382.67602660872,391.27063976147,409.20043831214,427.95210889573,437.56358849756,457.61500463173,478.58500343311,489.333659422,511.75744671018,523.2511306012],description:"Meantone scale with septimal neutral second"},meansept3:{frequencies:[261.6255653006,267.11515986718,271.23581508831,275.42019673559,281.19923906193,285.53716249988,289.94217244295,296.02592413073,300.59257160392,305.22982618403,309.9384746623,316.44180152381,321.32358037849,326.28048244956,333.12670774706,338.26588629419,343.48414905091,348.7829114007,356.10146388137,361.59490682213,367.17305499414,374.87731434423,380.66058361349,386.53284867747,394.643327573,400.73152907611,406.91341882127,413.19091223118,421.86074762795,428.36858751681,434.97682067587,444.1040384307,450.95501471222,457.91167766162,464.97592623609,474.73234784313,482.05581210758,489.49253462334,499.76337935275,507.47298512535,515.30182087389,523.2511306012],description:"Pythagorean scale with septimal minor third"},meansept4:{frequencies:[261.6255653006,266.94086705872,271.13211808455,275.38917613856,280.98410555769,285.39585012732,289.87686370457,295.76613145071,300.40996929954,305.12672026341,309.91752915454,316.21395200486,321.17884203959,326.22168604472,332.8493514236,338.07543464185,343.38355445704,348.77505435772,355.86092403367,361.44831302863,367.12342987925,374.58207334188,380.46340397682,386.43730087372,394.28810581018,400.47907310734,406.76701374557,413.15368163355,421.54749623588,428.16623317002,434.88889120201,443.72428802318,450.69091522486,457.76754776364,464.95497741911,474.40121026751,481.84980583512,489.41535214975,499.35853288878,507.19898454493,515.16253949886,523.2511306012],description:"Pythagorean scale with septimal narrow fourth"},meansev:{frequencies:[261.6255653006,275.93321340298,293.28595453555,311.72996498387,328.77769811601,349.45369437647,368.5644419122,391.74252566418,413.16594588103,439.14890519043,466.76586696593,492.29212632197,523.2511306012],description:"1/7-comma meantone scale, Jean-Baptiste Romieu (1755)"},meansev2:{frequencies:[261.6255653006,273.98141462199,292.76593693997,312.83835055233,327.61283758281,350.07440004945,366.60744235102,391.74252566418,410.24343789088,438.37026184168,468.42550014967,490.54793493862,524.18054130269],description:"Meantone scale with 1/7-comma stretched octave (stretched meansept)"},meansev_19:{frequencies:[261.6255653006,275.93321340298,278.07859353335,293.28589524255,309.32501829942,311.72996858511,328.77775508885,346.75764506664,349.4536277652,368.56443339655,371.42996022741,391.74260033637,413.16585280598,416.37814821359,439.14890011719,463.16493144882,466.76596133102,492.29202110912,496.11959049595,523.2511306012],description:"19 of 1/7-comma meantone scale"},meanseveb:{frequencies:[261.6255653006,276.822915312,293.45907344559,311.2600957924,329.2717708679,349.29792128041,369.56105314287,391.74259807358,414.53862252605,439.49286138442,466.19439430972,493.21190508606,523.2511306012],description:'"1/7-comma" meantone with equal beating fifths'},meansixth:{frequencies:[261.6255653006,275.36245350283,293.11247215425,312.00666699279,328.38886075091,349.55699144229,367.91095120397,391.62676241399,412.18948168074,438.75944753732,467.04212833931,491.56459996916,523.2511306012],description:"1/6-comma meantone scale (tritonic temperament of Salinas)"},meansixth_19:{frequencies:[261.6255653006,275.36245350283,278.49009641114,293.11247215425,308.50278723002,312.00666699279,328.38886075091,345.6314161331,349.55699144229,367.91095120397,372.08969287196,391.62676241399,412.18948168074,416.87124381956,438.75944753732,461.79691129422,467.04212833931,491.56459996916,517.37477513058,523.2511306012],description:"19 of 1/6-comma meantone scale"},meansixtheb:{frequencies:[261.6255653006,276.39673661379,293.31426069206,311.4574698476,328.96404447481,349.37515437283,369.07004939896,391.62674884124,413.78350416977,439.15979251365,466.37460465854,492.63446576705,523.2511306012],description:'"1/6-comma" meantone with equal beating fifths'},meansixthm:{frequencies:[261.6255653006,275.36250599118,293.11251278827,312.00669222389,328.38895179964,349.55706816887,367.91095120397,391.62667645325,414.52369088643,438.75941205608,467.04206359353,491.56462836305,523.2511306012],description:"modified 1/6-comma meantone scale, wolf spread over 2 fifths"},meansixthm2:{frequencies:[261.6255653006,276.14113065853,293.11251278827,310.24975557428,328.38895179964,349.55706816887,367.91095120397,391.62667645325,414.52380581681,438.75941205608,465.72523006308,491.56462836305,523.2511306012],description:"modified 1/6-comma meantone scale, wolf spread over 4 fifths"},meansixthpm:{frequencies:[261.6255653006,275.00020270933,293.00227310437,309.72478954314,328.14198392915,348.83408706747,367.49599295996,391.5530240856,412.50030385781,438.51190905657,465.11211608996,491.10256480205,523.2511306012],description:"modified 1/6P-comma temperament, French 18th century"},meansixthso:{frequencies:[261.6255653006,273.09145986506,292.50627485027,313.30134186202,327.03195662575,350.28154752005,365.63284274659,391.62667645325,408.78994578219,437.85193595173,468.98001879925,489.53334447372,524.3356019912],description:"1/6-comma meantone scale with 1/6-comma stretched oct, Dave Keenan TL 13-12-99"},meanstr:{frequencies:[261.6255653006,272.52663052146,292.30447317753,313.51763757869,326.58087306932,350.28154752005,364.87661266094,391.35649333595,407.66301227525,437.24799400905,468.98001879925,488.52085380073,523.97386302914],description:"Meantone with 1/9-comma stretched octave, Petr Parizek (2006)"},meanten:{frequencies:[261.6255653006,276.96346718799,293.59840699152,311.2324721493,329.47860040677,349.26769656434,369.74365294187,391.95114287501,414.92943551322,439.85086739936,466.26912673157,493.60433806962,523.2511306012],description:"1/10-comma meantone scale"},meanthird:{frequencies:[261.6255653006,271.40047399919,291.9012907804,313.95067836072,325.68056936328,350.28154752005,363.36884069528,390.81668391305,405.4184580124,436.04260883433,468.98001879925,486.50215045777,523.2511306012],description:"1/3-comma meantone scale (Salinas)"},meanthird_19:{frequencies:[261.6255653006,271.40047399919,281.38801176707,291.9012907804,302.80736724606,313.95067836072,325.68056936328,337.848714425,350.28154752005,363.36884069528,376.74081403286,390.81668391305,405.4184580124,420.33785775232,436.04260883433,452.33412516107,468.98001879925,486.50215045777,504.40543017669,523.2511306012],description:"Complete 1/3-comma meantone scale"},meanthirdeb:{frequencies:[261.6255653006,273.41679662438,292.30169912182,312.83755546226,326.81234905863,349.91518709086,365.63683018302,390.81669745772,408.5035451685,436.83089868331,467.63468237516,488.59687355467,523.2511306012],description:'"1/3-comma" meantone with equal beating fifths'},meanvar1:{frequencies:[261.6255653006,274.22463192287,292.50627485027,312.00669222389,327.03195662575,349.55706816887,366.3906401674,391.22147055517,410.48618883318,437.39890198442,467.04206359353,489.53334447372,523.2511306012],description:"Variable meantone 1: C-G-D-A-E 1/4, others 1/6"},meanvar2:{frequencies:[261.6255653006,274.19219069011,292.50627485027,312.04360750473,327.03195662575,349.70184487387,366.23895640989,391.22147055517,410.65012590831,437.39890198442,467.23549927892,489.3306802979,523.2511306012],description:"Variable meantone 2: C..E 1/4, 1/5-1/6-1/7-1/8 outward both directions"},meanvar3:{frequencies:[261.6255653006,275.36250599118,292.50627485027,310.71739423852,327.03195662575,349.55706816887,367.15000817177,391.22147055517,413.04376116614,437.39890198442,466.0760911248,489.53334447372,523.2511306012],description:"Variable meantone 3: C..E 1/4, 1/6 next, then Pyth."},meanvar4:{frequencies:[261.6255653006,275.07759559501,292.50627485027,311.03921839762,327.03195662575,349.91912034749,366.77012764335,391.22147055517,412.61639318626,437.39890198442,466.55882736321,489.02683710225,523.2511306012],description:"Variable meantone 4: naturals 1/4-comma, accidentals Pyth."},mediant16:{frequencies:[261.6255653006,313.95067836072,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,392.4383479509,411.12588832951,418.60090448096,425.14154361347,436.04260883433,448.50096908674,457.84473927605,470.92601754108,523.2511306012],description:"Mediant doubling of octave done four times"},mercadier:{frequencies:[261.6255653006,276.24519242498,293.00227310437,310.42509491746,328.14198392915,349.22823143301,368.74309237173,391.5530240856,413.90012676351,438.51190905657,465.63764214343,492.21297564769,523.2511306012],description:"Mercadier's well-temperament (1777), 1/12 and 1/6 Pyth. comma"},mercadier2:{frequencies:[261.6255653006,276.14388692511,292.95319623755,310.40895756597,328.03206784165,349.20805980193,368.45885450371,391.49761638186,413.86785247997,438.37641748302,465.57175090792,491.63473786767,523.2511306012],description:"Mercadier de Belestas (1776)"},mercator:{frequencies:[261.6255653006,272.09448029963,279.3054110864,290.48161516351,306.08206748155,318.32990397837,326.76614606023,335.42596179815,348.84778913489,362.80689075348,372.42184279259,387.32403355801,408.12545368833,418.94141877379,435.70530841001,453.13974129598,465.14865565404,490.12996697565,509.74216322321,523.2511306012],description:"19 out of 53-tET, see Mandelbaum p. 331"},merrick:{frequencies:[261.6255653006,278.62147458377,295.28844751169,312.94924079019,329.91874474504,349.29981986967,371.62722343835,394.01440557319,416.60121863153,438.96906929631,468.0242659544,493.6331420766,523.2511306012],description:"A. Merrick's melodically tuned equal temperament (1811)"},mersen_l1:{frequencies:[261.6255653006,279.06726965397,290.69507255622,313.95067836072,327.03195662575,348.83408706747,372.08969287196,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Mersenne lute 1"},mersen_l2:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,372.08969287196,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Mersenne lute 2"},mersen_s1:{frequencies:[261.6255653006,279.06726965397,290.69507255622,313.95067836072,327.03195662575,348.83408706747,372.08969287196,392.4383479509,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Mersenne spinet 1"},mersen_s2:{frequencies:[261.6255653006,272.52663052146,294.32876096318,306.59245933664,327.03195662575,348.83408706747,363.36884069528,392.4383479509,408.78994578219,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Mersenne spinet 2"},mersenmt1:{frequencies:[261.6255653006,273.37431312998,292.50627485027,311.03921839762,327.03195662575,349.91912034749,365.63284274659,391.22147055517,408.78994578219,437.39890198442,466.55882736321,489.02683710225,523.2511306012],description:"Mersenne's Improved Meantone 1"},mersenmt2:{frequencies:[261.6255653006,273.37431312998,292.50627485027,309.11326130363,327.03195662575,349.91912034749,365.63284274659,391.22147055517,408.78994578219,437.39890198442,465.11211608996,489.02683710225,523.2511306012],description:"Mersenne's Improved Meantone 2"},mersenne:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,306.59245933664,310.07474405997,313.95067836072,322.99452506247,327.03195662575,340.65828815182,344.52749339997,348.83408706747,363.36884069528,367.91095120397,372.08969287196,376.74081403286,387.59343007496,392.4383479509,408.78994578219,413.43299207996,418.60090448096,430.65936674996,436.04260883433,454.2110508691,459.88868900496,465.11211608996,470.92601754108,484.4917875937,490.54793493862,510.98743222773,523.2511306012],description:"31-note choice system of Mersenne, Harmonie universelle (1636)"},meyer:{frequencies:[261.6255653006,279.06726965397,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,373.75080757229,392.4383479509,418.60090448096,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,490.54793493862,523.2511306012],description:"Max Meyer, see Doty, David, 1/1 August 1992 (7:4) p.1 and 10-14"},meyer_29:{frequencies:[261.6255653006,268.26840191956,275.93321340298,286.15296204753,289.72987407313,294.32876096318,306.59245933664,321.92208230347,327.03195662575,331.11985608357,343.38355445704,344.91651675372,357.69120255941,367.91095120397,372.50983809402,383.2405741708,386.30649876417,392.4383479509,408.78994578219,413.89982010446,429.2294430713,441.49314144476,457.84473927605,459.88868900496,482.88312345521,490.54793493862,496.67978412536,510.98743222773,515.07533168556,523.2511306012],description:"Max Meyer, see Doty, David, 1/1 August 1992 (7:4) p.1 and 10-14"},mid_enh1:{frequencies:[261.6255653006,269.10058145205,336.37572681506,348.83408706747,392.4383479509,403.65087217807,504.56359022259,523.2511306012],description:"Mid-Mode1 Enharmonic, permutation of Archytas's with the 5/4 lying medially"},mid_enh2:{frequencies:[261.6255653006,271.31540105247,339.14425131559,348.83408706747,392.4383479509,406.97310157871,508.71637697339,523.2511306012],description:"Permutation of Archytas' Enharmonic with the 5/4 medially and 28/27 first"},miller19:{frequencies:[261.6255653006,271.16557874802,283.07475767856,293.39690257971,304.09543631541,315.18408718336,326.67707691855,338.58915326012,350.93559605343,363.73224209988,376.99551198295,390.74241649248,407.9032302438,422.77716528297,438.1934715504,454.17192383337,470.73301771751,487.89800430439,505.68889852562,524.12852955557],description:"TOP tempered nr. 64 [1202.9, 570.4479508], 7-limit {225/224, 1029/1000}"},miller7:{frequencies:[261.6255653006,274.70684356563,294.32876096318,313.95067836072,329.64821227876,353.19451315581,366.27579142084,392.4383479509,412.06026534844,439.53094970501,470.92601754108,494.47231841813,523.2511306012],description:"Herman Miller, 7-limit JI. mode of parizek_ji1"},miller_12:{frequencies:[261.6255653006,273.36657578691,291.63627719304,313.29104303136,327.35065305942,349.22823143301,364.90060015836,391.99543598175,418.19337019276,436.9606979923,456.57025003029,487.08386390194,523.2511306012],description:"Herman Miller, scale with appr. to three 7/4 and one 11/8. Tuning List 19-11-99"},miller_12a:{frequencies:[261.6255653006,273.46133384191,291.68681828778,313.23675853409,327.40738352015,349.22823143301,365.02708698668,391.99543598175,418.12090908234,437.03642407223,456.80766452229,487.25270356141,523.85596330884],description:'Herman Miller, "Starling" scale, alternative version TL 25-11-99'},miller_12r:{frequencies:[261.6255653006,272.52663052146,290.69507255622,313.95067836072,327.03195662575,348.83408706747,363.36884069528,392.4383479509,418.60090448096,436.04260883433,454.2110508691,484.4917875937,523.2511306012],description:'Herman Miller, "Starling" scale rational version'},miller_ar1:{frequencies:[261.6255653006,276.1828093671,293.13465239421,310.07474405997,327.9937953665,348.83408706747,368.24374600687,391.64146650178,414.27421384356,438.21489534465,465.11211608996,490.99166158792,523.2511306012],description:'Herman Miller, "Arrow I" well-temperament'},miller_ar2:{frequencies:[261.6255653006,276.1828093671,293.13465239421,310.2849072826,328.2161033156,349.07052034394,368.24374600687,391.64146650178,414.27421384356,438.51190905657,465.42736069124,491.32444638706,523.2511306012],description:'Herman Miller, "Arrow II" well-temperament'},miller_b1:{frequencies:[261.6255653006,276.37000081643,292.93610587951,310.49521248455,328.2161033156,348.83408706747,368.4933346061,391.64146650178,413.993616853,438.80912407872,465.11211608996,491.32444638706,523.2511306012],description:'Herman Miller, "Butterfly I" well-temperament'},miller_b2:{frequencies:[261.6255653006,276.55731914056,293.13465239421,310.70566022736,328.2161033156,349.07052034394,368.74309237173,392.17254067411,414.27421384356,439.10654054756,465.42736069124,491.99069280383,523.2511306012],description:'Herman Miller, "Butterfly II" well-temperament'},miller_bug:{frequencies:[261.6255653006,275.99574470663,292.73769384471,310.49521248455,327.54963108844,348.83408706747,368.4933346061,391.64146650178,413.993616853,437.62147130622,465.11211608996,491.32444638706,523.2511306012],description:'Herman Miller, "Bug I" well-temperament'},miller_dim:{frequencies:[261.6255653006,272.37088095799,275.97178311718,291.10467300644,307.06737543415,311.12698372208,323.9053895548,328.18760802294,346.1837483498,365.1667076515,369.99442271164,385.1905938463,390.2830385166,411.68417663589,434.25884690128,440,458.07139483414,464.12736626882,489.57775198944,516.42371048788,523.2511306012],description:"Diminished temperament, g=92.421, oct=1/4, 7-limit"},miller_nikta:{frequencies:[261.6255653006,272.78230567952,282.82337239762,292.30660227893,305.1368529352,315.1779191367,326.89249731477,341.39626079795,349.76381456689,364.82541608424,379.88701473,391.60159255926,407.77886614283,422.28262813098,436.22855406869,456.86852448015,469.69877536137,488.10739794888,508.74736733766,523.2511306012],description:'Herman Miller, 19-tone scale of "Nikta". Tuning List 22-1-99'},miller_sp:{frequencies:[261.6255653006,276.74268633071,292.73329748773,304.15432597486,321.72882314722,340.31880135827,353.5963846,374.02771873076,395.63960626236,411.07553805605,434.82810464551,459.95313047266,477.89826295658,505.51194770063,525.23456349057],description:"Herman Miller, Superpelog temperament, TOP tuning"},minor_5:{frequencies:[261.6255653006,299.00064605783,348.83408706747,418.60090448096,465.11211608996,523.2511306012],description:"A minor pentatonic"},minor_clus:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,348.83408706747,353.19451315581,372.08969287196,392.4383479509,418.60090448096,441.49314144476,465.11211608996,470.92601754108,523.2511306012],description:"Chalmers' Minor Mode Cluster, Genus [333335]"},minor_wing:{frequencies:[261.6255653006,294.32876096318,313.95067836072,327.03195662575,348.83408706747,376.74081403286,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Chalmers' Minor Wing with 7 minor and 6 major triads"},minortone:{frequencies:[261.6255653006,264.87670583656,269.18630372462,273.56601964703,276.96554054138,281.47182622933,286.05143175444,290.70554674078,294.31805527354,299.10666990622,303.97319627313,307.75057781118,312.75774231814,317.84637624619,323.01780144749,327.03184444407,332.35271908155,337.76016543181,341.95740725719,347.52112383796,353.17536321933,358.9216002989,363.3818066762,369.29410472703,375.30259493676,379.96636500161,386.14849505708,392.43120962619,398.81614754309,403.7721109712,410.34156772664,417.0179085097,422.20006196255,429.06934285921,436.05038835349,443.14501943782,448.65184388114,455.95150328441,463.36992699746,469.12808274602,476.76089208744,484.51788878959,492.4010934061,498.52001054206,506.63103252794,514.8740254656,523.2511306012],description:"Minortone temperament, g=182.466089, 5-limit"},miracle1:{frequencies:[261.6255653006,266.71173418545,279.86396690685,285.30470202322,299.37379946195,305.19382000629,320.24370022528,326.46944327063,342.56848033562,349.22823143301,366.44956000397,373.57357677338,391.99543598175,399.61607881612,419.32216217931,427.47405410759,448.5538823653,457.27406033445,479.82340237272,489.15147723638,513.27277840175,523.2511306012],description:'21 out of 72-tET Pyth. scale "Miracle/Blackjack", Keenan & Erlich, TL 2-5-2001'},miracle1a:{frequencies:[261.6255653006,266.57640943865,279.87817034289,285.17441410431,299.40418912991,305.0699313594,320.29246281951,326.35348199782,342.63803067389,349.1219037468,366.54256247747,373.47879032775,392.11482112276,399.53496279579,419.47115746916,427.40897376302,448.73603972606,457.22764679928,480.04261976898,489.12665346498,513.5333359992,523.2511306012],description:"Version of Blackjack with just 11/8 intervals"},miracle2:{frequencies:[261.6255653006,266.71172956369,274.52699087907,279.86396690685,285.30469707927,293.66477470251,299.3738011912,305.19381471768,314.13668880034,320.24370207508,326.46943949911,336.03573785931,342.56848231438,349.22822739856,359.4614100947,366.44956423737,373.57357245769,380.83607584373,391.99544051026,399.61607650784,407.38486242506,419.32216702351,427.4740516384,435.78441397758,448.55389013814,457.27405769313,466.16375074742,479.82341068742,489.15147723638,498.66088722045,513.27278729609,523.2511306012],description:'31 out of 72-tET Pythagorean scale "Miracle/Canasta", tempered Fokker-M, 36 7-limit tetrads'},miracle24:{frequencies:[261.6255653006,266.71173418545,274.52698453615,279.86396690685,285.30470202322,299.37379946195,305.19382000629,320.24370022528,326.46944327063,342.56848033562,349.22823143301,366.44956000397,373.57357677338,391.99543598175,399.61607881612,419.32216217931,427.47405410759,448.5538823653,457.27406033445,466.16376151809,479.82340237272,489.15147723638,498.66089874196,513.27277840175,523.2511306012],description:"Miracle[24] in 72-tET tuning."},miracle2a:{frequencies:[261.6255653006,266.57640943865,274.68028654691,279.87817034289,285.17441410431,293.84366906071,299.40418912991,305.0699313594,314.34400674513,320.29246281951,326.35348199782,336.27457379784,342.63803067389,349.1219037468,359.73515228832,366.54256247747,373.47879032775,380.54627680087,392.11482112276,399.53496279579,407.09552105481,419.47115746916,427.40897376302,435.49700296564,448.73603972606,457.22764679928,465.87994655565,480.04261976898,489.12665346498,498.38259075187,513.5333359992,523.2511306012],description:"Version of Canasta with just 11/8 intervals"},miracle3:{frequencies:[261.6255653006,266.71172956369,271.8967720342,274.52699087907,279.86396690685,285.30469707927,290.85119844166,293.66477470251,299.3738011912,305.19381471768,311.12697293924,314.13668880034,320.24370207508,326.46943949911,332.81620914398,336.03573785931,342.56848231438,349.22822739856,356.01744208336,359.4614100947,366.44956423737,373.57357245769,380.83607584373,384.52012922913,391.99544051026,399.61607650784,407.38486242506,411.32573797959,419.32216702351,427.4740516384,435.78441397758,440.00001524924,448.55389013814,457.27405769313,466.16375074742,470.67322937359,479.82341068742,489.15147723638,498.66088722045,503.48472993456,513.27278729609,523.2511306012],description:'41 out of 72-tET Pythagorean scale "Miracle/Studloco", Erlich/Keenan 2001'},miracle31s:{frequencies:[261.6255653006,266.63636836248,274.61234258734,279.87187586531,285.23214274484,293.7643779857,299.39072204343,305.12482507342,314.2521161294,320.27085311289,326.40486440328,336.1687117034,342.60720791066,349.16901789451,359.61381619398,366.50134650551,373.52079096839,380.6746756467,392.06191220286,399.57090708206,407.22371854314,419.40512463865,427.43781242392,435.62434685833,448.6553095271,457.24821364991,466.00569400686,479.94546308962,489.13765420145,498.50589943595,513.41785698047,523.2511306012],description:"Canasta with Secor's minimax generator of 116.7155941 cents (5:9 exact). XH5, 1976"},miracle3a:{frequencies:[261.6255653006,266.57640943865,271.6209387912,274.68028654691,279.87817034289,285.17441410431,290.57088243021,293.84366906071,299.40418912991,305.0699313594,310.84289043406,314.34400674513,320.29246281951,326.35348199782,332.52919812642,336.27457379784,342.63803067389,349.1219037468,355.72847573316,359.73515228832,366.54256247747,373.47879032775,380.54627680087,384.83248369581,392.11482112276,399.53496279579,407.09552105481,411.6807594913,419.47115746916,427.40897376302,435.49700296564,440.40213577526,448.73603972606,457.22764679928,465.87994655565,471.12729153307,480.04261976898,489.12665346498,498.38259075187,503.99602271809,513.5333359992,523.2511306012],description:"Version of Studloco with just 11/8 intervals"},miracle3ls:{frequencies:[261.6255653006,266.8561524992,272.19132869617,274.36355553357,279.84880885615,285.44374339214,291.1505189834,293.47406686496,299.34138986722,305.32601617869,311.43030899178,313.91568307924,320.1916880693,326.59318586748,333.12264767748,335.78115718319,342.4943108472,349.34167821305,356.32594256772,359.16962765504,366.35037871957,373.67471357934,381.14545968569,384.18721873359,391.86813762951,399.70261841457,407.69373119716,410.94736065575,419.16328558448,427.54349328421,436.09121881038,439.57145109254,448.35967321435,457.32356924795,466.46667727785,470.18934850506,479.58967749961,489.177972196,498.95793401383,502.93987502638,512.99500332159,523.2511306012],description:"Miracle-41 in a 7-limit least-squares tuning, Gene Ward Smith, 2001"},miracle3p:{frequencies:[261.6255653006,266.34679554672,270.06721067987,274.94077677072,279.90228841312,284.95333588433,290.09553330897,294.14767822015,299.45579274291,304.85969791727,310.36112062791,314.69634158508,320.37527393455,326.15668500873,332.04242788125,336.6805001021,342.75615313904,348.94144590806,355.2383548887,360.20043713509,366.70052302062,373.3179099666,380.0547104455,385.36343543368,392.31760641523,399.39727291251,406.60469732047,412.28427858225,419.7242587073,427.29849640545,435.00941939202,441.0857666732,449.04549132915,457.14885520764,465.39844769831,471.89927840742,480.41505607532,489.08450736089,497.91040254418,504.86537329764,513.97604599191,523.2511306012],description:"Least squares Pythagorean approximation to partch_43"},miracle41s:{frequencies:[261.6255653006,266.63636836248,269.45164985995,274.61234258734,279.87187586531,285.23214274484,290.69507255622,293.7643779857,299.39072204343,305.12482507342,310.96875093738,314.2521161294,320.27085311289,326.40486440328,332.65635780028,336.1687117034,342.60720791066,349.16901789451,355.85650343121,359.61381619398,366.50134650551,373.52079096839,380.6746756467,384.69403121132,392.06191220286,399.57090708206,407.22371854314,411.52339231679,419.40512463865,427.43781242392,435.62434685833,440.22388881539,448.6553095271,457.24821364991,466.00569400686,470.92601754108,479.94546308962,489.13765420145,498.50589943595,503.76937659657,513.41785698047,523.2511306012],description:"StudLoco with Secor's minimax generator of 116.7155941 cents (5:9 exact). XH5, 1976"},miracle_12:{frequencies:[261.6255653006,279.86396690685,299.37379946195,320.24370022528,336.03572815422,342.56848033562,359.46139971304,366.44956000397,384.52011812375,411.32572372413,440,470.6732130613,523.2511306012],description:"A 12-tone subset of Blackjack with six 4-7-9-11 tetrads"},miracle_12a:{frequencies:[261.6255653006,279.86396690685,299.37379946195,320.24370022528,342.56848033562,366.44956000397,391.99543598175,419.32216217931,448.5538823653,479.82339960115,489.15147723638,513.27277840175,523.2511306012],description:"A 12-tone chain of Miracle generators and subset of Blackjack"},"24erlich-keenan":{frequencies:[261.6255653006,266.71173469898,279.86396636799,285.30470202322,290.8512090818,299.37380003836,305.19381941867,320.24370022528,326.46944389922,342.56847967604,349.22823143301,356.01745305102,366.44956070954,373.5735760541,391.99543598175,399.61607958554,407.38487340641,419.32216137194,427.47405410759,448.55388322895,457.27405945401,479.82340237272,489.15147817819,498.66089778183,523.2511306012],description:"24 note mapping for Erlich/Keenan Miracle scale low version, tuned to 72-equal"},miracle_8:{frequencies:[261.6255653006,279.86396690685,314.13668154225,336.03572815422,366.44956000397,391.99543598175,419.32216217931,448.5538823653,523.2511306012],description:"tet3a in 72-et"},miring1:{frequencies:[261.6255653006,285.29448470177,307.6953604706,387.15515639797,420.96788906714,523.2511306012],description:"Gamelan Miring from Serdang wetan, Tangerang. 1/1=309.5 Hz"},miring2:{frequencies:[261.6255653006,279.34865171253,304.66723527068,384.42070010042,412.69311132744,523.2511306012],description:"Gamelan Miring (Melog gender) from Serdang wetan"},misca:{frequencies:[261.6255653006,274.70684356563,289.16509849014,305.22982618403,348.83408706747,392.4383479509,412.06026534844,433.74764773521,457.84473927605,523.2511306012],description:"21/20 x 20/19 x 19/18=7/6 7/6 x 8/7=4/3"},miscb:{frequencies:[261.6255653006,269.80136421624,278.50463402967,319.76457981184,348.83408706747,392.4383479509,404.70204632437,417.75695104451,479.64686971777,523.2511306012],description:"33/32 x 32/31x 31/27=11/9 11/9 x 12/11=4/3"},miscc:{frequencies:[261.6255653006,276.00059636107,292.04714266113,310.07474405997,348.83408706747,392.4383479509,414.00089454161,438.0707139917,465.11211608996,523.2511306012],description:"96/91 x 91/86 x 86/54=32/27. 32/27 x 9/8=4/3."},miscd:{frequencies:[261.6255653006,271.68808704293,282.55561052465,294.32876096318,348.83408706747,392.4383479509,407.5321305644,423.83341578697,441.49314144476,523.2511306012],description:"27/26 x 26/25 x 25/24=9/8. 9/8 x 32/27=4/3."},misce:{frequencies:[261.6255653006,280.31310567921,301.87565226992,327.03195662575,348.83408706747,392.4383479509,420.46965851882,452.81347840488,490.54793493862,523.2511306012],description:"15/14 x 14/13 x 13/12=5/4. 5/4 x 16/15= 4/3."},miscf:{frequencies:[261.6255653006,271.31540105247,279.06726965397,348.83408706747,378.42269266694,392.4383479509,406.97310157871,418.60090448096,504.56359022259,523.2511306012],description:"SupraEnh1"},miscg:{frequencies:[261.6255653006,271.31540105247,279.06726965397,336.37572681506,348.83408706747,392.4383479509,406.97310157871,418.60090448096,504.56359022259,523.2511306012],description:"SupraEnh 2"},misch:{frequencies:[261.6255653006,271.31540105247,279.06726965397,336.37572681506,348.83408706747,392.4383479509,406.97310157871,490.54793493862,504.56359022259,523.2511306012],description:"SupraEnh 3"},misty:{frequencies:[261.6255653006,268.57642185399,270.57706033988,272.59260010205,274.62315370363,276.66883458144,284.01936005382,286.13503371773,288.26646546986,290.41377434565,292.57708030445,300.35025535204,302.58757688062,304.84156607104,307.11234355974,309.40003795144,311.70477168653,319.9861304005,322.36972224007,324.77106769218,327.19030275625,329.62755691287,338.38508739928,340.90573394089,343.44515491415,346.00349213972,348.58088853904,357.84197030948,360.50755209334,363.19298782427,365.89842747751,368.62402219236,378.41760905933,381.23645754858,384.07630597582,386.93730633346,389.81962065329,392.72340320054,403.157261366,406.16039889903,409.18590458221,412.23394976407,415.30469757995,426.33849458487,429.51431022199,432.71378016074,435.93708308397,439.18439906139,450.85263092877,454.21105352848,457.59449053401,461.00313090234,464.43716505707,476.77631130474,480.3278378528,483.9058226648,487.51045723915,491.14194572312,494.80048247871,507.94632001299,511.73003620658,515.54193450341,519.38223078906,523.2511306012],description:"Misty temperament, g=96.787939, p=400, 5-limit"},mistyschism:{frequencies:[261.6255653006,278.75251614148,294.32876096318,310.42486507835,330.74639366397,348.83408706747,372.08969287196,392.4383479509,418.12877421223,440.99519155196,465.63729761752,496.11959049595,523.2511306012],description:"Mistyschism scale 32805/32768 and 67108864/66430125"},mixed9_3:{frequencies:[261.6255653006,273.20871865617,285.30470202322,311.12698372208,349.22823143301,391.99543598175,409.35055662695,427.47405410759,466.16376151809,523.2511306012],description:"A mixture of the hemiolic chromatic and diatonic genera, 75 + 75 + 150 + 200 c"},mixed9_4:{frequencies:[261.6255653006,271.89678302796,282.57123920205,305.19382000629,349.22823143301,391.99543598175,407.38487419079,423.37848741825,457.27406033445,523.2511306012],description:'Mixed enneatonic 4, each "tetrachord" contains 67 + 67 + 133 + 233 cents.'},mixed9_5:{frequencies:[261.6255653006,277.18263097687,293.66476791741,329.62755691287,349.22823143301,391.99543598175,415.30469757995,440,493.88330125613,523.2511306012],description:"A mixture of the intense chromatic genus and the permuted intense diatonic"},mixed9_6:{frequencies:[261.6255653006,277.18263097687,293.66476791741,311.12698372208,349.22823143301,391.99543598175,415.30469757995,440,466.16376151809,523.2511306012],description:"Mixed 9-tonic 6, Mixture of Chromatic and Diatonic"},mixed9_7:{frequencies:[261.6255653006,277.18263097687,311.12698372208,329.62755691287,349.22823143301,391.99543598175,415.30469757995,466.16376151809,493.88330125613,523.2511306012],description:"Mixed 9-tonic 7, Mixture of Chromatic and Diatonic"},mixed9_8:{frequencies:[261.6255653006,293.66476791741,311.12698372208,329.62755691287,349.22823143301,391.99543598175,440,466.16376151809,493.88330125613,523.2511306012],description:"Mixed 9-tonic 8, Mixture of Chromatic and Diatonic"},mixol_chrom:{frequencies:[261.6255653006,274.08392555301,287.78812183066,302.93486508491,311.12229387098,319.76457981184,359.73515228832,411.12588832951,426.35277308246,434.39716502741,442.75095666255,479.64686971777,523.2511306012,548.16785110602,575.57624366132,605.86973016981,622.24458774197,639.52915962369,719.47030457665,822.25177665903,852.70554616492,868.79433005482,885.50191332511,959.29373943553,1046.5022612024],description:"Mixolydian chromatic tonos"},mixol_chrom2:{frequencies:[261.6255653006,271.31540105247,281.75060878526,332.97799220076,366.27579142084,385.55346465352,406.97310157871,523.2511306012],description:"Schlesinger's Mixolydian Harmonia in the chromatic genus"},mixol_chrominv:{frequencies:[261.6255653006,279.06726965397,299.00064605783,373.75080757229,411.12588832951,429.81342870813,448.50096908674,523.2511306012],description:"A harmonic form of Schlesinger's Chromatic Mixolydian inverted"},mixol_diat:{frequencies:[261.6255653006,274.08392555301,287.78812183066,319.76457981184,338.57426097725,359.73515228832,383.71749577421,411.12588832951,442.75095666255,460.46099492906,479.64686971777,500.50108144463,523.2511306012,548.16785110602,575.57624366132,639.52915962369,677.14852195449,719.47030457665,767.43499154843,822.25177665903,885.50191332511,920.92198985811,959.29373943553,1001.00216288925,1046.5022612024],description:"Mixolydian diatonic tonos"},mixol_diat2:{frequencies:[261.6255653006,281.75060878526,305.22982618403,332.97799220076,348.83408706747,366.27579142084,406.97310157871,457.84473927605,523.2511306012],description:"Schlesinger's Mixolydian Harmonia, a subharmonic series though 13 from 28"},mixol_diatcon:{frequencies:[261.6255653006,281.75060878526,305.22982618403,332.97799220076,392.4383479509,406.97310157871,457.84473927605,523.2511306012],description:"A Mixolydian Diatonic with its own trite synemmenon replacing paramese"},mixol_diatinv:{frequencies:[261.6255653006,299.00064605783,336.37572681506,348.83408706747,411.12588832951,448.50096908674,485.87604984397,523.2511306012],description:"A Mixolydian Diatonic with its own trite synemmenon replacing paramese"},mixol_diatinv2:{frequencies:[261.6255653006,299.00064605783,336.37572681506,348.83408706747,373.75080757229,411.12588832951,448.50096908674,485.87604984397,523.2511306012],description:"Inverted Schlesinger's Mixolydian Harmonia, a harmonic series from 14 from 28"},mixol_enh:{frequencies:[261.6255653006,274.08392555301,287.78812183066,295.1673044417,299.00064605783,302.93486508491,348.83408706747,411.12588832951,418.60090448096,422.44127975143,426.35277308246,469.85815809087,523.2511306012,548.16785110602,575.57624366132,590.33460888341,598.00129211566,605.86973016981,697.66817413493,822.25177665903,837.20180896192,844.88255950285,852.70554616492,939.71631618175,1046.5022612024],description:"Mixolydian Enharmonic Tonos"},mixol_enh2:{frequencies:[261.6255653006,266.38239376061,271.31540105247,332.97799220076,366.27579142084,375.66747838035,385.55346465352,523.2511306012],description:"Schlesinger's Mixolydian Harmonia in the enharmonic genus"},mixol_enhinv:{frequencies:[261.6255653006,270.34641747729,279.06726965397,373.75080757229,411.12588832951,420.46965851882,429.81342870813,523.2511306012],description:"A harmonic form of Schlesinger's Mixolydian inverted"},mixol_penta:{frequencies:[261.6255653006,269.32043486826,281.75060878526,332.97799220076,366.27579142084,381.53728273004,406.97310157871,523.2511306012],description:"Schlesinger's Mixolydian Harmonia in the pentachromatic genus"},mixol_pis:{frequencies:[261.6255653006,287.78812183066,319.76457981184,359.73515228832,411.12588832951,442.75095666255,479.64686971777,523.2511306012,548.16785110602,575.57624366132,639.52915962369,719.47030457665,822.25177665903,885.50191332511,959.29373943553,1046.5022612024],description:"The Diatonic Perfect Immutable System in the Mixolydian Tonos"},mixol_tri1:{frequencies:[261.6255653006,268.0066766494,274.70684356563,332.97799220076,366.27579142084,378.90599112501,392.4383479509,523.2511306012],description:"Schlesinger's Mixolydian Harmonia in the first trichromatic genus"},mixol_tri2:{frequencies:[261.6255653006,268.0066766494,281.75060878526,332.97799220076,366.27579142084,378.90599112501,406.97310157871,523.2511306012],description:"Schlesinger's Mixolydian Harmonia in the second trichromatic genus"},mmmgeo1:{frequencies:[261.6255653006,291.52662303231,317.822348206,348.40303271111,392.9238840789,423.23948674937,463.96335069158,523.2511306012],description:"Scale for MakeMicroMusic in Peppermint 24, maybe a bit like Georgian tunings"},mmmgeo2:{frequencies:[261.6255653006,295.05751399041,323.4477810403,352.62279726972,392.9238840789,430.73079539701,485.77193724523,529.58860866211],description:"Scale for MakeMicroMusic in Peppermint 24, maybe a bit like Georgian tunings"},mmmgeo3a:{frequencies:[261.6255653006,281.81099471089,317.822348206,348.40303271111,392.9238840789,423.23948674937,463.96335069158,523.2511306012],description:'Peppermint 24 scale for MakeMicroMusic, maybe a bit "Georgian-like"?'},mmmgeo4a:{frequencies:[261.6255653006,281.81099471089,317.822348206,348.40303271111,392.9238840789,423.23948674937,477.32335087626,523.2511306012],description:'Peppermint 24 scale for MakeMicroMusic, maybe a bit "Georgian-like"?'},mmmgeo4b:{frequencies:[261.6255653006,295.05751399041,323.4477810403,348.40303271111,392.9238840789,430.73079539701,485.77193724523,523.2511306012],description:'Peppermint 24 scale for MakeMicroMusic, maybe a bit "Georgian-like"?'},mmswap:{frequencies:[261.6255653006,251.16054268858,294.32876096318,282.55561052465,313.95067836072,348.83408706747,353.19451315581,392.4383479509,376.74081403286,418.60090448096,423.83341578697,470.92601754108,523.2511306012],description:"Swapping major and minor in 5-limit JI"},mokhalif:{frequencies:[261.6255653006,293.66476791741,329.62755691287,349.22823143301,391.99543598175,425.01198472693,477.05982293263,523.2511306012],description:"Iranian mode Mokhalif from C"},montvallon:{frequencies:[261.6255653006,275.93321340298,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.89982010446,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Montvallon's Monochord, Nouveau sisteme de musique (1742)"},monzismic:{frequencies:[261.6255653006,265.20988799749,268.52946324281,272.20837072565,275.61554447717,279.39153269358,282.88861654172,286.76424730356,290.69297498385,294.33151655947,298.3639173457,302.09847446042,306.23728412706,310.07039048391,314.31841699833,318.25267316085,322.61279858837,327.03265671938,331.12605620426,335.66254762155,339.86396564906,344.52016812641,348.83245514045,353.61152766937,358.03760933268,362.94279426564,367.48567344471,372.52029869489,377.62390147213,382.35053879638,387.58881783384,392.44018387738,397.81669307529,402.79607923799,408.31446627855,413.42525081527,419.08925963743,424.33490995001,430.14838328955,436.04150237937,441.49934027584,447.54796975207,453.14983163098,459.35807517454,465.10776160818,471.47983118983,477.38124304179,483.92146177974,489.97860285142,496.69140794435,503.49617981289,509.7983334288,516.78267280423,523.2511306012],description:"Monzismic temperament, g=249.018448, 5-limit"},sevengroups:{frequencies:[261.6255653006,261.6255653006,275.62199471997,265.19499215873,270.69536599394,266.7406479561],description:"Here are some suggestions for a logical system encompassing intervals into seven broad groups: skhisma, kleisma, comma,"},"monzo-sym-11":{frequencies:[261.6255653006,269.80136421624,276.76092858245,279.06726965397,285.40970760065,286.15296204753,287.78812183066,294.32876096318,299.00064605783,304.4370214407,305.22982618403,313.95067836072,314.76825825228,327.03195662575,332.97799220076,334.88072358477,341.71502406609,343.38355445704,348.83408706747,359.73515228832,366.27579142084,373.75080757229,380.54627680087,392.4383479509,398.6675280771,400.61414686654,408.78994578219,411.12588832951,418.60090448096,434.91003062957,436.04260883433,448.50096908674,449.66894036041,457.84473927605,465.11211608996,475.68284600109,478.40103369253,479.64686971777,490.54793493862,494.63583439645,507.3950357345,523.2511306012],description:"Monzo symmetrical system: 11-limit"},"monzo-sym-5":{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,334.88072358477,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Monzo symmetrical system: 5-limit"},"monzo-sym-7":{frequencies:[261.6255653006,279.06726965397,286.15296204753,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,334.88072358477,341.71502406609,343.38355445704,348.83408706747,366.27579142084,373.75080757229,392.4383479509,398.6675280771,400.61414686654,408.78994578219,418.60090448096,436.04260883433,448.50096908674,457.84473927605,465.11211608996,478.40103369253,490.54793493862,523.2511306012],description:"Monzo symmetrical system: 7-limit"},monzo_sumerian_2place12:{frequencies:[261.6255653006,277.17835052447,293.68632213351,311.15032543183,329.66469551353,349.22211163595,369.93402791915,391.94841243536,415.27867508032,439.91220695103,466.03267445926,493.6331420766,523.2511306012],description:"Monzo - most accurate 2-place sexagesimal 12-tET approximation"},monzo_sumerian_simp12:{frequencies:[261.6255653006,277.34158865788,293.41184893525,310.84225580269,329.78012432849,348.83408706747,370.22485655745,392.4383479509,415.27867508032,440.11777340288,466.26338370404,493.6331420766,523.2511306012],description:"Monzo - simplified 2-place sexagesimal 12-tET approximation"},morgan:{frequencies:[261.6255653006,277.18263097687,294.07958763262,310.86358783941,330.18637907377,349.03110370139,370.30791823326,392.32757291716,415.07027187895,440.74593809176,465.76911360306,494.58094207912,523.2511306012],description:"Augustus de Morgan's temperament (1843)"},"mos11-34":{frequencies:[261.6255653006,272.51337835337,301.75671459889,314.3146261019,348.04364484358,362.52783176564,377.61479489998,418.13653788176,435.53771116377,453.66305442345,502.34551296122,523.2511306012],description:"Wilson 11 of 34-tET, G=9, Chain of minor & major thirds with Kleismatic fusion"},"mos12-17":{frequencies:[261.6255653006,272.51337835337,283.85429714132,307.97166902637,320.78822215662,348.04364484358,362.52783176564,377.61479489998,409.69842558521,426.7484383229,463.0066556268,482.27514684959,523.2511306012],description:"MOS 12 of 17, generator 7"},"mos12-22":{frequencies:[261.6255653006,287.56082683758,296.76515515861,326.18384711731,336.62443200122,347.39920007397,381.83730669135,394.05926325844,433.12283887627,446.9863572706,491.29666030217,507.02222283506,523.2511306012],description:"MOS 12 of 22, contains nearly just, recognizable diatonic, and pentatonic scales"},"mos13-22":{frequencies:[261.6255653006,278.64197723942,296.76515515861,316.06708432391,326.18384711731,347.39920007397,369.99442271164,381.83730669135,406.67242132093,433.12283887627,446.9863572706,476.05883716226,507.02222283506,523.2511306012],description:"MOS 13 of 22, contains 5 and 9 tone MOS as well. G=5 or 17"},"mos15-22":{frequencies:[261.6255653006,278.64197723942,287.56082683758,306.26409645618,316.06708432391,336.62443200122,347.39920007397,369.99442271164,381.83730669135,406.67242132093,419.68930726506,446.9863572706,461.29362042034,491.29666030217,507.02222283506,523.2511306012],description:"MOS 15 in 22, contains 7 and 8 tone MOS as well. G= 3 or 19"},moscow:{frequencies:[261.6255653006,277.4816141504,293.64820765919,311.48626315692,329.67368081467,349.7414907984,370.88289054572,392.4383479509,416.22242101754,440.4723112686,467.22939450183,494.51052097482,523.2511306012],description:"Charles E. Moscow's equal beating piano tuning (1895)"},mundeuc45:{frequencies:[261.6255653006,267.57160087561,269.80136421624,271.31540105247,274.70684356563,280.31310567921,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,310.07474405997,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,343.38355445704,348.83408706747,356.76213450082,359.73515228832,366.27579142084,373.75080757229,380.54627680087,383.71749577421,392.4383479509,398.6675280771,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,441.49314144476,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,488.36772189445,499.46698830115,504.56359022259,507.3950357345,513.90736041189,523.2511306012],description:"Euclidean reduced detempered Miracle[45] with Tenney tie-breaker"},musaqa:{frequencies:[261.6255653006,293.66476791741,320.24370022528,349.22823143301,391.99543598175,427.47405410759,466.16376151809,523.2511306012],description:"Egyptian scale by Miha'il Musaqa"},musaqa_24:{frequencies:[261.6255653006,269.02051582234,276.67624041581,284.6011815168,292.80374147632,300.29158209195,310.07474405997,319.15917884888,328.55303549378,338.26335715633,348.29659232622,358.65845048745,369.35373924791,380.38618160659,391.75821216589,403.47075130695,415.52295665389,427.91195157543,440.63253103259,453.67684579974,467.03406698289,480.69003385373,494.62688932105,508.8227088795,523.2511306012],description:"from d'Erlanger vol.5, p.34, after Mih.a'il Mu^saqah, 1899, a Lebanese scholar"},myna23:{frequencies:[261.6255653006,267.85369360167,274.23008563259,291.58574485564,298.52709031489,305.63367799752,312.90944157785,320.35840837329,327.98470157359,348.7424193045,357.04440817535,365.54403007102,374.24598974517,383.15510395049,392.27630410488,417.10295228105,427.03229805648,437.19801690717,447.60573581317,458.26121570764,469.17035466565,498.86352554567,510.73922293119,522.89762727195],description:"23 notes of Myna temperament, 7-limit TOP tuning (Paul Erlich)"},"mystic-r":{frequencies:[261.6255653006,367.91095120397,465.11211608996,654.0639132515,872.08521766867,1177.3150438527],description:"Skriabin's mystic chord, op. 60 rationalised"},mystic:{frequencies:[261.6255653006,369.99442271164,466.16376151809,659.25511382574,880,1174.65907166964],description:"Skriabin's mystic chord, op. 60"},urmawi:{frequencies:[261.6255653006,294.32876096318,326.6631048533,348.83408706747,392.4383479509,441.49314144476,471.45776383774,523.2511306012],description:"al-Urmawi, one of twelve maqam rows. First tetrachord is Rast"},valentine:{frequencies:[261.6255653006,276.16031892841,294.32876096318,310.68035879446,330.47439827444,348.83408706747,371.78369805875,392.4383479509,414.24047839262,440.63253103259,466.02053819169,495.71159741166,523.2511306012],description:"Robert Valentine, tuning with primes 3 & 19, TL 7-2-2002"},valentine2:{frequencies:[261.6255653006,286.10322937235,312.87102146627,349.87955533643,382.6142546815,418.41160951721,467.90420651233,511.68128147674,559.55413558945,625.74204293254,684.28641150324,748.30818586768,782.53142116911,855.74498969389,935.80841302466,1046.5022612024],description:"Robert Valentine, two octave 31-tET subset for guitar, TL 10-5-2002"},vallotti:{frequencies:[261.6255653006,276.24519242498,293.00227310437,310.77584116741,328.14198392915,349.6228209638,368.32692341742,391.5530240856,414.36778843034,438.51190905657,466.16376151809,491.10256480205,523.2511306012],description:"Vallotti & Young scale (Vallotti version)"},vavoom:{frequencies:[164.81377845643,165.83014536684,167.75567809608,168.79018601865,170.75008918846,172.7327497266,173.79795102719,175.81600173949,176.90021569146,178.95428827501,180.05785630665,182.14859375797,184.26360775673,185.39991601304,187.55268266167,188.70927492235,190.90046811205,192.07770535997,194.30800987601,196.56421264146,197.77637683895,200.07285246365,201.3066535986,203.64411977036,206.00872855044,207.27913480479,209.68595147418,210.9790342774,213.42881100738,214.74497512464,217.23848121866,219.76094059848,221.11615343515,223.68363702025,225.06304018178,227.6763542391,229.0803795269,231.74034082302,234.43118684139,235.87686755635,238.61574610914,240.08723199411,242.87499909192,244.37274935352,247.21027763268,250.08075380295,251.62294163139,254.54465534315,256.1143694988,259.0882353168,260.68597011615,263.71291896434,266.77501515601,268.42015092639,271.53690502834,273.21140777811,276.38379544331,278.08818779989,281.31720045362,284.58370833477,286.33866758091,289.66348210637,291.44976709494,294.83392732599,296.65209720599,300.09666587055,303.58123106099,305.45334345815,309.00010579622,310.90563508986,314.51570836542,316.45525105281,320.12976356015,323.84694071013,325.84402686189,329.62755691286],description:"Vavoom temperament, g=111.875426, 5-limit"},veroli:{frequencies:[261.6255653006,276.87699530057,293.57148765354,310.97965314221,329.42008585855,349.28270065725,369.64409253099,391.93430587921,414.97617910427,439.79164309579,466.09106516521,493.49262474744,523.2511306012],description:"Claudio di Veroli's well temperament (1978)"},vertex_chrom:{frequencies:[261.6255653006,271.89678302796,317.17549194805,349.22823143301,391.99543598175,407.38487419079,448.5538823653,523.2511306012],description:"A vertex tetrachord from Chapter 5, 66.7 + 266.7 + 166.7 cents"},vertex_chrom2:{frequencies:[261.6255653006,274.52698453615,323.3415889232,349.22823143301,391.99543598175,411.32572372413,484.46499093218,523.2511306012],description:"A vertex tetrachord from Chapter 5, 83.3 + 283.3 + 133.3 cents"},vertex_chrom3:{frequencies:[261.6255653006,275.18850165466,324.90175210669,349.22823143301,391.99543598175,412.31687950427,486.80259447109,523.2511306012],description:"A vertex tetrachord from Chapter 5, 87.5 + 287.5 + 125 cents"},vertex_chrom4:{frequencies:[261.6255653006,275.40936140075,325.42347822215,349.22823143301,391.99543598175,412.64779522483,487.58430040208,523.2511306012],description:"A vertex tetrachord from Chapter 5, 88.9 + 288.9 + 122.2 cents"},vertex_chrom5:{frequencies:[261.6255653006,282.57123920205,329.62755691287,349.22823143301,391.99543598175,423.37848741825,493.88330125613,523.2511306012],description:"A vertex tetrachord from Chapter 5, 133.3 + 266.7 + 100 cents"},vertex_diat:{frequencies:[261.6255653006,299.37379946195,323.3415889232,349.22823143301,391.99543598175,448.5538823653,484.46499932732,523.2511306012],description:"A vertex tetrachord from Chapter 5, 233.3 + 133.3 + 133.3 cents"},vertex_diat10:{frequencies:[261.6255653006,295.79278388132,324.90175210669,349.22823143301,391.99543598175,443.18842137843,486.80259447109,523.2511306012],description:"A vertex tetrachord from Chapter 5, 212.5 + 162.5 + 125 cents"},vertex_diat11:{frequencies:[261.6255653006,295.79278388132,306.66641795878,349.22823143301,391.99543598175,443.18842137843,459.48046426806,523.2511306012],description:"A vertex tetrachord from Chapter 5, 212.5 + 62.5 + 225 cents"},vertex_diat12:{frequencies:[261.6255653006,293.66476791741,315.65242990842,349.22823143301,391.99543598175,440,472.94426956511,523.2511306012],description:"A vertex tetrachord from Chapter 5, 200 + 125 + 175 cents"},vertex_diat2:{frequencies:[261.6255653006,299.37379946195,329.62755691287,349.22823143301,391.99543598175,448.5538823653,493.88330125613,523.2511306012],description:"A vertex tetrachord from Chapter 5, 233.3 + 166.7 + 100 cents"},vertex_diat3:{frequencies:[261.6255653006,273.20871865617,311.12698372208,349.22823143301,391.99543598175,409.35055662695,466.16376151809,523.2511306012],description:"A vertex tetrachord from Chapter 5, 75 + 225 + 200 cents"},vertex_diat4:{frequencies:[261.6255653006,297.93622032612,329.62755691287,349.22823143301,391.99543598175,446.39994737251,493.88330125613,523.2511306012],description:"A vertex tetrachord from Chapter 5, 225 + 175 + 100 cents"},vertex_diat5:{frequencies:[261.6255653006,275.18850165466,315.65242990842,349.22823143301,391.99543598175,412.31687950427,472.94426956511,523.2511306012],description:"A vertex tetrachord from Chapter 5, 87.5 + 237.5 + 175 cents"},vertex_diat7:{frequencies:[261.6255653006,293.66476791741,306.66641795878,349.22823143301,391.99543598175,440,459.48046426806,523.2511306012],description:"A vertex tetrachord from Chapter 5, 200 + 75 + 225 cents"},vertex_diat8:{frequencies:[261.6255653006,277.18263097687,306.66641795878,349.22823143301,391.99543598175,415.30469757995,459.48046426806,523.2511306012],description:"A vertex tetrachord from Chapter 5, 100 + 175 + 225 cents"},vertex_diat9:{frequencies:[261.6255653006,295.79278388132,320.24370022528,349.22823143301,391.99543598175,443.18842137843,479.82340237272,523.2511306012],description:"A vertex tetrachord from Chapter 5, 212.5 + 137.5 + 150 cents"},vertex_sdiat:{frequencies:[261.6255653006,275.18850165466,306.66641795878,349.22823143301,391.99543598175,412.31687950427,459.48046426806,523.2511306012],description:"A vertex tetrachord from Chapter 5, 87.5 + 187.5 + 225 cents"},vertex_sdiat2:{frequencies:[261.6255653006,273.20871865617,302.26980244078,349.22823143301,391.99543598175,409.35055662695,452.89298412314,523.2511306012],description:"A vertex tetrachord from Chapter 5, 75 + 175 + 250 cents"},vertex_sdiat3:{frequencies:[261.6255653006,265.43099677612,302.26980244078,349.22823143301,391.99543598175,397.69714089209,452.89298412314,523.2511306012],description:"A vertex tetrachord from Chapter 5, 25 + 225 + 250 cents"},vertex_sdiat4:{frequencies:[261.6255653006,271.8968348557,302.26980244078,349.22823143301,391.99543598175,407.38495184466,452.89298412314,523.2511306012],description:"A vertex tetrachord from Chapter 5, 66.7 + 183.3 + 250 cents"},vertex_sdiat5:{frequencies:[261.6255653006,299.37374239667,302.26980244078,349.22823143301,391.99543598175,448.55379686399,452.89298412314,523.2511306012],description:"A vertex tetrachord from Chapter 5, 233.33 + 16.67 + 250 cents"},vicentino1:{frequencies:[261.6255653006,267.54129532085,273.59078691818,279.77706779472,286.10322937235,292.57243455474,295.8616864168,299.18791603519,305.95298478736,312.87102146627,319.94548489658,327.17991022208,330.85823737058,334.57791819083,342.14320575162,349.87955533643,357.79083283678,365.88099775759,374.15409293384,382.6142546815,391.26571058456,395.66452371628,400.11279059885,409.15991580663,418.41160951721,427.87249484695,437.54730686196,442.46644183113,447.44088028055,457.55816161244,467.90420651233,478.48419305869,489.30340830564,494.80441235385,500.36726155789,511.68128147674,523.2511306012],description:"Usual Archicembalo tuning, 31-tET plus D,E,G,A,B a 10th tone higher"},vicentino2:{frequencies:[261.6255653006,262.40966637115,273.59078691818,274.41074818102,279.77706779472,280.61556956011,292.57243455474,293.44928279173,305.95298478736,306.86993670158,312.87102146627,313.80870698104,327.17991022208,328.16047998243,342.14320575162,343.16862103779,349.87955533643,350.92815470883,365.88099775759,366.97755604579,374.15409293384,391.26571058456,392.4383479509,409.15991580663,410.38618254261,418.41160951721,419.66560148231,437.54730686196,438.85865161274,457.55816161244,458.92947695163,467.90420651233,469.30653196482,489.30340830564,490.7698679226,511.68128147674,523.2511306012],description:"Alternative Archicembalo tuning, lower 3 rows the same upper 3 rows 3/2 higher"},vicentino2q217:{frequencies:[261.6255653006,262.46259217279,273.59078691818,274.46609608433,279.77706779472,280.67216895906,292.57243455474,293.50847071582,305.95298478736,306.93183153514,312.87102146627,313.87199953275,327.17991022208,328.2266690608,342.14320575162,343.23783523487,349.87955533643,350.99893596542,365.88099775759,367.05157442308,374.15409293384,391.26571058456,392.51750150462,409.15991580663,410.46895395112,418.41160951721,419.7502468954,437.54730686196,438.9471656765,457.55816161244,459.02204178186,467.90420651233,469.40118981889,489.30340830564,490.86885203792,511.68128147674,523.2511306012],description:"Vicentino's second tuning, 217-tET version"},vicentino36:{frequencies:[261.6255653006,262.43934012943,273.37431312998,274.22463192287,279.93529690293,280.80602334765,292.50627485027,293.41610276971,305.64177427204,306.59245933664,312.97717714283,313.95067836072,327.03195662575,328.04917632434,341.71789064962,349.91912034749,351.00752840096,365.63284274659,366.77012764335,374.40803131735,375.5726110527,391.22147055517,392.4383479509,408.78994578219,410.06146948999,418.60090448096,419.90294514449,437.39889945791,438.75941205608,457.04105505291,458.46266117889,468.01003810189,469.46576276783,489.02683710225,490.54793493862,510.98743222773,523.2511306012],description:"Vicentino's second tuning of 1555"},victor_eb:{frequencies:[261.6255653006,276.45300885359,293.16631378471,311.00963644582,328.52867116285,348.83408706747,368.60401198904,391.83966133014,414.6795130731,439.03603741286,465.77732204887,492.79300649794,523.2511306012],description:"Equal beating Victorian piano temperament, interpr. by Bill Bremmer (improved)"},victorian:{frequencies:[261.6255653006,276.5429423948,293.32570896007,310.76776326996,328.29744538229,349.22823143301,368.92737853004,391.99543598175,414.58565256441,438.73106346722,465.89457252293,492.17459484008,523.2511306012],description:"Form of Victorian temperament (1885)"},vitale1:{frequencies:[261.6255653006,280.31310567921,294.32876096318,305.22982618403,327.03195662575,336.37572681506,343.38355445704,348.83408706747,373.75080757229,392.4383479509,420.46965851882,441.49314144476,457.84473927605,490.54793493862,504.56359022259,515.07533168556,523.2511306012],description:"Rami Vitale's 7-limit just scale"},vitale2:{frequencies:[261.6255653006,274.70684356563,294.32876096318,299.00064605783,305.22982618403,313.95067836072,336.37572681506,348.83408706747,366.27579142084,392.4383479509,412.06026534844,441.49314144476,448.50096908674,457.84473927605,470.92601754108,504.56359022259,523.2511306012],description:"Rami Vitale, inverse mode of vitale1"},vitale3:{frequencies:[261.6255653006,274.70684356563,280.31310567921,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,343.38355445704,348.83408706747,366.27579142084,373.75080757229,392.4383479509,412.06026534844,420.46965851882,441.49314144476,448.50096908674,457.84473927605,470.92601754108,490.54793493862,504.56359022259,515.07533168556,523.2511306012],description:"Superset of several Byzantine scales by Rami Vitale, TL 29-Aug-2001"},vogel_21:{frequencies:[261.6255653006,271.31540105247,279.06726965397,294.32876096318,305.22982618403,310.07474405997,313.95067836072,321.55899383997,330.74639366397,348.83408706747,361.75386806997,372.08969287196,392.4383479509,406.97310157871,413.43299207996,418.60090448096,428.74532511996,440.99519155196,465.11211608996,482.33849075995,496.11959049595,523.2511306012],description:"Martin Vogel's 21-tone Archytas system, see Divisions of the tetrachord"},vogelh_b:{frequencies:[261.6255653006,276.37000081643,292.73769384471,310.07474405997,327.54963108844,349.78078158391,367.49599295996,391.37619916626,413.43299207996,437.91808280662,465.11211608996,489.99465727995,523.2511306012],description:"Harald Vogel's temperament, van Eeken organ in Bunschoten, Immanuelkerk, 1992"},vogelh_fisk:{frequencies:[261.6255653006,274.01856817608,292.73769384471,312.85332572834,327.54963108844,349.78078158391,366.49445363528,391.37619916626,409.75340805561,437.91808280662,467.82492621575,489.99465727995,523.2511306012],description:"Modified meantone tuning of Fisk organ in Memorial Church at Stanford"},vogelh_hb:{frequencies:[261.6255653006,276.50527247638,293.79744652436,312.85332572834,329.92547760025,349.78078158391,369.82037393809,392.08397832814,413.47189899094,440.29822362186,467.82492621575,494.44133512215,523.2511306012],description:"Harald Vogel hybrid meantone (1984)"},vogelh_jakobi:{frequencies:[261.6255653006,275.2485073924,292.86986732103,310.4251397446,327.84547867349,349.70184487387,366.99801003998,391.46454285105,412.87276088221,438.2147004401,466.26912673157,490.54793493862,523.2511306012],description:"Harald Vogel's temperament for the Schnitger organ in St. Jakobi, Hamburg"},volans:{frequencies:[261.6255653006,288.78654445823,322.09885310804,352.06379107796,388.6137256405,429.95038611107,482.60299106564,523.2511306012],description:"African scale according to Kevin Volans 1/1=G"},vong:{frequencies:[261.6255653006,287.78812183066,324.77656382143,353.19451315581,392.4383479509,431.68218274599,476.53227965466,523.2511306012],description:"Vong Co Dan Tranh scale, Vietnam"},"vries19-72":{frequencies:[261.6255653006,271.89678302796,282.57123920205,293.66476791741,305.19382000629,314.13668154225,326.46944327063,339.28638158975,352.60650301302,366.44956000397,377.18735172911,391.99543598175,407.38487419079,423.37848741825,452.89298412314,470.6732130613,489.15147723638,508.3551866238,523.2511306012],description:"Leo de Vries 19/72 Through-Transposing-Tonality 18 tone scale"},"vries35-72":{frequencies:[261.6255653006,320.24370022528,326.46944327063,332.81622067851,339.28638158975,345.88232658126,352.60650301302,359.46139971304,366.44956000397,448.5538823653,457.27406033445,466.16376151809,475.22628419761,484.46499093218,493.88330125613,503.48470957687,513.27277840175,523.2511306012],description:"Leo de Vries 35/72 Through-Transposing-Tonality 17 tone scale"},"vries5-72":{frequencies:[261.6255653006,269.29177952703,274.52698453615,282.57123920205,288.06460709314,296.5055443788,302.26980244078,317.17549194805,332.81622067851,349.22823143301,366.44956000397,384.52011812375,403.48177901006,423.37848741825,444.25635547592,466.16376151809,489.15147723638,513.27277840175,523.2511306012],description:"Leo de Vries 5/72 Through-Transposing-Tonality 18 tone scale"},"vries6-31":{frequencies:[261.6255653006,292.57243455474,299.18791603519,334.57791819083,342.14320575162,382.6142546815,391.26571058456,437.54730686196,447.44088028055,500.36726155789,511.68128147674,523.2511306012],description:'Leo de Vries 6/31 TTT used in "For 31-tone organ" (1995)'},vulture:{frequencies:[261.6255653006,265.58852967049,269.02996542365,272.51599294435,276.04719319079,279.62414831161,283.24745441839,286.9177088442,290.63552324927,294.40151054717,298.21629835234,302.73351960911,306.6562716924,310.62985211059,314.65492307423,318.73214815075,322.86220682342,327.0457799678,331.28356479042,335.57625992643,339.9245807679,344.32924417279,349.54496173019,354.07428378691,358.66229781376,363.30976018416,368.01744541334,372.78612960355,377.61660747204,382.50967536449,387.46614872711,392.486844677,398.43202813578,403.59481739244,408.82450722915,414.12195980508,419.48805795853,424.92368633675,430.42975080549,436.00715908665,441.65684067409,447.37972696622,453.17677170128,460.0412514682,466.0023613576,472.04071122634,478.15730738573,484.35315820906,490.6292962557,496.98675620078,503.42659462849,509.94988192555,516.55769649554,523.2511306012],description:"Vulture temperament, g=475.542233, 5-limit"},walker_21:{frequencies:[261.6255653006,279.06726965397,290.69507255622,294.32876096318,299.00064605783,305.22982618403,310.07474405997,313.95067836072,327.03195662575,336.37572681506,348.83408706747,392.4383479509,406.97310157871,418.60090448096,436.04260883433,441.49314144476,448.50096908674,457.84473927605,465.11211608996,470.92601754108,490.54793493862,523.2511306012],description:'Douglas Walker, 1977, for "out of the fathomless dark/into the limitless light'},walkerr_11:{frequencies:[261.6255653006,291.47537246454,299.00064605783,333.11471138804,341.71502406609,380.70252730062,390.53145607553,435.08860262928,484.72943438718,497.2441172906,510.08190181294,523.2511306012],description:'Robert Walker, "Seven to Pi" scale, TL 09-07-2002'},wauchope:{frequencies:[261.6255653006,274.70684356563,305.22982618403,327.03195662575,366.27579142084,392.4383479509,436.04260883433,457.84473927605,523.2511306012],description:"Symmetrical 7-limit JI whole-half step scale, Ken Wauchope"},wendell1:{frequencies:[261.6255653006,276.25045813601,293.35468319005,310.78176509232,328.42642049784,348.83408706747,369.47972269069,391.8804287311,414.37568699689,438.92294511207,466.17264740545,492.63963050051,523.2511306012],description:"Robert Wendell's Natural Synchronous well-temperament (2003)"},wendell1r:{frequencies:[261.6255653006,276.25560153172,293.36810129327,310.78755172318,328.43721515437,348.83408706747,369.49186704867,391.89926583958,414.38340229758,438.93945576706,466.18132758477,492.65582273156,523.2511306012],description:"Rational version of wendell1 by Gene Ward Smith"},wendell2:{frequencies:[261.6255653006,276.37223575148,293.46077701205,310.91876490958,328.50868755512,348.91469434159,369.57235851938,392.00856887742,414.55835341999,438.92345217603,466.37814713124,492.76314493882,523.2511306012],description:"Robert Wendell's Very Mild Synchronous well-temperament (2003)"},werck1:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,306.59245933664,313.95067836072,327.03195662575,348.83408706747,363.36884069528,367.91095120397,392.4383479509,408.78994578219,418.60090448096,436.04260883433,441.49314144476,459.88868900496,465.11211608996,470.92601754108,490.54793493862,523.2511306012],description:"Werckmeister I (just intonation)"},werck3:{frequencies:[261.6255653006,275.62199471997,292.34127285051,310.07474405997,327.77163799145,348.83408706747,367.49599295996,391.11111150212,413.43299207996,437.02884834934,465.11211608996,491.65745674141,523.2511306012],description:"Andreas Werckmeister's temperament III (the most famous one, 1681)"},werck3_eb:{frequencies:[261.6255653006,275.62199471997,292.52927773082,310.07474405997,328.06371231954,348.83408706747,367.49599295996,391.41011079897,413.43299207996,437.41828331138,465.11211608996,492.10978071589,523.2511306012],description:"Werckmeister III equal beating version, 5/4 beats twice 3/2"},werck3_mod:{frequencies:[261.6255653006,275.62199471997,292.34127285051,310.07474405997,327.77163799145,348.83408706747,367.49599295996,391.11111150212,413.43299207996,437.02884834934,465.11211608996,490.82535372381,523.2511306012],description:"Modified Werckmeister III with B between E and F#, Nijsse (1997), organ Soest"},werck4:{frequencies:[261.6255653006,274.37997440822,293.00227310437,310.07474405997,328.14198392915,348.83408706747,367.49599295996,390.66969766777,411.5699614066,437.52264545758,467.21778431035,489.99465727995,523.2511306012],description:"Andreas Werckmeister's temperament IV"},werck5:{frequencies:[261.6255653006,276.55731914056,294.32876096318,311.12698372208,328.88393162803,350.01785633742,369.99442271164,392.4383479509,413.43299207996,440,466.69047534984,493.32589719545,523.2511306012],description:"Andreas Werckmeister's temperament V"},werck6:{frequencies:[261.6255653006,275.69145590816,291.35574317567,310.77945938738,328.70904358281,348.83408706747,368.91086905696,391.43977709097,413.53718386224,438.27872477707,466.16918908107,493.06356537421,523.2511306012],description:`Andreas Werckmeister's "septenarius" tuning VI`},werck6_dup:{frequencies:[261.6255653006,275.62199471997,291.49363009634,310.67551062492,328.56569462012,348.83408706747,368.92162485303,391.67947347082,413.43299207996,438.08759304581,466.01326570444,492.84854168382,523.2511306012],description:"Andreas Werckmeister's VI in the interpretation by Dupont (1935)"},werck_cl5:{frequencies:[261.6255653006,274.56549986328,292.86986732103,309.97737261399,327.84547867349,349.70184487387,366.99801003998,391.46454285105,412.14811800305,438.2147004401,466.26912673157,490.54793493862,523.2511306012],description:"Werckmeister Clavier temperament (Nothw. Anm.) Poletti reconstr. 1/5-comma"},werck_cl6:{frequencies:[261.6255653006,275.36250599118,293.11251278827,310.35057963607,328.38895179964,349.55706816887,367.91095120397,391.62667645325,413.31226430431,438.75941205608,466.0760911248,491.56462836305,523.2511306012],description:"Werckmeister Clavier temperament (Nothw. Anm.) Poletti reconstr. 1/6-comma"},werck_puzzle:{frequencies:[261.6255653006,272.52663052146,291.60349465796,306.59245933664,327.03195662575,347.47145391486,365.18568489875,389.71308164569,408.78994578219,436.04260883433,461.93263873387,490.54793493862,523.2511306012],description:"From Hypomnemata Musica, 1697, p. 49, 1/1=192, fifths tempered superparticular"},white:{frequencies:[261.6255653006,275.93321340298,289.72987407313,294.32876096318,305.22982618403,310.42486507835,327.03195662575,331.11985608357,343.38355445704,348.83408706747,367.91095120397,386.30649876417,392.4383479509,406.97310157871,413.89982010446,436.04260883433,441.49314144476,457.84473927605,465.11211608996,490.54793493862,496.67978412536,515.07533168556,523.2511306012],description:"Justin White's 22-tone scale based on Al-Farabi's tetrachord"},wicks:{frequencies:[261.6255653006,276.65728054629,293.45376109391,310.36444075595,329.26048109616,348.28499607284,369.54304125029,391.93835601961,414.48592121967,439.68064187634,465.04666232412,493.39072329352,523.2511306012],description:"Mark Wicks' equal beating temperament for organs (1887)"},wier_cl:{frequencies:[261.6255653006,276.16031892841,290.69507255622,305.22982618403,319.76457981184,348.83408706747,370.63621750918,392.4383479509,414.24047839262,436.04260883433,457.84473927605,479.64686971777,523.2511306012],description:"Danny Wier, ClownTone (2003)"},wiesse:{frequencies:[261.6255653006,277.49581689502,294.32876096318,312.18279369479,331.11985608357,348.83408706747,369.99442271164,392.4383479509,416.24372513446,441.49314144476,465.11211608996,496.67978412536,523.2511306012],description:"Von Wiesse's 1/2 Pyth. comma tuning"},wilson1:{frequencies:[261.6255653006,272.52663052146,279.06726965397,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,367.91095120397,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,459.88868900496,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Wilson's 19-tone Scott scale (1976)"},wilson11:{frequencies:[261.6255653006,271.31540105247,277.4816601673,291.35574317567,305.22982618403,312.16686768822,325.57848126297,332.97799220076,348.83408706747,366.27579142084,374.60024122586,392.4383479509,406.97310157871,416.22249025095,437.0336147635,457.84473927605,468.25030153232,488.36772189445,499.46698830115,523.2511306012],description:"Wilson 11-limit 19-tone scale, 1977"},wilson1t:{frequencies:[261.6255653006,273.34666024156,279.64601698606,292.92954243175,306.05308604033,313.10617410217,327.13365148064,334.67254769546,349.66622272551,366.27579142084,374.71672979763,391.50442319155,409.04422481132,418.47077311482,437.21869500104,457.98711402938,468.54156606881,489.53271107931,500.81414097667,523.2511306012],description:"Wilson's Scott scale, wilson1, in minimax minerva tempering"},wilson2:{frequencies:[261.6255653006,271.31540105247,279.06726965397,294.32876096318,305.22982618403,313.95067836072,327.03195662575,339.14425131559,348.83408706747,361.75386806997,372.08969287196,392.4383479509,406.97310157871,418.60090448096,441.49314144476,457.84473927605,470.92601754108,490.54793493862,508.71637697339,523.2511306012],description:"Wilson 19-tone, 1975"},wilson3:{frequencies:[261.6255653006,274.70684356563,286.15296204753,294.32876096318,305.22982618403,313.95067836072,327.03195662575,343.38355445704,348.83408706747,366.27579142084,381.53728273004,392.4383479509,412.06026534844,429.2294430713,441.49314144476,457.84473927605,470.92601754108,490.54793493862,515.07533168556,523.2511306012],description:"Wilson 19-tone"},wilson5:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,353.19451315581,367.91095120397,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,441.49314144476,459.88868900496,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Wilson's 22-tone 5-limit scale"},wilson7:{frequencies:[261.6255653006,271.31540105247,279.06726965397,290.69507255622,294.32876096318,305.22982618403,313.95067836072,327.03195662575,339.14425131559,348.83408706747,353.19451315581,367.91095120397,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,441.49314144476,457.84473927605,470.92601754108,490.54793493862,508.71637697339,523.2511306012],description:"Wilson's 22-tone 7-limit 'marimba' scale"},wilson7_2:{frequencies:[261.6255653006,263.718569823,274.70684356563,286.15296204753,294.32876096318,305.22982618403,313.95067836072,327.03195662575,329.64821227876,343.38355445704,353.19451315581,366.27579142084,376.74081403286,392.4383479509,408.78994578219,412.06026534844,436.04260883433,439.53094970501,457.84473927605,470.92601754108,490.54793493862,494.47231841813,523.2511306012],description:"Wilson 7-limit scale"},wilson7_3:{frequencies:[261.6255653006,267.90457886781,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,334.88072358477,348.83408706747,353.19451315581,372.08969287196,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,465.11211608996,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Wilson 7-limit scale"},wilson7_4:{frequencies:[261.6255653006,271.31540105247,279.06726965397,290.69507255622,294.32876096318,305.22982618403,313.95067836072,327.03195662575,339.14425131559,348.83408706747,361.75386806997,372.08969287196,387.59343007496,392.4383479509,406.97310157871,418.60090448096,436.04260883433,441.49314144476,457.84473927605,470.92601754108,490.54793493862,508.71637697339,523.2511306012],description:"Wilson 7-limit 22-tone scale XH 3, 1975"},wilson_17:{frequencies:[261.6255653006,275.93321340298,290.69507255622,294.32876096318,310.42486507835,327.03195662575,331.11985608357,348.83408706747,367.91095120397,372.50983809402,392.4383479509,413.89982010446,436.04260883433,441.49314144476,465.11211608996,490.54793493862,496.67978412536,523.2511306012],description:"Wilson's 17-tone 5-limit scale"},wilson_31:{frequencies:[261.6255653006,265.7783520514,271.31540105247,279.06726965397,285.40970760065,294.32876096318,299.00064605783,305.22982618403,313.95067836072,321.08592105074,327.03195662575,332.22294006425,339.14425131559,348.83408706747,354.37113606854,361.75386806997,372.08969287196,380.54627680087,392.4383479509,398.6675280771,406.97310157871,418.60090448096,428.11456140098,441.49314144476,448.50096908674,457.84473927605,470.92601754108,481.6288815761,490.54793493862,498.33441009638,508.71637697339,523.2511306012],description:"Wilson 11-limit 31-tone scale XH 3, 1975"},wilson_41:{frequencies:[261.6255653006,265.7783520514,271.31540105247,275.62199471997,279.06726965397,285.40970760065,290.69507255622,294.32876096318,299.00064605783,305.22982618403,310.07474405997,313.95067836072,321.08592105074,327.03195662575,331.11985608357,336.37572681506,343.38355445704,348.83408706747,354.37113606854,361.75386806997,367.49599295996,372.08969287196,380.54627680087,387.59343007496,392.4383479509,398.6675280771,406.97310157871,413.43299207996,418.60090448096,428.11456140098,436.04260883433,441.49314144476,448.50096908674,457.84473927605,465.11211608996,470.92601754108,481.6288815761,490.54793493862,496.67978412536,504.56359022259,515.07533168556,523.2511306012],description:"Wilson 11-limit 41-tone scale XH 3, 1975"},wilson_alessandro:{frequencies:[261.6255653006,265.58571790036,269.80136421624,270.50397193556,275.93321340298,278.232656848,284.55612632182,286.15296204753,288.53757006459,294.32876096318,295.09524211152,303.52653474327,304.3169684275,305.22982618403,309.14739649778,314.76825825228,321.92208230347,324.60476632267,327.03195662575,331.98214737546,337.2517052703,340.06213614756,343.38355445704,347.79082106,351.18772614924,354.11429053382,359.73515228832,365.180362113,367.91095120397,370.97687579734,379.40816842909,386.30649876417,391.2646736925,392.4383479509,393.46032281536,404.70204632437,405.75595790334,413.89982010446,417.348985272,419.69101100305,429.2294430713,432.80635509689,441.49314144476,442.64286316727,449.66894036041,456.47545264125,457.84473927605,463.72109474667,472.15238737843,482.88312345521,486.907149484,490.54793493862,494.63583439645,505.87755790546,515.07533168556,521.68623159,523.2511306012],description:"D'Alessandro, genus [3 3 3 5 7 11 11] plus 8 pigtails, XH 12, 1989"},wilson_bag:{frequencies:[261.6255653006,294.32876096318,318.85615771011,349.51540364377,392.4383479509,425.14154361347,466.02053819169,523.2511306012],description:"Erv's bagpipe, mar '97, after Theodore Podnos (37-39)."},wilson_class:{frequencies:[261.6255653006,272.52663052146,293.02063313667,305.22982618403,327.03195662575,348.83408706747,366.27579142084,381.53728273004,418.60090448096,436.04260883433,457.84473927605,488.36772189445,523.2511306012],description:"Class Scale, Erv Wilson, 9 july 1967"},wilson_dia1:{frequencies:[261.6255653006,269.10058145205,277.01530443593,285.40970760065,294.32876096318,303.82323712328,313.95067836072,324.77656382143,336.37572681506,348.83408706747,362.25078272391,371.78369805875,381.83190611439,392.4383479509,403.65087217807,415.52295665389,428.11456140098,441.49314144476,455.73485568492,470.92601754108,487.16484573215,504.56359022259,523.2511306012],description:"Wilson Diaphonic cycles, tetrachordal form"},wilson_dia2:{frequencies:[261.6255653006,268.51044859798,275.76748774928,283.42769574232,291.52562990638,300.09991313892,309.19384990071,318.85615771011,329.14184021688,340.11323489078,351.84127747322,364.40703738298,377.90359432309,388.70083987518,400.13321751856,412.25846653428,425.14154361347,438.85578695585,453.48431318771,469.12170329763,485.87604984397,503.87145909745,523.2511306012],description:"Wilson Diaphonic cycle, conjunctive form"},wilson_dia3:{frequencies:[261.6255653006,268.51044859798,275.76748774928,283.42769574232,291.52562990638,300.09991313892,309.19384990071,318.85615771011,329.14184021688,340.11323489078,351.84127747322,364.40703738298,377.90359432309,392.4383479509,403.65087217807,415.52295665389,428.11456140098,441.49314144476,455.73485568492,470.92601754108,487.16484573215,504.56359022259,523.2511306012],description:"Wilson Diaphonic cycle on 3/2"},wilson_dia4:{frequencies:[261.6255653006,269.10058145205,277.01530443593,285.40970760065,294.32876096318,303.82323712328,313.95067836072,324.77656382143,336.37572681506,348.83408706747,358.01393146398,381.83190611439,377.90359432309,388.70083987518,400.13321751856,412.25846653428,425.14154361347,438.85578695585,453.48431318771,469.12170329763,485.87604984397,503.87145909745,523.2511306012],description:"Wilson Diaphonic cycle on 4/3"},wilson_duo:{frequencies:[261.6255653006,271.31540105247,279.06726965397,286.15296204753,294.32876096318,305.22982618403,313.95067836072,327.03195662575,339.14425131559,348.83408706747,361.75386806997,367.91095120397,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,441.49314144476,457.84473927605,470.92601754108,490.54793493862,508.71637697339,523.2511306012],description:"Wilson 'duovigene'"},wilson_enh:{frequencies:[261.6255653006,264.37951861955,279.06726965397,348.83408706747,392.4383479509,396.56927792933,418.60090448096,523.2511306012],description:"Wilson's Enharmonic & 3rd new Enharmonic on Hofmann's list of superp. 4chords"},wilson_enh2:{frequencies:[261.6255653006,265.7783520514,275.62199471997,348.83408706747,392.4383479509,398.6675280771,413.43299207996,523.2511306012],description:"Wilson's 81/64 Enharmonic, a strong division of the 256/243 pyknon"},wilson_facet:{frequencies:[261.6255653006,271.31540105247,274.70684356563,290.69507255622,294.32876096318,305.22982618403,313.95067836072,327.03195662575,339.14425131559,348.83408706747,353.19451315581,366.27579142084,387.59343007496,392.4383479509,406.97310157871,412.06026534844,436.04260883433,452.19233508746,457.84473927605,470.92601754108,488.36772189445,508.71637697339,523.2511306012],description:"Wilson study in 'conjunct facets', Hexany based"},wilson_gh1:{frequencies:[261.6255653006,286.54684077898,313.84200313831,343.73718179912,398.2573899082,436.19359890902,477.74343791599,523.2511306012],description:"Golden Horagram nr.1: 1phi+0 / 7phi+1"},wilson_gh11:{frequencies:[261.6255653006,294.51148904212,316.87124012705,356.70145865606,383.78276711707,432.02365977685,464.82353976398,523.2511306012],description:"Golden Horagram nr.11: 1phi+0 / 3phi+1"},wilson_gh2:{frequencies:[261.6255653006,290.51361927671,322.59142140135,358.21117585067,382.16527586729,424.3630293795,471.22015545621,523.2511306012],description:"Golden Horagram nr.2: 1phi+0 / 6phi+1"},wilson_gh50:{frequencies:[261.6255653006,270.80964219588,280.31611759965,306.81496952381,317.58537244461,347.60736272384,359.80973785756,372.44046183271,407.64801512355,421.95805149354,461.8466031062,478.05922145,523.2511306012],description:"Golden Horagram nr.50: 7phi+2 / 17phi+5"},wilson_helix:{frequencies:[261.6255653006,283.42769574232,294.32876096318,305.22982618403,327.03195662575,348.83408706747,359.73515228832,392.4383479509,425.14154361347,436.04260883433,457.84473927605,479.64686971777,523.2511306012],description:"Wilson's Helix Song, see David Rosenthal, Helix Song, XH 7&8, 1979. Also Secor, 1964"},wilson_hypenh:{frequencies:[261.6255653006,266.38239376061,271.31540105247,348.83408706747,392.4383479509,399.57359064092,406.97310157871,523.2511306012],description:"Wilson's Hyperenharmonic, this genus has a CI of 9/7"},wilson_l1:{frequencies:[261.6255653006,269.80136421624,274.70684356563,286.15296204753,294.32876096318,305.22982618403,314.76825825228,327.03195662575,337.2517052703,343.38355445704,359.73515228832,366.27579142084,377.72190990274,392.4383479509,404.70204632437,419.69101100305,431.68218274599,449.66894036041,457.84473927605,472.15238737843,490.54793493862,503.62921320365,523.2511306012],description:"Wilson 11-limit scale"},wilson_l2:{frequencies:[261.6255653006,267.07609791103,279.79400733536,287.78812183066,294.32876096318,305.22982618403,314.76825825228,327.03195662575,335.75280880244,348.83408706747,359.73515228832,373.05867644715,381.53728273004,392.4383479509,411.12588832951,419.69101100305,436.04260883433,447.67041173658,457.84473927605,479.64686971777,490.54793493862,503.62921320365,523.2511306012],description:"Wilson 11-limit scale"},wilson_l3:{frequencies:[261.6255653006,269.80136421624,274.70684356563,286.15296204753,294.32876096318,305.22982618403,313.95067836072,327.03195662575,332.97799220076,343.38355445704,359.73515228832,366.27579142084,381.53728273004,392.4383479509,406.97310157871,418.60090448096,429.2294430713,441.49314144476,457.84473927605,470.92601754108,490.54793493862,499.46698830115,523.2511306012],description:"Wilson 11-limit scale"},wilson_l4:{frequencies:[261.6255653006,267.07609791103,274.70684356563,290.69507255622,299.00064605783,305.22982618403,313.95067836072,327.03195662575,339.14425131559,348.83408706747,356.10146388137,366.27579142084,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,488.36772189445,508.71637697339,523.2511306012],description:"Wilson 11-limit scale"},wilson_l5:{frequencies:[261.6255653006,267.07609791103,279.79400733536,285.40970760065,299.00064605783,305.22982618403,313.95067836072,327.03195662575,332.97799220076,348.83408706747,356.10146388137,366.27579142084,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,479.64686971777,488.36772189445,508.71637697339,523.2511306012],description:"Wilson 11-limit scale"},wilson_l6:{frequencies:[261.6255653006,267.57160087561,277.4816601673,285.40970760065,294.32876096318,305.22982618403,312.16686768822,327.03195662575,332.97799220076,348.83408706747,356.76213450082,369.97554688974,381.53728273004,392.4383479509,406.97310157871,416.22249025095,436.04260883433,443.97065626768,457.84473927605,475.68284600109,490.54793493862,499.46698830115,523.2511306012],description:"Wilson 1 3 7 9 11 15 eikosany plus 9/8 and tritone. Used Stearns: Jewel"},window:{frequencies:[261.6255653006,272.52663052146,290.69507255622,294.32876096318,297.67175429757,306.59245933664,327.03195662575,334.88072358477,348.83408706747,363.36884069528,367.91095120397,372.08969287196,376.74081403286,392.4383479509,408.78994578219,418.60090448096,446.50763144636,459.88868900496,465.11211608996,470.92601754108,502.32108537715,523.2511306012],description:"Window lattice"},wonder1:{frequencies:[261.6255653006,272.72256190885,277.86237426839,283.09905309511,288.43442562998,293.8703485525,299.4087202614,312.10830899518,317.99039712482,323.98334274799,330.08923137594,336.31019538088,342.64839962317,357.18202566262,363.91358676728,370.77201292014,377.75969724053,384.87907140314,392.13262172187,408.76514672187,416.46885901676,424.31776026786,432.3145818485,440.46211650535,448.76319953449,467.79774494453,476.61400354229,485.59641603135,494.74811665626,504.07229015717,513.57219283465,523.2511306012],description:"Wonder Scale, gen=~233.54 cents, 8/7+1029/1024^7/25, LS 12:14:18:21, M.Schulter"},wonder36:{frequencies:[261.6255653006,271.89678302796,277.18263097687,282.57123920205,288.06460709314,293.66476791741,299.37379946195,311.12698372208,317.17549194805,323.3415889232,329.62755691287,336.03572815422,342.56848033562,356.01745236555,362.93866220634,369.99442271164,377.18735172911,384.52011812375,391.99543598175,407.38487419079,415.30469757995,423.37848741825,431.60923940535,440,448.5538823653,466.16376151809,475.22628419761,484.46499093218,493.88330125613,503.48470957687,513.27277840175,523.2511306012],description:"Wonder Scale, 36-tET version"},wronski:{frequencies:[261.6255653006,277.97716313189,294.32876096318,308.86351459099,327.03195662575,348.83408706747,370.63621750918,392.4383479509,416.96574469783,441.49314144476,463.29527188648,494.18162334558,523.2511306012],description:`Wronski's scale, from Jocelyn Godwin, "Music and the Occult", p. 105.`},wurschmidt:{frequencies:[261.6255653006,275.93321340298,294.32876096318,313.95067836072,331.11985608357,353.19451315581,367.91095120397,392.4383479509,413.89982010446,441.49314144476,470.92601754108,490.54793493862,523.2511306012],description:"W\xEF\xBF\xBDrschmidt's normalised 12-tone system"},wurschmidt1:{frequencies:[261.6255653006,272.52663052146,279.06726965397,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,363.36884069528,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,465.11211608996,490.54793493862,502.32108537715,523.2511306012],description:"W\xEF\xBF\xBDrschmidt-1 19-tone scale"},wurschmidt2:{frequencies:[261.6255653006,272.52663052146,282.55561052465,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,363.36884069528,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,465.11211608996,484.4917875937,502.32108537715,523.2511306012],description:"W\xEF\xBF\xBDrschmidt-2 19-tone scale"},wurschmidt_31:{frequencies:[261.6255653006,267.90457886781,272.52663052146,279.06726965397,287.4304306281,294.32876096318,301.39265122629,306.59245933664,313.95067836072,319.36714514233,327.03195662575,334.88072358477,340.65828815182,348.83408706747,357.20610515709,363.36884069528,376.74081403286,383.2405741708,392.4383479509,401.85686830172,408.78994578219,418.60090448096,428.6473261885,436.04260883433,446.50763144636,454.2110508691,465.11211608996,476.27480687611,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"W\xEF\xBF\xBDrschmidt's 31-tone system"},wurschmidt_31a:{frequencies:[261.6255653006,267.90457886781,272.52663052146,279.06726965397,287.4304306281,294.32876096318,301.39265122629,306.59245933664,313.95067836072,319.36714514233,327.03195662575,334.88072358477,340.65828815182,348.83408706747,357.20610515709,363.36884069528,372.08969287196,383.2405741708,392.4383479509,401.85686830172,408.78994578219,418.60090448096,428.6473261885,436.04260883433,446.50763144636,454.2110508691,465.11211608996,476.27480687611,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"W\xEF\xBF\xBDrschmidt's 31-tone system with alternative tritone"},wurschmidt_53:{frequencies:[261.6255653006,264.89588486686,267.90457886781,272.52663052146,275.93321340298,279.06726965397,282.55561052465,287.4304306281,290.69507255622,294.32876096318,297.67175429757,301.39265122629,306.59245933664,310.07474405997,313.95067836072,319.36714514233,321.48549464138,327.03195662575,331.11985608357,334.88072358477,340.65828815182,344.91651675372,348.83408706747,353.19451315581,357.20610515709,363.36884069528,367.91095120397,372.08969287196,376.74081403286,383.2405741708,387.59343007496,392.4383479509,396.89567239676,401.85686830172,408.78994578219,413.43299207996,418.60090448096,425.82286018978,428.6473261885,436.04260883433,441.49314144476,446.50763144636,454.2110508691,459.88868900496,465.11211608996,470.92601754108,476.27480687611,484.4917875937,490.54793493862,496.11959049595,502.32108537715,510.98743222773,516.79124009995,523.2511306012],description:"W\xEF\xBF\xBDrschmidt's 53-tone system"},wurschmidt_temp:{frequencies:[261.6255653006,270.6876810201,276.46178051834,282.35904862511,288.38211267756,294.53365605714,300.81641938515,307.23320174366,313.78686192261,320.48031969341,327.31655710978,338.6540596739,345.87796520471,353.25596548096,360.79134753214,368.48746850413,376.34775715481,384.37571538166,392.57491978195,400.94902556208,409.5017589506,423.68596790742,432.72370810117,441.95423435346,451.38165902684,461.01018486849,470.84409628664,480.88777706987,491.14570185547,501.62244073019,512.32266126632,523.2511306012],description:"W\xEF\xBF\xBDrschmidt temperament, 5-limit, g=387.744375, 5-limit"},"t-side":{frequencies:[261.6255653006,272.52663052146,279.06726965397,294.32876096318,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,418.60090448096,436.04260883433,490.54793493862,523.2511306012],description:"Tau-on-Side"},"t-side2":{frequencies:[261.6255653006,294.32876096318,306.59245933664,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,436.04260883433,459.88868900496,470.92601754108,490.54793493862,523.2511306012],description:"Tau-on-Side opposite"},tagawa_55:{frequencies:[261.6255653006,277.01530443593,277.97716313189,279.06726965397,280.31310567921,281.75060878526,283.42769574232,285.40970760065,287.78812183066,290.69507255622,294.32876096318,296.50897400735,299.00064605783,301.87565226992,305.22982618403,307.79478270659,309.19384990071,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,348.83408706747,356.76213450082,359.73515228832,362.25078272391,366.27579142084,369.35373924791,370.63621750918,373.75080757229,377.90359432309,380.54627680087,383.71749577421,392.4383479509,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,442.75095666255,444.76346101102,448.50096908674,453.48431318771,457.84473927605,461.69217405988,465.11211608996,470.92601754108,475.68284600109,479.64686971777,483.00104363188,485.87604984397,488.36772189445,490.54793493862,492.47165233054,494.18162334558,523.2511306012],description:"Rick Tagawa, 17-limit diamond subset with good 72-tET approximation, 2003"},tamil:{frequencies:[261.6255653006,275.62199471997,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,331.11985608357,348.83408706747,353.19451315581,372.50983809402,387.59343007496,392.4383479509,413.43299207996,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,496.67978412536,523.2511306012],description:"Possible Tamil sruti scale. Alternative 11th sruti is 45/32 or 64/45"},tamil_vi:{frequencies:[261.6255653006,275.62199471997,290.69507255622,310.07474405997,327.03195662575,348.83408706747,367.91095120397,387.59343007496,413.43299207996,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Vilarippalai scale in Tamil music, Vidyasankar Sundaresan"},tamil_vi2:{frequencies:[261.6255653006,275.62199471997,290.69507255622,310.07474405997,327.03195662575,348.83408706747,367.49599295996,387.59343007496,413.43299207996,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Vilarippalai scale with 1024/729 tritone"},tanaka:{frequencies:[261.6255653006,272.52663052146,275.93321340298,279.06726965397,290.69507255622,294.32876096318,306.59245933664,313.95067836072,327.03195662575,331.11985608357,344.91651675372,348.83408706747,353.19451315581,363.36884069528,367.91095120397,372.08969287196,387.59343007496,392.4383479509,408.78994578219,418.60090448096,436.04260883433,441.49314144476,459.88868900496,465.11211608996,470.92601754108,490.54793493862,523.2511306012],description:"26-note choice system of Shoh\xEF\xBF\xBD Tanaka, Studien i.G.d. reinen Stimmung (1890)"},tanbur:{frequencies:[261.6255653006,268.33391312882,275.39533189537,282.83844897362,290.69507255622,299.00064605783,306.66732929008,314.73752216614,323.24394168414,332.22294006425,341.71502406609,351.76546595039,523.2511306012],description:"Sub-40 tanbur scale"},tansur:{frequencies:[261.6255653006,275.71279889585,293.19126194179,310.07474405997,328.21516866261,348.83408706747,367.61706537823,391.78834765065,413.56919813705,438.48689188122,465.11211608996,491.022754507,523.2511306012],description:"William Tans'ur temperament from A New Musical Grammar (1746) p. 73"},tartini_7:{frequencies:[261.6255653006,294.32876096318,313.95067836072,367.91095120397,392.4383479509,418.60090448096,490.54793493862,523.2511306012],description:"Tartini (1754) with 2 neochromatic tetrachords, 1/1=d, Minor Gipsy (Slovakia)"},taylor_g:{frequencies:[261.6255653006,274.70684356563,287.78812183066,294.32876096318,313.95067836072,353.19451315581,366.27579142084,392.4383479509,412.06026534844,418.60090448096,431.68218274599,470.92601754108,523.2511306012],description:"Gregory Taylor's Dutch train ride scale based on pelog_schmidt"},taylor_n:{frequencies:[261.6255653006,275.93341798027,292.67158636845,310.42509491746,327.40170814054,348.83408706747,367.9112241576,391.33200541501,413.90012676351,437.76975193523,465.63764214343,491.10256480205,523.2511306012],description:"Nigel Taylor's Circulating Balanced temperament (20th cent.)"},telemann:{frequencies:[261.6255653006,264.94361147373,271.70648167539,275.15237829755,278.64197723942,282.17583275232,289.3785657319,293.0485888979,296.76515515861,300.52885648597,304.34029066685,308.20006306951,312.10878854255,316.06708432391,324.13491490251,328.24573110938,332.40868242763,336.62443200122,345.21700307457,349.59519124833,354.02890545793,363.06573983159,367.67029324081,372.33324354561,377.05533136015,386.67993129161,391.58396987353,396.55020354877,406.67242132093,411.83001550364,417.05301810033,422.34226102699,433.12283887627,438.61588607285,444.17860098504,449.81186203693,461.29362042034,467.14394139401,473.06846134744,485.14386048744,491.29666030217,497.52749252881,503.83734680745,516.69814597997,523.2511306012],description:"G.Ph. Telemann (1767). 55-tET interpretation of Klang- und Intervallen-Tafel"},telemann_28:{frequencies:[261.6255653006,264.94361147373,275.15237829755,278.64197723942,293.0485888979,296.76515515861,308.20006306951,312.10878854255,328.24573110938,332.40868242763,345.21700307457,349.59519124833,354.02890545793,367.67029324081,372.33324354561,386.67993129161,391.58396987353,396.55020354877,406.67242132093,411.83001550364,438.61588607285,444.17860098504,461.29362042034,467.14394139401,473.06846134744,491.29666030217,497.52749252881,516.69814597997,523.2511306012],description:"Telemann's tuning as described on Sorge's monochord, 1746, 1748, 1749"},"temes-mix":{frequencies:[261.6255653006,306.31659399917,323.38698268281,342.47239171077,361.55773069062,378.62819763364,399.72843132859,423.31905787312,446.91000942727,523.2511306012],description:"Temes' 5-tone Phi scale mixed with its octave inverse"},"temes-ur":{frequencies:[261.6255653006,306.31659399917,323.38703872151,342.47239171077,361.55773069062,423.31905787312],description:"Temes' Ur 5-tone phi scale"},temes:{frequencies:[261.6255653006,306.31659399917,323.38703872151,342.47239171077,361.55773069062,423.31905787312,495.63057556553,523.2511306012,554.13187513888,585.01259700885,684.94462120932],description:"Temes' 5-tone Phi scale / 2 cycle"},"temes2-mix":{frequencies:[261.6255653006,306.31659399917,323.38698268281,342.47239171077,361.55773069062,399.72843132859,423.31905787312,468.0102705885,495.63057556553,523.2511306012,552.41124604023,585.01259700885,646.77396536561,684.94438778203,757.25639526728,799.45686265718,846.63811574624,893.82001885454,1046.5022612024],description:"Temes' 2 cycle Phi scale mixed with its 4/1 inverse"},temp10coh:{frequencies:[261.6255653006,279.06726965397,299.10339764541,320.57805584394,343.5945271479,368.2635494613,394.70435354475,423.05284121745,453.57582505819,488.36772189445,523.2511306012],description:"Differential coherent 10-tone scale, OdC, 2003"},temp10ebss:{frequencies:[261.6255653006,280.43397904206,300.58585223371,322.17714382919,345.31067040124,370.09659148016,396.65293718743,425.1061627261,455.59176355181,488.25490599611,523.2511306012],description:`Cycle of 10 equal "beating" 15/14's`},temp11ebst:{frequencies:[261.6255653006,278.68301283272,296.80966039395,316.07252488244,336.70993118161,358.64093492832,381.94662420398,406.71316497313,433.24697173408,461.44397806515,491.40843569917,523.2511306012],description:"Cycle of 11 equal beating 9/7's"},temp12coh3:{frequencies:[261.6255653006,279.8393060116,294.68135606466,311.32770136359,332.21069717879,353.56473801237,370.2386298036,397.61708850394,418.97112933752,440.1984563065,471.2874275201,496.80305467842,523.2511306012],description:"Differential coherent scale, interval=3, OdC, 2003"},temp12ebf:{frequencies:[261.6255653006,277.18807786937,293.58315284916,311.09098010692,329.5354160273,349.23174343306,369.98176018664,391.84186131702,415.18563115404,439.77824302677,466.03998256716,493.70667148145,523.2511306012],description:"Equal beating temperament tuned by The Best Factory Tuners (1840)"},temp12ebf4:{frequencies:[261.6255653006,276.98801737971,293.51517393789,310.79793252689,329.39098365485,348.83408706747,369.75126958642,391.78747833067,414.83115644933,439.62189128662,465.54602917011,493.43560586205,523.2511306012],description:"Eleven equal beating fifths and just fourth"},temp12ebfo:{frequencies:[261.6255653006,277.20265787963,293.64844512428,311.16011036869,329.64835309433,349.33484978517,370.11921182839,392.06266066657,415.42830219132,440.09698059047,466.36447845344,494.0968438935,523.62658899088],description:"Equal beating fifths and fifth beats twice octave at C"},temp12ebfp:{frequencies:[261.6255653006,277.75307788644,293.77513637875,310.82931496301,329.94340332986,349.12935317325,370.63270249518,391.99544730302,416.18671544528,440.21980402758,465.80107112682,494.47220378931,523.2511306012],description:"All fifths except G#-Eb beat same as 700 c. C-G"},temp12ebfr:{frequencies:[261.6255653006,277.1880780098,293.58315312731,311.09097992515,329.53543943235,349.23174457993,369.98176152553,391.84186168221,415.185630746,439.77824342227,466.03998361904,493.70667287983,523.2511306012],description:"Exact values of equal beating temperament of Best Factory Tuners (1840)"},temp12ep:{frequencies:[261.6255653006,277.19910487213,293.6996776193,311.18246278326,329.70593120198,349.3320268423,370.12638880276,392.15855510068,415.50221189151,440.23542223935,466.44090588941,494.20629608476,523.62445363767],description:"Pythagorean comma distributed equally over octave and fifth: 1/19-Pyth comma"},temp12fo1o:{frequencies:[261.6255653006,277.20349049726,293.7089710611,311.19723286579,329.72679517909,349.35966199273,370.1615231373,392.20198585541,415.5548023839,440.29810917508,466.51470234738,494.29230838881,523.72386870485],description:"Fifth beats same octave opposite"},temp12fo2o:{frequencies:[261.6255653006,277.19623399848,293.69359242342,311.17279259662,329.69226891672,349.31393351076,370.10338107372,392.13011658806,415.46777521802,440.19437666896,466.39258399594,494.14997995304,523.55935978973],description:"Fifth beats twice octave opposite"},temp12p10:{frequencies:[261.6255653006,277.12003622197,293.53214922797,310.91625060765,329.32990524605,349.3071136959,369.493381814,391.90691363044,415.11714643072,439.70197837153,465.74281849401,493.32589719545,523.2511306012],description:"1/10-Pyth. comma well temperament"},temp12p6:{frequencies:[261.6255653006,275.62199471997,293.00227310437,310.07474405997,328.14198392915,349.6228209638,367.9112241576,391.5530240856,413.43299207996,438.51190905657,466.16376151809,491.10256480205,523.2511306012],description:"Modified 1/6-Pyth. comma temperament"},temp12p8:{frequencies:[261.6255653006,277.02617059261,293.33333347996,310.60041853231,328.88393162803,349.42547049952,369.36822764145,391.77416758435,414.83597850347,439.25532436715,465.90062756558,492.49097043477,523.2511306012],description:"1/8-Pyth. comma well temperament"},temp12p8a:{frequencies:[261.6255653006,276.55731914056,293.33333347996,311.12698372208,328.88393162803,349.42547049952,368.74309237173,391.77416758435,414.83597850347,439.25532436715,466.69047534984,492.49097043477,523.2511306012],description:"1/8-Pyth. comma well temperament, consecutive just fifths"},temp12s17:{frequencies:[261.6255653006,275.41266079541,292.61316553779,309.9334225479,327.2710181906,348.78108411875,367.16108497228,391.29294726693,413.18177371806,437.63868343995,464.97078294553,490.98112850332,523.2511306012],description:'4/17th synt. comma "well"-temperament. OdC 1999'},temp12s3:{frequencies:[261.6255653006,275.79485124716,293.07576161921,310.19140758515,326.99095182327,348.87783040382,367.77258074571,390.81668391305,413.640406907,437.79703699716,465.22877230071,490.42492909292,523.2511306012],description:'1/3 synt. comma "well"-temperament. OdC 1999'},temp12septendec:{frequencies:[261.6255653006,277.01530443593,293.31032234393,310.5638707171,328.83233370046,348.17541215342,368.65631875068,390.34198455955,413.30334035457,437.61515184999,463.35732874365,494.18162334558,523.2511306012],description:"Scale with 18/17 steps"},temp12w2b:{frequencies:[261.6255653006,276.80621914251,293.38957467182,310.9374037046,329.12408537692,349.33498699812,369.32540968366,391.68699838314,414.83365420901,439.33301386008,466.03043161756,492.93477894539,523.2511306012],description:"The fifths on white keys beat twice the amount of fifths on black keys"},temp15coh:{frequencies:[261.6255653006,273.98642352939,286.93424587686,300.52595924487,314.76156220527,329.6715499436,345.28562122078,360.48992106995,377.61407292725,395.54746439596,414.33033691342,434.93480826785,455.53927928881,477.11963158959,499.65025190386,523.2511306012],description:"Differential coherent 15-tone scale, OdC, 2003"},temp15ebmt:{frequencies:[261.6255653006,274.13344448045,287.10161388969,300.54701305042,315.02372625978,330.03318193885,345.59498492211,361.72946206059,379.10151766291,397.1128647533,415.78702800292,435.14840215297,455.99486887387,477.60848441971,500.01748339385,523.2511306012],description:"Cycle of 15 equal beating minor thirds"},temp15ebsi:{frequencies:[261.6255653006,274.09084013406,287.01483652929,300.41443756554,314.84183942382,329.80016763418,345.30896502873,361.38848559819,378.7013656391,396.65136316555,415.2619179078,434.55734100747,455.33280077531,476.87279531786,499.20546063174,523.2511306012],description:"Cycle of 15 equal beating major sixths"},temp15mt:{frequencies:[261.6255653006,272.10155294862,290.46827626332,302.09918118188,314.19580976213,326.77681046955,348.83408706747,362.80207077951,377.32935907335,392.4383479509,418.92774655891,435.70241417719,453.14877154631,471.29371440761,503.10581234929,523.2511306012],description:"Cycle of 15 minor thirds, Petr Parizek"},temp16d3:{frequencies:[261.6255653006,272.52663052146,287.69189096389,299.67905363019,312.16568143019,325.17258353382,338.72144179457,352.83483584176,372.46899992671,387.98854005196,404.15472995283,420.99451113006,438.53594735503,462.93911228358,482.22824196207,502.32108537715,523.2511306012],description:"Cycle of 16 thirds tempered by 1/3 small diesis"},temp16d4:{frequencies:[261.6255653006,271.36369423603,291.82218013836,302.68427617679,313.95067836072,325.63643364742,337.75715313333,350.32902355546,376.74081403286,390.76372105392,405.30858212106,420.39482899491,436.04260883433,468.91646607712,486.37029938793,504.47379566792,523.2511306012],description:"Cycle of 16 thirds tempered by 1/4 small diesis"},temp16ebs:{frequencies:[261.6255653006,273.35566334732,285.38860666159,297.73221513295,311.13803992337,324.88997598926,338.996955196,354.31789928052,370.0343963911,386.15666093499,403.66631166114,421.62802297921,440.05346707662,460.0644954801,480.59216613216,501.64981691394,523.2511306012],description:"Cycle of 16 equal beating sevenths"},temp16ebt:{frequencies:[261.6255653006,273.54317752885,285.74681450472,298.24333695649,311.03977535434,324.14332902314,339.04034606654,354.29488987405,369.91554384313,385.91109319424,402.29053605603,420.91180538217,439.97998583037,459.50580330844,479.50024102158,499.97454326842,523.2511306012],description:"Cycle of 16 equal beating thirds"},temp16l4:{frequencies:[261.6255653006,278.81939890042,286.59644689091,305.43134787805,313.95067836072,322.70763593891,343.91573686494,353.50850469302,376.74081403286,387.24916379762,412.69888495295,424.21020636659,436.04260883433,464.69899736225,477.66074674968,509.05224558146,523.2511306012],description:"Cycle of 16 fifths tempered by 1/4 major limma"},temp17c10:{frequencies:[261.6255653006,278.13248184697,287.25399162485,296.67464640038,315.39293803189,325.73642523995,336.41913481987,347.45218787195,369.37422084479,381.48805431277,393.9991677018,418.85802036446,432.59470262079,446.78188702878,474.97099505857,490.54793493862,506.63572944675,523.2511306012],description:'Cycle of 17 fifths tempered by 1/10 of "17-tET comma"'},temp17c11:{frequencies:[261.6255653006,276.93071634298,286.5293181416,296.46061382736,313.80362259461,324.68026371274,335.93389640617,347.57758745223,367.91095120397,380.66298908833,393.8570200719,416.89773925535,431.34769064645,446.29848691039,472.40704302301,488.78098359819,505.72245578392,523.2511306012],description:'Cycle of 17 fifths tempered by 1/11 of "17-tET comma"'},temp17c12:{frequencies:[261.6255653006,275.93321340298,285.92682111936,296.28237159295,312.48531442823,323.80274674587,335.53006800342,347.68212334757,366.69599021774,379.97679689512,393.73860099464,415.27118158544,430.3112595477,445.8960513142,470.2809925818,487.31338757149,504.96265307831,523.2511306012],description:'Cycle of 17 fifths tempered by 1/12 of "17-tET comma"'},temp17c13:{frequencies:[261.6255653006,275.09197878886,285.41800532755,296.13163442011,311.37414725128,323.06208421743,335.18874504319,347.77059980835,365.67107999768,379.3971387881,393.63842979584,413.89982010446,429.43622376713,445.55581352332,468.48950048969,486.07501593832,504.32063522708,523.2511306012],description:'Cycle of 17 fifths tempered by 1/13 of "17-tET comma"'},temp17c14:{frequencies:[261.6255653006,274.37296298479,284.98259752889,296.00249241327,310.42486507835,322.42857866752,334.89645942743,347.84645641687,364.79486552165,378.90099378095,393.5525871037,412.72797362103,428.68761089217,445.26438593469,466.95936897503,485.01606158014,503.77098227424,523.2511306012],description:'Cycle of 17 fifths tempered by 1/14 of "17-tET comma"'},temp17c15:{frequencies:[261.6255653006,273.75133628611,284.60578240525,295.8906154666,309.60449456672,321.88054534371,334.64335075548,347.91221098893,364.0371787025,378.47152629398,393.47820661021,411.71505587788,428.03986711385,445.01196937812,465.63729761752,484.10016650719,503.29510175355,523.2511306012],description:'Cycle of 17 fifths tempered by 1/15 of "17-tET comma"'},temp17ebf:{frequencies:[261.6255653006,272.44226039746,283.83762774933,295.84262353625,308.01140541539,320.83119298602,334.33681303028,348.02669374128,362.44895565855,377.64277622383,393.64943714798,409.87448211667,426.96753159265,444.97502525992,463.22819966593,482.45788080796,502.71631088044,523.2511306012],description:"Cycle of 17 equal beating fifths"},temp17ebs:{frequencies:[261.6255653006,272.25303191034,284.09302419378,294.99486987374,307.14054534497,320.67196534338,333.1312181383,347.01199086095,362.47647062671,376.71561430061,392.57935523584,410.25304697073,426.52635565248,444.65634289229,464.854847056,483.45291583119,504.17290303449,523.2511306012],description:"Cycle of 17 equal beating sevenths"},temp17fo2:{frequencies:[261.6255653006,272.49443630436,283.81483782984,295.60553136463,307.88605111976,320.67674980257,333.99881838086,347.87433573796,362.32629011314,377.37863296804,393.05630224552,409.38528080469,426.39262165238,444.10651133426,462.55629730628,481.77255670213,501.78712602614,522.6331757532],description:"Fifth beats twice octave"},temp17nt:{frequencies:[261.6255653006,272.67141175251,283.62400127587,295.59862296305,308.07881564783,321.08592105074,333.98321109015,348.08400151932,362.78013022893,377.35217954558,393.28401259522,409.88848628312,426.35277308246,444.35341180422,463.11404114636,482.66674266598,502.05436630802,523.2511306012],description:"17-tone temperament with 27/22 neutral thirds"},temp17s:{frequencies:[261.6255653006,272.47577100117,283.83144686231,295.66037914716,307.98229466369,320.75501909295,334.12277657932,348.04764753103,362.48197303348,377.58873713905,393.32509157531,409.63717539588,426.70917767843,444.49267120113,463.01730800927,482.21968335939,502.31662775181,523.2511306012],description:"Cycle of 17 fifths tempered by 2 schismas. Schulter, Tuning List 10-9-98"},temp19d5:{frequencies:[261.6255653006,270.66831710441,280.02362001571,289.70227696231,304.50185643804,315.02657220273,325.91506125677,337.17989695691,348.83408706747,360.89108965294,379.3273836973,392.4383479509,406.00247545366,420.03542981361,434.55341522625,449.57319616728,472.53985806789,488.87259164079,505.76984518255,523.2511306012],description:"Cycle of 19 thirds tempered by 1/5 small diesis. Third = 3\\5"},temp19ebf:{frequencies:[261.6255653006,271.21349495395,281.45216719787,291.55303152151,302.33945232218,313.85796000757,325.22143162672,337.35615460362,350.31447634238,363.09838134063,376.74994653359,390.21776437961,404.59965986997,419.95766938963,435.10896436483,451.288596451,468.56635736893,485.61156561298,503.81364896584,523.2511306012],description:"Cycle of 19 equal beating fifths"},temp19ebmt:{frequencies:[261.6255653006,271.3515811897,281.43551369743,291.89053542337,302.73030209663,313.98726376766,325.65848288741,337.75920164946,350.30522706536,363.3129458114,376.82130195458,390.82676353803,405.34762742982,420.40285701732,436.01212051281,452.22214724761,469.0287008844,486.45373685079,504.52001310976,523.2511306012],description:"Cycle of 19 equal beating minor thirds"},temp19ebo:{frequencies:[261.6255653006,277.22364042749,293.65618047886,311.2040149966,329.6906225544,349.43193638686,370.22936988938,392.1394232912,415.53653598153,440.18534605859,466.50709783521,494.2370091719,523.84897992059,555.04513017437,587.91021027711,623.0058793126,659.97909442818,699.46172209312,741.05658909815,784.8766959018],description:"Cycle of 19 equal beating octaves in twelfth"},temp19ebt:{frequencies:[261.6255653006,271.59402175166,281.80172126331,292.25440577595,302.95795550425,313.91838845704,325.14187338321,337.60244413755,350.36206814823,363.42792409681,376.80735887968,390.50790160795,404.53725818867,420.11297167574,436.06250107414,452.39482160095,469.11911613638,486.2447950704,503.78149001575,523.2511306012],description:"Cycle of 19 equal beating thirds"},temp19k10:{frequencies:[261.6255653006,271.76196854941,282.29109592175,293.22816309454,304.58897525989,314.09773337131,326.2671147593,338.90798583865,352.03861397416,365.67797428016,377.09383089344,391.70392883316,406.88007915549,422.6442137645,439.01911266466,452.72455471179,470.26488431194,488.48479525859,507.41061720556,523.2511306012],description:"Chain of 19 minor thirds tempered by 1/10 kleisma"},temp19k3:{frequencies:[261.6255653006,272.95237156345,284.76956174698,297.09836322231,309.96092731219,314.44113201634,328.05453510669,342.25731432435,357.07498823553,372.53417996774,377.91882441317,394.28042610165,411.35038641496,429.15937528906,447.73938330242,454.2110508691,473.87564511273,494.39160029408,515.79576952378,523.2511306012],description:"Chain of 19 minor thirds tempered by 1/3 kleisma"},temp19k4:{frequencies:[261.6255653006,272.52663052146,283.88190679319,295.71031957624,308.03158289191,314.31844786309,327.4150485592,341.05734286691,355.26806612985,370.07090075127,377.62397563434,393.35830866491,409.74823893478,426.8210805314,444.6052930255,453.67960031314,472.58291784883,492.27387080735,512.78528301977,523.2511306012],description:"Chain of 19 minor thirds tempered by 1/4 kleisma"},temp19k5:{frequencies:[261.6255653006,272.27150423996,283.35064249518,294.88062803952,306.8797443789,314.24485853342,327.03195662575,340.33937954017,354.18830437416,368.6007608062,377.44717941318,392.80607455881,408.78994578219,425.42422593284,442.73537947933,453.36102900438,471.8089732132,491.00759210237,510.98743222773,523.2511306012],description:"Chain of 19 minor thirds tempered by 1/5 kleisma"},temp19k6:{frequencies:[261.6255653006,272.10155294862,282.99701916355,294.32876096318,306.11424676116,314.19580976213,326.77681046955,339.86157848985,353.47028562902,367.62391141072,377.32935907335,392.4383479509,408.1523292189,424.49552853314,441.49314144476,453.14877154631,471.29371440761,490.16521545931,509.79236747994,523.2511306012],description:"Chain of 19 minor thirds tempered by 1/6 kleisma"},temp19k7:{frequencies:[261.6255653006,271.9802243463,282.7447017667,293.93521741989,305.56863311614,314.16077935352,326.59468561952,339.52070304385,352.95830848174,366.92774752709,377.24522513926,392.17589782962,407.69749910471,423.83341578697,440.60837682578,452.99722066906,470.92601754108,489.56440442681,508.94046380742,523.2511306012],description:"Chain of 19 minor thirds tempered by 1/7 kleisma"},temp19k8:{frequencies:[261.6255653006,271.88926339885,282.55561052465,293.64040364533,305.16005936662,314.13450956378,326.45815718343,339.26526937521,352.57481080357,366.4064920117,377.18213591051,391.97917444376,407.35670799125,423.33750965456,439.94524339387,452.88359011983,470.65043349884,489.11427877975,508.30246674991,523.2511306012],description:"Chain of 19 minor thirds tempered by 1/8 kleisma"},temp19k9:{frequencies:[261.6255653006,271.81853598083,282.40862793607,293.41130980736,304.84265779003,314.11407882217,326.35200974457,339.06673262958,352.27682225125,366.00158141044,377.13307501509,391.82623534045,407.09184571451,422.95220417284,439.43048454013,452.79523167251,470.4362008006,488.76446469244,507.80680338678,523.2511306012],description:"Chain of 19 minor thirds tempered by 1/9 kleisma"},temp19lst:{frequencies:[261.6255653006,270.56149416036,279.80263334807,289.3594074481,304.78245180412,315.19242188443,325.95794877725,337.09117667186,348.60466454729,360.5114003397,379.7268899367,392.69661814622,406.10933276067,419.98016416303,434.32475952075,449.15930043669,473.09978287909,489.25870067642,505.96953296163,523.2511306012],description:"Cycle of 19 least squares thirds 5/4^5 = 3/2"},temp19lst2:{frequencies:[261.6255653006,270.86681403244,280.43448605562,290.34011310859,303.98143643885,314.71879896063,325.83542931914,337.34472599098,349.26055890156,361.59728998429,378.58655645252,391.95915298383,405.80409975455,420.1380835834,434.97837844393,450.34287106955,471.50175486263,488.15634183652,505.39920634693,523.2511306012],description:"Cycle of 19 least squares thirds 5/4, 3/2 (5), 6/5 (4)"},temp21ebs:{frequencies:[261.6255653006,270.48603901573,279.57527100587,288.89916626223,298.46378542286,308.59004184051,318.97773454914,329.63361550747,340.56460989801,352.13747205507,364.00912264098,376.18727282918,388.67983604901,401.90596519454,415.47356606258,429.3914526989,443.66866815503,458.78424493347,474.29007331382,490.19622772738,506.51304733863,523.2511306012],description:"Cycle of 21 equal beating sevenths"},temp22ebf:{frequencies:[261.6255653006,269.81217946012,278.43675961795,287.52273893052,297.09479717246,306.30473778727,316.00739221221,326.22911792828,336.99768333647,347.35886661388,358.27435338478,369.77379349451,381.88843101834,394.65117841871,406.93109909525,419.8679691216,433.49693671533,447.85502662133,461.66993710068,476.2239184443,491.55650493929,507.70935693135,523.2511306012],description:"Cycle of 22 equal beating fifths"},temp22ebt:{frequencies:[261.6255653006,270.16401944699,278.90739732088,287.86061708193,297.02871287074,306.4168425362,316.03028815926,325.87445510174,336.54752540671,347.4767459334,358.66827061689,370.12838991426,381.86355177507,393.88036006393,406.18556836568,419.52690380046,433.1884314408,447.17783799964,461.50298590676,476.17193984405,491.19294816955,506.57446222015,523.2511306012],description:"Cycle of 22 equal beating thirds"},temp22fo2:{frequencies:[261.6255653006,269.97341665226,278.58762814388,287.47669703533,296.64939669548,306.114775449,315.88217199169,325.96122111215,336.36187067071,347.09438029185,358.16933884319,369.59767092309,381.39065611261,393.55992749281,406.11749146369,419.07573510033,432.44744798202,446.24582051114,460.48446638525,475.17743368268,490.33921589034,505.98477744485,522.12955176559],description:"Fifth beats twice opposite rate as octave"},temp23ebs:{frequencies:[261.6255653006,269.54528659271,277.75645349026,286.26979186473,295.09642104593,304.24787054065,313.41421505132,322.9178815064,332.77128133421,342.98728793362,353.5792427091,364.56098080918,375.56059498003,386.96499273375,398.78907363541,411.04828247111,423.75862731373,436.93671323096,450.13624919654,463.82153026575,478.01042762353,492.72147385367,507.97388874722,523.2511306012],description:"Cycle of 23 equal beating major sixths"},temp24ebaf:{frequencies:[261.6255653006,269.28287293678,277.23083697142,285.33112867981,293.73889258015,302.30779732819,311.20195864933,320.26658492056,329.67528611807,339.26431305611,349.21731641877,359.36108127338,369.88988063787,380.8183283077,391.95623237686,403.5169050439,415.29914897519,427.52862168357,439.9924847314,452.92944495636,466.1143590732,479.79973930305,493.74741628009,508.22451419243,523.2511306012],description:"Cycle of 24 equal beating 11/8's"},temp24ebf:{frequencies:[261.6255653006,269.29177952703,277.18807786937,285.37455545576,293.58315284916,302.20762754558,311.09098010692,320.17688686519,329.5354160273,339.23795459232,349.23174343306,359.45337270909,369.98176018664,380.89707445632,391.84186131702,403.3411703213,415.18563115404,427.4653330282,439.77824302677,452.71493931339,466.03998256716,479.66882917609,493.70667148145,508.26043277122,523.2511306012],description:"24-tone ET with 23 equal beatings fifths. Fifth on 17 slightly smaller."},temp25ebt:{frequencies:[261.6255653006,269.07040607882,276.69392272178,284.50040351526,292.49424189123,300.67993013952,309.06207502162,317.64539198503,326.43470939254,335.74076076764,345.27015661764,355.02825763358,365.02055286832,375.25266439783,385.73034580726,396.45949385543,407.44613828076,419.07870286007,430.99044652419,443.18807578441,455.67844358274,468.46858279232,481.56568677979,494.97711759939,508.71042703507,523.2511306012],description:"Cycle of 25 equal beating thirds"},temp26eb3:{frequencies:[261.6255653006,268.53506427639,276.23413316293,283.52944261778,291.01742029734,298.70315454572,307.26715974579,315.38204761281,323.71124866952,332.26042290088,341.78653782772,350.81307822085,360.07800843467,370.40166886388,380.18393134541,390.22454217496,400.5303243006,412.0137801623,422.89501338113,434.06361862988,445.5271853685,458.30072684004,470.40439262311,482.82771472967,495.57913524385,509.78770018956,523.2511306012],description:"Cycle of 26 fifths, 5/4 beats three times 3/2"},temp26ebf:{frequencies:[261.6255653006,268.42568455944,275.6873347244,283.44184249631,290.6057533496,298.25588724353,306.42524452376,315.14906491362,323.2084665433,331.81486605817,341.00539333861,350.8196903474,359.88651586494,369.56871668171,379.90806097321,389.45994242989,399.66012078319,410.55259814459,422.18435687733,432.93022440227,444.40542617247,456.65946119637,469.74519313893,481.83429211771,494.74389287961,508.52968420524,523.2511306012],description:"Cycle of 26 equal beating fifths"},temp26ebmt:{frequencies:[261.6255653006,268.65375733515,276.22103845862,283.50786797993,291.35362426947,298.90860888253,307.04308924768,315.80151824033,324.23534814673,333.31608510092,342.06028051348,351.47518831899,360.54116941247,370.30254728737,380.81265974123,390.93325547321,401.83014055422,412.32317421544,423.62106542614,434.50024245702,446.21389528982,458.82603004394,470.97074536855,484.04700949484,496.63864979835,510.1961187079,523.2511306012],description:"Cycle of 26 equal beating minor thirds"},temp26ebs:{frequencies:[261.6255653006,268.70854008298,275.97438147252,283.42781183148,291.07367309004,298.91693448926,307.01176285104,315.31558194419,323.83378869523,332.57191674,341.53564330438,350.78687613393,360.27695513986,370.01204624828,379.9984780646,390.24273934583,400.81557597059,411.66137956276,422.7871998129,434.200265189,445.90799193987,457.99123299379,470.38643795716,483.10166179174,496.14516363988,509.5254229925,523.2511306012],description:"Cycle of 26 equal beating sevenths"},temp27c8:{frequencies:[261.6255653006,268.8683660761,273.88218275531,281.46429379013,289.25630678777,297.26403435806,305.49344487497,313.95067836072,319.80518189674,328.65861797738,337.75715313333,347.10756874671,356.7168418477,363.36884069528,373.42828707985,383.76621672426,394.39034225616,405.30858212106,412.86671295557,424.29645219584,436.04260883433,448.1139452722,460.51946086698,473.26841152735,482.09384659572,495.44005640506,509.15574351714,523.2511306012],description:"Cycle of 27 fifths tempered by 1/8 of difference between augm. 2nd and 5/4"},temp27eb2:{frequencies:[261.6255653006,268.46319812592,275.47953375729,282.6792426258,290.06711722511,297.6480770209,305.21714541248,313.19405229436,321.37943712173,329.77875040935,338.39757940759,347.00289091411,356.07187808578,365.37788286775,374.92710181611,384.72589137834,394.78077412888,404.81988946592,415.39993259502,426.25648711974,437.39677971686,448.82822593369,460.24174609969,472.27024976331,484.61312060812,497.27857467888,510.27504274822,523.2511306012],description:"Cycle of 27 fourths, 5/4 beats twice 4/3"},temp28ebt:{frequencies:[261.6255653006,268.20719354764,274.94677993062,281.84811597329,288.91508487862,296.15166190523,303.56191452522,311.15001492268,318.92023016627,326.87692943437,335.10396312415,343.5284476344,352.15511767098,360.98882840285,370.03454814671,379.29736707683,388.78249121135,398.49525813745,408.44113355924,418.72492751128,429.25553103998,440.03886948281,451.08100913788,462.38815755283,473.96667987616,485.82308640697,497.96404651665,510.39638953936,523.2511306012],description:"Cycle of 28 equal beating thirds"},temp29c14:{frequencies:[261.6255653006,268.03384168485,274.59908446169,281.12309545065,288.00894581307,294.85155418799,302.07367045706,309.47268578827,316.82523654187,324.58557784847,332.29718551084,340.4364979057,348.77517523396,357.06148706459,365.80737813473,374.49834647311,383.67133729641,392.78672100419,402.40767098088,412.26427490957,422.0589810157,432.39692561869,442.66994710331,453.51274088813,464.62111626441,475.65973015548,487.31057837675,498.88825560972,511.10806227553,523.2511306012],description:"Cycle of 29 fifths 1/14 comma positive"},temp29ebf:{frequencies:[261.6255653006,267.97141371953,274.40384216744,281.08918054527,287.86573007783,294.90872015661,302.04780073409,309.28428172011,316.80528774769,324.42890571749,332.35226986162,340.383734589,348.52477529448,356.98590767403,365.56247629567,374.47626314535,383.51165984234,392.90231649713,402.42108995343,412.06973029551,422.09773822292,432.26256191617,442.8270465847,453.53566813958,464.39038927288,475.67189906986,487.10732348594,498.99237046175,511.03956815915,523.2511306012],description:"Cycle of 29 equal beating fifths"},temp29fo:{frequencies:[261.6255653006,267.94780983951,274.42283293416,281.05432651499,287.84607006616,294.80193939197,301.92589896847,309.2220107369,316.69443479624,324.34743177532,332.18536334326,340.21270232633,348.43402388135,356.85401564372,365.47747852664,374.30932945854,383.35460418662,392.61845788025,402.10617708826,411.82316930666,421.77497497272,431.96726840975,442.4058610624,453.0967048103,464.04589268124,475.25967298378,486.74443697706,498.50673304697,510.55326782272,522.89091000079],description:"Fifth beats with opposite equal rate as octave"},temp31c51:{frequencies:[261.6255653006,267.17944246504,273.80687224646,279.61933836952,286.55534345926,292.63843680803,298.85066583755,306.26370726525,312.76517639908,319.40466275447,327.32754956004,334.27616903285,342.56794607269,349.84009583671,357.26662128823,366.1286782788,373.90098334082,383.17565840352,391.30984260196,399.61670205031,409.52926208827,418.22288720188,428.59697681668,437.69538032917,446.98692528774,458.07451174337,467.79867446983,477.72926229583,489.57941763243,499.97237729845,512.37427391379,523.2511306012],description:"Cycle of 31 51/220-comma tempered fifths (twice diff. of 31-tET and 1/4-comma)"},temp31coh:{frequencies:[261.6255653006,267.17903658035,272.71444919697,278.8328003927,286.67318542907,292.31259119845,298.22448926086,305.9625493141,312.79375273624,319.37019903425,325.99008611032,333.53448283298,342.55073731576,349.35067604096,356.49690427728,365.94514964733,373.94225818849,381.74854907994,389.68867781295,401.66236977474,409.34549662494,417.52928752537,426.20510506248,437.61344561246,447.02040600938,456.30467151405,466.17931462488,479.8608061495,489.18804557359,499.02680928636,509.58872491278,523.2511306012],description:"Differential coherent 31-tone scale, interval=8, OdC, 2003"},temp31eb1:{frequencies:[261.6255653006,267.35556661283,273.21106374578,279.19480525048,287.36432599524,293.65804565963,300.08960744161,306.66203029506,313.37839929357,320.24186707858,327.25565533923,334.42305632458,341.74743438901,349.23222958864,356.8809512704,367.32364464292,375.36859607341,383.58974428421,391.99094825517,400.57615379751,409.34938620036,418.31476585427,427.47650107887,436.83889236244,446.40633438056,459.46863260649,469.5317006585,479.81516534138,490.32385367952,501.06269841655,512.03674033076,523.2511306012],description:"Cycle of 31 thirds, 3/2 beats equal 5/4. Third 1/18 synt. comma higher"},temp31eb1a:{frequencies:[261.6255653006,267.52830363402,273.56421824856,279.73631545395,286.19123047598,292.64821393201,299.25087842544,306.00251077972,312.90647197491,319.96619882071,327.18520755731,334.56708808783,342.11551697966,349.83425186023,357.90667665031,365.98168819447,374.23888853079,382.68238383924,391.31637942763,400.14517332125,409.17316051655,418.40483516889,427.84479530109,437.49773526159,447.36846272566,457.69148927209,468.01782376277,478.57713873597,489.37469064597,500.41585743254,511.7061296998,523.2511306012],description:"Cycle of 31 thirds, 5/4 beats equal 7/4"},temp31eb2:{frequencies:[261.6255653006,267.43633367564,273.37616065041,279.44791264824,286.8151286113,293.18536340431,299.69708268426,306.35342885652,313.15761412007,320.11292201761,327.22270902014,334.4904061467,341.91952062013,349.51363755953,357.2764217104,366.69546492458,374.83986170174,383.16514754137,391.67534003419,400.37454600262,409.26696348258,418.35688374945,427.64869338884,437.14687641357,446.85601642745,458.63669049374,468.82312458207,479.23580188553,489.87974732177,500.7600974131,511.88210276525,523.2511306012],description:"Cycle of 31 thirds, 3/2 beats twice 5/4"},temp31eb2a:{frequencies:[261.6255653006,267.30377559621,273.10522335955,279.03258328435,287.71713441117,293.9616250555,300.34164347605,306.86013111019,313.520093235,320.3246003528,327.27678960683,334.37986622751,341.63710501026,349.05185182525,356.62752721996,367.72712485201,375.70811839104,383.86232802855,392.19351543866,400.70551714108,409.40225971792,418.28775270674,427.36609266644,436.64146506587,446.11814621352,460.00303307438,469.98674378481,480.18713671772,490.60891465214,501.25688243424,512.13594919255,523.2511306012],description:"Cycle of 31 thirds, 5/4 beats twice 3/2"},temp31eb2b:{frequencies:[261.6255653006,267.52098517401,273.5492512983,279.71335720518,286.24081966732,292.69091492047,299.28635537219,306.03041620307,312.92644639599,319.97787039914,327.18818982659,334.56098519707,342.09991771207,349.80873107384,357.97195918064,366.0384300542,374.28666922186,382.72077261519,391.34492846269,400.16341936959,409.18062444454,418.40102147414,427.82918914659,437.46980932536,447.32766937413,457.76662230541,468.08184681118,478.62951259033,489.41485742956,500.44323714283,511.72012823096,523.2511306012],description:"Cycle of 31 thirds, 5/4 beats twice 7/4 (7/4 beats twice 5/4 gives 31-tET)"},temp31ebf:{frequencies:[261.6255653006,267.58895287558,273.47207673981,279.84020613447,286.1226232561,292.32048149598,299.02929415269,305.64780689513,312.81195283539,319.87967238294,326.85226402826,334.39967773649,341.84550545999,349.90516819854,357.85635261941,365.7005167875,374.19135817901,382.56791460144,390.83172556312,399.77680617055,408.60149248083,418.153686518,427.57731316062,436.87410111252,446.93731687602,456.86508723973,467.61130449655,478.21288647115,488.67177324268,499.99289085438,511.16163412976,523.2511306012],description:"Cycle of 31 equal beating fifths"},temp31ebf2:{frequencies:[261.6255653006,268.47208070676,273.9410776603,281.1098810272,286.83632036086,292.67941197057,300.33857976184,306.45672349367,312.69950064833,320.88257689406,327.41921873353,335.98749730659,342.8318387903,349.81560715632,358.96997989875,366.28249344322,375.86779039798,383.5245262314,391.33723606718,401.57819634767,409.75867428285,420.48170539436,429.04726334649,437.78730875453,449.24382765192,458.39529367535,467.73318258368,479.97335657757,489.75080836323,502.56716753771,512.80487382351,523.2511306012],description:"Cycle of 31 fifths, 3/2 beats equal 7/4"},temp31ebs:{frequencies:[261.6255653006,267.49970467488,273.5255021102,279.70687352555,286.04783307233,292.55250379055,299.22511217624,305.93841412724,312.82503848113,319.88946348152,327.13627425327,334.57018402367,342.19602042672,349.86836735032,357.73879552978,365.81242398075,374.09449397971,382.59039112658,391.30563169636,400.0740276901,409.06880268892,418.29580572823,427.76103041037,437.4706255228,447.4309015606,457.4519243295,467.73166961576,478.27681510244,489.09421437332,500.19089295757,511.57406697079,523.2511306012],description:"Cycle of 31 equal beating sevenths"},temp31ebs1:{frequencies:[261.6255653006,267.15774161678,272.80689957055,278.57550963341,287.00766304701,293.07655388437,299.27377555355,305.60203820353,312.06411627904,318.6628357552,328.30838543699,335.25059642555,342.33960321815,349.5785118895,356.97048813578,364.51877275634,375.55232561156,383.49353066309,391.60265342908,399.88324912115,408.33893898267,416.9734277591,429.59472356821,438.6786743379,447.954711436,457.42689142912,467.09936712211,476.97636845082,491.41388278482,501.80502418824,512.41589335668,523.2511306012],description:"Cycle of 31 sevenths, 3/2 beats equal 7/4. 17/9 schisma fifth"},temp31ebs2:{frequencies:[261.6255653006,267.52957387699,273.56681763873,279.74030009523,286.13080593576,292.58781532731,299.19053769144,305.94226304679,312.84635035505,319.90623967996,327.21431324819,334.59843914397,342.14920188821,349.87035796113,357.76575454309,365.83932576918,374.19671203989,382.64107477964,391.27599615891,400.10577865514,409.13482199124,418.3676180873,427.92498506647,437.58181190976,447.45656083737,457.55415226032,467.87960969795,478.43807796233,489.36771995709,500.41110255739,511.70370009509,523.2511306012],description:"Cycle of 31 sevenths, 3/2 beats twice 7/4. Almost 31-tET"},temp31ebsi:{frequencies:[261.6255653006,267.31506098272,273.2139312212,279.32987994092,285.67089487749,292.24525964349,299.06156112772,306.12870201667,312.71376833043,319.5411631371,326.61980701828,333.95894503443,341.56816427739,349.45740040562,357.63696227352,366.11753111539,374.01961057916,382.2124855973,390.7068565555,399.51382386635,408.64488423766,418.11197066674,427.92744450622,438.10412760018,447.58662182594,457.41807184609,467.61131789159,478.17967690081,489.136951815,500.49745466086,512.27602199232,523.2511306012],description:"Cycle of 31 equal beating major sixths"},temp31ebt:{frequencies:[261.6255653006,267.508686718,273.53300221315,279.70190221389,286.0188552526,292.48741633838,299.11122072338,305.89399777728,312.83956126154,319.95181832117,327.23477005018,334.588671338,342.11906613961,349.83019225353,357.72638299858,365.81208378543,374.09184045976,382.57031224079,391.25226584136,400.14258695229,409.24627647794,418.43865241641,427.85164834976,437.49055334209,447.36079317794,457.46791872903,467.81761394993,478.41570188597,489.26814549043,500.38104816704,511.76065992154,523.2511306012],description:"Cycle of 31 equal beating thirds"},temp31g3:{frequencies:[261.6255653006,266.21023205793,270.87523947024,275.62199471997,289.25983723073,294.32876096318,299.48651076576,304.73464409936,310.07474405997,315.5084236529,331.11985608357,336.92232427465,342.82647426905,348.83408706747,354.94697625466,361.16698614085,379.03761443004,385.6797831671,392.4383479509,399.31534788729,406.31285900225,413.43299207996,433.88975562921,441.49314144476,449.22976592409,457.10196592055,465.11211608996,473.26263524279,496.67978412536,505.38348615935,514.23971114652,523.2511306012],description:"Wonder Scale, cycle of 31 sevenths tempered by 1/3 gamelan residue, s.wonder1"},temp31g4:{frequencies:[261.6255653006,266.75106828164,271.97698492363,277.30528403104,287.97116616014,293.61280545832,299.36497003718,305.22982618403,311.20958045219,317.30648321666,329.51091606373,335.96636137331,342.54827390456,349.25913259695,356.10146388137,363.07784268567,377.0427625798,384.42940207435,391.96075366681,399.63965159508,407.46898671086,415.4517078616,431.43106138252,439.88322158593,448.50096908674,457.28754710584,466.24626137824,475.38048570318,493.66485502092,503.33623955776,513.19709315346,523.2511306012],description:"Cycle of 31 sevenths tempered by 1/4 gamelan residue"},temp31g5:{frequencies:[261.6255653006,267.07609791103,272.64018328418,278.3201871026,287.20071989568,293.1840695693,299.2920706603,305.52732176658,311.89247392994,318.39023342226,328.54930692245,335.39408374843,342.38146206091,349.5144087687,356.79595852417,364.22920722399,375.85089312601,383.68111960674,391.67447579625,399.83436022994,408.16424460367,416.66766586736,429.96253800336,438.92009035289,448.06425836543,457.39892986705,466.92807368021,476.65574406444,491.86469103391,502.11187209711,512.57253609913,523.2511306012],description:"Cycle of 31 sevenths tempered by 1/5 gamelan residue"},temp31g6:{frequencies:[261.6255653006,267.29300481931,273.08321314304,278.9988528944,286.68823620156,292.89859205665,299.24348036203,305.72581270733,312.34856974117,319.11478979112,327.9097940226,335.01310892782,342.27029731995,349.68469585889,357.2597060542,364.99881126821,375.05840734677,383.18307527508,391.48374080678,399.96422099622,408.62840644009,417.48028065389,428.98629965513,438.27917301224,447.77335490729,457.47320099372,467.3831713443,477.50781354513,490.66822826519,501.2972832058,512.15658610391,523.2511306012],description:"Cycle of 31 sevenths tempered by 1/6 gamelan residue"},temp31g7:{frequencies:[261.6255653006,267.44804485495,273.40010374961,279.48462577409,286.32273545638,292.69485077785,299.20877758909,305.86767190621,312.6747599825,319.63333987564,327.45376040978,334.74124806474,342.19091885571,349.80638115363,357.59132564064,365.54952414453,374.49336901227,382.82772265927,391.34755742947,400.0570012071,408.96027492626,418.06169111145,428.2903432132,437.821949061,447.565680886,457.52625955954,467.70851101039,478.11736856842,489.81539667363,500.71624319167,511.85968815724,523.2511306012],description:"Cycle of 31 sevenths tempered by 1/7 gamelan residue"},temp31h10:{frequencies:[261.6255653006,267.8597617245,273.71072489962,279.68949451567,286.35413084244,292.60907359238,299.00064605783,306.12544311476,312.81225819702,320.26616683613,327.26186315247,334.41036913783,342.37893460431,349.85764856047,358.19430059608,366.01847563765,374.01355928612,382.92581520849,391.29021017831,400.61414686654,409.36491649663,418.30683086326,428.27453775026,437.62950220286,447.18881072031,457.84473927605,467.84561789912,478.99376955124,489.45661357347,500.14800438647,512.06587983104,523.2511306012],description:"Cycle of 31 fifths tempered by 1/10 Harrison's comma"},temp31h11:{frequencies:[261.6255653006,269.21878403965,274.22153683641,279.31725480271,287.42394184039,292.76499331753,298.20529308835,306.86017365004,312.56239683413,321.63396690808,327.61072570921,333.69854562169,343.38355445704,349.7644731902,359.91576765193,366.60389537541,373.41630725864,384.25405432087,391.39444778107,402.75397853578,410.23814647641,417.86138882164,429.98907567166,437.9793418028,446.11808436842,459.06587176894,467.59645436585,481.16761342105,490.10890120058,499.21634316923,513.70521350358,523.2511306012],description:"Cycle of 31 fifths tempered by 1/11 Harrison's comma"},temp31h12:{frequencies:[261.6255653006,270.35656674398,274.64794212014,279.0074329748,288.31850430385,292.89498819461,297.54411640065,307.47379627264,312.35433239663,322.77826253379,327.90172667751,333.10651564349,344.2229903876,349.68684701428,361.35664068489,367.0924599966,372.91932620731,385.3644371109,391.48133253101,404.54589939324,410.96726244836,417.49055189439,431.4231018689,438.27108715714,445.22777061734,460.08596806997,467.38892215786,482.98668436162,490.65313915878,498.44128370652,515.07533168556,523.2511306012],description:"Cycle of 31 fifths tempered by 1/12 Harrison's comma"},temp31h8:{frequencies:[261.6255653006,264.15772162327,272.31089540773,280.71571360382,283.4326348965,292.18072491748,301.19882119914,304.11398928909,313.50040506268,316.53463456122,326.30440921209,336.37572681506,339.63135730234,350.11400731728,353.50260556257,364.41338872146,375.66093089504,379.29678648678,391.00370158472,394.788050771,406.97310157871,419.5342415638,423.59472503043,436.668886633,450.14658206855,454.50334862767,468.53149836075,473.06620699858,487.66729542944,502.71904336675,507.58463809481,523.2511306012],description:"Cycle of 31 fifths tempered by 1/8 Harrison's comma"},temp31h9:{frequencies:[261.6255653006,266.20804854623,273.08769296879,280.14512719472,285.05198845745,292.41861893027,299.97562432697,305.22982618403,313.11791376428,318.60230743232,326.83598255713,335.28243953396,341.15505431438,349.97156260351,356.10146388137,365.30423365264,374.74482972428,381.30864508241,391.16284711627,398.01423104415,408.30015740759,418.85190169901,426.18827121524,437.20230245522,448.50096908674,456.35665612784,468.15032961482,476.35018210031,488.66055322307,501.28905975035,510.06935121341,523.2511306012],description:"Cycle of 31 fifths tempered by 1/9 Harrison's comma"},temp31ms:{frequencies:[261.6255653006,267.90457886781,273.56603860918,280.13162379381,286.05147140959,292.91670530125,299.10673210371,306.2852939563,312.75782903301,320.26401722477,327.03195662575,334.88072358477,341.95754947331,350.16453098318,357.56433846376,366.14588292411,373.88341429498,382.85661659068,390.94728541851,400.33002063726,408.78994578219,418.60090448096,427.44693588739,437.70566275183,446.9554220819,457.68235263341,467.35426952494,478.57076966998,488.68410850494,500.41252756995,510.98743222773,523.2511306012],description:"Cycle of 31 5th root of 5/4 chromatic semitones"},temp31mt:{frequencies:[261.6255653006,267.90457886781,274.33428876064,280.9183116909,285.65057792122,292.50627485027,299.52642572255,306.71505845072,314.07622014281,319.36714514233,327.03195662575,334.88072358477,342.9178609508,351.14788961362,359.57543896435,365.63273925968,374.40803131735,383.39382442208,392.5952765698,402.01756125559,408.78994578219,418.60090448096,428.6473261885,438.93486201703,449.46929870544,457.04092569426,468.01003810189,479.24227945773,490.7440946167,502.52195335034,510.98743222773,523.2511306012],description:"Cycle of 31 square root of 5/4 meantones"},temp31to:{frequencies:[261.6255653006,267.53589118464,273.57973594714,279.76011588387,286.08011543105,292.54288870475,299.15166280294,305.90973254237,312.82047235615,319.88733118052,327.11383586587,334.50359293692,342.06029039257,349.78769954651,357.68967690936,365.77016611333,374.03319988033,382.48290424395,391.12349182016,399.95927701915,408.9946695077,418.23417857039,427.68241536008,437.34409519915,447.22403993284,457.32718033558,467.65855857191,478.22333071276,489.02676930874,500.07426891005,511.37133726836,522.92361522538],description:"Third beats with opposite equal rate as octave"},temp31w10:{frequencies:[261.6255653006,267.37376533775,273.24825962152,279.25182297475,287.24047076273,293.55146000581,300.00110689476,306.59245933664,313.32863150945,320.21280450383,327.24823031411,334.4382321302,341.78620813039,349.29562523194,356.97015906904,367.18199034811,375.24938058245,383.49402021056,391.91980359563,400.53071066429,409.33081115087,418.32425711308,427.51529892703,436.90827798988,446.50763144636,459.28102021135,469.37192694062,479.68454193593,490.22373920221,500.99449133668,512.00188868489,523.2511306012],description:"Cycle of 31 thirds tempered by 1/10 Wuerschmidt comma"},temp31w11:{frequencies:[261.6255653006,267.42197848694,273.34681181717,279.40291364591,286.91265577589,293.26931399985,299.76680465545,306.40825140143,313.19684009872,320.13583435099,327.22856275086,334.47843511672,341.88893114233,349.46360748692,357.20610515709,366.80702823839,374.93377645155,383.2405741708,391.73141324262,400.41036830387,409.28161120445,418.34939984118,427.61808628905,437.09212645494,446.77606497733,458.78443573652,468.94897543376,479.33871705477,489.95864449434,500.81386326642,511.90958055231,523.2511306012],description:"Cycle of 31 thirds tempered by 1/11 Wuerschmidt comma"},temp31w12:{frequencies:[261.6255653006,267.46216197987,273.42896553533,279.52888390694,286.63976159726,293.03439921138,299.57169286871,306.25482853931,313.08705807777,320.0717057658,327.2121755928,334.51194000906,341.9745565771,349.60365642833,357.40295156876,366.49485373999,374.67097398132,383.02949720151,391.57448819698,400.31011139524,409.24061734241,418.37035125513,427.70376253715,437.24539007841,446.99988402026,458.37102198078,468.59680699416,479.0507177135,489.73784363297,500.66339010461,511.83267129957,523.2511306012],description:"Cycle of 31 thirds tempered by 1/12 Wuerschmidt comma"},temp31w13:{frequencies:[261.6255653006,267.49616787535,273.49850059869,279.63551774138,286.40905375482,292.83577174957,299.40669857094,306.12507001426,312.99419468163,320.01745343487,327.19830857776,334.54029455907,342.04702698539,349.72220057363,357.56974544479,366.23091133098,374.44874787361,382.85098402684,391.44175752404,400.22529663315,409.2059314354,418.38808223908,427.77627085136,437.37511801764,447.18935574711,458.02150335998,468.29902426597,478.80716193382,489.55109116118,500.53609997149,511.7676037195,523.2511306012],description:"Cycle of 31 thirds tempered by 1/13 Wuerschmidt comma"},temp31w14:{frequencies:[261.6255653006,267.52531966849,273.55811412425,279.72695193191,286.21145362846,292.66562728487,299.26534666214,306.01389218024,312.91461811683,319.97095981222,327.18642276261,334.56459899164,342.10915585471,349.82384327668,357.71250180664,366.00482869479,374.25837321367,382.69803863807,391.32802257119,400.15261355898,409.17620468607,418.4030501472,427.83842920638,437.48634583318,447.35182400506,457.72212848121,468.04393370572,478.5984967348,489.39107187298,500.42702361787,511.71183724724,523.2511306012],description:"Cycle of 31 thirds tempered by 1/14 Wuerschmidt comma"},temp31w15:{frequencies:[261.6255653006,267.55058630145,273.60979095449,279.80621811014,286.0403087015,292.51824916652,299.142895223,305.91756930507,312.84566908988,319.93066920159,327.176122954,334.58566413263,342.16300881716,349.91195724514,357.83639571789,365.80900091179,374.09345893182,382.56553686518,391.22947931103,400.08963362509,409.15044340767,418.41645289306,427.89230922859,437.58276480531,447.49267964143,457.46282942114,467.82296651709,478.41773025336,489.25243249537,500.33250769337,511.66351279634,523.2511306012],description:"Cycle of 31 thirds tempered by 1/15 Wuerschmidt comma, almost 31-tET"},temp31w8:{frequencies:[261.6255653006,267.24122592191,272.97742543896,278.83674800471,288.14389744169,294.32876096318,300.64638059818,307.09960331181,313.69134300364,320.42456924675,327.30232268102,334.32770172848,341.50387698892,348.83408706747,356.32163474066,368.21511264804,376.11866406852,384.19186344763,392.4383479509,400.86184099795,409.46613795376,418.25512179799,427.23275920923,436.40309460541,445.77026919414,460.64940473745,470.53701427025,480.63685362987,490.95348377613,501.49155234204,512.25581818623,523.2511306012],description:"Cycle of 31 thirds tempered by 1/8 Wuerschmidt comma"},temp31w9:{frequencies:[261.6255653006,267.31485098896,273.12785536516,279.06726965397,287.64164332106,293.89667226994,300.28772424256,306.81775371411,313.48978461115,320.30690488373,327.27226963218,334.38910256736,341.66069947616,349.09042189481,356.68171037974,367.64079770339,375.63548096925,383.80401588848,392.15018302326,400.67784514756,409.39095139962,418.29352970104,427.38970265849,436.68368016368,446.1797636563,459.88868900496,469.88938665048,480.10755840871,490.54793493862,501.21534712998,512.11473036853,523.2511306012],description:"Cycle of 31 thirds tempered by 1/9 Wuerschmidt comma"},temp32ebf:{frequencies:[261.6255653006,266.99024669658,272.64192755012,278.59596223891,284.86852586219,291.47665855944,298.4383110444,304.47357861204,310.83171904039,317.53000821614,324.58664278196,332.02079024875,339.85265231199,346.64232633314,353.79523650997,361.33080945807,369.26952339658,377.6329406438,386.44378308989,395.72598875513,403.77301123196,412.25053247262,421.18158418009,430.59042797451,440.50262726312,450.945108697,459.9980085603,469.53522100534,479.58265227668,490.16760508681,501.31882698223,513.0666164148,523.2511306012],description:"Cycle of 32 equal beating fifths"},temp33a12:{frequencies:[261.6255653006,266.94139439278,272.36523138282,277.89927397158,284.73748648557,290.5229142688,296.42589304627,302.44880952638,308.5941041528,316.1876182869,322.61206437627,329.16704532903,335.85521147284,342.67927280589,351.11151394887,358.24555988319,365.52455654698,372.95145333883,382.12859604556,389.89286138208,397.81488464837,405.89786889835,414.14508930077,424.3358756666,432.95772800787,441.75476312782,450.73053786756,459.88868900496,471.20507923536,480.77924170569,490.54793493862,500.51511311891,512.83118959171,523.2511306012],description:'Cycle of 33 fifths tempered by 1/12 "11 fifths" comma'},temp34eb2a:{frequencies:[261.6255653006,267.30377714022,273.10522651459,279.03258811962,285.08859470169,291.27603831759,293.96161656556,300.34163653669,306.86012579271,313.52008961307,320.32459850253,327.27678960683,334.37986815896,341.63710895701,349.05185787385,356.62753339984,364.36762821878,372.27571081823,375.70810971034,383.86232137672,392.19350864246,400.70551251195,409.40225735312,418.28775270674,427.36609513501,436.64147011015,446.11815394416,455.80051576031,465.69301950749,469.98673021106,480.18712562304,490.60890615053,501.2568766435,512.13594623433,523.2511306012],description:"Cycle of 34 thirds, 5/4 beats twice 3/2"},temp34ebsi:{frequencies:[261.6255653006,266.99788221884,272.57696520339,278.14698300137,283.93137567849,289.70637009331,295.70363067102,301.69114426564,307.90910207865,314.36637542255,320.81315450625,327.50805511637,334.19207543599,341.13334896852,348.06334108321,355.26005273528,362.44506998142,369.90662102486,377.65534755435,385.39148338011,393.42536256589,401.44618836017,409.77571602141,418.09170597447,426.72775997548,435.3497813463,444.30364141769,453.60211446558,462.88547695756,472.52613162558,482.15112257833,492.14655599832,502.125745683,512.48900933996,523.2511306012],description:"Cycle of 34 equal beating major sixths"},temp34ebt:{frequencies:[261.6255653006,266.93199967636,272.36578831151,277.92998813547,283.62773001764,289.46221547291,295.43672985114,301.55463262869,307.81936583026,314.23445063866,320.80349820247,327.5302045997,334.16324661664,340.95548417522,347.91073392156,355.03290870525,362.32601803901,369.79415983503,377.44153922514,385.2724539348,393.29131162714,401.50262139782,409.91100286066,418.20230551726,426.69260242977,435.3866631899,444.28938530291,453.40576935587,462.74094691381,472.3001707563,482.08881469934,492.11238732973,502.37652397446,512.8870010249,523.2511306012],description:"Cycle of 34 equal beating thirds"},temp34w10:{frequencies:[261.6255653006,267.37376533775,273.24825962152,279.25182297475,281.06516151868,287.24047076273,293.55146000581,300.00110689476,306.59245933664,313.32863150945,320.21280450383,327.24823031411,334.4382321302,341.78620813039,349.29562523194,351.5637974276,359.28803828513,367.18199034811,375.24938058245,383.49402021056,391.91980359563,400.53071066429,409.33081115087,418.32425711308,427.51529892703,436.90827798988,446.50763144636,449.40705529895,459.28102021135,469.37192694062,479.68454193593,490.22373920221,500.99449133668,512.00188868489,523.2511306012],description:"Cycle of 34 thirds tempered by 1/10 Wuerschmidt comma"},temp34w5:{frequencies:[261.6255653006,266.84400329087,272.16653090376,277.59522118835,285.18293865736,290.87125860088,296.67303727804,302.5905394405,308.62607485572,314.78199505921,321.06070411799,327.46464776022,333.99632772474,340.65828815182,347.45313114562,356.95032497057,364.07013256472,371.33195122039,378.73861781039,386.29301712643,393.99809806388,401.85686830172,409.8723892274,418.04779164423,426.38625992488,434.89105154177,443.56547936435,455.68978545099,464.77906877635,474.04965097839,483.50514461458,493.14924173292,502.98569917153,513.01835960126,523.2511306012],description:"Cycle of 34 thirds tempered by 1/5 Wuerschmidt comma"},temp34w6:{frequencies:[261.6255653006,267.02047390967,272.52663052146,278.06968704778,283.80368699438,289.65592453275,295.6288411546,301.72492193478,307.94670831505,314.29679425134,320.77782174252,327.39249271371,334.14356492035,341.03384719449,348.06621207862,355.14570764395,362.46906930947,369.94344613252,377.57194788125,385.35775486011,393.30411308867,401.41432870635,409.69178284295,418.13992649314,426.76227456772,435.56242170336,444.42154779224,453.58584388327,462.93911228358,472.48525217168,482.22824196207,492.17213857029,502.32108537715,512.67931193931,523.2511306012],description:"Cycle of 34 thirds tempered by 1/6 Wuerschmidt comma"},temp34w7:{frequencies:[261.6255653006,267.14659557842,272.78413659373,276.97759061533,282.82259314675,288.79093992594,294.88523549471,301.10813946365,307.46236235072,313.95067836072,320.57591524951,327.34096447962,334.24877325582,341.30235609413,348.50479124753,353.86228320674,361.3297679824,368.9548354601,376.74081403286,384.69109896591,392.80915578714,401.0985286019,409.56282802254,418.20574780595,427.03105980737,436.04260883433,442.74580331919,452.08897683944,461.62931955889,471.37098776125,481.31823237599,491.47539447856,501.84689823661,512.43727265667,523.2511306012],description:"Cycle of 34 thirds tempered by 1/7 Wuerschmidt comma"},temp34w8:{frequencies:[261.6255653006,267.24122592191,272.97742543896,276.16133434798,282.08899791039,288.14389744169,294.32876096318,300.64638059818,307.09960331181,313.69134300364,320.42456924675,327.30232268102,334.32770172848,341.50387698892,348.83408706747,352.90276052629,360.47764004221,368.21511264804,376.11866406852,384.19186344763,392.4383479509,400.86184099795,409.46613795376,418.25512179799,427.23275920923,436.40309460541,441.49314144476,450.96957067185,460.64940473745,470.53701427025,480.63685362987,490.95348377613,501.49155234204,512.25581818623,523.2511306012],description:"Cycle of 34 thirds tempered by 1/8 Wuerschmidt comma"},temp34w9:{frequencies:[261.6255653006,267.31485098896,273.12785536516,279.06726965397,281.5197407082,287.64164332106,293.89667226994,300.28772424256,306.81775371411,313.48978461115,320.30690488373,327.27226963218,334.38910256736,341.66069947616,349.09042189481,352.15826244648,359.81626391233,367.64079770339,375.63548096925,383.80401588848,392.15018302326,400.67784514756,409.39095139962,418.29352970104,427.38970265849,436.68368016368,440.52130132575,450.10083737825,459.88868900496,469.88938665048,480.10755840871,490.54793493862,501.21534712998,512.11473036853,523.2511306012],description:"Cycle of 34 thirds tempered by 1/9 Wuerschmidt comma"},temp35ebsi:{frequencies:[261.6255653006,266.57889315685,271.71450319234,277.03910343536,282.55964921963,288.28335166643,294.21768457231,300.3704033182,306.74954035112,312.48255822683,318.42655208483,324.58928450704,330.97880464114,337.6034601246,344.47190142434,351.59310182482,358.97636423712,366.63132974323,373.51095055492,380.64374131787,388.03901984907,395.70644562254,403.65603146762,411.89816253905,420.4436041444,429.30351656419,438.48947534443,446.74502047858,455.30437022365,464.17870575399,473.37961532931,482.91911915131,492.80967579032,503.06420520117,513.69610107468,523.2511306012],description:"Cycle of 35 equal beating major sixths"},temp37ebs:{frequencies:[261.6255653006,266.54882370674,271.76117582243,276.81154351547,282.15846820925,287.3392230449,292.82419544994,298.13870690002,303.76528724985,309.7222634282,315.49411047005,321.60488016898,327.52574544851,333.79428377068,339.86801168664,346.29839044807,353.1063601343,359.70275861181,366.68649693083,373.45319917734,380.61724149647,387.55864668979,394.907650003,402.68818871569,410.22692643911,418.2083422233,425.94171605945,434.12919568644,442.06222705415,450.46108885682,459.35313199837,467.96883572953,477.09045247204,485.92859505436,495.28571063961,504.35203618851,513.95073426779,523.2511306012],description:"Cycle of 37 equal beating sevenths"},temp37ebt:{frequencies:[261.6255653006,266.44794669373,271.38606435347,276.44269655507,281.62068893017,286.92295259461,292.35247205526,297.91229840101,303.60556084342,309.43546158348,315.40528084,321.51837488336,327.7781831369,333.8061589736,339.9788066307,346.29959662983,352.77208770341,359.39991652139,366.18681567584,373.13659908053,380.25317623321,387.54055229398,395.00282568127,402.64419215928,410.46895395112,418.00392297279,425.71973353547,433.62072344005,441.71133574434,449.99612361773,458.47974493329,467.16697490003,476.06269518051,485.17191513214,494.49975815874,504.05146656861,513.83241864047,523.2511306012],description:"Cycle of 37 equal beating thirds"},temp3ebt:{frequencies:[261.6255653006,330.24866439584,416.02753826489,523.2511306012],description:"Cycle of 3 equal beating thirds"},temp4ebmt:{frequencies:[261.6255653006,310.36356181711,368.84915763691,439.03187262068,523.2511306012],description:"Cycle of 4 equal beating minor thirds"},temp4ebsi:{frequencies:[261.6255653006,310.92686529443,370.08842528703,441.08229727815,523.2511306012],description:"Cycle of 4 equal beating major sixths"},temp53ebs:{frequencies:[261.6255653006,264.97369574946,268.51842903659,272.2713107977,275.7058824095,279.342132921,283.19190440533,286.71515038985,290.44528277978,294.39444663109,298.00865518834,301.83509073593,305.88621462445,310.17522146598,314.10044576101,318.25616227247,322.65590013911,326.68246801001,330.94547393755,335.45880590636,339.58933056423,343.96239778214,348.59225483118,353.4939765515,357.97994689961,362.72933676467,367.75761084241,372.35940104854,377.23140801172,382.38950169412,387.11009989437,392.10789272021,397.3991578827,403.00112480292,408.12795020911,413.55582307376,419.3024201087,424.56160969567,430.12961973912,436.02458225248,441.41955172249,447.13131541518,453.17847579573,459.58072182695,465.43995070361,471.64323472325,478.21077610462,484.22127701861,490.5847168482,497.32181757346,503.48749858841,510.01522804676,516.92626488088,523.2511306012],description:"Cycle of 53 equal beating harmonic sevenths"},temp53ebsi:{frequencies:[261.6255653006,265.08815342092,268.54511416675,272.14096825888,275.73097879106,279.31515577755,283.04333763043,286.76545980208,290.48153462492,294.34691329876,298.20601137227,302.05883614112,306.06646174912,310.06757319581,314.22944103195,318.38454699407,322.53289853772,326.84792360782,331.1559371129,335.45694960827,339.93076775401,344.39731584765,348.85660497561,353.49505873963,358.12597594237,362.74936749482,367.55851619873,372.35985057275,377.35409330215,382.34021841275,387.3182413058,392.49627136254,397.66588656991,402.8271015422,408.19568270781,413.55554119639,418.90668980097,424.47283359145,430.02993471298,435.57800299537,441.34898312942,447.11058430799,453.10367443873,459.08702461554,465.06065502782,471.27428848056,477.47782740925,483.67128540638,490.11358366391,496.54541154487,502.96678854317,509.64616466331,516.31468511822,523.2511306012],description:"Cycle of 53 equal beating major sixths"},temp53ebt:{frequencies:[261.6255653006,265.06408390481,268.61942739596,272.14046995187,275.78114176924,279.3866896354,283.11473715719,286.8068186786,290.62433945466,294.40503066492,298.31417332138,302.18560037327,306.18856199636,310.15290198883,314.25193588094,318.31142144389,322.50883104059,326.66574402863,330.9638909587,335.40807143415,339.80937339101,344.36021509659,348.86714800611,353.52720940583,358.14231011275,362.91421253104,367.64007568808,372.5265022753,377.36578530136,382.3694885676,387.32491504393,392.44870495902,397.52306357866,402.76982394565,407.96596497751,413.33865052838,418.89387526617,424.39550434456,430.08405345947,435.71772111176,441.54279782575,447.31167294612,453.27655186057,459.18388087721,465.29191391782,471.34101945319,477.59564801313,483.78993007475,490.19466758193,496.53761595054,503.09606844751,509.59124455492,516.30709807412,523.2511306012],description:"Cycle of 53 equal beating thirds"},temp57ebs:{frequencies:[261.6255653006,264.8277951114,268.04955507264,271.33445958124,274.63939933433,278.00911284632,281.39937814535,284.85609135359,288.33388628378,291.8798428433,295.4474281527,299.08493440323,302.74462553584,306.42663750246,310.18081323211,313.95788745209,317.80898926922,321.68357852782,325.63410692083,329.60872876069,333.66125215256,337.73849074816,341.89564167341,346.07814569972,350.28615866377,354.57664765081,358.89330206442,363.2945606359,367.72266219717,372.23755268366,376.77997919433,381.41143316036,386.07113633698,390.82216502962,395.60217018381,400.41132814233,405.3147417445,410.24806349136,415.27807310888,420.33876095689,425.4986359826,430.68997922537,435.98307052812,441.30844296951,446.73819252663,452.20105472878,457.69723413281,463.30113726238,468.93921588924,474.68780077646,480.47144432851,486.36844238798,492.30140788993,498.35065469266,504.4367956254,510.6422225112,516.88549425379,523.2511306012],description:"Cycle of 57 equal beating harmonic sevenths"},temp59ebt:{frequencies:[261.6255653006,264.71774803536,267.84005552541,271.00645194849,274.20369404321,277.44608402629,280.72006081878,284.04026812198,287.39281927261,290.79271098314,294.22572486522,297.70721418515,301.22261902261,304.78766466692,308.38743972219,312.03804524126,315.72421513091,319.46243532331,323.23707283878,327.06501147453,330.93024062011,334.83312418563,338.79111909993,342.78767359614,346.84065928187,350.93313112856,355.08338946648,359.27407840069,363.52394351295,367.81521017702,372.16707169716,376.56132871014,381.01763522853,385.51735474883,390.08061088885,394.68832388107,399.36109834092,404.07939600279,408.86431870994,413.69585627072,418.57446131049,423.52195428502,428.51764625978,433.58387848862,438.69946807471,443.88729218006,449.12565432864,454.4379830027,459.80206875391,465.24189440938,470.73471441434,476.30509804765,481.92974808423,487.63381799831,493.39345924022,499.23442935246,505.13230099895,511.11345315981,517.15287439575,523.2511306012],description:"Cycle of 59 equal beating thirds"},temp5ebf:{frequencies:[261.6255653006,300.99242152138,345.28013476976,397.76927639746,456.81956072863,523.2511306012],description:"Cycle of 5 equal beating fifths"},temp5ebs:{frequencies:[261.6255653006,300.72264357012,345.40501873528,396.4705903526,454.83124362955,523.2511306012],description:"Cycle of 5 equal beating harmonic sevenths"},temp6:{frequencies:[261.6255653006,292.50629174609,327.17562781541,373.91502405318,418.23333786749,467.5991148023,523.2511306012],description:"Tempered wholetone scale with approximations to 5/4 (4), 7/5 (4) and 7/4 (1)"},temp65ebf:{frequencies:[261.6255653006,264.41601755103,267.24454169377,270.11165630441,273.01788702098,275.96376822181,278.903505094,281.88335012505,284.90384796088,287.96555727487,291.06903608099,294.16604397209,297.30530343106,300.48739162418,303.71289539257,306.98240612292,310.29652144782,313.60372560746,316.95605020285,320.35411162765,323.7985328567,327.28994911888,330.77408078649,334.30574717623,337.88559766085,341.51429052286,345.19248907458,348.92086961342,352.64147345074,356.41283883338,360.23565716142,364.11063345825,368.0384739541,371.95812372083,375.93124824951,379.95858022583,384.04085801267,388.17883226226,392.30817269042,396.49385281186,400.73664000181,405.03730976228,409.39665754461,413.81548025993,418.22508312451,422.69484912531,427.22559773342,431.81816208034,436.47338166162,441.11888946365,445.82778005125,450.60091414809,455.43916939942,460.34343547357,465.31460883154,470.27541574397,475.30390033467,480.4009926512,485.56762723834,490.80474851567,496.03094699932,501.32844669322,506.69822455894,512.14126217109,517.65855736571,523.2511306012],description:"Cycle of 65 equal beating fifths"},temp65ebt:{frequencies:[261.6255653006,264.43406811535,267.2034679247,270.07937559507,272.91523803531,275.86016780291,278.76409255008,281.77970028627,284.75331888701,287.84130158502,290.886287826,294.04838131756,297.16644728835,300.4044304772,303.59732911309,306.91302510559,310.18255295306,313.57782661988,316.92582314139,320.40258196387,323.83093239735,327.39113302053,330.90176198948,334.36350914498,337.95839429282,341.50322405771,345.18438591943,348.81429298672,352.58380229516,356.30082494405,360.1608038988,363.96703524466,367.91965255368,371.81723365001,375.86471396542,379.85583700975,384.00045811272,388.08736764479,392.33145942297,396.5164558179,400.86240365726,405.1478399234,409.59809307723,413.98637838791,418.31356254814,422.80716945583,427.23820566351,431.83965831621,436.37704077554,441.08892851835,445.73520856761,450.56017999004,455.31796985254,460.25874195194,465.13071889642,470.19006822446,475.1789734801,480.35974823468,485.46838574269,490.77349931217,496.0047455553,501.43718079349,506.7939752079,512.35679191473,517.84214996629,523.2511306012],description:"Cycle of 65 equal beating thirds"},temp6eb2:{frequencies:[261.6255653006,293.46010680596,329.2739659995,369.56455759223,414.89147313404,465.88425311859,523.2511306012],description:"Cycle of 6 equal beating 9/8 seconds"},temp6s:{frequencies:[261.6255653006,271.93638072959,309.96730300827,353.31693843766,402.72911708552,459.05170412301,523.2511306012],description:"Cycle of 6 tempered harmonic sevenths, 6/5 and 4/3 minimax, Op de Coul, 2002"},temp6teb:{frequencies:[261.6255653006,314.31996068356,377.55323514312,453.43316449459,544.48907971635,653.75617798246,784.8766959018],description:"Cycle of 6 equal beating 6/5's in a twelfth"},"temp7-5ebf":{frequencies:[261.6255653006,272.53310095338,288.29512120063,313.54121701986,318.29837158817,352.05202827415,359.67534615791,387.61143614087,414.35283422339,427.61576999092,475.86500581459,472.62064557223,523.2511306012],description:"7 equal beating fifths on white, 5 equal beating fifths on black"},temp7ebf:{frequencies:[261.6255653006,288.29512120063,318.29837158817,352.05202827415,387.61143614087,427.61576999092,472.62064557223,523.2511306012],description:"Cycle of 7 equal beating fifths"},temp7ebnt:{frequencies:[261.6255653006,288.84289825546,318.65722544634,351.9228541964,388.36258888271,429.02057812008,473.55803233064,523.2511306012],description:"Cycle of 7 equal beating 11/9 neutral thirds"},temp8eb3q:{frequencies:[261.6255653006,285.27029088455,311.06453578321,339.20371183191,369.9009952302,403.38894083349,439.92124473489,479.77466958441,523.2511306012],description:`Cycle of 8 equal "beating" 12/11's`},temp9ebmt:{frequencies:[261.6255653006,282.57058469242,305.18178513943,329.6176429161,355.99737593287,384.50587463168,415.28223014648,448.54214811156,484.4478959333,523.2511306012],description:"Cycle of 9 equal beating 7/6 septimal minor thirds"},tenney_11:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,392.4383479509,408.78994578219,425.14154361347,457.84473927605,523.2511306012],description:`Scale of James Tenney's "Spectrum II" for wind quintet`},tertiadia:{frequencies:[261.6255653006,279.06726965397,297.67175429757,306.59245933664,327.03195662575,348.83408706747,372.08969287196,392.4383479509,418.60090448096,431.14564594215,459.88868900496,490.54793493862,523.2511306012],description:"Tertiadia 2048/2025 and 262144/253125 scale"},tertiadie:{frequencies:[261.6255653006,279.06726965397,297.67175429757,306.59245933664,327.03195662575,348.83408706747,372.08969287196,383.2405741708,408.78994578219,436.04260883433,476.27480687611,490.54793493862,523.2511306012],description:"First Tertiadie 262144/253125 and 128/125 scale"},tet3a:{frequencies:[261.6255653006,280.31310567921,313.95067836072,336.37572681506,366.27579142084,392.4383479509,418.60090448096,448.50096908674,523.2511306012],description:"Eight notes, two major one minor tetrad"},tetracot:{frequencies:[261.6255653006,266.81074454173,272.09868928948,277.49143626213,289.66902367154,295.4099985897,301.26475437609,307.23554606336,320.71844041089,327.07478634962,333.55710924695,340.16790585091,355.09602205939,362.13370020095,369.31085868177,376.6302618745,393.15851224787,400.95055410677,408.89702710335,417.00099192139,435.30089370336,443.92815899023,452.72640877864,461.69903182491,481.96048707062,491.51250279099,501.25383072009,523.2511306012],description:"tetracot temperament, g=176.28227, 5-limit"},"tetragam-di":{frequencies:[261.6255653006,279.06726965397,290.69507255622,290.69507255622,327.03195662575,348.83408706747,372.08969287196,392.4383479509,418.60090448096,436.04260883433,436.04260883433,457.84473927605,523.2511306012],description:"Tetragam Dia2"},"tetragam-enh":{frequencies:[261.6255653006,271.31540105247,279.06726965397,279.06726965397,327.03195662575,348.83408706747,366.27579142084,392.4383479509,406.97310157871,418.60090448096,418.60090448096,457.84473927605,523.2511306012],description:"Tetragam Enharm."},"tetragam-hex":{frequencies:[261.6255653006,271.31540105247,294.32876096318,305.22982618403,327.03195662575,343.38355445704,381.53728273004,392.4383479509,406.97310157871,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"Tetragam/Hexgam"},"tetragam-py":{frequencies:[261.6255653006,275.62199471997,294.32876096318,294.32876096318,331.11985608357,348.83408706747,372.50983809402,392.4383479509,413.43299207996,441.49314144476,441.49314144476,465.11211608996,523.2511306012],description:"Tetragam Pyth."},"tetragam-slpe":{frequencies:[261.6255653006,261.6255653006,300.52885648597,300.52885648597,279.06726965397,345.21700307457,348.83408706747,396.55020354877,455.51656649021,392.4383479509,455.51656649021,418.60090448096,523.2511306012],description:"Tetragam Slendro as 5-tET, Pelog-like pitches on C# E F# A B"},"tetragam-slpe2":{frequencies:[261.6255653006,261.6255653006,300.52885648597,300.52885648597,286.29520819723,345.21700307457,313.29104303136,396.55020354877,396.55020354877,387.04559340587,455.51656649021,423.54155496477,523.2511306012],description:"Tetragam Slendro as 5-tET, Pelog-like pitches on C# E F# A B"},"tetragam-sp":{frequencies:[261.6255653006,271.31540105247,271.31540105247,271.31540105247,336.37572681506,348.83408706747,366.27579142084,392.4383479509,406.97310157871,406.97310157871,406.97310157871,457.84473927605,523.2511306012],description:"Tetragam Septimal"},"tetragam-un":{frequencies:[261.6255653006,269.80136421624,285.40970760065,285.40970760065,319.76457981184,348.83408706747,359.73515228832,392.4383479509,404.70204632437,428.11456140098,428.11456140098,479.64686971777,523.2511306012],description:"Tetragam Undecimal"},tetragam13:{frequencies:[261.6255653006,275.95382006469,307.00724256551,307.00724256551,341.55514486295,341.55514486295,400.80167111126,400.80167111126,445.90437572008,445.90437572008,445.90437572008,496.08254310677,523.2511306012],description:"Tetragam (13-tET)"},tetragam5:{frequencies:[261.6255653006,300.52885648597,300.52885648597,300.52885648597,300.52885648597,345.21700307457,345.21700307457,396.55020354877,455.51656649021,455.51656649021,455.51656649021,455.51656649021,523.2511306012],description:"Tetragam (5-tET)"},tetragam7:{frequencies:[261.6255653006,288.85811466493,288.85811466493,288.85811466493,318.92511007349,352.12195684808,352.12195684808,388.77403176757,429.24143792307,429.24143792307,429.24143792307,473.92081401802,523.2511306012],description:"Tetragam (7-tET)"},tetragam8:{frequencies:[261.6255653006,285.30470202322,311.12698372208,311.12698372208,339.28638158975,339.28638158975,403.48177901006,403.48177901006,440,440,440,440,523.2511306012],description:"Tetragam (8-tET)"},tetragam9a:{frequencies:[261.6255653006,282.57118533961,305.19387818096,305.19387818096,329.62755691287,356.01738450312,415.30469757995,415.30469757995,448.55379686399,448.55379686399,448.55379686399,484.46508327871,523.2511306012],description:"Tetragam (9-tET) A"},tetragam9b:{frequencies:[261.6255653006,282.57118533961,282.57118533961,282.57118533961,305.19387818096,305.19387818096,384.52019141924,384.52019141924,415.30469757995,415.30469757995,415.30469757995,448.55379686399,523.2511306012],description:"Tetragam (9-tET) B"},tetraphonic_31:{frequencies:[261.6255653006,266.96486255163,272.52663052146,278.32506946872,284.37561445717,290.69507255622,297.30177875068,304.21577360535,311.45900631024,319.05556743976,327.03195662575,333.99008336247,341.25073734861,348.83408706747,356.76213450082,365.05892832642,373.75080757229,382.86668092771,392.4383479509,400.61414686654,409.13785211902,418.03215325205,427.32175665765,437.0336147635,447.19718719986,457.84473927605,467.58611670746,477.75103228805,488.36772189445,499.46698830115,511.08249965699,523.2511306012],description:"31-tone Tetraphonic Cycle, conjunctive form on 5/4, 6/5, 7/6 and 8/7"},tetratriad:{frequencies:[261.6255653006,294.32876096318,327.03195662575,348.83408706747,367.91095120397,392.4383479509,436.04260883433,441.49314144476,490.54793493862,523.2511306012],description:"4:5:6 Tetratriadic scale"},tetratriad1:{frequencies:[261.6255653006,290.69507255622,294.32876096318,327.03195662575,348.83408706747,392.4383479509,436.04260883433,441.49314144476,490.54793493862,523.2511306012],description:"3:5:9 Tetratriadic scale"},tetratriad2:{frequencies:[261.6255653006,296.75121990114,305.22982618403,356.10146388137,373.75080757229,415.4517078616,436.04260883433,448.50096908674,508.71637697339,523.2511306012],description:"3:5:7 Tetratriadic scale"},thailand:{frequencies:[261.6255653006,281.86483947605,307.02089761314,350.84574289301,397.92692612688,408.40584780369,474.03826620294,539.82938999168],description:"Observed ranat tuning from Thailand, Helmholtz/Ellis p. 518, nr.85"},thailand2:{frequencies:[261.6255653006,293.66476791741,318.39923223688,356.77227917518,391.76907592069,435.19747628762,477.88722128969,525.37110555681],description:"Observed ranat t'hong tuning, Helmholtz/Ellis p. 518"},thailand3:{frequencies:[261.6255653006,293.32570896007,322.47117131255,354.92237405774,396.55020354877,437.46578647972,488.21056770985,538.58355905405],description:"Observed tak'hay tuning. Helmholtz, p. 518"},thailand4:{frequencies:[261.6255653006,281.88044777549,304.38587215019,332.5176539627,392.71966479735,416.35036198375,461.923848369,523.2511306012,563.76089555097,608.77174430039,665.59794246809,786.00196746963,831.57545378481,924.97296635309,1046.5022612024,1127.52179110194],description:"Khong mon (bronze percussion vessels) tuning, Gemeentemuseum Den Haag 1/1=465"},thirds:{frequencies:[261.6255653006,272.52663052146,290.69507255622,313.95067836072,327.03195662575,348.83408706747,363.36884069528,392.4383479509,418.60090448096,436.04260883433,454.2110508691,502.32108537715,523.2511306012],description:"Major and minor thirds parallellogram"},thomas:{frequencies:[261.6255653006,280.80530480292,294.66217084622,313.95044496966,332.05645032639,350.21604710412,374.62015588545,391.99543598175,420.73257541073,441.99197952365,468.79922683914,499.49209883845,523.2511306012],description:"Tuning of the Thomas/Philpott organ, Gereformeerde Kerk, St. Jansklooster"},tiby1:{frequencies:[261.6255653006,295.66718139806,337.56154978455,348.04364484358,393.32961502355,444.50800708553,507.49227916989,523.2511306012],description:"Tiby's 1st Byzantine Liturgical genus, 12 + 13 + 3 parts"},tiby2:{frequencies:[261.6255653006,295.66718139806,311.12698372208,348.04364484358,393.32961502355,444.50800708553,467.75037672729,523.2511306012],description:"Tiby's second Byzantine Liturgical genus, 12 + 5 + 11 parts"},tiby3:{frequencies:[261.6255653006,295.66718139806,324.07484847125,348.04364484358,393.32961502355,444.50800708553,487.21628271135,523.2511306012],description:"Tiby's third Byzantine Liturgical genus, 12 + 9 + 7 parts"},tiby4:{frequencies:[261.6255653006,286.76251801126,324.07484847125,348.04364484358,393.32961502355,431.12067692221,487.21628271135,523.2511306012],description:"Tiby's fourth Byzantine Liturgical genus, 9 + 12 + 7 parts"},todi_av:{frequencies:[261.6255653006,276.38325105256,310.05056613125,371.27895029721,392.44854854484,413.39000965417,495.88429116026,523.2511306012],description:"Average of 8 interpretations of raga Todi, in B. Bel, 1988."},tonos15_pis:{frequencies:[261.6255653006,287.78812183066,319.76457981184,359.73515228832,383.71749577421,442.75095666255,479.64686971777,523.2511306012,548.16785110602,575.57624366132,639.52915962369,719.47030457665,767.43499154843,885.50191332511,959.29373943553,1046.5022612024],description:"Diatonic Perfect Immutable System in the new Tonos-15"},tonos17_pis:{frequencies:[261.6255653006,285.40970760065,313.95067836072,348.83408706747,369.35373924791,418.60090448096,483.00104363188,523.2511306012,546.00117975777,570.81941520131,627.90135672144,697.66817413493,738.70747849581,784.8766959018,897.00193817349,1046.5022612024],description:"Diatonic Perfect Immutable System in the new Tonos-17"},tonos19_pis:{frequencies:[261.6255653006,281.75060878526,305.22982618403,332.97799220076,385.55346465352,406.97310157871,457.84473927605,523.2511306012,542.63080210495,563.50121757052,610.45965236807,665.95598440153,771.10692930703,813.94620315742,915.6894785521,1046.5022612024],description:"Diatonic Perfect Immutable System in the new Tonos-19"},tonos21_pis:{frequencies:[261.6255653006,299.00064605783,322.00069575458,348.83408706747,398.6675280771,440.63253103259,465.11211608996,523.2511306012,558.13453930795,598.00129211566,644.00139150917,697.66817413493,797.33505615421,881.26506206518,930.22423217991,1046.5022612024],description:"Diatonic Perfect Immutable System in the new Tonos-21"},tonos23_pis:{frequencies:[261.6255653006,294.32876096318,336.37572681506,362.25078272391,409.50088481833,448.50096908674,470.92601754108,523.2511306012,554.03060887186,588.65752192635,672.75145363011,724.50156544782,819.00176963666,897.00193817349,941.85203508216,1046.5022612024],description:"Diatonic Perfect Immutable System in the new Tonos-23"},tonos25_pis:{frequencies:[261.6255653006,294.32876096318,336.37572681506,362.25078272391,376.74081403286,428.11456140098,470.92601754108,523.2511306012,554.03060887186,588.65752192635,672.75145363011,724.50156544782,753.48162806573,856.22912280196,941.85203508216,1046.5022612024],description:"Diatonic Perfect Immutable System in the new Tonos-25"},tonos27_pis:{frequencies:[261.6255653006,290.69507255622,327.03195662575,373.75080757229,387.59343007496,436.04260883433,498.33441009638,523.2511306012,550.79066379074,581.39014511244,654.0639132515,747.50161514457,775.18686014993,872.08521766867,996.66882019276,1046.5022612024],description:"Diatonic Perfect Immutable System in the new Tonos-27"},tonos29_pis:{frequencies:[261.6255653006,287.78812183066,319.76457981184,359.73515228832,396.94913355953,442.75095666255,479.64686971777,523.2511306012,548.16785110602,575.57624366132,639.52915962369,719.47030457665,793.89826711906,885.50191332511,959.29373943553,1046.5022612024],description:"Diatonic Perfect Immutable System in the new Tonos-29"},tonos31_pis:{frequencies:[261.6255653006,273.51763645063,300.86940009569,334.29933343966,388.21858076863,429.81342870813,462.87600014722,501.44900015948,523.2511306012,547.03527290125,601.73880019138,668.59866687931,776.43716153726,859.62685741626,925.75200029443,1046.5022612024],description:"Diatonic Perfect Immutable System in the new Tonos-31"},tonos31_pis2:{frequencies:[261.6255653006,285.40970760065,313.95067836072,348.83408706747,405.0976494977,448.50096908674,483.00104363188,523.2511306012,546.00117975777,570.81941520131,627.90135672144,697.66817413493,810.19529899541,897.00193817349,966.00208726375,1046.5022612024],description:"Diatonic Perfect Immutable System in the new Tonos-31B"},tonos33_pis:{frequencies:[261.6255653006,285.40970760065,313.95067836072,348.83408706747,380.54627680087,418.60090448096,465.11211608996,523.2511306012,546.00117975777,570.81941520131,627.90135672144,697.66817413493,761.09255360175,837.20180896192,930.22423217991,1046.5022612024],description:"Diatonic Perfect Immutable System in the new Tonos-33"},top31:{frequencies:[261.6255653006,267.49189720203,273.48976766293,279.62212612306,285.89198815637,292.30243695391,298.85662483994,305.55777482212,312.40918217641,319.41421606749,326.57632120555,333.89901954025,341.38591199258,349.04068022565,358.99452880887,367.04412845091,375.2742212459,383.6888543241,392.29216556304,401.08838562235,410.08184002413,419.27695128006,428.67824106611,438.29033244612,448.11795214515,458.16593287385,468.4392157049,478.94285250284,489.68200840824,500.66196437769,511.88811978069,523.36599505479],description:"Top temperament, 11-limit, {225/224, 385/384, 1331/1323}, Gene Ward Smith"},trab19:{frequencies:[261.6255653006,279.06726965397,294.32876096318,297.67175429757,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,367.91095120397,372.08969287196,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,459.88868900496,465.11211608996,490.54793493862,523.2511306012],description:"Diamond {1,3,5,45,75,225}"},trab19a:{frequencies:[261.6255653006,279.06726965397,294.32876096318,297.67175429757,306.59245933664,313.95067836072,327.03195662575,344.91651675372,348.83408706747,367.91095120397,372.08969287196,392.4383479509,396.89567239676,418.60090448096,436.04260883433,446.50763144636,459.88868900496,465.11211608996,490.54793493862,523.2511306012],description:"Diamond {1,3,9,15,675}"},tranh:{frequencies:[261.6255653006,290.69507255622,348.83408706747,392.4383479509,436.04260883433,523.2511306012],description:"Bac Dan Tranh scale, Vietnam"},tranh2:{frequencies:[261.6255653006,290.69507255622,307.79478270659,392.4383479509,436.04260883433,523.2511306012],description:"Dan Ca Dan Tranh Scale"},tranh3:{frequencies:[261.6255653006,317.68818643644,348.83408706747,392.4383479509,473.41768959156,476.53227965466,523.2511306012],description:"Sa Mac Dan Tranh scale"},"tri12-1":{frequencies:[261.6255653006,264.29521392612,275.21650375777,319.76457981184,323.02748368748,332.97799220076,336.37572681506,406.97310157871,411.12588832951,428.11456140098,432.48307733364,502.48719684718,523.2511306012],description:"12-tone Tritriadic of 7:9:11"},"tri12-2":{frequencies:[261.6255653006,294.32876096318,305.22982618403,336.37572681506,348.83408706747,356.10146388137,392.4383479509,406.97310157871,448.50096908674,457.84473927605,474.80195184183,504.56359022259,523.2511306012],description:"12-tone Tritriadic of 6:7:9"},"tri19-1":{frequencies:[261.6255653006,266.96486255163,269.10058145205,305.22982618403,311.45900631024,313.95067836072,320.35783506196,356.10146388137,363.36884069528,366.27579142084,373.75080757229,376.74081403286,384.42940207435,427.32175665765,436.04260883433,439.53094970501,448.50096908674,508.71637697339,512.78610798918,523.2511306012],description:"3:5:7 Tritriadic 19-Tone Matrix"},"tri19-2":{frequencies:[261.6255653006,282.55561052465,290.69507255622,294.32876096318,313.95067836072,322.99452506247,327.03195662575,348.83408706747,353.19451315581,363.36884069528,376.74081403286,387.59343007496,392.4383479509,418.60090448096,423.83341578697,436.04260883433,465.11211608996,470.92601754108,484.4917875937,523.2511306012],description:"3:5:9 Tritriadic 19-Tone Matrix"},"tri19-3":{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,313.95067836072,327.03195662575,334.88072358477,348.83408706747,363.36884069528,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,465.11211608996,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"4:5:6 Tritriadic 19-Tone Matrix"},"tri19-4":{frequencies:[261.6255653006,264.89588486686,290.69507255622,294.32876096318,322.99452506247,327.03195662575,331.11985608357,334.88072358477,363.36884069528,367.91095120397,372.08969287196,376.74081403286,408.78994578219,413.43299207996,418.60090448096,423.83341578697,465.11211608996,470.92601754108,516.79124009995,523.2511306012],description:"4:5:9 Tritriadic 19-Tone Matrix"},"tri19-5":{frequencies:[261.6255653006,266.96486255163,284.8811711051,290.69507255622,302.73815413355,316.53463456122,322.99452506247,329.64821227876,336.37572681506,366.27579142084,373.75080757229,406.97310157871,415.27867508032,423.83341578697,432.48307733364,452.19233508746,470.92601754108,480.53675259294,512.78610798918,523.2511306012],description:"5:7:9 Tritriadic 19-Tone Matrix"},"tri19-6":{frequencies:[261.6255653006,267.07609791103,294.32876096318,299.00064605783,305.22982618403,336.37572681506,341.71502406609,343.38355445704,348.83408706747,356.10146388137,384.42940207435,392.4383479509,398.6675280771,400.61414686654,406.97310157871,448.50096908674,457.84473927605,465.11211608996,512.57253609913,523.2511306012],description:"6:7:8 Tritriadic 19-Tone Matrix"},"tri19-7":{frequencies:[261.6255653006,271.31540105247,288.32205155576,294.32876096318,299.00064605783,305.22982618403,316.53463456122,336.37572681506,348.83408706747,356.10146388137,384.42940207435,392.4383479509,406.97310157871,432.48307733364,448.50096908674,457.84473927605,465.11211608996,474.80195184183,504.56359022259,523.2511306012],description:"6:7:9 Tritriadic 19-Tone Matrix"},"tri19-8":{frequencies:[261.6255653006,264.29521392612,272.43653907335,275.21650375777,316.53463456122,319.76457981184,323.02748368748,332.97799220076,336.37572681506,350.27555023717,390.82337532559,406.97310157871,411.12588832951,423.79017189188,428.11456140098,432.48307733364,497.4115685962,502.48719684718,517.96576564563,523.2511306012],description:"7:9:11 Tritriadic 19-Tone Matrix"},"tri19-9":{frequencies:[261.6255653006,266.96486255163,286.15296204753,293.02063313667,299.00064605783,320.49131749323,327.03195662575,334.88072358477,341.71502406609,366.27579142084,373.75080757229,400.61414686654,408.78994578219,418.60090448096,427.14378008261,457.84473927605,467.18850946536,478.40103369253,512.78610798918,523.2511306012],description:"4:5:7 Tritriadic 19-Tone Matrix"},triang11:{frequencies:[261.6255653006,294.32876096318,305.22982618403,313.95067836072,327.03195662575,348.83408706747,359.73515228832,366.27579142084,373.75080757229,380.54627680087,392.4383479509,418.60090448096,436.04260883433,448.50096908674,465.11211608996,523.2511306012],description:"11-limit triangular diamond lattice with 64/63 intervals removed"},triaphonic_12:{frequencies:[261.6255653006,275.39533189537,290.69507255622,307.79478270659,327.03195662575,348.83408706747,367.19377586049,387.59343007496,410.39304360878,436.04260883433,461.69217405988,490.54793493862,523.2511306012],description:"12-tone Triaphonic Cycle, conjunctive form on 4/3, 5/4 and 6/5"},triaphonic_17:{frequencies:[261.6255653006,271.31540105247,281.75060878526,293.02063313667,305.22982618403,318.50068819203,332.97799220076,348.83408706747,361.75386806997,375.66747838035,390.69417751556,406.97310157871,422.62591317789,439.53094970501,457.84473927605,477.75103228805,499.46698830115,523.2511306012],description:"17-tone Triaphonic Cycle, conjunctive form on 4/3, 7/6 and 9/7"},trichord7:{frequencies:[261.6255653006,294.32876096318,305.22982618403,327.03195662575,343.38355445704,348.83408706747,392.4383479509,436.04260883433,441.49314144476,457.84473927605,490.54793493862,523.2511306012],description:"Trichordal undecatonic, 7-limit"},tricot:{frequencies:[261.6255653006,264.94025538413,268.70564228797,272.11003565477,275.55755973666,279.4738436282,283.01466417842,286.6003471482,290.673570175,294.35628843049,298.08566525814,302.32211998602,306.15242072385,310.03124984507,314.43747949204,318.42127516569,322.45554578164,327.03835025925,331.18179578139,335.37773516927,339.62683737367,344.45368576554,348.81777463097,353.23715677741,358.25743790514,362.79641682209,367.39290067029,372.61436622199,377.33523951767,382.11592657559,387.54663888312,392.45669803325,397.4289679423,403.0773124301,408.18413893183,413.35566924724,419.23036738005,424.541846554,429.92062250389,436.03074525334,441.55507841911,447.14940523431,453.50438708518,459.25010687752,465.06861996272,470.9608512551,477.65424916833,483.70593529179,489.8342966599,496.79592520903,503.09012862502,509.46407999504,516.70469117363,523.2511306012],description:"Tricot temperament, g=565.988015, 5-limit"},tritriad:{frequencies:[261.6255653006,294.32876096318,313.95067836072,348.83408706747,392.4383479509,418.60090448096,470.92601754108,523.2511306012],description:"Tritriadic scale of the 10:12:15 triad, natural minor mode"},tritriad10:{frequencies:[261.6255653006,274.70684356563,294.32876096318,348.83408706747,366.27579142084,392.4383479509,488.36772189445,523.2511306012],description:"Tritriadic scale of the 10:14:15 triad"},tritriad11:{frequencies:[261.6255653006,309.19384990071,356.76213450082,383.71749577421,421.62797713733,453.48431318771,486.49381977384,523.2511306012],description:"Tritriadic scale of the 11:13:15 triad"},tritriad13:{frequencies:[261.6255653006,294.32876096318,340.11323489078,348.83408706747,392.4383479509,453.48431318771,510.16985233617,523.2511306012],description:"Tritriadic scale of the 10:13:15 triad"},tritriad14:{frequencies:[261.6255653006,294.32876096318,336.37572681506,348.83408706747,392.4383479509,448.50096908674,504.56359022259,523.2511306012],description:"Tritriadic scale of the 14:18:21 triad"},tritriad18:{frequencies:[261.6255653006,294.32876096318,319.76457981184,348.83408706747,392.4383479509,426.35277308246,479.64686971777,523.2511306012],description:"Tritriadic scale of the 18:22:27 triad"},tritriad22:{frequencies:[261.6255653006,294.32876096318,321.08592105074,348.83408706747,392.4383479509,428.11456140098,481.6288815761,523.2511306012],description:"Tritriadic scale of the 22:27:33 triad"},tritriad26:{frequencies:[261.6255653006,294.32876096318,301.87565226992,348.83408706747,392.4383479509,402.50086969323,452.81347840488,523.2511306012],description:"Tritriadic scale of the 26:30:39 triad"},tritriad3:{frequencies:[261.6255653006,305.22982618403,356.10146388137,373.75080757229,436.04260883433,448.50096908674,508.71637697339,523.2511306012],description:"Tritriadic scale of the 3:5:7 triad. Possibly Mathews's 3.5.7a"},tritriad32:{frequencies:[261.6255653006,294.32876096318,322.00069575458,348.83408706747,392.4383479509,429.33426100611,483.00104363188,523.2511306012],description:"Tritriadic scale of the 26:32:39 triad"},tritriad3c:{frequencies:[261.6255653006,305.22982618403,366.27579142084,373.75080757229,427.32175665765,436.04260883433,512.78610798918,523.2511306012],description:"From 1/1 7/6 7/5, a variant of the 3.5.7 triad"},tritriad3d:{frequencies:[261.6255653006,305.22982618403,313.95067836072,363.36884069528,366.27579142084,436.04260883433,508.71637697339,523.2511306012],description:"From 1/1 7/6 5/3, a variant of the 3.5.7 triad"},tritriad5:{frequencies:[261.6255653006,290.69507255622,329.64821227876,366.27579142084,406.97310157871,423.83341578697,470.92601754108,523.2511306012],description:"Tritriadic scale of the 5:7:9 triad. Possibly Mathews's 5.7.9a."},tritriad68:{frequencies:[261.6255653006,305.22982618403,348.83408706747,392.4383479509,406.97310157871,457.84473927605,465.11211608996,523.2511306012],description:"Tritriadic scale of the 6:7:8 triad"},tritriad68i:{frequencies:[261.6255653006,299.00064605783,348.83408706747,392.4383479509,398.6675280771,448.50096908674,465.11211608996,523.2511306012],description:"Tritriadic scale of the subharmonic 6:7:8 triad"},tritriad69:{frequencies:[261.6255653006,294.32876096318,305.22982618403,348.83408706747,392.4383479509,406.97310157871,457.84473927605,523.2511306012],description:"Tritriadic scale of the 6:7:9 triad, septimal natural minor"},tritriad7:{frequencies:[261.6255653006,264.29521392612,323.02748368748,332.97799220076,336.37572681506,411.12588832951,428.11456140098,523.2511306012],description:"Tritriadic scale of the 7:9:11 triad"},tritriad9:{frequencies:[261.6255653006,272.93037367779,319.76457981184,362.25078272391,377.90359432309,442.75095666255,461.88217083933,523.2511306012],description:"Tritriadic scale of the 9:11:13 triad"},tsjerepnin:{frequencies:[261.6255653006,290.69507255622,313.95067836072,348.83408706747,367.91095120397,392.4383479509,418.60090448096,470.92601754108,490.54793493862,523.2511306012],description:"Scale from Ivan Tsjerepnin's Santur Opera (1977) & suite from it Santur Live!"},tsuda13:{frequencies:[261.6255653006,281.75060878526,283.42769574232,322.00069575458,340.11323489078,362.25078272391,377.90359432309,402.50086969323,425.14154361347,442.75095666255,485.87604984397,518.26778650024,523.2511306012],description:"Mayumi Tsuda's Harmonic-13 scale. 1/1=440 Hz."},tuneable3:{frequencies:[36.70809598968,41.95210970249,42.82611198796,43.59086398774,44.04971518762,44.86545065405,45.8851199871,46.71939489596,47.1961234153,47.72052478658,48.94412798624,49.55592958607,50.47363198581,51.39133438555,52.00313598538,52.44013712811,53.02280531843,53.39359416681,55.06214398452,57.10148265061,57.68415084093,58.73295358349,59.65065598323,61.1801599828,62.40376318246,62.92816455374,64.23916798194,66.07457278142,66.74199270851,67.29817598108,68.17217826655,68.82767998065,70.35718398022,73.41619197936,79.53420797764,80.7578111773,82.59321597678,85.65222397592,87.18172797549,88.09943037523,89.14823311779,89.73090130811,90.10169015649,91.7702399742,94.39224683061,95.44104957317,96.35875197291,97.88825597248,100.94726397162,102.7826687711,104.00627197076,104.88027425623,105.53577597033,110.12428796904,114.20296530123,114.71279996775,115.36830168185,116.24230396732,117.46590716698,119.30131196646,120.61231539466,122.3603199656,123.88982396517,124.80752636491,125.85632910747,128.47833596388,132.14914556285,134.59635196216,137.6553599613,139.49076476078,140.71436796044,141.58837024591,146.83238395872,152.950399957,154.17400315666,156.00940795614,159.06841595528,161.51562235459,165.18643195356,168.85724155253,171.30444795184,174.36345595098,176.19886075046,183.5404799484,190.88209914634,192.71750394582,195.77651194496,201.89452794324,205.56533754221,208.01254394152,211.07155194066,220.24857593808,229.4255999355,232.48460793464,238.60262393292,244.7206399312,247.77964793034,256.95667192776,269.19270392432,275.3107199226,281.42873592088,293.66476791744],description:"Marc Sabat, 3 octaves of intervals tuneable by ear"},tuners1:{frequencies:[261.6255653006,276.50456653385,293.15590636358,311.0676370396,328.627540632,349.28088891463,369.11955599459,391.76814585061,414.75684959346,439.06365754828,466.60145532616,492.6062100846,523.2511306012],description:"The Tuner's Guide well temperament no. 1 (1840)"},tuners2:{frequencies:[261.6255653006,276.9861853325,293.55936848273,311.27971878774,329.48489606404,349.42029142443,369.90111701824,391.99869425741,415.03962525779,439.89939957166,466.4799232208,493.78769382322,523.2511306012],description:"The Tuner's Guide well temperament no. 2 (1840)"},tuners3:{frequencies:[261.6255653006,276.9180796764,293.64050032496,311.25753558078,329.38199580693,349.20116137147,369.59117881045,391.8877401954,415.37711930697,439.91014033466,466.33569310799,493.52238512763,523.2511306012],description:"The Tuner's Guide well temperament no. 3 (1840)"},turkish:{frequencies:[261.6255653006,279.06726965397,327.03195662575,348.83408706747,392.4383479509,436.04260883433,465.11211608996,523.2511306012],description:"Turkish, 5-limit from Palmer on a Turkish music record, harmonic minor inverse"},turkish_24:{frequencies:[261.6255653006,275.62199471997,279.38237857051,290.36720431405,294.32876096318,310.07474405997,314.30517589183,326.6631048533,331.11985608357,344.13890881665,348.83408706747,367.49599295996,372.50983809402,387.15627241873,392.4383479509,413.43299207996,419.07356785577,435.55080647107,441.49314144476,458.8518784222,465.11211608996,489.99465727995,496.67978412536,516.20836322497,523.2511306012],description:"Ra'uf Yekta, 24-tone Pythagorean Turkish Theoretical Gamut, 1/1=D (perde yegah) at 294 Hz"},turkish_24a:{frequencies:[261.6255653006,275.62199471997,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,331.11985608357,344.52749339997,348.83408706747,367.91095120397,372.08969287196,387.59343007496,392.4383479509,413.43299207996,418.60090448096,436.04260883433,441.49314144476,459.36999119996,465.11211608996,490.54793493862,496.67978412536,516.79124009995,523.2511306012],description:"Turkish gamut with schismatic simplifications"},turkish_41:{frequencies:[261.6255653006,266.80864394988,272.09440643071,275.67629620338,281.13773466533,286.70737164501,290.48162858661,294.30556868769,300.13607443832,306.08208692954,310.11139540064,316.25503135793,322.52037740267,326.76608188608,333.2396629384,339.84149442859,344.31521657963,348.8478314504,355.75887527351,362.80683626646,367.58287746967,374.8650823332,382.29155536296,387.32409620162,392.42288612931,400.19720009986,408.12552912594,413.49815209867,421.6899870258,430.04411333507,435.70527569249,441.44096240275,450.1863739015,459.10504388656,465.14876849982,474.36385666592,483.76150545705,490.12981126508,499.83980314828,509.74215733443,516.45247616827,523.2511306012],description:"Abd\xEF\xBF\xBDlkadir T\xEF\xBF\xBDre and M. Ekrem Karadeniz theoretical Turkish gamut"},turkish_41a:{frequencies:[261.6255653006,268.5590565112,272.09440643071,275.67629620338,279.3053384865,286.70737164501,290.48162858661,294.30556868769,298.17984938441,306.08208692954,310.11139540064,314.19374626607,322.52037740267,326.76608188608,335.42589979828,339.84149442859,344.31521657963,348.8478314504,353.4401143131,362.80683626646,367.58287746967,377.32440283229,382.29155536296,387.32409620162,392.42288612931,402.82271318249,408.12552912594,413.49815209867,424.45650702809,430.04411333507,435.70527569249,441.44096240275,453.1398459935,459.10504388656,465.14876849982,477.47594368525,483.76150545705,490.12981126508,503.11902634639,509.74215733443,516.45247616827,523.2511306012],description:"Karadeniz's theoretical Turkish gamut, quantized to subset of 53-tET"},turkish_aeu:{frequencies:[261.6255653006,275.62199471997,279.38237857051,290.36720431405,294.32876096318,310.07474405997,314.30517589183,326.6631048533,331.11985608357,348.83408706747,353.59332287831,367.49599295996,372.50983809402,387.15627241873,392.4383479509,413.43299207996,419.07356785577,435.55080647107,441.49314144476,465.11211608996,471.45776383774,489.99465727995,496.67978412536,516.20836322497,523.2511306012],description:"Arel-Ezgi-Uzdilek (AEU) 24 tone theoretical system"},turkish_bagl:{frequencies:[261.6255653006,277.01530443593,285.40970760065,294.32876096318,311.64221749042,321.08592105074,331.11985608357,348.83408706747,369.35373924791,380.54627680087,392.4383479509,415.52295665389,428.11456140098,441.49314144476,465.11211608996,492.47165233054,507.3950357345,523.2511306012],description:'Ratios of the 17 frets on the neck of "Baglama" ("saz") according to Yal\xEF\xBF\xBD\xEF\xBF\xBDn Tura'},two29:{frequencies:[261.6255653006,265.43099677612,267.95417262175,271.85165581044,274.43586616969,278.42762776199,281.0743490329,285.16266958193,287.87341387594,292.06062910037,294.83694510625,299.12544722478,301.96892109338,306.36116019141,309.2734164419,313.77190187131,316.75460431924,321.36190613206,324.41675883995,329.13550925662,332.26425750751,337.09715242073,340.3015837153,345.25138423021,348.53332930799,353.60286331966,356.96419720496,362.15636101402,365.59900408717,370.91676405444,374.44268531179,379.88907958456,383.50028913155,389.07842928561,392.77699240278,398.49006531303,402.2780950448,408.12936467525,412.00902517967,418.00183444819,421.97534223334,428.1131149215,432.1827401118,438.46898282094,442.63705045414,449.07535460876,453.34424596425,459.9382898638,464.31044382305,471.06399474345,475.54190918343,482.45882552933,487.04505874954,494.12929225872,498.82646444278,506.0820624438,510.89285715645,518.32396488098,523.2511306012],description:"Two 29-tET scales 25 cents shifted, many near just intervals"},two29a:{frequencies:[261.6255653006,264.02813680074,267.95417262175,270.41486126945,274.43586616969,276.95607779319,281.0743490329,283.65552346679,287.87341387594,290.51702578379,294.83694510625,297.54450482308,301.96892109338,304.74197548856,309.2734164419,312.11354980287,316.75460431924,319.66343925668,324.41675883995,327.39595721478,332.26425750751,335.31552138031,340.3015837153,343.42665631876,348.53332930799,351.73399604284,356.96419720496,360.24228665998,365.59900408717,368.95638908389,374.44268531179,377.88128181162,383.50028913155,387.02206376789,392.77699240278,396.38395721814,402.2780950448,405.97231075214,412.00902517967,415.79260233969,421.97534223334,425.85044246025,432.1827401118,436.15157730833,442.63705045414,446.70189207635,453.34424596425,457.50741431695,464.31044382305,468.5743173866,475.54190918343,479.90892674463,487.04505874954,491.51771254425,498.82646444278,503.40730976502,510.89285715645,515.58451111167,523.2511306012],description:"Two 29-tET scales 15.826 cents shifted, 13-limit chords, Mystery temperament, Gene Ward Smith"},xenakis_chrom:{frequencies:[261.6255653006,274.52698453615,329.62755691287,349.22823143301,391.99543598175,411.32572372413,493.88330125613,523.2511306012],description:"Xenakis's Byzantine Liturgical mode, 5 + 19 + 6 parts"},xenakis_diat:{frequencies:[261.6255653006,293.66476791741,326.46944327063,349.22823143301,391.99543598175,440,489.15147723638,523.2511306012],description:"Xenakis's Byzantine Liturgical mode, 12 + 11 + 7 parts"},xenakis_schrom:{frequencies:[261.6255653006,279.86396690685,326.46944327063,349.22823143301,391.99543598175,419.32216217931,489.15147723638,523.2511306012],description:"Xenakis's Byzantine Liturgical mode, 7 + 16 + 7 parts"},xenoga24:{frequencies:[261.6255653006,265.7783520514,279.38237857051,283.8170195002,294.32876096318,299.00064605783,310.07474405997,314.99656539426,331.11985608357,336.37572681506,348.83408706747,354.37113606854,372.50983809402,378.42269266694,392.4383479509,398.6675280771,419.07356785577,425.72552925031,441.49314144476,448.50096908674,465.11211608996,472.49484809138,496.67978412536,504.56359022259,523.2511306012],description:"M. Schulter, 3+7 ratios Xeno-Gothic adaptive tuning (keyboards 64:63 apart)"},xylophone2:{frequencies:[261.6255653006,295.19538981304,332.68808325276,388.83826257328,446.65787257783,506.59641128799,527.19506190947,579.57827742703,633.13077520476,751.1860077911,842.69088701475],description:"African Yaswa xylophones (idiophone; calbash resonators with membrane)"},xylophone3:{frequencies:[261.6255653006,292.47977325983,348.01999353916,392.4383479509,442.29334161825,523.2511306012],description:"African Banyoro xylophone (idiophone; loose log)"},xylophone4:{frequencies:[261.6255653006,281.70207497315,314.1971709147,349.63190883464,391.76907592069,436.9606979923,505.71930677521,568.9637969584,597.94115990992,660.7800775993,716.43551549302],description:"African Bapare xylophone (idiophone, loose-log)"},zalzal:{frequencies:[261.6255653006,294.32876096318,321.08592105074,348.83408706747,392.4383479509,428.11456140098,465.11211608996,523.2511306012],description:"Tuning of popular flute by Al Farabi & Zalzal. First tetrachord is modern Rast"},zalzal2:{frequencies:[261.6255653006,294.32876096318,331.11985608357,348.83408706747,387.59343007496,419.89288258121,465.11211608996,523.2511306012],description:"Zalzal's Scale, a medieval Islamic with Ditone Diatonic & 10/9 x 13/12 x 72/65"},zarlino:{frequencies:[261.6255653006,294.32876096318,327.03195662575,348.83408706747,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"Ptolemy's Intense Diatonic Systonon, also Zarlino's scale"},zarlino2:{frequencies:[261.6255653006,272.52663052146,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,348.83408706747,363.36884069528,367.91095120397,392.4383479509,408.78994578219,436.04260883433,465.11211608996,470.92601754108,490.54793493862,523.2511306012],description:"16-note choice system of Zarlino, Sopplimenti musicali (1588)"},zartehijaz1:{frequencies:[261.6255653006,280.55696721076,336.07142343876,350.07440004945,375.4060213132,393.89732161404,446.43551156053,468.42549744394,502.32108537715,523.2511306012],description:"Scale from Zarlino temperament extraordinaire -- lower Hijaz tetrachord"},zesster_a:{frequencies:[261.6255653006,279.06726965397,313.95067836072,334.88072358477,348.83408706747,392.4383479509,418.60090448096,502.32108537715,523.2511306012],description:"Harmonic six-star, group A, from Fokker"},zesster_b:{frequencies:[261.6255653006,293.02063313667,299.00064605783,334.88072358477,366.27579142084,418.60090448096,457.84473927605,478.40103369253,523.2511306012],description:"Harmonic six-star, group B, from Fokker"},zesster_c:{frequencies:[261.6255653006,299.00064605783,305.22982618403,348.83408706747,398.6675280771,406.97310157871,457.84473927605,465.11211608996,523.2511306012],description:"Harmonic six-star, group C on Eb, from Fokker"},zesster_mix:{frequencies:[261.6255653006,274.70684356563,279.06726965397,293.02063313667,299.00064605783,313.95067836072,334.88072358477,348.83408706747,358.80077526939,366.27579142084,392.4383479509,418.60090448096,457.84473927605,478.40103369253,488.36772189445,502.32108537715,523.2511306012],description:"Harmonic six-star, groups A, B and C mixed, from Fokker"},zest24:{frequencies:[261.6255653006,269.33468959023,272.52663052146,280.55696721076,292.24684137387,300.8582598368,308.87634556583,317.97777315513,326.45210604021,336.07142343876,350.07440004945,360.38977980792,364.66083404534,375.4060213132,391.04793957621,402.57065589001,410.30971075781,422.39999923493,436.81711699543,449.68847932918,465.03699205118,478.73988827571,487.94322738789,502.32108537715,523.2511306012],description:"Zarlino Extraordinaire Spectrum Temperament (two circles at ~50.28c apart)"},zir_bouzourk:{frequencies:[261.6255653006,281.75060878526,305.22982618403,313.95067836072,353.19451315581,392.4383479509,523.2511306012],description:"Zirafkend Bouzourk (IG #3, DF #9), from both Rouanet and Safi al-Din"},zwolle:{frequencies:[261.6255653006,275.62199471997,294.32876096318,310.07474405997,331.11985608357,348.83408706747,367.49599295996,392.4383479509,413.43299207996,441.49314144476,465.11211608996,496.67978412536,523.2511306012],description:"Henri Arnaut De Zwolle. Pythagorean on G flat."},zwolle2:{frequencies:[261.6255653006,273.37431312998,292.50627485027,311.68386704488,327.03195662575,349.91912034749,365.63284274659,391.22147055517,408.78994578219,437.39890198442,467.04206359353,489.02683710225,523.2511306012],description:"Henri Arnaut De Zwolle's modified meantone tuning (c. 1440)"},yarman12:{frequencies:[261.6255653006,283.42769574232,294.32876096318,309.19384990071,332.97799220076,348.83408706747,377.90359432309,392.4383479509,411.12588832951,442.75095666255,465.11211608996,499.46698830115,523.2511306012],description:"Detempered Yarman 13-limit, [<1 1 -20 -6 -3 -1|, <0 1 38 15 11 8|]"},yarman12_80:{frequencies:[261.6255653006,282.84340331238,295.36595061166,319.3201344739,333.45764463229,348.2210758395,376.46181130035,393.12919962609,425.01198472693,443.82887286778,479.82340237272,501.06699929295,523.2511306012],description:"Ozan Yarman MOS, 80-et version"},yarman17:{frequencies:[261.6255653006,274.08392555301,283.42769574232,294.32876096318,309.19384990071,322.00069575458,332.97799220076,348.83408706747,362.25078272391,377.90359432309,392.4383479509,411.12588832951,425.14154361347,442.75095666255,465.11211608996,485.87604984397,499.46698830115,523.2511306012],description:"80-et commas 13-limit detempering of a chain of 16 fifths"},"yarman_ney-ahengs":{frequencies:[261.6255653006,275.39533189537,294.32876096318,310.07474405997,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.43299207996,436.04260883433,465.11211608996,494.18162334558,523.2511306012],description:"Well Temperament for piano by Ozan Yarman from Ney Ahengs"},yasser_6:{frequencies:[261.6255653006,291.88463270656,325.64340264099,363.30663963964,405.32593044476,452.20508247496,523.2511306012],description:"Yasser Hexad, 6 of 19 as whole tone scale"},yasser_diat:{frequencies:[261.6255653006,281.42815779395,291.88463270656,313.97755176024,325.64340264099,350.29154279212,376.80531512858,390.80553229045,420.38583225541,436.00528786292,469.00678383895,486.43275040712,523.2511306012],description:"Yasser's Supra-Diatonic, the flat notes are V,W,X,Y,and Z"},yasser_ji:{frequencies:[261.6255653006,282.64904822654,294.32876096318,304.39128270551,327.03195662575,347.87575166344,359.73515228832,391.36022062136,425.14154361347,434.84468957929,457.84473927605,478.32915853722,523.2511306012],description:"Yasser's just scale, 2 Yasser hexads, 121/91 apart"},yekta:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,372.08969287196,392.4383479509,418.60090448096,436.04260883433,470.92601754108,502.32108537715,523.2511306012],description:"Rauf Yekta's 12-tone tuning suggested in 1922 Lavignac Music Encyclopedia"},"young-g":{frequencies:[261.6255653006,299.07507698093,319.76457981184,341.88537054616,390.82337532559,446.76650366117,477.67301428683,510.71739232152,583.82257301724,667.39198333921,713.56092257662,762.92356430953,872.13001648254,996.96833978235,1065.93668681199,1139.67601990796,1302.81150610354,1489.29848625885,1592.32474578757,1702.47910946196,1946.17475603251,2224.75468143463,2378.65811671778,2543.20970830682,2907.24890901465,3323.39919648924,3553.30434397593,3799.11599765247,4342.92768045015],description:"Gayle Young's Harmonium, see PNM 26(2): 204-212 (1988)"},"young-lm_guitar":{frequencies:[261.6255653006,279.06726965397,290.69507255622,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"LaMonte Young, Tuning of For Guitar '58. 1/1 March '92, inv.of Mersenne lute 1"},"young-lm_piano":{frequencies:[261.6255653006,289.72987407313,294.32876096318,300.46061014991,343.38355445704,338.01818641865,386.30649876417,392.4383479509,400.61414686654,457.84473927605,450.69091522486,515.07533168556,523.2511306012],description:"LaMonte Young's Well-Tempered Piano"},"young-w10":{frequencies:[261.6255653006,277.18263097687,302.26980244078,320.24370022528,349.22823143301,369.99442271164,391.99543598175,427.47405410759,452.89298412314,493.88330125613,523.2511306012],description:"William Lyman Young 10 out of 24-tET (1961)"},"young-w14":{frequencies:[261.6255653006,277.18263097687,293.66476791741,302.26980244078,320.24370022528,339.28638158975,359.46139971304,369.99442271164,391.99543598175,415.30469757995,427.47405410759,452.89298412314,479.82340237272,508.3551866238,523.2511306012],description:"William Lyman Young 14 out of 24-tET (1961)"},"young-wt":{frequencies:[261.6255653006,285.40970760065,309.19384990071,348.83408706747,392.4383479509,428.11456140098,463.79077485106,523.2511306012],description:'William Lyman Young "exquisite 3/4 tone Hellenic Lyre" dorian'},young:{frequencies:[261.6255653006,275.62199471997,293.00227310437,310.07474405997,328.14198392915,348.83408706747,367.49599295996,391.5530240856,413.43299207996,438.51190905657,465.11211608996,491.10256480205,523.2511306012],description:"Thomas Young well temperament (1807), also Luigi Malerbi nr.2 (1794)"},young2:{frequencies:[261.6255653006,276.24519242498,293.00227310437,310.77584116741,328.14198392915,349.22823143301,368.32692341742,391.5530240856,414.36778843034,438.51190905657,466.16376151809,491.65745674141,523.2511306012],description:"Thomas Young well temperament no.2 (1799)"},yugo_bagpipe:{frequencies:[261.6255653006,277.02257024271,294.00421879736,322.47117131255,341.84370465044,381.9375744369,404.41509766528,430.1988069325,452.63145841613,463.74664903953,478.99265177484,502.22604835608,523.2511306012],description:"Yugoslavian Bagpipe"},yves:{frequencies:[261.6255653006,290.69507255622,327.03195662575,348.83408706747,392.4383479509,436.04260883433,465.11211608996,523.2511306012],description:`St Yves's scale II from Jocelyn Godwin, "Music and the Occult", 1995.`},saba_sup:{frequencies:[261.6255653006,287.78812183066,313.95067836072,327.03195662575,392.4383479509,418.60090448096,470.92601754108,497.08857407114,523.2511306012],description:"Superparticular version of maqam Sab"},sabagh:{frequencies:[261.6255653006,275.67629620338,279.3053384865,286.70737164501,294.30556868769,310.11139540064,314.19374626607,322.52037740267,326.76608188608,331.06767743197,348.8478314504,362.80683626646,367.58287746967,372.42178901277,392.42288612931,413.49815209867,418.94150105041,430.04411333507,441.44096240275,465.14876849982,471.27205084813,483.76150545705,490.12981126508,496.58195036371,523.2511306012],description:"Twfiq Al-Sabagh, Arabic master musical scale in 53-tET (1954)"},sabbagh:{frequencies:[261.6255653006,294.30556868769,321.46759848648,348.8478314504,392.42288612931,428.64035280622,465.14876849982,523.2511306012],description:"Tawfiq as-Sabbagh, a composer from Syria. 1/1=G"},safi_diat:{frequencies:[261.6255653006,276.16031892841,305.22982618403,348.83408706747,392.4383479509,414.24047839262,457.84473927605,523.2511306012],description:"Safi al-Din's Diatonic, also the strong form of Avicenna's 8/7 diatonic"},safi_diat2:{frequencies:[261.6255653006,283.79722337692,310.07474405997,348.83408706747,392.4383479509,425.69583506538,465.11211608996,523.2511306012],description:"Safi al-Din's 2nd Diatonic, a 3/4 tone diatonic like Ptolemy's Equable Diatonic"},safi_major:{frequencies:[261.6255653006,281.75060878526,322.00069575458,348.83408706747,375.66747838035,392.4383479509,523.2511306012],description:"Singular Major (DF #6), from Safi al-Din, strong 32/27 chromatic"},salinas_19:{frequencies:[261.6255653006,272.52663052146,279.06726965397,294.32876096318,306.59245933664,313.95067836072,327.03195662575,340.65828815182,348.83408706747,363.36884069528,372.08969287196,392.4383479509,408.78994578219,418.60090448096,436.04260883433,454.2110508691,465.11211608996,490.54793493862,510.98743222773,523.2511306012],description:`Salinas' enharmonic tuning for his 19-tone instr. "instrumentum imperfectum"`},salinas_24:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,306.59245933664,313.95067836072,327.03195662575,340.65828815182,348.83408706747,363.36884069528,367.91095120397,372.08969287196,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,454.2110508691,459.88868900496,465.11211608996,470.92601754108,490.54793493862,510.98743222773,523.2511306012],description:'Salinas enharmonic system "instrumentum perfectum". Subset of Mersenne'},salinas_enh:{frequencies:[261.6255653006,272.52663052146,279.06726965397,348.83408706747,392.4383479509,408.78994578219,418.60090448096,523.2511306012],description:"Salinas's and Euler's enharmonic"},salunding:{frequencies:[261.6255653006,282.38958039978,310.76686573877,390.36201910543,419.43149305958,523.2511306012],description:"Gamelan slunding, Kengetan, South-Bali. 1/1=378 Hz"},sankey:{frequencies:[261.6255653006,274.88665260982,292.54735824399,309.58527581215,327.03195662575,348.83408706747,366.73895666255,391.24894371175,412.31687950427,437.13741259348,464.79252184829,489.99465727995,523.2511306012],description:"John Sankey's Scarlatti tuning, personal evaluation based on d'Alembert's"},santur1:{frequencies:[261.6255653006,282.02765077995,319.3201344739,347.21689301951,376.46192220133,427.47393558663,475.68393915562,504.55222794679,523.2511306012],description:"Persian santur tuning. 1/1=E"},santur2:{frequencies:[261.6255653006,281.2143451833,317.48098583281,345.21700307457,375.37611551499,423.78627283082,475.68393915562,498.18106573801,523.2511306012],description:"Persian santur tuning. 1/1=E"},sanza:{frequencies:[261.6255653006,293.15632631094,308.97787266236,346.21547002486,390.18821123181,462.40922843744,524.46149515038,595.18445928535,620.10113226249],description:"African N'Gundi Sanza (idiophone; set of lamellas, thumb-plucked)"},sanza2:{frequencies:[261.6255653006,390.63923480058,465.35666077712,523.2511306012,588.68812410589,663.45725712889,702.9084786129,783.08569314515],description:"African Baduma Sanza (idiophone, like mbira)"},sauveur:{frequencies:[261.6255653006,274.85950244128,292.7026939092,313.25286195357,328.80795208256,349.69755047152,367.27338607435,391.35133250294,417.15885134862,438.29716799286,468.84228427561,491.11646492505,523.2511306012],description:"Sauveur's tempered system of the harpsichord. Trait\xEF\xBF\xBD (1697)"},sauveur2:{frequencies:[261.6255653006,278.64199172491,293.04864983565,312.10886966906,328.2456799168,349.5951549002,372.33322418948,391.58401058733,417.05308314313,438.61577206336,467.14384425417,491.2966347616,523.2511306012],description:"Sauveur's Syste^me Chromatique des Musiciens (Memoires 1701), 12 out of 55."},sauveur_17:{frequencies:[261.6255653006,275.62199471997,290.36720431405,294.32876096318,310.07474405997,326.6631048533,331.11985608357,348.83408706747,367.49599295996,372.50983809402,392.4383479509,413.43299207996,419.07356785577,441.49314144476,465.11211608996,489.99465727995,496.67978412536,523.2511306012],description:"Sauveur's oriental system, aft. Kitab al-adwar (Bagdad 1294) by Safi al-Din"},sauveur_ji:{frequencies:[261.6255653006,272.52663052146,294.32876096318,313.95067836072,327.03195662575,348.83408706747,367.91095120397,392.4383479509,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Aplication des sons harmoniques aux jeux d'orgues (1702) (PB 81/80 & 128/125)"},savas_bardiat:{frequencies:[261.6255653006,282.57123920205,317.17549194805,349.22823143301,391.99543598175,423.37848741825,475.22628419761,523.2511306012],description:"Savas's Byzantine Liturgical mode, 8 + 12 + 10 parts"},savas_barenh:{frequencies:[261.6255653006,282.57123920205,329.62755691287,349.22823143301,391.99543598175,423.37848741825,493.88330125613,523.2511306012],description:"Savas's Byzantine Liturgical mode, 8 + 16 + 6 parts"},savas_chrom:{frequencies:[261.6255653006,282.57123920205,323.3415889232,349.22823143301,391.99543598175,423.37848741825,484.46499093218,523.2511306012],description:"Savas's Chromatic, Byzantine Liturgical mode, 8 + 14 + 8 parts"},savas_diat:{frequencies:[261.6255653006,288.06460709314,311.12698372208,349.22823143301,391.99543598175,431.60923940535,466.16376151809,523.2511306012],description:"Savas's Diatonic, Byzantine Liturgical mode, 10 + 8 + 12 parts"},savas_palace:{frequencies:[261.6255653006,277.18263097687,336.03572815422,349.22823143301,391.99543598175,415.30469757995,503.48470957687,523.2511306012],description:"Savas's Byzantine Liturgical mode, 6 + 20 + 4 parts"},scalatron:{frequencies:[261.6255653006,272.52663052146,279.06726965397,294.32876096318,306.59245933664,313.95067836072,327.03195662575,340.65828815182,348.83408706747,367.91095120397,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,459.88868900496,470.92601754108,490.54793493862,510.98743222773,523.2511306012],description:"Scalatron (tm) 19-tone scale, see manual, 1974"},scheengaas:{frequencies:[261.6255653006,273.84069463911,292.6487650037,312.74862113192,327.53979283172,350.03605285217,366.8025131876,391.54284657258,418.19337019276,437.97145880542,467.51204131067,489.62261321254,523.2511306012],description:"Scheengaas' variation"},scheffer:{frequencies:[261.6255653006,274.56546814423,292.86978442859,309.86465789076,327.84548435462,349.70179235499,366.99791252626,391.46460164194,410.82629477826,438.21464222188,467.42914467878,490.54793493862,523.2511306012],description:"H.Th. Scheffer (1748) modified 1/5-comma temperament, Sweden"},schidlof:{frequencies:[261.6255653006,264.89588486686,274.70684356563,280.31310567921,294.32876096318,305.22982618403,315.35224388912,322.99452506247,327.03195662575,348.83408706747,353.19451315581,366.27579142084,373.75080757229,392.4383479509,406.97310157871,420.46965851882,436.04260883433,457.84473927605,467.18850946536,484.4917875937,490.54793493862,523.2511306012],description:"Schidlof"},schillinger:{frequencies:[261.6255653006,262.8879410321,275.85161280553,277.18263097687,278.52007147562,292.25460328695,293.66476791741,295.08173676673,309.63296633914,311.12698372208,312.62820992379,328.04470063332,329.62755691287,331.21805066987,347.55125362114,349.22823143301,350.91330087035,368.21772660991,369.99442271164,371.77969159194,390.11309203208,391.99543598175,393.88686247394,413.31042363438,415.30469757995,417.30859414412,437.88714035463,440,442.12305445465,463.92526470026,466.16376151809,468.41305936011,491.51169649079,493.88330125613,496.26634930797,520.73850287792,523.2511306012],description:"Joseph Schillinger's double equal temperament, p.664 Mathematical Basis..."},schis41:{frequencies:[261.6255653006,266.96486255163,272.52663052146,275.21650375777,280.31310567921,285.40970760065,290.69507255622,294.32876096318,299.00064605783,305.22982618403,311.45900631024,313.95067836072,321.08592105074,327.03195662575,329.64821227876,336.37572681506,343.38355445704,348.83408706747,355.95315006884,363.36884069528,366.27579142084,373.75080757229,380.54627680087,387.59343007496,392.4383479509,398.6675280771,406.97310157871,415.27867508032,418.60090448096,428.11456140098,436.04260883433,441.49314144476,448.50096908674,457.84473927605,465.11211608996,470.92601754108,484.4917875937,490.54793493862,497.4115685962,504.56359022259,512.78610798918,523.2511306012],description:"41&53 <<1 -8 -14 23 -15 -25 33 -10 81 113||"},schisynch17:{frequencies:[261.6255653006,275.80289341725,290.74848220557,294.25152581512,310.19683462128,327.0062098829,330.94609980123,348.87986495302,367.78544978395,387.71551660339,392.38685458718,413.65005636851,436.06549769577,441.31937388998,465.23419873014,490.4449531872,496.35401261224,523.2511306012],description:"fifth satisfies f^9 + f^8 - 64 = 0"},schlick:{frequencies:[261.6255653006,275.62199471997,293.00227310437,311.47852302926,328.14198392915,349.6228209638,367.9112241576,391.5530240856,414.36778843034,438.51190905657,466.69047534984,491.10256480205,523.2511306012],description:"Reconstructed temp. A. Schlick, Spiegel d. Orgelmacher und Organisten (1511)"},schlick2:{frequencies:[261.6255653006,275.31092272332,293.00227310437,311.83045953724,328.14198392915,349.6228209638,367.9112241576,391.5530240856,415.30469757995,438.51190905657,466.69047534984,491.10256480205,523.2511306012],description:"Schlick's temperament reconstructed by F.J. Ratte (1991)"},schlick3:{frequencies:[261.6255653006,275.31092431358,293.00227310437,311.83045953724,328.14198392915,349.6228209638,367.70355049744,391.5530240856,415.07027187895,438.51190905657,466.95405539699,491.10256480205,523.2511306012],description:"Possible well-tempered interpretation of 1555 tuning, Margo Schulter"},schlick4:{frequencies:[261.6255653006,275.29566620843,293.00166043901,311.83758337792,328.14192706649,349.6222474261,367.6987228158,391.55300599201,415.35839309639,438.51185079886,466.95962791236,491.10245700671,523.2511306012],description:"Another reconstructed Schlick's modified meantone (Poletti?)"},scholz:{frequencies:[261.6255653006,271.31540105247,299.00064605783,305.22982618403,348.83408706747,392.4383479509,406.97310157871,457.84473927605,523.2511306012],description:"Simple Tune #1 Carter Scholz"},scholz_epi:{frequencies:[261.6255653006,1046.5022612024,1308.127826503,1569.7533918036,1831.3789571042,2093.0045224048,2354.6300877054,2616.255653006,2877.8812183066,3139.5067836072,3401.1323489078,3662.7579142084,3924.383479509,4186.0090448096,4709.2601754108,5232.511306012,5494.1368713126,5755.7624366132,6279.0135672144,6540.639132515,6802.2646978156,7063.8902631162,7325.5158284168,8372.0180896192,8633.6436549198,9156.894785521,9418.5203508216,10203.3970467234,10465.022612024,10988.2737426252,11511.5248732264,11773.150438527,12558.0271344288,12819.6526997294,13081.27826503,14127.7805262324,14389.406091533,14651.0316568336,16482.4106139378,16744.0361792384,17005.661744539],description:"Carter Scholz, Epimore"},schulter:{frequencies:[261.6255653006,277.184065539,293.66520219021,311.12905403417,329.62853176407,349.23107169224,369.99606406306,391.99572582396,415.30715405467,440.00097595231,466.1672081452,493.88512703986,523.25577305438],description:`Margo Schulter's 5-limit JI virt. ET, "scintilla of Artusi" tempered 22-08-98`},schulter_17:{frequencies:[261.6255653006,272.43653907335,282.13181390574,295.15344695336,308.77608605158,319.09647917983,332.97799220076,348.34640884647,361.82138782225,375.64984936577,392.98775403209,410.26687922759,423.79017189188,443.34998408798,463.81254988138,480.53289366295,500.16624277499,523.2511306012],description:"Neo-Gothic well-temperament (14:11, 9:7 hypermeantone fifths) TL 04-09-2000"},schulter_24:{frequencies:[261.6255653006,270.06509966514,283.8170195002,292.97240722602,295.75063903546,305.22982618403,307.79478270659,317.68818643644,334.29933343966,345.08318290545,348.06842720833,359.29644098925,377.90359432309,390.09403284964,393.30161007617,406.07983174306,426.86276443782,440.63253103259,444.76346101102,458.66231916761,462.87600014722,477.80748402293,502.32108537715,518.89070451286,523.2511306012],description:'Rational intonation (RI) scale with some "17-ish" features (24 notes)'},schulter_cart34:{frequencies:[261.6255653006,270.08718526646,272.51337835337,281.3271372098,283.85429714132,293.03484945212,295.66718139806,305.22982618403,307.97166902637,317.93223698752,320.78822215662,331.16330924834,334.13814720468,344.94500399825,348.04364484358,359.30023993517,362.52783176564,374.2528814026,377.61479489998,389.82779436071,393.32961502355,406.05087076101,409.69842558521,422.94908927295,426.7484383229,440.55054172958,444.50800708553,458.88449901367,463.0066556268,477.98143975034,482.27514684959,497.87312179111,502.34551296122,518.59261334435,523.2511306012],description:'"Carthesian tuning" with two 17-tET chains 55.106 cents apart'},schulter_diat7:{frequencies:[261.6255653006,295.1673044417,332.97799220076,348.83408706747,392.4383479509,442.75095666255,499.46698830115,523.2511306012],description:"Diatonic scale, symmetrical tetrachords based on 14/11 and 13/11 triads"},schulter_ham:{frequencies:[261.6255653006,272.52663052146,283.8170195002,295.75063903546,307.79478270659,320.70230585235,334.29933343966,348.01136516401,362.25078272391,377.90359432309,393.36609818246,409.50088481833,426.86276443782,444.76346101102,462.87600014722,482.33849075995,502.32108537715,523.2511306012],description:'New rational tuning of "Hammond organ type", TL 01-03-2002'},schulter_jot17a:{frequencies:[261.6255653006,271.31540105247,281.75060878526,295.1673044417,305.22982618403,318.50068819203,332.97799220076,348.83408706747,361.75386806997,375.66747838035,392.4383479509,406.97310157871,422.62591317789,442.75095666255,457.84473927605,477.75103228805,499.46698830115,523.2511306012],description:"Just octachord tuning -- 4:3-9:8-4:3 division, 17 steps (7 + 3 + 7), Bb-Bb"},schulter_jot17bb:{frequencies:[261.6255653006,271.31540105247,281.75060878526,295.15228855401,305.22982618403,318.50068819203,332.97799220076,348.83408706747,361.75386806997,375.66747838035,392.4383479509,406.97310157871,422.62591317789,442.72843283101,457.84473927605,477.75103228805,499.46698830115,523.2511306012],description:'"Just Octachord Tuning" (Bb-Eb, F-Bb) -- 896:891 divided into 1792:1787:1782'},schulter_jwt17:{frequencies:[261.6255653006,272.43653907335,282.34838235411,295.1673044417,308.34441624714,319.76457981184,332.97799220076,347.8430811383,362.25078272391,376.08675011961,393.55640592227,409.81906732402,425.14154361347,443.97065626768,462.87600014722,481.6288815761,500.8899711738,523.2511306012],description:'"Just well-tuned 17" circulating system'},"schulter_lin76-34":{frequencies:[261.6255653006,270.6250663876,281.88470155261,291.58108453077,295.07956188513,305.22982618403,308.89206602106,319.51745915009,332.81131277165,344.25948974019,348.39001840879,360.3740779397,375.36781334896,388.27986588625,392.93856423817,406.45502016129,423.36600317146,437.92911415628,443.18352164838,458.42832346067,463.9286840578,479.88708893184,499.85328649772,517.04744024951,523.2511306012],description:"Two 12-note chains, ~704.160 cents, 34 4ths apart (32 4ths = 7:6), TL 29-11-02"},schulter_pel:{frequencies:[261.6255653006,271.31540105247,305.22982618403,392.4383479509,406.97310157871,523.2511306012],description:"Just pelog-style Phrygian pentatonic"},schulter_pepr:{frequencies:[261.6255653006,270.64528702739,281.81099471089,291.52662303231,295.05751399041,305.22982618403,308.92668738628,319.57714790608,332.76158224462,344.23376719628,348.40303271111,360.41446953256,375.28368107222,388.22184469544,392.9238840789,406.47020586181,423.23948674937,437.83095983374,443.13385158124,458.41119660824,463.96335069158,479.95880706014,499.75992392917,516.98949183803,523.2511306012],description:"Peppermint 24: Wilson/Pepper apotome/limma=Phi, 2 chains spaced for pure 7:6"},schulter_qcm62a:{frequencies:[261.6255653006,262.43934012943,267.90457886781,268.73788454005,273.37431312998,274.22463192287,279.93529690293,280.80602334765,285.65065877038,286.53916259713,292.50627485027,293.41610276971,299.52642572255,300.45808951291,305.64177427204,306.59245933664,312.977175335,313.95067836072,320.36052345918,320.48862783822,327.03195662575,328.04917632434,334.88072358477,335.92235492515,341.71789064962,342.78078913836,349.91912034749,351.00752840096,358.31717956585,359.43170941363,365.63284274659,366.77012764335,374.40803131735,375.5726110527,382.05221698715,383.2405741708,391.22147055517,392.4383479509,400.61078621746,401.85686830172,408.78994578219,410.06146948999,418.60090448096,419.90294514449,427.14736482575,428.47598794138,437.39890198442,438.75941205608,447.89647345742,449.28963835923,457.04105241293,458.46266117889,468.01003810189,469.46576276783,479.24227945773,480.73294151703,489.02683710225,490.54793493862,500.76348165392,502.32108537715,510.98743222773,512.57683571821,523.2511306012],description:"1/4-comma meantone, two 31-notes at 1/4-comma (Vicentino-like system)"},schulter_qcmlji24:{frequencies:[261.6255653006,262.43934012943,273.37431312998,274.22463192287,292.50627485027,293.41610276971,306.59245933664,312.977175335,327.03195662575,328.04917632434,349.91912034749,351.00752840096,365.63284274659,366.77012764335,391.22147055517,392.4383479509,408.78994578219,410.06146948999,437.39890198442,438.75941205608,458.46266117889,468.01003810189,489.02683710225,490.54793493862,523.2511306012],description:"24-note adaptive JI (Eb-G#/F'-A#') for Lasso's Prologue to _Prophetiae_"},schulter_qcmqd8_4:{frequencies:[261.6255653006,273.37431312998,292.50627485027,309.28772967674,327.03195662575,349.91912034749,365.63284274659,391.22147055517,411.22091428214,437.39890198442,465.24335632603,489.02683710225,523.2511306012],description:"F-C# in 1/4-comma meantone, other 5ths ~4.888 cents wide or (2048/2025)^(1/4)"},schulter_sq:{frequencies:[261.6255653006,271.31540105247,279.38237857051,289.72987407313,294.32876096318,305.22982618403,310.07474405997,325.94610833227,331.11985608357,343.38355445704,348.83408706747,361.75386806997,372.50983809402,386.30649876417,392.4383479509,406.97310157871,419.07356785577,434.59481110969,441.49314144476,457.84473927605,465.11211608996,488.9191624984,496.67978412536,515.07533168556,523.2511306012],description:'"Sesquisexta" tuning, two 12-tone Pyth. manuals a 7/6 apart. TL 16-5-2001'},schulter_tedorian:{frequencies:[261.6255653006,295.99553712036,309.28772789022,347.85054122562,393.54796334264,442.61656607198,462.49302735707,523.2511306012],description:"Eb Dorian in temperament extraordinaire -- neo-medieval style"},schulter_zarte84:{frequencies:[261.6255653006,272.52663052146,292.24684137387,308.87634556583,326.45210604021,350.07440004945,364.66083404534,391.04793957621,410.30971075781,436.81711699543,465.03699205118,487.94322738789,523.2511306012],description:"Temperament extraordinaire, Zarlino's 2/7-comma meantone (F-C#)"},schulter_zarte84n:{frequencies:[261.6255653006,272.46997760396,292.1447183254,308.81896225817,326.44489157977,350.01709816983,364.52535053201,391.11195868293,410.09013064752,436.73596474349,465.11312402839,488.01232708701,523.2511306012],description:"Zarlino temperament extraordinaire, 1024-tET mapping"},scotbag:{frequencies:[261.6255653006,290.69507255622,327.03195662575,356.76213450082,387.59343007496,436.04260883433,479.64686971777,523.2511306012],description:"Scottish bagpipe tuning"},scotbag2:{frequencies:[261.6255653006,290.69507255622,319.76457981184,348.83408706747,392.4383479509,428.11456140098,470.92601754108,523.2511306012],description:"Scottish bagpipe tuning 2"},scotbag3:{frequencies:[261.6255653006,294.32876096318,327.03195662575,359.73515228832,392.4383479509,441.49314144476,479.64686971777,523.2511306012],description:"Scottish bagpipe tuning 3"},scotbag4:{frequencies:[261.6255653006,293.15632631094,318.58319997217,348.2210758395,392.67530119805,428.21545238314,468.59347232539,523.2511306012],description:"Scottish Higland Bagpipe by Macdonald, Edinburgh. Helmholtz/Ellis p. 515, nr.52"},scottd1:{frequencies:[261.6255653006,275.93341798027,292.67158636845,310.42509491746,327.40170814054,349.22823143301,367.9112241576,391.5530240856,413.90012676351,437.52264545758,465.63764214343,490.54829628849,523.2511306012],description:"Dale Scott's temperament 1, TL 9-6-1999"},scottd2:{frequencies:[261.6255653006,276.1828093671,292.93610587951,310.70566022736,327.9937953665,349.3071136959,368.24374600687,391.64146650178,414.27421384356,438.21489534465,466.05849010807,491.32444638706,523.2511306012],description:"Dale Scott's temperament 2, TL 9-6-1999"},scottd3:{frequencies:[261.6255653006,276.40121172404,293.16775656083,310.95136287868,328.51274831708,349.22813057195,368.53494914961,391.77416758435,414.60181737882,438.75957425603,466.42704408487,491.93513777943,523.2511306012],description:"Dale Scott's temperament 3, TL 9-6-1999"},scottd4:{frequencies:[261.6255653006,276.60439543337,293.30494246724,310.98285414553,328.78580734933,349.37474066871,369.05201453919,391.83105388699,414.77686160481,439.10664961187,466.16991430388,492.5350487994,523.2511306012],description:"Dale Scott's temperament 4, TL 9-6-1999"},scottj:{frequencies:[261.6255653006,294.32876096318,336.37572681506,348.83408706747,392.4383479509],description:`Jeff Scott's "seven and five" tuning, fifth-repeating. TL 20-04-99`},scottj2:{frequencies:[261.6255653006,290.69507255622,299.00064605783,305.22982618403,313.95067836072,348.83408706747,366.27579142084,406.97310157871,418.60090448096,428.11456140098,436.04260883433,485.87604984397,523.2511306012,566.85539148463,581.39014511244,598.00129211566,610.45965236807,680.22646978156,719.47030457665,784.8766959018],description:`Jeff Scott's "just tritone/13" tuning. TL 17-03-2001`},secor12_1:{frequencies:[261.6255653006,275.03488264166,292.74290192225,310.07362690431,327.56128791316,349.21167447253,366.91716522699,391.37968062521,412.76363757129,437.92977184699,465.61556619611,490.01645577464,523.2511306012],description:"George Secor's 12-tone temperament ordinaire #1, proportional beating"},secor12_2:{frequencies:[261.6255653006,275.62199471997,292.79557634972,310.07474405997,327.35540669465,348.83408706747,367.49599295996,391.60840570078,413.43299207996,437.83150862942,465.11211608996,489.99465727995,523.2511306012],description:"George Secor's closed 12-tone well-temperament #2, with 7 just fifths"},secor12_3:{frequencies:[261.6255653006,274.49585366342,292.50627485027,309.76836826904,327.03195662575,349.57337698802,365.99447173417,391.22147055517,411.74378028931,437.39890198442,466.09783352473,489.02683710225,523.2511306012],description:"George Secor's closed 12-tone temperament #3 with 5 meantone, 3 just, and 2 wide fifths"},secor17htt1:{frequencies:[261.6255653006,266.21235100401,283.6936382117,294.88137067808,304.94368688875,319.75456524059,327.03195662575,348.50707605838,360.3992766165,372.69727792826,392.80658053205,399.69321489333,425.93975025566,435.63385416574,457.84473927605,480.08189580921,491.0082387498,523.2511306012],description:"George Secor's 17-tone high-tolerance temperament subset #1 on C (5/4 & 7/4 exact)"},secor17htt2:{frequencies:[261.6255653006,266.21235100401,279.78524030783,294.88137067808,300.05119287674,319.75456524059,327.03195662575,348.50707605838,360.3992766165,372.69727792826,392.80658053205,399.69321489333,425.93975025566,442.73709545768,457.84473927605,480.08189580921,491.0082387498,523.2511306012],description:"George Secor's 17-tone high-tolerance temperament subset #2 on Eo (5/4 & 7/4 exact)"},secor17htt3:{frequencies:[261.6255653006,270.55308473255,279.78524030783,294.88137067808,300.05119287674,319.75456524059,327.03195662575,343.70575469589,360.3992766165,368.60172104124,392.80658053205,399.69321489333,425.93975025566,442.73709545768,457.84473927605,480.08189580921,491.0082387498,523.2511306012],description:"George Secor's 17-tone high-tolerance temperament subset #3 on G (5/4 & 7/4 exact)"},secor17htt4:{frequencies:[261.6255653006,270.55308473255,279.78524030783,294.88137067808,300.05119287674,319.75456524059,332.36439517321,343.70575469589,360.3992766165,368.60172104124,392.80658053205,399.69321489333,420.07165483694,442.73709545768,450.49910517366,480.08189580921,491.0082387498,523.2511306012],description:"George Secor's 17-tone high-tolerance temperament subset #4 on Bo (5/4 & 7/4 exact)"},secor17wt:{frequencies:[261.6255653006,271.90848849519,284.45827635845,296.12458543709,307.25838681362,320.91221742866,335.17278980765,347.77473997341,362.0378075073,378.74746489181,393.63374363584,408.43373030454,427.2847686483,445.53990619223,462.29147990415,482.0422296857,504.29062567056,523.2511306012],description:"George Secor's well temperament with 5 pure 11/7 and 3 near just 11/6"},secor19wt:{frequencies:[261.6255653006,272.32755795875,282.27948808054,292.18583194851,304.13791554835,314.37102040472,326.31582004031,339.6640167515,350.11094753355,364.43250202589,378.27942889874,391.0071187494,407.00156221801,421.24111755476,436.68033801788,454.54308187078,469.17957429271,487.6886112017,506.92782577841,523.2511306012],description:"George Secor's 19-tone well temperament with ten 5/17-comma fifths"},secor19wt1:{frequencies:[261.6255653006,272.32845615788,282.22605479514,292.18610873661,304.13920677667,314.3856167727,326.31643450984,339.6657766488,350.11078170334,364.43353349925,378.23315721313,391.00730395019,407.00309738029,421.33223555387,436.68095599763,454.54522431957,469.16941157468,487.689760539,506.89867708289,523.2511306012],description:"George Secor's 19-tone proportional-beating (5/17-comma) well temperament (v.1)"},secor19wt2:{frequencies:[261.6255653006,272.32845615788,282.22605479514,292.18610873661,304.13920677667,314.27577204952,326.31643450984,339.6657766488,350.11078170334,364.43353349925,378.23315721313,391.00730395019,407.00309738029,421.20165315727,436.68095599763,454.54522431957,469.03541436973,487.689760539,506.89867708289,523.2511306012],description:"George Secor's 19-tone proportional-beating (5/17-comma) well temperament (v.2)"},secor1_4tx:{frequencies:[261.6255653006,274.52656755164,292.65557420835,309.65910769439,327.20096538886,349.14957009195,366.50113643833,391.42429537222,412.04336447213,437.62002395673,465.5327601226,489.58458498887,523.2511306012],description:"George Secor's rational 1/4-comma temperament extraordinaire"},secor1_5tx:{frequencies:[261.6255653006,275.23833828784,292.86443876933,310.12174699459,327.84546895566,349.26796031009,366.98445105045,391.462133155,412.85750743176,438.21197504744,465.69061374678,490.54793493862,523.2511306012],description:"George Secor's 1/5-comma temperament extraordinaire (ratios supplied by G. W. Smith)"},secor1_5wt:{frequencies:[261.6255653006,275.62199471997,292.86443876933,310.07474405997,327.84546895566,348.83408706747,367.44664657419,391.462133155,413.43299207996,438.21197504744,465.11211608996,490.54793493862,523.2511306012],description:"George Secor's 1/5-comma well-temperament (ratios supplied by G. W. Smith)"},secor1_7wt:{frequencies:[261.6255653006,276.40791719395,293.28186156416,310.6264877857,328.77715667764,349.45479875891,368.54388959194,391.74026793015,414.61187579093,439.14616729155,465.93973167855,492.29203182992,523.2511306012],description:"George Secor's 1/7-comma well-temperament (ratios supplied by G. W. Smith)"},secor22_19p3:{frequencies:[261.6255653006,266.86058412305,272.32845615788,282.28026746552,292.18610873661,304.13920677667,314.37137994881,326.31643450984,339.6657766488,350.11078170334,357.11635499175,364.43353349925,378.28077924825,391.00730395019,407.00309738029,421.28573964817,436.68095599763,454.54522431957,469.17973147781,477.89781576412,487.689760539,506.93004530576,523.2511306012],description:"George Secor's 19+3 well temperament with ten ~5/17-comma (equal-beating) fifths and 3 pure 9:11. TL 28-6-2002,26-10-2006. Aux=1,10,19"},secor22_ji29:{frequencies:[261.6255653006,272.52663052146,283.42769574232,286.15296204753,294.32876096318,305.22982618403,316.13089140489,327.03195662575,340.65828815182,348.83408706747,359.73515228832,370.63621750918,381.53728273004,392.4383479509,414.24047839262,425.14154361347,436.04260883433,441.49314144476,457.84473927605,479.64686971777,490.54793493862,501.44900015948,523.2511306012],description:"George Secor's 22-tone just intonation (29-limit otonality on 4/3)"},secor29htt:{frequencies:[261.6255653006,270.55308473255,276.71069203503,283.6936382117,290.1503157249,294.88137067808,304.94368688875,310.54087273367,319.75456524059,327.03195662575,332.36439517321,343.70575469589,348.50707605838,360.3992766165,368.60172104124,377.19539564757,387.3949548402,392.80658053205,406.21042497925,415.4555026381,425.93975025566,435.63385416574,442.73709545768,457.84473927605,464.24049278842,480.08189580921,491.0082387498,499.01438878341,516.04239079678,523.2511306012],description:"George Secor's 29-tone 13-limit high-tolerance temperament (5/4 & 7/4 exact)"},secor2_11wt:{frequencies:[261.6255653006,275.91396717201,292.9984614786,310.40321306851,328.14053952957,349.20361470207,367.88528956268,391.55148162785,413.87095075801,438.50612639837,465.60481960276,491.10222639053,523.2511306012],description:"George Secor's rational 2/11-comma well-temperament"},secor41htt:{frequencies:[261.6255653006,266.21235100401,270.55308473255,276.71069203503,279.78524030783,283.6936382117,290.1503157249,294.88137067808,300.05119287674,304.94368688875,310.54087273367,315.34936221801,319.75456524059,327.03195662575,332.36439517321,338.19136297459,343.70575469589,348.50707605838,354.61705516636,360.3992766165,368.60172104124,372.69727792826,377.90358994896,387.3949548402,392.80658053205,399.69321489333,406.21042497925,415.4555026381,420.07165483694,425.93975025566,435.63385416574,442.73709545768,450.49910517366,457.84473927605,464.24049278842,473.46789104304,480.08189580921,491.0082387498,499.01438878341,507.7630447553,516.04239079678,523.2511306012],description:"George Secor's 13-limit high-tolerance temperament superset (5/4 & 7/4 exact)"},secor5_23tx:{frequencies:[261.6255653006,275.02417915696,292.7420830065,310.0721322444,327.56084927797,349.21018850905,366.91927748105,391.38056264645,412.75664067387,437.92311604224,465.61358467873,490.0190422864,523.2511306012],description:"George Secor's rational 5/23-comma temperament extraordinaire"},secor5_23wt:{frequencies:[261.6255653006,275.62199471997,292.75872440224,310.07474405997,327.56278518065,348.83408706747,367.49599295996,391.3766908411,413.43299207996,437.81158306864,465.11211608996,489.99465727995,523.2511306012],description:"George Secor's rational 5/23-comma proportional-beating well-temperament"},secor7p:{frequencies:[261.6255653006,281.10327891957,302.03108525935,356.94582815655,383.52002471837,412.07263653985,442.75095666255,523.2511306012],description:"George Secor's pelog-like MOS with near just 11:13:15:19 tetrads (1979)"},secor_vrwt:{frequencies:[261.6255653006,276.32932769153,293.15777167588,310.55777256823,328.11844153148,349.04269216937,368.62018440632,392.00375398861,414.25255044712,438.65017260809,465.6191423793,491.6947801169,523.2511306012],description:"George Secor's Victorian rational well-temperament (based on Ellis #2)"},"secor_wt1-7":{frequencies:[261.6255653006,276.2204353545,293.2843722634,310.74798946314,328.77415062671,349.45463702831,368.55847674989,391.74146894101,414.33065282463,439.14535139523,466.13275379077,492.28548658217,523.2511306012],description:"George Secor's 1/7-comma well-temperament"},secor_wt10:{frequencies:[261.6255653006,276.4188590209,293.2843722634,310.62634254146,328.77415062671,349.45463500978,368.55847887877,391.7414712038,414.6282883241,439.14535393183,465.93951357928,492.28548942572,523.2511306012],description:"George Secor's 12-tone well-temperament, proportional beating"},"secor_wtpb-24a":{frequencies:[261.6255653006,275.62199471997,292.84836938997,310.07474405997,327.30111872997,348.83408706747,367.49599295996,391.90002374246,413.43299207996,437.54991661796,465.11211608996,490.95167809495,523.2511306012],description:"George Secor's 24-triad proportional-beating well-temperament (24a)"},"secor_wtpb-24b":{frequencies:[261.6255653006,275.62199471997,292.56126314547,310.07474405997,327.51644841334,348.83408706747,367.49599295996,391.46936437571,413.43299207996,437.76524630133,465.11211608996,490.37746560595,523.2511306012],description:"George Secor's 24-triad proportional-beating well-temperament (24b)"},segah:{frequencies:[261.6255653006,293.66476791741,320.24370022528,349.22823143301,391.99543598175,440,479.82340237272,523.2511306012],description:"Arabic SEGAH (Dudon) Two 4 + 3 + 3 tetrachords"},segah2:{frequencies:[261.6255653006,293.66476791741,318.39923223688,349.22823143301,391.99543598175,425.01198472693,466.16376151809,523.2511306012],description:"Iranian mode Segah from C"},segah_rat:{frequencies:[261.6255653006,294.32876096318,319.76457981184,348.83408706747,392.4383479509,441.49314144476,479.64686971777,523.2511306012],description:"Rationalized Arabic Seg\xEF\xBF\xBDh\r"},seidel974:{frequencies:[261.6255653006,262.64754016506,266.73543962288,267.75741448733,268.77938935179,273.88926367407,274.91123853852,276.95518826743,277.97716313189,280.0211128608,283.08703745416,284.10901231862,285.13098718308,287.17493691199,289.2188866409,290.24086150535,294.32876096318,457.84473927605,461.93263873387,463.97658846278,468.0644879206,474.19633710734,476.24028683625,482.37213602298,486.4600354808,488.50398520971,492.59188466754,498.72373385427,506.89953276991,513.03138195665,515.07533168556,519.16323114338,523.2511306012],description:"Dave Seidel, Base 9:7:4 Symmetry, scale for Passacaglia and Fugue State (2005)"},seikilos:{frequencies:[261.6255653006,271.31540105247,294.32876096318,305.22982618403,336.37572681506,348.83408706747,356.10146388137,392.4383479509,406.97310157871,441.49314144476,457.84473927605,504.56359022259,523.2511306012],description:"Seikilos Tuning"},sekati1:{frequencies:[261.6255653006,285.2147362526,318.99014578736,340.97107458785,383.86043226246,424.60539155549,468.56721805116,523.2511306012],description:"Gamelan sekati from Sumenep, East-Madura. 1/1=244 Hz."},sekati2:{frequencies:[261.6255653006,288.87830434024,317.34219433319,357.31261688157,393.64955765984,420.29657220667,469.35141988267,523.2511306012],description:"Gamelan Kyahi Sepuh from kraton Solo. 1/1=216 Hz."},sekati3:{frequencies:[261.6255653006,291.90272733088,308.20569577938,369.53649673407,403.69531865382,425.43272843735,475.11832680028,523.2511306012],description:"Gamelan Kyahi Henem from kraton Solo. 1/1=168.5 Hz."},sekati4:{frequencies:[261.6255653006,271.36353278789,288.89182053123,342.12578909252,379.12979967788,410.29128883625,439.50493264224,523.2511306012],description:"Gamelan Kyahi Guntur madu from kraton Jogya. 1/1=201.5 Hz."},sekati5:{frequencies:[261.6255653006,274.79663866182,311.31645994273,355.61927540077,375.97459751383,397.52718524897,433.44837981883,523.2511306012],description:"Gamelan Kyahi Naga Ilaga from kraton Jogya. 1/1=218.5 Hz."},sekati6:{frequencies:[261.6255653006,284.57524936299,310.80330758934,358.01400474517,390.79902205709,427.51850178351,468.18764285778,523.2511306012],description:"Gamelan Kyahi Munggang from Paku Alaman, Jogya. 1/1=199.5 Hz."},sekati7:{frequencies:[261.6255653006,286.67481979642,318.21831168293,371.10013445627,390.58282835584,422.12643845206,463.87524473877,523.2511306012],description:"Gamelan of Sultan Anom from Cheribon. 1/1=282 Hz."},sekati8:{frequencies:[261.6255653006,287.04067548259,315.94410704802,350.82750428678,381.72407804086,425.57749367468,447.5043967797,523.2511306012],description:"The old Sultans-gamelan Kyahi Suka rame from Banten. 1/1=262.5 Hz."},sekati9:{frequencies:[261.6255653006,280.44107893528,310.90439774384,346.74342440827,376.31071188751,412.14996063869,455.1567650372,523.2511306012],description:"Gamelan Sekati from Katjerbonan, Cheribon. 1/1=292 Hz."},selisir:{frequencies:[261.6255653006,278.78833362316,320.24370022528,380.8360868427,417.71053321823,524.76452349887],description:"Gamelan semara pagulingan, Bali. Pagan Kelod"},selisir2:{frequencies:[261.6255653006,279.59466973861,299.66214729245,376.46181130035,408.17001145418,520.23742585195],description:"Gamelan semara pagulingan, Bali. Kamasan"},selisir3:{frequencies:[261.6255653006,284.98499077387,305.5412851438,378.42269266694,406.45400323486,523.2511306012],description:"Gamelan gong, Pliatan, Bali. 1/1=280 Hz, McPhee, 1966"},selisir4:{frequencies:[261.6255653006,277.23130136276,295.59098907682,376.373620257,399.32323124828,523.2511306012],description:"Gamelan gong, Apuan, Bali. 1/1=285 Hz. McPhee, 1966"},selisir5:{frequencies:[261.6255653006,275.89605068063,309.19384990071,383.40037296022,406.23315014465,523.2511306012],description:"Gamelan gong, Sayan, Bali. 1/1=275 Hz. McPhee, 1966"},selisir6:{frequencies:[261.6255653006,282.63199755101,312.23197007902,396.25769882774,415.35445602102,523.2511306012],description:"Gamelan gong, Gianyar, Bali. 1/1=274 Hz. McPhee, 1966"},semipor1:{frequencies:[261.6255653006,290.69507255622,313.95067836072,327.03195662575,353.19451315581,392.4383479509,436.04260883433,470.92601754108,523.2511306012],description:"First 16/15&250/243 = 648/625&250/243 scale"},semisixths:{frequencies:[261.6255653006,264.19830736984,270.23055453212,272.88791531122,275.57140613391,281.86332858923,284.63508234504,291.13394747727,293.99686553194,300.70948316519,303.66656221886,306.65272199551,313.65430163898,316.7386758187,323.97054074552,327.15636145846,330.37351240232,337.91669168384,341.23965429995,349.03093233441,352.46319080675,360.51072564419,364.05587272954,367.63587953306,376.02984347246,379.72760059524,388.39764380609,392.21702191873,396.07395857323,405.11722624758,409.10101938242,418.44172684717,422.55654641528,426.71183224275,436.45463212963,440.74658728358,450.80983509489,455.24295209046,465.63718490681,470.21611194415,474.84006394159,485.68174342829,490.45777940536,501.656046885,506.58917188228,511.57080469686,523.2511306012],description:"Semisixths temperament, 13-limit, g=443.0"},"scalamakesrc2\\semisixths_8":{frequencies:[261.6255653006,282.20554108354,304.40437778605,337.94858305883,364.53227585368,393.20709362444,436.53702313055,470.87587163898,522.76460573117],description:"8-note MOS of Semisixths [7, 9, 13, -2, 1, 5] temperament, TOP tuning"},semisuper:{frequencies:[261.6255653006,267.78942821112,272.60119889127,277.49943141001,284.03728045772,289.141002119,295.95312328758,301.27095467792,308.36885759663,313.90977919898,321.30545111289,327.07882560827,334.78475653951,340.80033382945,348.82954357113,355.09748450744,363.46353108469,369.99442271164,378.7114412363,385.5163125912,392.44345945086,401.68937424288,408.90712663484,418.54092077997,426.06147005461,436.09942062666,443.93546710474,454.39452662825,462.55931114028,473.45714317395,481.96445416288,493.31947147471,502.18367855499,514.01505508798,523.2511306012],description:"Semisuper temperament, g=71.146064, p=600, 5-limit"},semithirds:{frequencies:[13.75,13.81661017188,13.90316796691,13.99026794524,14.07791366516,14.14611237417,14.23473442257,14.3239115844,14.41364750281,14.48347263281,14.57420816344,14.665512046,14.73655738771,14.82887834882,14.92177776458,15.01525908647,15.08799873642,15.18252139242,15.27763629821,15.37334698758,15.4478213521,15.54459820959,15.64198144101,15.73997475533,15.81622511342,15.91530993122,16.01501558389,16.11534586889,16.19341466585,16.29486248479,16.39694594444,16.47637891809,16.57959953527,16.68346670883,16.78798468204,16.86931199442,16.97499424439,17.08133847,17.18834901569,17.27161584349,17.37981843193,17.48869878298,17.59826134469,17.68351394199,17.7942969746,17.90577393328,18.01794937217,18.10523509614,18.21866011204,18.33279560295,18.42160666689,18.53701356879,18.6531435747,18.77000099922,18.86093005309,18.97908920954,19.09798871479,19.21763298632,19.3107305405,19.43170758802,19.55344264036,19.67594033402,19.77125798984,19.89512013023,20.01975835255,20.14517740386,20.24276822054,20.36958425827,20.49719488615,20.62560496443,20.72552315291,20.85536353332,20.98601745346,21.08768161561,21.21979095359,21.352727802,21.48649759166,21.59058626784,21.72584618454,21.86195334633,21.99891331359,22.10548432428,22.24396995552,22.38332303719,22.52354926226,22.63266180681,22.7744500803,22.91712649141,23.06069686887,23.17241155847,23.3175812365,23.46366023269,23.57732716458,23.72503340608,23.87366512928,24.02322785632,24.1396055475,24.29083432682,24.44301065897,24.59614033986,24.71529329517,24.87012861873,25.02593409262,25.18271565096,25.30471019771,25.46323807533,25.62275923969,25.78327976642,25.90818367164,26.07049216435,26.23381763196,26.36090411207,26.52604894185,26.69222821075,26.85944870765,26.98956598001,27.15864922771,27.32879158412,27.5],description:"Semithirds temperament, g=193.199615, 5-limit"},sensisynch19:{frequencies:[261.6255653006,272.4389540986,281.73678149918,293.38139793239,303.39395317428,313.74821628003,326.71591476706,337.86611241253,351.83064080634,363.83795665907,376.25506171692,391.80626469239,405.17787315281,421.92450060765,436.32398762558,454.35793210906,469.86431365505,485.89989602801,505.98288939536,523.2511306012],description:"Sensi[19] in synch (brat=-1) tuning, generator ~162/125 satisfies g^9-g^7-4=0"},serre_enh:{frequencies:[261.6255653006,265.7783520514,279.06726965397,348.83408706747,392.4383479509,398.6675280771,418.60090448096,523.2511306012],description:"Dorian mode of the Serre's Enharmonic"},"sev-elev":{frequencies:[261.6255653006,279.06726965397,294.32876096318,305.22982618403,327.03195662575,336.37572681506,359.73515228832,392.4383479509,406.97310157871,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:'"Seven-Eleven Blues" of Pitch Palette'},sha:{frequencies:[261.6255653006,266.96486255163,280.31310567921,284.82183961519,290.63452941521,294.32876096318,300.33547037059,305.16625703708,320.42456924675,326.96384715385,343.31203882349,348.83408706747,355.95315006884,373.75080757229,392.4383479509,400.44729382745,406.8883429195,420.46965851882,427.23275920923,435.9517939049,457.74938532681,480.63685362987,490.44577048562,498.33441009638,523.2511306012],description:"Three chains of sqrt(3/2) separated by 10/7"},shahin:{frequencies:[261.6255653006,277.01530443593,282.55561052465,294.32876096318,310.50067090621,317.47821407264,328.55303549378,348.83408706747,357.66532977804,371.78369805875,376.74081403286,392.4383479509,415.52295665389,428.11456140098,441.49314144476,463.20591889287,478.90781444856,495.71159741166,523.2511306012],description:"Mohajeri Shahin Iranian style scale, TL 9-4-2006"},shahin_wt:{frequencies:[261.6255653006,276.93928561067,294.25491037444,311.47852302926,329.62755691287,348.92163548373,370.73795561568,392.4383479509,415.30469757995,439.61371330969,467.10055427519,494.44133512215,523.2511306012],description:"Mohajeri Shahin, well temperament, TL 28-12-2006"},shalfun:{frequencies:[261.6255653006,269.43930514995,277.46904793785,285.74220762407,294.32876096318,302.80736724606,311.45900631024,320.30554027987,329.50323085718,338.98103822311,348.83408706747,359.12912189513,369.78878487717,380.87868001252,392.4383479509,404.24222079821,416.2697936366,428.68354137408,441.49314144476,454.4477424016,467.68960547122,481.19471271032,494.94053216156,508.90014647073,523.2511306012],description:"d'Erlanger vol.5, p.40. After Alexandre ^Salfun (Chalfoun)"},"sharm1c-conm":{frequencies:[261.6255653006,305.22982618403,318.50068819203,332.97799220076,406.97310157871,430.91269578922,457.84473927605,523.2511306012],description:"Subharm1C-ConMixolydian"},"sharm1c-conp":{frequencies:[261.6255653006,313.95067836072,330.47439827444,348.83408706747,418.60090448096,448.50096908674,483.00104363188,523.2511306012],description:"Subharm1C-ConPhryg"},"sharm1c-dor":{frequencies:[261.6255653006,319.76457981184,338.57426097725,359.73515228832,383.71749577421,411.12588832951,479.64686971777,547.03527290125,523.2511306012],description:"Subharm1C-Dorian"},"sharm1c-lyd":{frequencies:[261.6255653006,309.19384990071,323.91736656265,340.11323489078,382.37582620857,377.90359432309,485.87604984397,503.87145909745,523.2511306012],description:"Subharm1C-Lydian"},"sharm1c-mix":{frequencies:[261.6255653006,305.22982618403,318.50068819203,332.97799220076,366.27579142084,457.84473927605,488.36772189445,523.2511306012],description:"Subharm1C-Mixolydian"},"sharm1c-phr":{frequencies:[261.6255653006,313.95067836072,330.47439827444,348.83408706747,392.4383479509,483.00104363188,502.32108537715,523.2511306012],description:"Subharm1C-Phrygian"},"sharm1e-conm":{frequencies:[261.6255653006,318.50068819203,325.57848126297,332.97799220076,430.91269578922,443.97065626768,457.84473927605,523.2511306012],description:"Subharm1E-ConMixolydian"},"sharm1e-conp":{frequencies:[261.6255653006,330.47439827444,339.40613876835,348.83408706747,448.50096908674,465.11211608996,483.00104363188,523.2511306012],description:"Subharm1E-ConPhrygian"},"sharm1e-dor":{frequencies:[261.6255653006,338.57426097725,348.83408706747,359.73515228832,383.71749577421,411.12588832951,500.50108144463,511.62332769895,523.2511306012],description:"Subharm1E-Dorian"},"sharm1e-lyd":{frequencies:[261.6255653006,323.91736656265,331.81779013735,340.11323489078,382.37582620857,377.90359432309,503.87145909745,513.37846775967,523.2511306012],description:"Subharm1E-Lydian"},"sharm1e-mix":{frequencies:[261.6255653006,318.50068819203,325.57848126297,332.97799220076,366.27579142084,488.36772189445,505.20798816668,523.2511306012],description:"Subharm1E-Mixolydian"},"sharm1e-phr":{frequencies:[261.6255653006,330.47439827444,339.40613876835,348.83408706747,392.4383479509,502.32108537715,512.57253609913,523.2511306012],description:"Subharm1E-Phrygian"},"sharm2c-15":{frequencies:[261.6255653006,327.03195662575,341.25073734861,356.76213450082,392.4383479509,461.69217405988,490.54793493862,523.2511306012],description:"Subharm2C-15-Harmonia"},"sharm2c-hypod":{frequencies:[261.6255653006,322.00069575458,334.88072358477,348.83408706747,364.00078650518,380.54627680087,465.11211608996,492.47165233054,523.2511306012],description:"SHarm2C-Hypodorian"},"sharm2c-hypol":{frequencies:[261.6255653006,307.79478270659,327.03195662575,348.83408706747,373.75080757229,402.50086969323,475.68284600109,498.33441009638,523.2511306012],description:"SHarm2C-Hypolydian"},"sharm2c-hypop":{frequencies:[261.6255653006,336.37572681506,348.83408706747,362.25078272391,376.74081403286,392.4383479509,470.92601754108,495.71159741166,523.2511306012],description:"SHarm2C-Hypophrygian"},"sharm2e-15":{frequencies:[261.6255653006,341.25073734861,348.83408706747,356.76213450082,392.4383479509,490.54793493862,506.37206187213,523.2511306012],description:"Subharm2E-15-Harmonia"},"sharm2e-hypod":{frequencies:[261.6255653006,334.88072358477,341.71502406609,348.83408706747,364.00078650518,380.54627680087,492.47165233054,507.3950357345,523.2511306012],description:"SHarm2E-Hypodorian"},"sharm2e-hypol":{frequencies:[261.6255653006,327.03195662575,337.58137458142,348.83408706747,373.75080757229,402.50086969323,498.33441009638,510.48890790361,523.2511306012],description:"SHarm2E-Hypolydian"},"sharm2e-hypop":{frequencies:[261.6255653006,348.83408706747,355.41586229515,362.25078272391,376.74081403286,392.4383479509,495.71159741166,509.10920815252,523.2511306012],description:"SHarm2E-Hypophrygian"},sherwood:{frequencies:[261.6255653006,279.50101530337,292.73346657716,312.73435005323,327.54017122074,349.91920725962,366.48547573919,391.52543233055,418.27599117656,438.07873640926,468.01000025525,490.16733894289,523.65750116998],description:"Sherwood's improved meantone temperament"},shrutar:{frequencies:[261.6255653006,269.80136421624,277.49581689502,285.40970760065,294.32876096318,304.37698984459,313.95067836072,327.03195662575,336.37572681506,348.83408706747,359.73515228832,368.95121675679,379.48299988042,392.4383479509,405.83598431812,417.42065019394,428.11456140098,441.49314144476,457.84473927605,470.92601754108,490.54793493862,505.97733342682,523.2511306012],description:"Paul Erlich's Shrutar tuning (from 9th fret) tempered with Dave Keenan"},shrutar_temp:{frequencies:[261.6255653006,269.67683152447,277.97586744827,286.53029793775,295.34798250635,304.4370214407,313.80576690868,327.74897996102,337.83512841993,348.23166805304,358.94815083964,369.99442271164,381.38063259971,393.11724175776,405.21503337437,417.68512248001,430.53896367224,443.78837151315,463.50705251482,477.77102045752,492.47394780842,507.62934310616,523.2511306012],description:"Shrutar temperament, 11-limit, g=52.474, 1/2 oct."},shrutart:{frequencies:[261.6255653006,269.83675183105,278.27349931787,286.14641333958,294.32706056425,305.2349557921,313.94319125793,327.02936607233,337.2932679302,348.82502010853,358.79758764604,369.99442271164,381.540672377,392.44854854484,405.86600994967,418.6042204156,436.0530078362,448.49343183014,465.11480315564,478.41198231361,491.94721442498,507.32849364948,523.2511306012],description:"Paul Erlich's 'Shrutar' tuning tempered by Dave Keenan, TL 29-12-2000"},siamese:{frequencies:[261.6255653006,269.26067151764,288.95340229325,296.22023396764,319.13574119147,352.26720984209,362.5475414329,388.79334481031,400.18585940536,429.40436513853,443.77760270734,473.98350631811,523.2511306012],description:"Siamese Tuning, after Clem Fortuna's Microtonal Guide"},silbermann1:{frequencies:[261.6255653006,275.15551885617,293.66476791741,312.53552595124,327.77163799145,349.82028288879,367.9112241576,391.99543598175,411.56972129721,438.75957425603,467.74568907204,491.10256480205,523.2511306012],description:"Gottfried Silbermann's temperament nr. 1"},silbermann2:{frequencies:[261.6255653006,275.00020270933,293.00227310437,312.18279369479,328.14198392915,349.6228209638,367.49599295996,391.5530240856,411.56972129721,438.51190905657,467.21778431035,491.10256480205,523.2511306012],description:"Gottfried Silbermann's temperament nr. 2, 1/6 Pyth. comma meantone"},silbermann2a:{frequencies:[261.6255653006,275.00020270933,293.00227310437,310.77584116741,328.14198392915,349.6228209638,367.49599295996,391.5530240856,411.56972129721,438.51190905657,467.21778431035,491.10256480205,523.2511306012],description:"Modified Silbermann's temperament nr. 2, also used by Hinsz in Midwolda"},silver:{frequencies:[261.6255653006,277.18807786937,293.58315284916,311.09098010692,329.53543886896,349.23174545031,369.98176232374,391.84186131702,415.18563115404,439.77824302677,466.03998256716,493.70667148145,523.2511306012],description:"Equal beating chromatic scale, A.L.Leigh Silver JASA 29/4, 476-481, 1957"},silver_10:{frequencies:[261.6255653006,270.26884019355,294.27266239927,320.41022551991,330.99364634362,360.39280035711,392.40094712608,405.36462386145,441.36692569059,480.56953386201,523.2511306012],description:"Ten-tone MOS from 350.9 cents"},silver_11:{frequencies:[261.6255653006,277.73657748574,294.83971256733,315.81001885226,335.25773244276,355.90304440354,381.21644531515,404.69191411574,429.61301214396,460.16899244324,488.50639225338,523.2511306012],description:"Eleven-tone MOS from 1+sqr(2), 1525.864 cents"},silver_11a:{frequencies:[261.6255653006,272.21316796874,283.22923537857,314.22802528801,326.94437231289,340.17533123945,377.40674067136,392.67983758722,408.5710143206,453.28817432381,471.63208149661,523.2511306012],description:"Eleven-tone MOS from 317.17 cents"},silver_11b:{frequencies:[261.6255653006,281.48899567641,302.85877036442,316.87090334834,340.92873240472,366.81310701257,383.78194911277,412.91987382947,444.27004083312,464.82473992747,500.11279777071,523.2511306012],description:"Eleven-tone MOS from 331.67 cents"},silver_7:{frequencies:[261.6255653006,277.73649727228,315.81000061035,335.2576162513,381.21640127531,404.69175048432,460.16888612163,523.2511306012],description:"Seven-tone MOS from 1+sqr(2), 1525.864 cents"},silver_8:{frequencies:[261.6255653006,288.49477506296,306.46277751246,337.93681424842,358.98416079003,395.852196628,420.50662316693,492.57276348379,523.2511306012],description:"Eight-tone MOS from 273.85 cents"},silver_9:{frequencies:[261.6255653006,294.18258755347,307.6617709921,345.94759796409,361.79860795042,406.82129262791,425.46148093979,478.40645551359,500.32661205896,523.2511306012],description:"Nine-tone MOS from 280.61 cents"},silvermean:{frequencies:[261.6255653006,286.15296204753,327.03195662575,345.42750418595,392.4383479509,416.96574469783,474.19633710734,523.2511306012],description:"First 6 approximants to the Silver Mean, 1+ sqr(2) reduced by 2/1"},simonton:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,348.83408706747,370.63621750918,392.4383479509,414.24047839262,436.04260883433,465.11211608996,494.18162334558,523.2511306012],description:"Simonton Integral Ratio Scale, JASA 25/6 (1953): A new integral ratio scale"},sims:{frequencies:[261.6255653006,272.52663052146,283.42769574232,294.32876096318,305.22982618403,316.13089140489,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,408.78994578219,425.14154361347,441.49314144476,457.84473927605,474.19633710734,490.54793493862,506.89953276991,523.2511306012],description:"Ezra Sims' 18-tone mode"},sims2:{frequencies:[261.6255653006,269.80136421624,277.97716313189,286.15296204753,294.32876096318,302.50455987882,310.68035879446,318.85615771011,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,408.78994578219,425.14154361347,441.49314144476,457.84473927605,474.19633710734,490.54793493862,506.89953276991,523.2511306012],description:"Sims II"},sims_24:{frequencies:[261.6255653006,269.80136421624,272.52663052146,277.97716313189,283.42769574232,286.15296204753,294.32876096318,302.50455987882,305.22982618403,310.68035879446,316.13089140489,318.85615771011,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,408.78994578219,425.14154361347,441.49314144476,457.84473927605,474.19633710734,490.54793493862,506.89953276991,523.2511306012],description:"See his article, Reflections on This and That, 1991 p.93-106"},sin:{frequencies:[261.6255653006,275.08939827539,302.09917071192,334.63165645627,369.99442271164,407.01712569342,445.10399729103,483.9175316883,523.2511306012,562.97086325858,602.98541169118,643.23087116255,683.66056756853,724.23972686276,764.94197926416,805.74682982871,846.63811574624,887.6028851904,928.63083777952,969.71346974542,1010.84345850104,1052.01529432917],description:"1/sin(2pi/n), n=4..25"},sinemod12:{frequencies:[261.6255653006,270.6035983646,282.0485507085,292.16840832754,301.82804372114,314.42520179993,326.24260278214,336.76433478807,350.4641458176,364.21811789193,375.86233664064,390.61306119732,406.50371126161,419.61372202861,435.38454314112,453.55584308858,468.551249676,485.36279478778,505.89080731022,523.2511306012],description:"Sine modulated F=12, A=-.08203754"},sinemod8:{frequencies:[261.6255653006,272.43905323978,281.98404270447,290.99567087708,301.68076007415,314.40050256998,326.99158834066,337.97331861211,348.96407538813,362.38276875396,377.76595534172,392.29216556304,405.04934945717,418.6525822649,435.418746849,453.77727371169,470.43955130022,485.47382867757,502.48255971303,523.2511306012],description:"Sine modulated F=8, A=.11364155. Deviation minimal3/2, 4/3, 5/4, 6/5, 5/3, 8/5"},singapore:{frequencies:[261.6255653006,291.46787011619,321.35550581422,354.51258839996,385.70651737906,428.95813651779,462.1422075194,523.2511306012],description:"An observed xylophone tuning from Singapore"},sintemp6:{frequencies:[261.6255653006,277.18263097687,292.42974339757,312.08834713741,327.870830746,349.91196330865,369.15973155124,391.11111150212,416.11779639122,437.6550518996,467.60417912673,491.80624587316,523.2511306012],description:"Sine modulated fifths, A=1/6 Pyth, one cycle, f0=-90 degrees"},sintemp6a:{frequencies:[261.6255653006,276.17281343288,293.21211353711,310.64741311165,328.42667470471,349.22823143301,368.43838932195,391.77416758435,414.19655102258,438.82595961933,465.90062756558,491.80624587316,523.2511306012],description:"Sine modulated fifths, A=1/12 Pyth, one cycle, f0= D-A"},sintemp_19:{frequencies:[261.6255653006,272.86445838226,281.30973389888,292.50627485027,304.14845459111,313.56198179795,327.03195662575,338.65502209741,350.02113164026,365.30494475029,376.98581738134,391.19763056219,407.47965586966,419.94695489748,437.42555500456,453.91586039553,468.43012697388,488.88431353627,505.29249383438,523.2511306012],description:"Sine modulated thirds, A=7.366 cents, one cycle over fifths, f0=90 degrees"},sintemp_7:{frequencies:[261.6255653006,291.06608881088,319.67397341855,351.09362859375,390.60192440975,432.07134328681,473.03044489876,523.2511306012],description:"Sine modulated fifths, A=8.12 cents, one cycle, f0=90 degrees"},slen_pel:{frequencies:[261.6255653006,261.6255653006,283.17034563789,298.45295203849,338.50336851425,364.68988616898,346.01554587335,389.06292924114,398.38689497567,420.13030572059,455.51656649021,493.31307433255,523.2511306012],description:"Pelog white, Slendro black"},slen_pel16:{frequencies:[261.6255653006,261.6255653006,285.30470202322,285.30470202322,297.93622032612,311.12698372208,339.28638158975,386.37547528213,386.37547528213,403.48177901006,421.34544350737,440,523.2511306012],description:"16-tET Slendro and Pelog"},slen_pel23:{frequencies:[261.6255653006,261.6255653006,295.14355885465,295.14355885465,286.38154466424,343.14246862785,313.47984535337,398.94762483098,398.94762483098,387.10394860926,450.05828708186,423.73315704439,523.2511306012],description:"23-tET Slendro and Pelog"},slen_pel_jc:{frequencies:[261.6255653006,261.6255653006,299.00064605783,299.00064605783,279.06726965397,341.71502406609,348.83408706747,392.4383479509,392.4383479509,392.4383479509,448.50096908674,418.60090448096,523.2511306012],description:"Slendro/JC PELOG S1c,P1c#,S2d,eb,P2e,S3f,P3f#,S4g,ab,P4a,S5bb,P5b"},slen_pel_schmidt:{frequencies:[261.6255653006,261.6255653006,294.32876096318,305.22982618403,327.03195662575,348.83408706747,359.73515228832,392.4383479509,392.4383479509,457.84473927605,457.84473927605,490.54793493862,523.2511306012],description:"Dan Schmidt (Pelog white, Slendro black)"},slendro:{frequencies:[261.6255653006,298.45295203849,346.01554587335,398.38689497567,455.51656649021,523.2511306012],description:"Observed Javanese Slendro scale, Helmholtz/Ellis p. 518, nr.94"},slendro10:{frequencies:[261.6255653006,304.21577360535,342.24274530602,391.67780832635,463.92905474816,523.2511306012],description:"Low gender from Singaraja (banjar Lod Peken), Bali. 1/1=172 Hz. McPhee, 1966."},slendro11:{frequencies:[261.6255653006,299.11221417218,343.62760815601,387.36203100102,452.96366529656,523.2511306012],description:"Low gender from Sawan, Bali. 1/1=167.5 Hz. McPhee, 1966."},slendro2:{frequencies:[261.6255653006,299.13295468097,343.58614396263,395.91119354826,450.08870388136,523.2511306012],description:"Gamelan slendro from Ranchaiyuh, distr. Tanggerang, Batavia. 1/1=282.5 Hz"},slendro3:{frequencies:[261.6255653006,298.44694115772,339.14425131559,391.46936437571,453.48431318771,522.28214737536],description:"Gamelan kodok ngorek. 1/1=270 Hz"},slendro4:{frequencies:[261.6255653006,294.5074669504,344.54514337401,400.3014113889,467.49486258632,523.2511306012],description:"Low gender in saih lima from Kuta, Bali. 1/1=183 Hz. McPhee, 1966"},slendro5_1:{frequencies:[261.6255653006,299.00064605783,336.37572681506,392.4383479509,448.50096908674,523.2511306012],description:"A slendro type pentatonic which is based on intervals of 7; from Lou Harrison"},slendro5_2:{frequencies:[261.6255653006,305.22982618403,348.83408706747,392.4383479509,457.84473927605,523.2511306012],description:"A slendro type pentatonic which is based on intervals of 7, no. 2"},slendro5_4:{frequencies:[261.6255653006,294.32876096318,348.83408706747,392.4383479509,448.50096908674,523.2511306012],description:"A slendro type pentatonic which is based on intervals of 7, no. 4"},slendro6:{frequencies:[261.6255653006,295.05549864457,341.56671025356,398.25224940202,461.478427683,523.2511306012],description:"Low gender from Klandis, Bali. 1/1=180 Hz. McPhee, 1966"},slendro8:{frequencies:[261.6255653006,309.85821141747,350.78288084997,406.32350365121,467.71050779996,523.2511306012],description:"Low gender from Tabanan, Bali. 1/1=179 Hz. McPhee, 1966."},slendro9:{frequencies:[261.6255653006,299.00064605783,336.37572681506,388.70083987518,448.50096908674,523.2511306012],description:"Low gender from Singaraja (banjar Panataran), Bali. 1/1=175 Hz. McPhee, 1966."},slendro_7_1:{frequencies:[261.6255653006,299.00064605783,341.71502406609,392.4383479509,448.50096908674,523.2511306012],description:"Septimal Slendro 1, From HMSL Manual, also Lou Harrison, Jacques Dudon"},slendro_7_2:{frequencies:[261.6255653006,294.32876096318,343.38355445704,392.4383479509,448.50096908674,523.2511306012],description:"Septimal Slendro 2, From Lou Harrison, Jacques Dudon's APTOS"},slendro_7_3:{frequencies:[261.6255653006,294.32876096318,336.37572681506,392.4383479509,448.50096908674,523.2511306012],description:'Septimal Slendro 3, Harrison, Dudon, called "MILLS" after Mills Gamelan'},slendro_7_4:{frequencies:[261.6255653006,294.32876096318,343.38355445704,392.4383479509,457.84473927605,523.2511306012],description:'Septimal Slendro 4, from Lou Harrison, Jacques Dudon, called "NAT"'},slendro_7_5:{frequencies:[261.6255653006,305.22982618403,343.38355445704,400.61414686654,467.3831713443,523.2511306012],description:"Septimal Slendro 5, from Jacques Dudon"},slendro_7_6:{frequencies:[261.6255653006,299.00064605783,341.71502406609,390.53145607553,455.62003208812,523.2511306012],description:"Septimal Slendro 6, from Robert Walker"},slendro_a1:{frequencies:[261.6255653006,299.00064605783,348.83408706747,392.4383479509,457.84473927605,523.2511306012],description:`Dudon's Slendro A1, "Seven-Limit Slendro Mutations", 1/1 8:2'94 hexany 1.3.7.21`},slendro_a2:{frequencies:[261.6255653006,299.00064605783,341.71502406609,398.6675280771,448.50096908674,523.2511306012],description:`Dudon's Slendro A2 from "Seven-Limit Slendro Mutations", 1/1 8:2 Jan 1994`},slendro_alv:{frequencies:[261.6255653006,299.00064605783,348.83408706747,406.97310157871,465.11211608996,523.2511306012],description:"Bill Alves, slendro for Gender Barung, 1/1 vol.9 no.4, 1997. 1/1=282.86"},slendro_ang:{frequencies:[261.6255653006,299.00064605783,340.82516392797,388.43396508487,445.83123341082,523.2511306012],description:"Gamelan Angklung Sangsit, North Bali. 1/1=294 Hz"},slendro_av:{frequencies:[261.6255653006,298.97057995496,344.02264297658,395.86362945285,454.20288100724,525.67465946865],description:"Average of 30 measured slendro gamelans, W. Surjodiningrat et al., 1993."},slendro_dudon:{frequencies:[261.6255653006,305.22982618403,348.83408706747,399.70572476481,457.84473927605,523.2511306012],description:'Dudon\'s Slendro from "Fleurs de lumie`re"'},slendro_gum:{frequencies:[261.6255653006,305.03156112838,348.43777142572,394.8168394034,470.92601754108,525.62941881859],description:"Gumbeng, bamboo idiochord from Banyumas. 1/1=440 Hz"},slendro_ky1:{frequencies:[261.6255653006,297.58776037991,344.33874539242,394.68595744625,449.52853279627,523.2511306012],description:"Kyahi Kanyut Me`sem slendro, Mangku Nagaran, Solo. 1/1=291 Hz"},slendro_ky2:{frequencies:[261.6255653006,302.42139140287,345.87786599062,395.54249276388,453.1886900261,523.2511306012],description:"Kyahi Pengawe' sari, Paku Alaman, Jogya. 1/1=295 Hz"},slendro_laras:{frequencies:[261.6255653006,299.00064605783,348.83408706747,392.4383479509,448.50096908674,523.2511306012,598.00129211566,697.66817413493],description:'Lou Harrison, gamelan "Si Betty"'},slendro_m:{frequencies:[261.6255653006,299.00064605783,348.83408706747,392.4383479509,448.50096908674,523.2511306012],description:`Dudon's Slendro M from "Seven-Limit Slendro Mutations", 1/1 8:2 Jan 1994`},slendro_madu:{frequencies:[261.6255653006,300.52885648597,345.61604384578,394.49404533893,447.94973572445,522.94897617031],description:"Sultan's gamelan Madoe kentir, Jogjakarta, Jaap Kunst"},slendro_mat:{frequencies:[261.6255653006,261.6255653006,299.00064605783,299.00064605783,341.71502406609,343.38355445704,348.83408706747,392.4383479509,398.6675280771,448.50096908674,455.62003208812,457.84473927605,523.2511306012],description:`Dudon's Slendro Matrix from "Seven-Limit Slendro Mutations", 1/1 8:2 Jan 1994`},slendro_pa:{frequencies:[261.6255653006,304.19649364034,353.69443592699,411.24653512154,478.16333951147,523.2511306012],description:'"Blown fifth" primitive slendro, von Hornbostel'},slendro_pas:{frequencies:[261.6255653006,300.35531433711,343.03050002254,393.12919962609,450.54468214486,523.2511306012],description:"Gamelan slendro of regent of Pasoeroean, Jaap Kunst"},slendro_pb:{frequencies:[261.6255653006,304.72408298441,342.83241505062,399.30842833955,449.24533531117,523.2511306012],description:'"Blown fifth" medium slendro, von Hornbostel'},slendro_pc:{frequencies:[261.6255653006,299.48910562989,342.83241505062,392.44854854484,449.24533531117,523.2511306012],description:'"Blown fifth" modern slendro, von Hornbostel'},slendro_pliat:{frequencies:[261.6255653006,299.73468146833,339.98478643783,393.08060743874,447.03290350508,523.2511306012,599.46936293666,679.96957287566,786.16121487749,894.06580701017],description:"Gender wayang from Pliatan, South Bali (Slendro), 1/1=305.5 Hz"},slendro_q13:{frequencies:[261.6255653006,307.00725675226,360.2608752926,400.8015646157,470.32478922042,523.2511306012],description:"13-tET quasi slendro, Blackwood"},slendro_s1:{frequencies:[261.6255653006,299.00064605783,348.83408706747,398.6675280771,457.84473927605,523.2511306012],description:`Dudon's Slendro S1 from "Seven-Limit Slendro Mutations", 1/1 8:2 Jan 1994`},slendro_s2:{frequencies:[261.6255653006,299.00064605783,341.71502406609,398.6675280771,455.62003208812,523.2511306012],description:"Dudon's Slendro S2"},slendro_udan:{frequencies:[261.6255653006,305.22982618403,351.32575911795,402.50086969323,465.11211608996,523.2511306012],description:"Slendro Udan Mas (approx)"},slendro_wolf:{frequencies:[261.6255653006,298.18866107946,339.86157848985,395.0032340925,450.20632964813,523.2511306012],description:"Daniel Wolf's slendro. Tuning List 30 5 1997"},slendrob1:{frequencies:[261.6255653006,307.44024341205,355.66611281954,409.9203247543,476.83364134848,523.2511306012],description:"Gamelan miring of Musadikrama, desa Katur, Bajanegara. 1/1=434 Hz"},slendrob2:{frequencies:[261.6255653006,307.55978097874,346.50416420081,398.42969909174,449.35693171058,523.2511306012],description:"Gamelan miring from Bajanegara. 1/1=262 Hz"},slendrob3:{frequencies:[261.6255653006,304.90191053936,342.27700149692,398.33972372326,447.51732140012,523.2511306012],description:"Gamelan miring from Ngumpak, Bajanegara. 1/1=266 Hz"},slendroc1:{frequencies:[261.6255653006,297.59222964268,344.42030317161,394.72197985873,449.50490455178,523.2511306012],description:"Kyahi Kanyut mesem slendro (Mangku Nagaran Solo). 1/1=291 Hz"},slendroc2:{frequencies:[261.6255653006,302.44445076078,346.01554587335,396.09235530397,453.15466093696,523.2511306012],description:"Kyahi Pengawe sari (Paku Alaman, Jogja). 1/1=295 Hz."},slendroc3:{frequencies:[261.6255653006,301.39807245198,344.42030317161,395.40657391157,451.84778706363,523.2511306012],description:"Gamelan slendro of R.M. Jayadipura, Jogja. 1/1=231 Hz"},slendroc4:{frequencies:[261.6255653006,299.14332201883,343.8239850859,396.09235530397,450.28451247858,523.2511306012],description:"Gamelan slendro, Rancha iyuh, Tanggerang, Batavia. 1/1=282.5 Hz"},slendroc5:{frequencies:[261.6255653006,299.83528893666,340.07120590121,393.12919962609,447.17417015401,523.2511306012],description:"Gender wayang from Pliatan, South Bali. 1/1=611 Hz"},slendroc6:{frequencies:[261.6255653006,296.73398952435,343.8239850859,396.7793260952,453.9405988926,527.19506190947,607.33963549452,696.44215167899,797.23415748628,918.4302691641,1071.58188326661],description:"from William Malm: Music Cultures of the Pacific, the Near East and Asia."},slendrod1:{frequencies:[261.6255653006,292.47977325983,340.6610152784,389.06292924114,444.85552088095,523.2511306012],description:"Gender wayang from Ubud (S. Bali). 1/1=347 Hz"},smith_eh:{frequencies:[261.6255653006,272.7117507892,292.30354792656,313.30283124826,326.5788018031,350.04044239751,364.87314355143,391.08587539224,407.65784362321,436.94425707006,468.33462614046,488.17995458879,523.2511306012],description:"Robert Smith's Equal Harmony temperament (1749)"},smith_mq:{frequencies:[261.6255653006,273.37438418823,292.50629623572,312.97714101186,327.03200500996,349.91910755601,365.63292511375,391.22148485648,408.79006910398,437.39894995248,468.01000388518,489.02693031834,523.2511306012],description:"Robert Smith approximation of quarter comma meantone fifth"},"scalamakesrc2\\smithgw-ball":{frequencies:[261.6255653006,267.07609791103,272.52663052146,274.70684356563,280.31310567921,286.15296204753,294.32876096318,300.46061014991,305.22982618403,306.59245933664,313.95067836072,320.49131749323,327.03195662575,333.84512238879,336.37572681506,343.38355445704,350.39138209902,357.69120255941,366.27579142084,367.91095120397,373.75080757229,381.53728273004,392.4383479509,400.61414686654,408.78994578219,412.06026534844,420.46965851882,429.2294430713,436.04260883433,448.50096908674,457.84473927605,467.18850946536,470.92601754108,476.92160341255,480.73697623985,490.54793493862,500.76768358318,515.07533168556,523.2511306012],description:"Ball 2 around tetrad lattice hole"},smithgw46:{frequencies:[261.6255653006,273.72380653152,313.47993226845,327.97605323154,364.46098649856,392.98113253789,436.69740466987,456.89141950378,523.2511306012],description:'Gene Ward Smith 46-tET subset "Star"'},smithgw46a:{frequencies:[261.6255653006,282.09853500802,313.47993226845,327.97605323154,375.61187043063,392.98113253789,436.69740466987,470.87026054824,523.2511306012],description:'46-tET version of "Star", alternative version'},smithgw72a:{frequencies:[261.6255653006,285.30470202322,299.37379946195,326.46944327063,342.56848033562,373.57357677338,391.99543598175,427.47405410759,435.78442404634,457.27406033445,498.66089874196,523.2511306012],description:"Gene Ward Smith 72-tET subset, TL 04-01-2002"},smithgw72c:{frequencies:[261.6255653006,279.86396690685,305.19382000629,326.46944327063,349.22823143301,391.99543598175,419.32216217931,457.27406033445,489.15147723638,523.2511306012],description:"Gene Ward Smith 72-tET subset, TL 04-01-2002"},smithgw72d:{frequencies:[261.6255653006,305.19382000629,326.46944327063,349.22823143301,366.44956000397,391.99543598175,419.32216217931,489.15147723638,523.2511306012],description:"Gene Ward Smith 72-tET subset, TL 04-01-2002"},smithgw72e:{frequencies:[261.6255653006,279.86396690685,326.46944327063,349.22823143301,366.44956000397,391.99543598175,419.32216217931,489.15147723638,523.2511306012],description:"Gene Ward Smith 72-tET subset, TL 04-01-2002"},smithgw72f:{frequencies:[261.6255653006,326.46944327063,349.22823143301,435.78442404634,466.16376151809,523.2511306012],description:"Gene Ward Smith 72-tET subset, TL 04-01-2002"},smithgw72g:{frequencies:[261.6255653006,326.46944327063,349.22823143301,391.99543598175,419.32216217931,523.2511306012],description:"Gene Ward Smith 72-tET subset, TL 04-01-2002"},smithgw72h:{frequencies:[261.6255653006,279.86396690685,314.13668154225,349.22823143301,391.99543598175,435.78442404634,489.15147723638,523.2511306012],description:"Gene Ward Smith 72-tET subset, TL 09-01-2002"},smithgw72i:{frequencies:[261.6255653006,279.86396690685,293.66476791741,314.13668154225,326.46944327063,349.22823143301,366.44956000397,391.99543598175,419.32216217931,435.78442404634,470.6732130613,489.15147723638,523.2511306012],description:"Gene Ward Smith 72-tET subset version of Duodene, TL 02-06-2002"},smithgw72j:{frequencies:[261.6255653006,274.52698453615,305.19382000629,326.46944327063,349.22823143301,366.44956000397,391.99543598175,435.78442404634,457.27406033445,489.15147723638,523.2511306012],description:"{225/224, 441/440} tempering of decad, 72-et version (2002)"},smithgw84:{frequencies:[261.6255653006,286.48426603331,306.03443598155,335.11270457212,357.98136125932,391.99543598175,418.74586628806,458.53356119912,489.82466832727,523.2511306012],description:'Gene Ward Smith 84-tET subset, 11-limit temperament "Orwell", 2002'},smithgw_18:{frequencies:[261.6255653006,272.52663052146,280.31310567921,286.15296204753,294.32876096318,306.59245933664,327.03195662575,343.38355445704,350.39138209902,367.91095120397,381.53728273004,392.4383479509,408.78994578219,420.46965851882,436.04260883433,457.84473927605,467.18850946536,490.54793493862,523.2511306012],description:"Gene Ward Smith chord analogue to periodicity blocks, TL 12-07-2002"},smithgw_21:{frequencies:[261.6255653006,267.07609791103,280.31310567921,286.15296204753,299.00064605783,305.22982618403,320.49131749323,327.03195662575,343.38355445704,348.83408706747,366.27579142084,373.75080757229,392.4383479509,398.6675280771,418.60090448096,427.14378008261,448.50096908674,457.84473927605,478.40103369253,488.36772189445,512.57253609913,523.2511306012],description:"Gene Ward Smith symmetrical 7-limit JI version of Blackjack, TL 10-5-2002"},smithgw_45:{frequencies:[261.6255653006,267.02002970726,269.13627541126,274.68560334708,276.86260193655,282.57123920205,288.39758300936,290.68325478745,296.67686217097,299.02814898089,305.19382000629,311.48661940174,313.95528147508,320.42873367481,322.96826575344,329.62755691287,336.42415617173,339.09045868095,346.08217376006,348.82502010853,356.01745236555,363.35818557229,366.23795155866,373.78942366597,376.75185941212,384.52011812375,392.44854854484,395.55886785613,403.71490654806,406.9145164708,415.30469757995,423.86787605389,427.22720671064,436.03621571368,439.49198556474,448.5538823653,457.80262665414,461.43090443914,470.94516310483,474.67759826036,484.46499093218,494.45418731234,498.37294408452,508.64890891624,512.68016480935,523.2511306012],description:"Gene Ward Smith large limma repeating 5-tone MOS"},smithgw_58:{frequencies:[261.6255653006,264.89588486686,267.57160087561,269.80136421624,274.70684356563,279.06726965397,282.55561052465,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,301.49231810831,305.22982618403,310.07474405997,313.95067836072,317.12189733406,319.76457981184,323.76163705949,327.03195662575,332.97799220076,336.37572681506,340.54567384169,343.38355445704,348.83408706747,353.19451315581,356.76213450082,359.73515228832,366.27579142084,370.01329949656,373.75080757229,380.54627680087,383.71749577421,387.59343007496,392.4383479509,398.6675280771,401.98975747775,406.97310157871,411.12588832951,418.60090448096,423.83341578697,428.11456140098,431.68218274599,436.04260883433,441.49314144476,448.50096908674,452.23847716247,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,484.4917875937,490.54793493862,498.33441009638,507.3950357345,511.62332769895,516.79124009995,523.2511306012],description:"Gene Ward Smith 58-tone epimorphic superset of Partch's 43-tone scale"},smithgw_9:{frequencies:[261.6255653006,279.06726965397,305.22982618403,327.03195662575,348.83408706747,392.4383479509,418.60090448096,448.50096908674,490.54793493862,523.2511306012],description:'Gene Ward Smith "Miracle-Magic square" tuning, genus chromaticum of ji_12a'},"smithgw_al-baked":{frequencies:[261.6255653006,277.59364499865,293.85651796007,311.0721560172,330.05816364769,349.39467974592,369.86402907174,392.4383479509,415.42941801053,439.76742419786,466.60823379256,493.94455998605,522.88238970142],description:"Baked alaska, with beat ratios of 2 and 3/2"},"smithgw_al-fried":{frequencies:[261.6255653006,277.00141553195,293.28091128458,310.96067952124,329.23597434237,348.58531822795,369.59898601143,391.32048195179,414.31855981944,439.29480556849,465.11235566178,492.44721175277,522.13326741512],description:"Fried alaska, with octave-fifth brats of 1 and 2"},smithgw_asbru:{frequencies:[261.6255653006,275.52281548997,293.66476791741,313.00128725319,329.62755691287,351.33206601369,367.77883484915,391.99543598175,415.30469757995,440,468.97204376297,490.92584627687,523.2511306012],description:"Modified bifrost (2003)"},smithgw_bifrost:{frequencies:[261.6255653006,275.07759559501,292.50627485027,311.03921839762,327.03195662575,349.91912034749,366.77012764335,391.22147055517,413.66634097248,437.39889945791,466.55882736321,489.02683710225,523.2511306012],description:"Six meantone fifths, four pure, two of sqrt(2048/2025 sqrt(5))"},smithgw_cauldron:{frequencies:[261.6255653006,275.03056468741,291.83931845209,312.58541512404,325.54230007562,350.31873582686,364.83969341757,390.77519652096,414.65779561271,435.90375768372,469.07960710644,486.243977751,523.2511306012],description:"Circulating temperament with two pure 9/7 thirds"},smithgw_ck:{frequencies:[195.99771799087,198.06437430898,200.15282320192,202.2632921446,203.72940721765,205.87758869102,208.04842120778,210.24214482145,211.76609376362,213.99901760782,216.25548480725,218.5357448459,220.11981156469,222.44081817627,224.78629944762,227.15651084977,228.80306427848,231.21563094,233.65363506284,235.34728316698,237.82885399313,240.33658984216,242.87076938222,244.63122826831,247.21069030843,249.81735238129,252.45149840587,254.28140507407,256.96262135434,259.67210915034,262.4101678886,264.31225911206,267.09924514556,269.91561641866,272.7616843206,274.73881033537,277.63573538138,280.56320805899,282.59688215652,285.57666497222,288.58786914203,291.63082264784,293.74472081062,296.84205135845,299.9720393359,303.13503255793,305.33231946532,308.55183127196,311.80529233825,315.09305703284,317.37702217863,320.72353853051,324.10533989702,327.52280172307,329.89686439088,333.37539375097,336.89059979959,339.33256534187,342.91058750208,346.52633537645,350.18021075922,352.71850659998,356.43767199462,360.19605541958,363.99406623991,366.6324923874,370.49837299068,374.40501441099,378.35285076765,381.09535716275,385.11373623244,389.17448849491,391.99543598174],description:"Catakleismic temperament, g=316.745, 11-limit"},smithgw_decab:{frequencies:[261.6255653006,274.70684356563,293.02063313667,313.95067836072,348.83408706747,366.27579142084,392.4383479509,418.60090448096,439.53094970501,488.36772189445,523.2511306012],description:"(10/9) <==> (16/15) transform of decaa"},smithgw_decac:{frequencies:[261.6255653006,280.31310567921,299.00064605783,313.95067836072,348.83408706747,373.75080757229,392.4383479509,418.60090448096,448.50096908674,498.33441009638,523.2511306012],description:"inversion of decaa"},smithgw_decad:{frequencies:[261.6255653006,280.31310567921,311.45900631024,327.03195662575,348.83408706747,373.75080757229,392.4383479509,436.04260883433,467.18850946536,498.33441009638,523.2511306012],description:"inversion of decab"},smithgw_diff13:{frequencies:[261.6255653006,274.70684356563,280.31310567921,299.00064605783,313.95067836072,320.35783506196,336.37572681506,406.97310157871,427.32175665765,436.04260883433,457.84473927605,488.36772189445,498.33441009638,523.2511306012],description:"mod 13 perfect difference set, 7-limit"},smithgw_dwarf6_7:{frequencies:[261.6255653006,299.00064605783,327.03195662575,373.75080757229,392.4383479509,448.50096908674,523.2511306012],description:"Dwarf(<6 10 14 17|)"},smithgw_exotic1:{frequencies:[261.6255653006,274.95996987324,293.39100498914,313.05750197389,327.96500300935,349.94905375768,367.78508905896,392.4383479509,411.12588832951,438.68435539504,468.09011223803,491.94750426812,523.2511306012],description:"Exotic temperament featuring four pure 14/11 thirds and two pure fifths"},smithgw_glumma:{frequencies:[261.6255653006,269.10058145205,299.00064605783,313.95067836072,327.03195662575,358.80077526939,373.75080757229,392.4383479509,436.04260883433,448.50096908674,457.84473927605,512.57253609913,523.2511306012],description:"Gene Smith's Glumma scale, 7-limit, 2002"},smithgw_gm:{frequencies:[261.6255653006,264.89588486686,269.80136421624,274.70684356563,279.06726965397,285.40970760065,290.69507255622,294.32876096318,299.00064605783,305.22982618403,310.07474405997,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,343.38355445704,348.83408706747,353.19451315581,359.73515228832,366.27579142084,373.75080757229,380.54627680087,387.59343007496,392.4383479509,398.6675280771,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,441.49314144476,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,490.54793493862,498.33441009638,507.3950357345,516.79124009995,523.2511306012],description:'Gene Ward Smith "Genesis Minus" periodicity block'},smithgw_graileq:{frequencies:[261.6255653006,274.83794140225,293.02845982215,312.42294214419,328.20064112269,350.39711148969,365.67350481015,391.53226450123,414.40482204179,438.61355268439,469.63029662389,490.10494633744,523.2511306012],description:"56% RMS grail + 44% JI grail"},smithgw_grailrms:{frequencies:[261.6255653006,274.64037495938,293.11160698959,312.82513967025,328.38692028068,350.6222941497,365.93760986436,391.94882001935,414.52240989365,438.39608269016,469.55771333591,490.068176414,523.2511306012],description:"RMS optimized Holy Grail"},smithgw_hahn12:{frequencies:[261.6255653006,280.31310567921,299.00064605783,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"Hahn-reduced 12 note scale, Fokker block 225/224, 126/125, 64/63"},smithgw_hahn15:{frequencies:[261.6255653006,279.06726965397,290.69507255622,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,373.75080757229,392.4383479509,418.60090448096,436.04260883433,457.84473927605,470.92601754108,490.54793493862,523.2511306012],description:"Hahn-reduced 15 note scale"},smithgw_hahn16:{frequencies:[261.6255653006,280.31310567921,294.32876096318,299.00064605783,313.95067836072,327.03195662575,343.38355445704,348.83408706747,366.27579142084,392.4383479509,408.78994578219,418.60090448096,436.04260883433,457.84473927605,488.36772189445,490.54793493862,523.2511306012],description:"Hahn-reduced 16 note scale"},smithgw_hahn19:{frequencies:[261.6255653006,274.70684356563,280.31310567921,294.32876096318,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,366.27579142084,373.75080757229,392.4383479509,406.97310157871,418.60090448096,436.04260883433,457.84473927605,470.92601754108,490.54793493862,508.71637697339,523.2511306012],description:"Hahn-reduced 19 note scale"},smithgw_hahn22:{frequencies:[261.6255653006,272.52663052146,280.31310567921,290.69507255622,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,363.36884069528,366.27579142084,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,490.54793493862,508.71637697339,523.2511306012],description:"Hahn-reduced 22 note scale"},smithgw_indianred:{frequencies:[261.6255653006,275.93321340298,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,331.11985608357,348.83408706747,353.19451315581,367.91095120397,372.08969287196,392.4383479509,413.43299207996,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,496.11959049595,523.2511306012],description:"32805/32768 Hahn-reduced"},smithgw_klv:{frequencies:[261.6255653006,271.78681896552,282.34272472006,293.30861211826,314.10491445143,326.30440921209,338.97771913949,352.14324873572,377.11107157735,391.75765725694,406.97310157871,422.77949745352,452.75560414132,470.34014155688,488.60764618722,523.2511306012],description:"Variant of kleismic with 9/7 thirds, g=316.492"},smithgw_meandin:{frequencies:[261.6255653006,280.31310567921,299.00064605783,313.95067836072,336.37572681506,348.83408706747,373.75080757229,392.4383479509,418.60090448096,448.50096908674,470.92601754108,504.56359022259,523.2511306012],description:"Gene Smith, inverted detempered 7-limit meantone"},smithgw_meanred:{frequencies:[261.6255653006,281.29980781121,291.99281841585,313.95067836072,325.57848126297,350.39138209902,363.36884069528,390.69417751556,420.46965851882,436.04260883433,468.83301301868,486.65469735975,523.2511306012],description:"171-et Hahn reduced rational Meantone[12]"},smithgw_meantune:{frequencies:[261.6255653006,273.55401844854,279.77233440758,292.56174910339,312.85829351777,327.16018629281,334.59705725462,349.85254391288,365.77071543428,374.29488261541,391.03456781852,418.40555295943,437.51985793188,468.14464283802,489.08159472971,500.47948461038,523.2511306012],description:"Meantune scale/temperament, Gene Ward Smith, 2003"},smithgw_mir22:{frequencies:[261.6255653006,267.57160087561,274.70684356563,280.31310567921,285.40970760065,299.00064605783,305.22982618403,319.76457981184,327.03195662575,343.38355445704,348.83408706747,366.27579142084,373.75080757229,392.4383479509,398.6675280771,418.60090448096,428.11456140098,448.50096908674,457.84473927605,479.64686971777,490.54793493862,512.78610798918,523.2511306012],description:"11-limit Miracle[22]"},smithgw_mmt:{frequencies:[261.6255653006,273.37431312998,292.50627485027,307.38829724655,327.03195662575,349.91912034749,365.63284274659,391.22147055517,411.12588832951,437.39890198442,459.65271605653,489.02683710225,523.2511306012],description:"Modified meantone with 5/4, 14/11 and 44/35 major thirds, TL 17-03-2003"},smithgw_modmos12a:{frequencies:[261.6255653006,265.27772209197,292.31087910123,304.72408298441,326.59518553839,340.46429857933,364.90060015836,391.09077971329,407.69874723177,425.01198472693,455.51656649021,488.21056770985,523.2511306012],description:"A 12-note modmos in 50-et meantone"},smithgw_octoid:{frequencies:[261.6255653006,272.34559486824,274.88944875317,277.45706359738,280.04865972334,282.66446436432,285.30470202322,296.99497716113,299.76906949343,302.56907333554,305.39522895084,308.24778413898,311.12698372208,323.87531915696,326.90048829645,329.95391413777,333.03585868997,336.14659218049,339.28638158975,353.18853996009,356.48751029933,359.81729479041,363.17817915623,366.5704580819,369.99442271164,385.15483391523,388.75238658,392.38354231563,396.04861270515,399.74791910495,403.48177901006,420.01432465796,423.93748365756,427.89728706578,431.89407466632,435.9281969008,440,458.02886886968,462.30710409523,466.62530033172,470.98382811593,475.38306960714,479.82340237272,499.48402328631,504.14947188193,508.85849826899,513.6115065207,518.40891338474,523.2511306012],description:"Octoid temperament, g=16.096, oct=1/8, 11-limit"},smithgw_orw18r:{frequencies:[261.6255653006,269.10058145205,280.31310567921,286.15296204753,299.00064605783,305.22982618403,327.03195662575,336.37572681506,348.83408706747,358.80077526939,381.53728273004,392.4383479509,406.97310157871,418.60090448096,448.50096908674,457.84473927605,474.80195184183,490.54793493862,523.2511306012],description:'Rational version of two cycles of 9-tone "Orwell"'},smithgw_pel1:{frequencies:[261.6255653006,272.52663052146,290.69507255622,294.32876096318,327.03195662575,348.83408706747,363.36884069528,392.4383479509,408.78994578219,418.60090448096,436.04260883433,490.54793493862,523.2511306012],description:"125/108, 135/128 periodicity block no. 1"},smithgw_pel2:{frequencies:[261.6255653006,272.52663052146,290.69507255622,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,490.54793493862,523.2511306012],description:"125/108, 135/128 periodicity block no. 2"},smithgw_pel3:{frequencies:[261.6255653006,290.69507255622,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"125/108, 135/128 periodicity block no. 3"},smithgw_pk:{frequencies:[261.6255653006,271.01659746112,280.74472171431,290.822034715,313.8821415949,325.1489200649,336.82012073975,348.91025643633,376.57634157395,390.09352641046,404.09590743895,418.60090448096,451.79296003201,468.01003810189,484.80922990434,523.2511306012],description:"Parakleismic temperament, g=315.263, 5-limit"},smithgw_pris:{frequencies:[261.6255653006,279.06726965397,293.02063313667,305.22982618403,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,488.36772189445,523.2511306012],description:"optimized (15/14)^3 (16/15)^4 (21/20)^3 (25/24)^2 scale"},smithgw_prisa:{frequencies:[261.6255653006,274.70684356563,293.02063313667,313.95067836072,327.03195662575,343.38355445704,366.27579142084,392.4383479509,418.60090448096,439.53094970501,457.84473927605,488.36772189445,523.2511306012],description:"optimized (15/14)^3 (16/15)^4 (21/20)^3 (25/24)^2 scale"},smithgw_pum13marv:{frequencies:[261.6255653006,293.67396865289,305.56991629828,343.00138030143,326.66798000724,366.68389807519,349.22276077151,392.00157668785,407.88051296056,457.84473927605,436.04260883433,489.45661357347,549.41368713126,523.2511306012],description:"pum13 marvel tempered and in epimorphic order"},smithgw_qm3a:{frequencies:[261.6255653006,279.86396690685,305.19382000629,326.46944327063,349.22823143301,366.44956000397,391.99543598175,419.32216217931,457.27406033445,489.15147723638,523.2511306012],description:"Qm(3) 10-note quasi-miracle scale, mode A, 72-tET, TL 04-01-2002"},smithgw_qm3b:{frequencies:[261.6255653006,279.86396690685,299.37379946195,326.46944327063,349.22823143301,373.57357677338,391.99543598175,419.32216217931,448.5538823653,489.15147723638,523.2511306012],description:"Qm(3) 10-note quasi-miracle scale, mode B"},smithgw_ragasyn1:{frequencies:[261.6255653006,269.16210421872,290.69507255622,313.95067836072,322.99452506247,348.83408706747,363.36884069528,392.4383479509,403.74315632809,436.04260883433,470.92601754108,484.4917875937,523.2511306012],description:"Ragasyn 6561/6250 81/80 scale"},smithgw_rainbow:{frequencies:[261.6255653006,273.37431312998,292.50627485027,310.51268695591,327.03195662575,349.91912034749,365.63284274659,391.22147055517,412.03444522126,437.39889945791,468.01003810189,489.02683710225,523.2511306012],description:"Circulating 1/4-comma meantone, Gene Ward SMith"},smithgw_ratwell:{frequencies:[261.6255653006,275.62199471997,293.02063313667,310.07474405997,326.72451751701,348.83408706747,367.49599295996,392.4383479509,413.43299207996,437.57747881743,465.11211608996,489.99465727995,523.2511306012],description:"7-limit rational well-temperament"},smithgw_ratwolf:{frequencies:[261.6255653006,272.55669785235,292.25605339318,313.37920299881,326.47268679644,350.06888377949,364.69531895389,391.05410158062,407.39296674476,436.83777202739,468.410735204,487.98168129749,523.2511306012],description:"Eleven fifths of (418/5)^(1/11) and one 20/13 wolf, G.W. Smith 2003"},smithgw_rectoo:{frequencies:[261.6255653006,290.69507255622,299.00064605783,313.95067836072,327.03195662575,348.83408706747,392.4383479509,408.78994578219,418.60090448096,436.04260883433,457.84473927605,470.92601754108,523.2511306012],description:"Hahn-reduced circle of fifths via <12 19 27 34| kernel"},smithgw_sc19:{frequencies:[261.6255653006,269.16210421872,282.55561052465,290.69507255622,302.80736724606,313.95067836072,327.03195662575,339.06673262958,348.83408706747,363.36884069528,376.74081403286,392.4383479509,403.74315632809,418.60090448096,436.04260883433,452.08897683944,470.92601754108,484.4917875937,508.60009894437,523.2511306012],description:"Fokker block from commas <81/80, 78732/78125>, Gene Ward Smith 2002"},smithgw_sch13:{frequencies:[261.6255653006,269.71217215021,278.04872701265,282.14859498561,290.86954990528,295.15846273282,304.2815407612,313.68660297237,318.31195648825,328.15068782436,332.98931632582,343.28171142549,353.89223299652,359.11042631209,370.21019888355,375.66900084958,387.28058594818,392.99109319609,405.13808832031,417.66053353744,423.81899742763,436.9188548657,443.36128543927,457.06517711961,471.19264083172,478.14044600934,492.91932687455,500.18749236202,515.64783010531,523.2511306012],description:"13-limit schismic temperament, g=704.3917, TL 31-10-2002"},smithgw_sch13a:{frequencies:[261.6255653006,266.49502311502,271.45511438723,280.18048669638,285.39529457963,294.56874561631,300.051354061,305.6360048159,315.46005229837,321.33149462105,331.66004360268,337.8330052901,344.12086009392,355.18192699392,361.79268541866,373.4217751344,380.37201938485,392.59830625439,399.90547017058,407.34863733398,420.4420328577,428.26743302475,442.03321824291,450.26048038501,458.64087358289,473.38295124548,482.19370453904,497.69284002863,506.95605959354,523.2511306012],description:"13-limit schismic temperament, g=702.660507, TL 31-10-2002"},smithgw_scj22a:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,301.39265122629,313.95067836072,327.03195662575,334.88072358477,348.83408706747,361.67118147155,363.36884069528,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,454.2110508691,465.11211608996,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"225/224 ^ 15625/15552 = [6,5,22,37,-18,-6] catakleismic"},smithgw_scj22b:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,334.88072358477,348.83408706747,353.19451315581,372.08969287196,387.59343007496,392.4383479509,408.78994578219,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"5120/5103 ^ 225/224 = [1,-8,-14,-10,25,-15] schismic candidate"},smithgw_scj22c:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,357.20610515709,367.91095120397,383.2405741708,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,465.11211608996,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"225/224 ^ 65625/65536 = [7,-3,827,7,-21] orwell candidate"},smithgw_secab:{frequencies:[261.6255653006,274.07613169002,291.39807132323,313.10572011471,348.73657263424,365.33268718488,392.54808236386,417.35759110361,437.21932894603,486.97408086388,523.2511306012],description:"{126/125, 176/175} tempering of decab, 328-et version"},smithgw_secac:{frequencies:[261.6255653006,281.11531641881,298.8821409504,313.10572011471,348.73657263424,374.71564313773,392.54808236386,417.35759110361,448.44857247831,499.48119153644,523.2511306012],description:"{126/125, 176/175} tempering of decac, 328-et version"},smithgw_secad:{frequencies:[261.6255653006,281.11531641881,313.10572011471,328.00618883132,348.73657263424,374.71564313773,392.54808236386,437.21932894603,469.78990700991,499.48119153644,523.2511306012],description:"{126/125, 176/175} tempering of decad, 328-et version"},smithgw_smalldi11:{frequencies:[261.6255653006,269.10058145205,305.22982618403,313.95067836072,322.92069774245,366.27579142084,373.75080757229,423.93031414449,436.04260883433,448.50096908674,508.71637697339,523.2511306012],description:"Small diesic 11-note block, <10/9, 126/125, 1728/1715> commas"},smithgw_smalldi19a:{frequencies:[261.6255653006,269.10058145205,272.52663052146,299.00064605783,305.22982618403,313.95067836072,317.94773560837,327.03195662575,358.80077526939,366.27579142084,373.75080757229,381.53728273004,418.60090448096,430.56093032327,436.04260883433,448.50096908674,457.84473927605,502.32108537715,508.71637697339,523.2511306012],description:"Small diesic 19-note block, <16/15, 126/125, 1728/1715> commas"},smithgw_smalldi19b:{frequencies:[261.6255653006,266.96486255163,274.70684356563,299.00064605783,305.22982618403,313.95067836072,320.49131749323,327.03195662575,358.80077526939,366.27579142084,373.75080757229,381.53728273004,418.60090448096,427.14378008261,436.04260883433,448.50096908674,457.84473927605,498.33441009638,512.78610798918,523.2511306012],description:"Small diesic 19-note block, <16/15, 126/125, 2401/2400> commas"},smithgw_smalldi19c:{frequencies:[261.6255653006,267.07609791103,274.70684356563,280.31310567921,286.15296204753,313.95067836072,320.49131749323,327.03195662575,336.37572681506,343.38355445704,373.75080757229,381.53728273004,392.4383479509,400.61414686654,436.04260883433,448.50096908674,457.84473927605,470.92601754108,508.71637697339,523.2511306012],description:"Small diesic 19-note scale containing glumma"},smithgw_smalldiglum19:{frequencies:[261.6255653006,267.74077300753,273.99891691894,280.40333801024,286.95745534843,312.9293240034,320.24370022528,327.729041887,335.38934511627,343.22869944589,374.29355081838,383.0422478503,391.99543598175,401.15789496562,437.46578647972,447.69106452518,458.15534711532,468.86422071654,511.30005826145,523.2511306012],description:'Small diesic "glumma" variant of 19-note MOS, 31/120 version'},smithgw_smalldimos11:{frequencies:[261.6255653006,267.74077300753,305.78200836532,312.9293240034,320.24370022528,365.74467430283,374.29355081838,427.47405410759,437.46578647972,447.69106452518,511.30005826145,523.2511306012],description:"Small diesic 11-note MOS, 31/120 version"},smithgw_smalldimos19:{frequencies:[261.6255653006,267.74077300753,273.99891691894,298.79793764201,305.78200836532,312.9293240034,320.24370022528,327.729041887,357.39105439675,365.74467430283,374.29355081838,383.0422478503,417.71053321823,427.47405410759,437.46578647972,447.69106452518,458.15534711532,499.62194879119,511.30005826145,523.2511306012],description:"Small diesic 19-note MOS, 31/120 version"},smithgw_star:{frequencies:[261.6255653006,272.52663052146,313.95067836072,327.03195662575,376.74081403286,392.4383479509,436.04260883433,470.92601754108,523.2511306012],description:'Gene Ward Smith "Star" scale, untempered version'},smithgw_star2:{frequencies:[261.6255653006,282.55561052465,313.95067836072,327.03195662575,376.74081403286,392.4383479509,436.04260883433,470.92601754108,523.2511306012],description:'Gene Ward Smith "Star" scale, alternative untempered version'},starra:{frequencies:[261.6255653006,274.07613169002,294.49338559574,313.10572011471,328.00618883132,343.61575980934,374.71564313773,392.54808236386,411.22915413197,437.21932894603,458.02627217006,492.14685988839,523.2511306012],description:"12 note {126/125, 176/175} scale, 328-et version"},smithgw_starrb:{frequencies:[261.6255653006,274.07613169002,287.1192112957,305.26548915336,328.00618883132,343.61575980934,365.33268718488,392.54808236386,411.22915413197,437.21932894603,458.02627217006,479.82340237272,523.2511306012],description:"12 note {126/125, 176/175} scale, 328-et version"},smithgw_starrc:{frequencies:[261.6255653006,274.07613169002,287.1192112957,313.10572011471,328.00618883132,343.61575980934,365.33268718488,392.54808236386,411.22915413197,437.21932894603,458.02627217006,492.14685988839,523.2511306012],description:"12 note {126/125, 176/175} scale, 328-et version"},smithgw_tetra:{frequencies:[261.6255653006,274.84135386022,293.90210492181,314.2847539672,326.44746606412,342.93767672779,366.7210324511,392.15380743582,419.35039192746,435.57910814854,457.58200907672,489.31615916483,523.2511306012],description:"{225/224, 385/384} tempering of two-tetrachord 12-note scale"},smithgw_tr31:{frequencies:[261.6255653006,267.54129532085,292.57243455474,299.18791603519,305.95298478736,334.57791819083,342.14320575162,349.87955533643,391.26571058456,400.11279059885,409.15991580663,447.44088028055,457.55816161244,467.90420651233,511.68128147674,523.2511306012],description:"6/31 generator supermajor seconds tripentatonic scale"},smithgw_tr7_13:{frequencies:[261.6255653006,183.87449048025,346.05860897284,243.21533855007,457.74028507734,321.70694650116,605.46440189891,425.52973856044,299.06887661109,562.85871464284,395.58580335293,744.50714985079,523.2511306012],description:"81/80 ==> 28561/28672"},smithgw_tr7_13b:{frequencies:[261.6255653006,372.25357492539,395.58580335293,281.42935732142,299.06887661109,425.52973856044,302.73220094945,321.70694650116,457.74028507734,486.43067710015,346.05860897284,367.7489809605,523.2511306012],description:"reverse reduced 81/80 ==> 28561/28672"},smithgw_tr7_13r:{frequencies:[261.6255653006,367.7489809605,346.05860897284,486.43067710015,457.74028507734,321.70694650116,302.73220094945,425.52973856044,299.06887661109,281.42935732142,395.58580335293,372.25357492539,523.2511306012],description:"reduced 81/80 ==> 28561/28672"},smithgw_tra:{frequencies:[261.6255653006,128.35937755236,399.56478905052,196.03545836752,610.23096296248,299.39301413087,931.96857771927,457.24471305759,224.33452437931,698.32199734535,342.61245382262,1066.50464849657,523.2511306012],description:"81/80 ==> 1029/512"},smithgw_tre:{frequencies:[261.6255653006,256.71872396454,399.56476227799,392.07084290614,305.11544059319,299.39293769309,465.98419519089,457.24482979639,448.66910888407,349.16106442144,342.6124767791,533.2523889322,523.2511306012],description:"81/80 ==> 1029/512 ==> reduction"},smithgw_treb:{frequencies:[261.6255653006,266.6261944661,342.6124767791,349.16106442144,448.66910888407,457.24482979639,465.98419519089,299.39293769309,305.11544059319,392.07084290614,399.56476227799,513.43744792908,523.2511306012],description:"reversed 81/80 ==> 1029/512 ==> reduction"},smithgw_trx:{frequencies:[261.6255653006,490.17835855476,354.35176059633,331.954494127,479.94227969828,449.60690021487,325.02250210538,304.47902995326,285.23403465053,412.39349145653,386.32762147798,279.2776760715,523.2511306012],description:"reduced 3/2->7/6 5/4->11/6 scale"},smithgw_trxb:{frequencies:[261.6255653006,279.2776760715,386.32762147798,412.39349145653,285.23403465053,304.47902995326,325.02250210538,449.60690021487,479.94227969828,331.954494127,354.35176059633,490.17835855476,523.2511306012],description:"reversed reduced 3/2->7/6 5/4->11/6 scale"},smithgw_wa:{frequencies:[261.6255653006,273.6474362764,299.37379946195,313.13022722746,327.51877211613,349.22823143301,374.77430422696,391.99543598175,417.97870684853,437.18511000944,469.1652354389,500.26367760099,523.2511306012],description:"Wreckmeister A temperament, TL 2-6-2002"},smithgw_wa120:{frequencies:[261.6255653006,273.99891691894,298.79793764201,312.9293240034,327.729041887,349.22823143301,374.29355081838,391.99543598175,417.71053321823,437.46578647972,468.86422071654,499.62194879119,523.2511306012],description:"120-tET version of Wreckmeister A temperament"},smithgw_wb:{frequencies:[261.6255653006,280.76349612739,291.78605424516,313.13022722746,327.51877211613,349.22823143301,365.2755039332,391.99543598175,417.97870684853,437.18511000944,469.1652354389,487.58430040208,523.2511306012],description:"Wreckmeister B temperament, TL 2-6-2002"},smithgw_well1:{frequencies:[261.6255653006,275.92984511873,292.92635710626,310.42107575858,327.5229776175,349.2237102284,367.90646015831,391.734151992,413.8947676781,437.99072463899,465.63161363786,490.54194687775,523.2511306012],description:"Well-temperament, Gene Ward Smith (2005)"},smithgw_whelp1:{frequencies:[261.6255653006,275.93321340298,292.50627485027,310.07474405997,327.03195662575,348.05120395042,368.50381975103,390.45372436301,413.66634097248,438.25895612273,464.36382062247,491.65133958137,523.2511306012],description:"well-temperament with one pure third, Gene Ward Smith, 2003"},smithgw_whelp2:{frequencies:[261.6255653006,275.85000668176,292.43269265164,309.98104674077,327.03195662575,347.97308568611,368.21146504308,391.7894791814,413.34036955908,438.14417346548,464.48314871299,489.73685071229,523.2511306012],description:"well-temperament with two pure thirds"},smithgw_whelp3:{frequencies:[261.6255653006,275.96871294479,292.50627485027,310.03485655885,327.03195662575,349.46135677641,368.11883862276,391.73393619399,413.66634097248,436.82669499534,464.84945270756,489.66742197778,523.2511306012],description:"well-temperament with three pure thirds"},smithgw_wiz28:{frequencies:[261.6255653006,269.80136421624,277.4816601673,280.31310567921,287.78812183066,297.30177875068,305.22982618403,308.34441624714,317.12189733406,327.03195662575,336.37572681506,345.34574619679,348.83408706747,359.73515228832,370.01329949656,380.54627680087,392.4383479509,396.40237166758,406.97310157871,418.60090448096,431.68218274599,436.04260883433,448.50096908674,460.46099492906,475.68284600109,490.54793493862,493.35106599542,508.71637697339,523.2511306012],description:"11-limit Wizard[28]"},smithgw_wiz34:{frequencies:[261.6255653006,269.80136421624,272.52663052146,277.4816601673,280.31310567921,287.78812183066,297.30177875068,305.22982618403,308.34441624714,313.95067836072,317.12189733406,327.03195662575,336.37572681506,345.34574619679,348.83408706747,356.76213450082,359.73515228832,370.01329949656,380.54627680087,383.71749577421,392.4383479509,396.40237166758,406.97310157871,418.60090448096,431.68218274599,436.04260883433,443.97065626768,448.50096908674,460.46099492906,475.68284600109,490.54793493862,493.35106599542,504.56359022259,508.71637697339,523.2511306012],description:"11-limit Wizard[34]"},smithgw_wiz38:{frequencies:[261.6255653006,269.80136421624,272.52663052146,277.4816601673,280.31310567921,285.40970760065,287.78812183066,297.30177875068,305.22982618403,308.34441624714,313.95067836072,317.12189733406,327.03195662575,336.37572681506,339.14425131559,345.34574619679,348.83408706747,356.76213450082,359.73515228832,370.01329949656,380.54627680087,383.71749577421,392.4383479509,396.40237166758,403.65087217807,406.97310157871,418.60090448096,431.68218274599,436.04260883433,443.97065626768,448.50096908674,460.46099492906,475.68284600109,479.64686971777,490.54793493862,493.35106599542,504.56359022259,508.71637697339,523.2511306012],description:"11-limit Wizard[38]"},smithgw_wreckpop:{frequencies:[261.6255653006,272.73569398658,292.31087910123,313.29104303136,326.59518553839,350.03605285217,364.90060015836,391.09077971329,419.16071913933,436.9606979923,455.51656649021,501.93603498211,523.2511306012],description:'"Wreckmeister" 13-limit meanpop (50-et) tempered thirds'},smithj12:{frequencies:[261.6255653006,272.52663052146,294.32876096318,306.59245933664,331.11985608357,344.91651675372,363.36884069528,392.4383479509,408.78994578219,441.49314144476,459.88868900496,496.67978412536,523.2511306012],description:"J. Smith, 5-limit JI scale, MMM 21-3-2006"},smithj17:{frequencies:[261.6255653006,272.57820116223,283.17034563789,295.02492750576,308.97787266236,319.3201344739,332.68808325276,348.42227432308,363.00854876594,377.11473546037,392.90218486657,411.48414905414,425.25755219187,443.06044202496,464.01459698705,479.54632553791,499.62194879119,523.2511306012],description:"J. Smith 17-tone well temperament, MMM 12-2006"},smithrk_19:{frequencies:[261.6255653006,274.68253637698,286.11368885031,294.3308008075,305.19387818096,313.95878694534,327.0246436172,343.34529416761,348.83287827711,366.24211271841,381.48359653409,392.43970784476,406.92376081862,418.61050714007,436.03134720211,457.79213919624,470.93981233279,488.32112480698,508.64303280756,523.2511306012],description:"19 out of 612-tET by Roger K. Smith, 1978"},smithrk_mult:{frequencies:[261.6255653006,274.70684356563,286.15296204753,294.32876096318,305.22982618403,313.95067836072,327.03195662575,343.38355445704,348.83408706747,366.27579142084,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,457.84473927605,470.92601754108,488.36772189445,508.71637697339,523.2511306012],description:'Roger K. Smith, "Multitonic" scale, just version'},solar:{frequencies:[261.6255653006,394.58976180129,774.00176545642,2207.36533954793,5481.83445910426,34573.03685904828,65024.37680021134,105705.6559450381],description:"Solar system scale: 0=Pluto, 8=Mercury. 1/1=248.54 years period"},solemn:{frequencies:[261.6255653006,313.95067836072,348.83408706747,392.4383479509,418.60090448096,470.92601754108,523.2511306012],description:"Solemn 6"},songlines:{frequencies:[261.6255653006,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,470.92601754108,479.64686971777,523.2511306012],description:"Songlines.DEM, Bill Thibault and Scott Gresham-Lancaster. 1992 ICMC (=rectsp6)"},sorge:{frequencies:[261.6255653006,272.52663052146,294.32876096318,306.59245933664,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,436.04260883433,470.92601754108,490.54793493862,523.2511306012],description:"Sorge's Monochord (1756)"},sorge1:{frequencies:[261.6255653006,276.86979852503,293.00227310437,311.47852302926,328.88393162803,349.6228209638,369.57684148724,391.5530240856,415.30469757995,439.00737933323,466.69047534984,493.32589719545,523.2511306012],description:"Georg Andreas Sorge, 1744 (A)"},sorge2:{frequencies:[261.6255653006,276.24519242498,293.00227310437,310.77584116741,328.88393162803,348.83408706747,368.74309237173,391.5530240856,414.36778843034,438.51190905657,465.63764214343,492.21297564769,523.2511306012],description:"Georg Andreas Sorge, 1744 (B)"},sorge3:{frequencies:[261.6255653006,276.55731914056,293.00227310437,310.77584116741,328.51274831708,348.83408706747,369.15973155124,391.5530240856,414.83597850347,438.51190905657,465.63764214343,492.7691222293,523.2511306012],description:"Georg Andreas Sorge, well temperament, (1756, 1758)"},sparschuh:{frequencies:[261.6255653006,276.27659695743,293.02063313667,310.81117157711,328.60171001755,349.008504111,368.36879594324,391.3918456897,414.41489543615,439.53094970501,465.69350623507,491.85606276513,523.2511306012],description:"Andreas Sparschuh WTC temperament, 1/1=C=250, modified Collatz sequence"},sparschuh2:{frequencies:[261.6255653006,276.27659695743,293.02063313667,310.81117157711,328.60171001755,349.008504111,368.36879594324,391.3918456897,414.41489543615,438.48444744381,465.69350623507,491.85606276513,523.2511306012],description:"Modified Sparschuh temperament with A=419Hz by Tom Dent"},spec1_14:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,392.4383479509,408.78994578219,425.14154361347,441.49314144476,457.84473927605,523.2511306012],description:"Spectrum sequence of 8/7: 1 to 27 reduced by 2/1"},spec1_17:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,359.73515228832,376.08675011961,392.4383479509,408.78994578219,425.14154361347,441.49314144476,490.54793493862,523.2511306012],description:"Spectrum sequence of 7/6: 1 to 27 reduced by 2/1"},spec1_25:{frequencies:[261.6255653006,277.97716313189,294.32876096318,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,408.78994578219,425.14154361347,457.84473927605,490.54793493862,523.2511306012],description:"Spectrum sequence of 5/4: 1 to 25 reduced by 2/1"},spec1_33:{frequencies:[261.6255653006,277.97716313189,294.32876096318,327.03195662575,343.38355445704,359.73515228832,392.4383479509,408.78994578219,425.14154361347,457.84473927605,474.19633710734,490.54793493862,523.2511306012],description:"Spectrum sequence of 4/3: 1 to 29 reduced by 2/1"},spec1_4:{frequencies:[261.6255653006,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,408.78994578219,425.14154361347,457.84473927605,490.54793493862,523.2511306012],description:"Spectrum sequence of 7/5: 1 to 25 reduced by 2/1"},spec1_5:{frequencies:[261.6255653006,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,392.4383479509,408.78994578219,425.14154361347,441.49314144476,457.84473927605,490.54793493862,523.2511306012],description:"Spectrum sequence of 1.5: 1 to 27 reduced by 2/1"},specr2:{frequencies:[261.6255653006,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,392.4383479509,408.78994578219,425.14154361347,457.84473927605,474.19633710734,490.54793493862,523.2511306012],description:"Spectrum sequence of sqrt(2): 1 to 29 reduced by 2/1"},specr3:{frequencies:[261.6255653006,277.97716313189,310.68035879446,327.03195662575,359.73515228832,392.4383479509,408.78994578219,425.14154361347,441.49314144476,474.19633710734,490.54793493862,506.89953276991,523.2511306012],description:"Spectrum sequence of sqrt(3): 1 to 31 reduced by 2/1"},spon_chal1:{frequencies:[261.6255653006,280.31310567921,285.40970760065,286.15296204753,348.83408706747,392.4383479509,420.46965851882,428.11456140098,429.2294430713,523.2511306012],description:"JC Spondeion, from discussions with George Kahrimanis about tritone of spondeion"},spon_chal2:{frequencies:[261.6255653006,275.62199471997,279.06726965397,285.40970760065,348.83408706747,392.4383479509,413.43299207996,418.60090448096,428.11456140098,523.2511306012],description:"JC Spondeion II, 10 May 1997. Various tunings for the parhypatai and hence trito"},spon_mont:{frequencies:[261.6255653006,271.31540105247,348.83408706747,392.4383479509,428.11456140098,523.2511306012],description:"Montford's Spondeion, a mixed septimal and undecimal pentatonic, 1923"},spon_terp:{frequencies:[261.6255653006,285.40970760065,348.83408706747,392.4383479509,428.11456140098,523.2511306012],description:"Subharm. 6-tone series, guess at Greek poet Terpander's, 6th c. BC & Spondeion, Winnington-Ingram (1928)"},stade:{frequencies:[261.6255653006,274.22463192287,292.50627485027,309.28772967674,327.03195662575,348.83408706747,365.63284274659,391.22147055517,411.33694767869,437.39890198442,465.11211608996,489.02683710225,523.2511306012],description:"Organs in St. Cosmae, Stade; Magnuskerk, Anloo; H.K. Sluipwijk, modif. 1/4 mean"},stanhope:{frequencies:[261.6255653006,275.62199471997,293.00227310437,310.07474405997,326.6631048533,348.83408706747,367.49599295996,392.4383479509,413.43299207996,437.52264545758,465.11211608996,489.99465727995,523.2511306012],description:"Well temperament of Charles, third earl of Stanhope (1806)"},stanhope2:{frequencies:[261.6255653006,275.85537639807,293.11251278827,310.16223770573,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.66634097248,437.85193595173,465.11211608996,490.54793493862,523.2511306012],description:"Stanhope temperament (real version?) with 1/3 synt. comma temp."},stanhope_f:{frequencies:[261.6255653006,275.62199471997,292.46014274879,310.07474405997,326.6631048533,348.83408706747,367.49599295996,392.4383479509,413.43299207996,436.79202494356,465.11211608996,489.99465727995,523.2511306012],description:"Stanhope temperament, equal beating version by Farey (1807)"},stanhope_s:{frequencies:[261.6255653006,275.77758308753,293.11247215425,310.2497806633,327.03195662575,348.83408706747,367.7034443005,392.4383479509,413.66637442451,437.85181455341,465.11211608996,490.54793493862,523.2511306012],description:"Stanhope temperament, alt. version with 1/3 syntonic comma"},starling:{frequencies:[261.6255653006,278.9816419584,293.66476791741,313.14630527334,327.50195613664,349.22823143301,367.60851651046,391.99543598175,418.00016846495,437.16266336983,466.16376151809,490.69849857048,523.2511306012],description:"Starling temperament, Herman Miller (1999)"},stearns:{frequencies:[261.6255653006,299.00064605783,336.37572681506,366.27579142084,398.6675280771,448.50096908674,504.56359022259,523.2511306012],description:"Dan Stearns, guitar scale"},stearns2:{frequencies:[261.6255653006,280.31310567921,287.78812183066,299.00064605783,313.95067836072,317.68818643644,336.37572681506,340.11323489078,355.06326719367,366.27579142084,373.75080757229,392.4383479509,411.12588832951,418.60090448096,429.81342870813,444.76346101102,448.50096908674,467.18850946536,470.92601754108,485.87604984397,497.08857407114,504.56359022259,523.2511306012],description:'Dan Stearns, scale for "At A Day Job" based on harmonics 10-20 and 14-28'},stearns3:{frequencies:[261.6255653006,304.11599009871,327.88291945286,364.30920726489,423.47641042702,470.52269644143,546.93995798074,607.70247408742,706.39900722312,784.8766959018],description:"Dan Stearns, trivalent version of Bohlen's Lambda scale"},stearns4:{frequencies:[261.6255653006,296.65550714972,336.37572681506,347.46339693852,393.986457405,446.73865184892,461.46412096988,523.2511306012],description:"Dan Stearns, 1/4-septimal comma temperament, tuning-math 2-12-2001"},steldek1:{frequencies:[261.6255653006,274.70684356563,275.93321340298,280.31310567921,286.15296204753,294.32876096318,305.22982618403,309.04519901133,315.35224388912,321.92208230347,327.03195662575,331.11985608357,343.38355445704,353.19451315581,367.91095120397,381.53728273004,386.30649876417,392.4383479509,400.61414686654,408.78994578219,412.06026534844,420.46965851882,429.2294430713,436.04260883433,441.49314144476,457.84473927605,490.54793493862,504.56359022259,508.71637697339,515.07533168556,523.2511306012],description:"Stellated two out of 1 3 5 7 9 dekany"},steldek1s:{frequencies:[261.6255653006,274.70684356563,275.93321340298,280.31310567921,286.15296204753,294.32876096318,305.22982618403,309.04519901133,315.35224388912,321.92208230347,327.03195662575,331.11985608357,339.14425131559,343.38355445704,353.19451315581,360.4025644447,367.91095120397,381.53728273004,386.30649876417,392.4383479509,400.61414686654,408.78994578219,412.06026534844,420.46965851882,429.2294430713,436.04260883433,441.49314144476,457.84473927605,482.88312345521,490.54793493862,494.47231841813,504.56359022259,508.71637697339,515.07533168556,523.2511306012],description:"Superstellated two out of 1 3 5 7 9 dekany"},steldek2:{frequencies:[261.6255653006,262.3068818769,269.80136421624,274.70684356563,280.31310567921,286.15296204753,294.32876096318,299.7792935736,308.34441624714,312.16686768822,314.76825825228,327.03195662575,337.2517052703,343.38355445704,356.76213450082,359.73515228832,377.72190990274,381.53728273004,385.43052030892,392.4383479509,393.46032281536,400.61414686654,408.78994578219,416.22249025095,419.69101100305,429.2294430713,431.68218274599,449.66894036041,457.84473927605,472.15238737843,490.54793493862,494.63583439645,499.46698830115,503.62921320365,513.90736041189,523.2511306012],description:"Stellated two out of 1 3 5 7 11 dekany"},steldek2s:{frequencies:[261.6255653006,262.3068818769,269.80136421624,274.70684356563,280.31310567921,286.15296204753,294.32876096318,295.09524211152,299.7792935736,302.17752792219,308.34441624714,312.16686768822,314.76825825228,327.03195662575,337.2517052703,343.38355445704,349.7425091692,356.76213450082,359.73515228832,377.72190990274,381.53728273004,385.43052030892,392.4383479509,393.46032281536,400.61414686654,408.78994578219,416.22249025095,419.69101100305,429.2294430713,431.68218274599,440.49202321019,449.66894036041,454.06089845559,457.84473927605,472.15238737843,490.54793493862,494.63583439645,499.46698830115,503.62921320365,513.90736041189,523.2511306012],description:"Superstellated two out of 1 3 5 7 11 dekany"},steleik1:{frequencies:[220,220.57291666667,224.58333333333,225,226.875,229.16666666667,232.03125,235.27777777778,238.21875,240.625,242.63020833333,243.08035714286,247.5,248.14453125,252.08333333333,252.65625,255.234375,256.66666666667,257.8125,262.5,264.6875,270.703125,272.25,275,277.29166666667,278.4375,280.72916666667,283.59375,288.75,294.09722222222,297.7734375,302.5,308.80208333333,309.375,311.953125,315,315.10416666667,317.625,320.83333333333,324.10714285714,324.84375,330,330.859375,336.11111111111,336.875,340.3125,343.75,346.5,346.61458333333,350,352.91666666667,353.57142857143,360.9375,366.66666666667,371.25,378.125,385,388.92857142857,392.12962962963,393.75,397.03125,401.04166666667,403.33333333333,412.5,415.9375,423.5,425.390625,427.77777777778,432.14285714286,433.125,440],description:"Stellated Eikosany 3 out of 1 3 5 7 9 11"},steleik1s:{frequencies:[123.47082531403,123.79236392162,125.33976847064,127.32928860509,129.9819821177,130.22313607339,131.308328874,132.59082945654,132.63467563031,133.69575303535,135.04621518722,136.42423779117,136.73429287706,138.90467847828,139.26640941182,141.47698733899,141.79852594658,143.24544968073,144.69237341488,145.8499124022,145.89814319334,147.3231438406,148.55083670594,148.82644122673,151.92699208562,154.33853164254,156.26776328807,156.6747105883,159.16161075637,160.43490364242,160.48795751267,162.05545822466,163.70908534941,165.05648522882,165.43161360434,165.73853682068,167.11969129419,168.80776898403,169.77238480679,173.63084809785,175.077771832,175.80123369908,178.26100404713,179.05681210091,180.06162024963,181.89898372156,182.31239050275,185.20623797104,185.68854588243,189.06470126211,189.41547065221,190.99393290764,192.92316455317,195.33470411009,198.06778227459,200.54362955302,202.56932278083,204.25740047067,204.63635668676,208.35701771743,208.89961411773,212.21548100849,212.69778891987,214.8681745211,216.07394429955,217.03856012232,220.07531363843,220.98471576091,222.82625505891,227.89048812843,229.19271948917,231.50779746381,233.43702910934,233.87012192772,234.4016449321,236.33087657764,238.74241613455,241.07423537553,241.15395569146,243.083187337,246.94165062806],description:"Superstellated Eikosany 3 out of 1 3 5 7 9 11"},steleik2:{frequencies:[123.47082531403,124.49974885831,126.04313417474,126.11662871362,127.68005799519,128.74405847848,129.64436657973,130.41605923794,132.04518818306,132.96858110742,133.76006075687,135.81790784543,137.94006265552,138.64744759221,140.44806379471,141.47698733899,144.0492961997,145.92006628022,146.26543921816,147.13606683255,148.16499037684,148.55083670594,151.25176100969,152.15206911093,154.33853164254,154.49287017418,155.62468607289,156.05340421634,157.14468676331,157.64578589202,158.45422581967,160.51207290824,160.9300730981,163.85607442716,164.62776708537,167.20007594608,169.77238480679,170.24007732692,171.65874463798,172.85915543964,173.88807898393,175.56007974339,176.56328019906,180.06162024963,181.09054379391,182.8317990227,183.92008354069,185.20623797104,186.74962328747,187.26408505961,190.14507098361,193.11608771773,194.02558263633,197.55332050245,198.06778227459,200.6400911353,201.66901467958,202.31209189476,203.72686176815,204.2880927923,205.78470885672,205.99049356557,208.95062745451,210.19438118936,214.01609721099,214.57343079747,216.07394429955,217.36009872991,217.87456050205,220.70410024883,224.71690207153,226.36317974239,229.30296129748,230.47887391952,234.08010632452,237.68133872951,239.0961086029,240.76810936236,243.77573203026,245.22677805425,246.94165062806],description:"Stellated Eikosany 3 out of 1 3 5 7 11 13"},steleik2s:{frequencies:[61.73541265702,61.89618196081,62.32902239411,62.70002847979,63.66464430255,64.65940436978,64.99099105886,65.83502990378,66.22690508177,66.31733781516,67.05419712422,67.52310759362,68.40003106886,68.56192463352,68.97003132776,69.45233923915,69.63320470592,70.8992629733,71.32128239576,72.34618670745,72.41853289415,72.94907159667,73.15003322642,73.66157192031,73.89646213689,74.27541835298,75.24003417574,75.43597176474,76.80753488774,77.16926582128,78.37503559973,79.58080537819,79.800036247,80.24397875634,80.46503654906,81.02772911234,81.51003702372,82.29378737972,82.71580680218,82.76403759332,84.40388449202,84.45309958502,84.8861924034,85.7024057919,86.21253915971,86.81542404893,87.05458499673,87.53888591601,87.7800398717,89.13050202357,90.52316611769,90.94949186079,92.60311898553,92.84427294122,94.05004271968,94.53235063106,94.83379307568,95.49696645383,95.7600434964,96.46158227659,96.55804385887,97.94560661931,98.52861618252,100.32004556766,100.58129568632,101.28466139042,101.88754627965,102.12870023534,103.45504699165,104.17850885872,105.33604784604,105.47988405157,106.10774050425,107.4857631082,108.03697214979,109.72504983963,111.41312752947,112.07630090762,112.86005126361,113.15395764711,114.2698743892,114.95005221294,115.75389873191,115.86965263064,116.71851455468,118.16543828883,118.23433941902,119.7000543705,120.57697784574,120.69755482359,121.54159366851,122.26505553558,123.47082531404],description:"Superstellated Eikosany 3 out of 1 3 5 7 11 13"},stelhex1:{frequencies:[261.6255653006,274.70684356563,280.31310567921,286.15296204753,294.32876096318,327.03195662575,343.38355445704,381.53728273004,392.4383479509,400.61414686654,408.78994578219,429.2294430713,457.84473927605,490.54793493862,523.2511306012],description:"Stellated two out of 1 3 5 7 hexany, also dekatesserany, mandala, tetradekany"},stelhex2:{frequencies:[261.6255653006,275.93321340298,294.32876096318,327.03195662575,331.11985608357,353.19451315581,367.91095120397,392.4383479509,408.78994578219,436.04260883433,441.49314144476,490.54793493862,523.2511306012],description:"Stellated two out of 1 3 5 9 hexany"},stelhex3:{frequencies:[261.6255653006,271.31540105247,279.06726965397,281.36411960997,289.40309445597,297.67175429757,339.14425131559,348.83408706747,358.80077526939,361.75386806997,372.08969287196,385.87079260796,434.10464168396,465.11211608996,523.2511306012],description:"Stellated Tetrachordal Hexany based on Archytas's Enharmonic"},stelhex4:{frequencies:[261.6255653006,269.10058145205,276.78916949353,279.06726965397,287.04062021552,297.67175429757,336.37572681506,348.83408706747,358.80077526939,361.75386806997,372.08969287196,382.72082695402,430.56093032327,465.11211608996,523.2511306012],description:"Stellated Tetrachordal Hexany based on the 1/1 35/36 16/15 4/3 tetrachord"},stelhex5:{frequencies:[261.6255653006,294.32876096318,305.22982618403,331.11985608357,343.38355445704,386.30649876417,392.4383479509,400.61414686654,441.49314144476,457.84473927605,504.56359022259,515.07533168556,523.2511306012],description:"Stellated two out of 1 3 7 9 hexany, stellation is degenerate"},stelhex6:{frequencies:[261.6255653006,269.80136421624,294.32876096318,299.7792935736,327.03195662575,337.2517052703,356.76213450082,359.73515228832,392.4383479509,408.78994578219,431.68218274599,449.66894036041,490.54793493862,494.63583439645,523.2511306012],description:"Stellated two out of 1 3 5 11 hexany, from The Giving, by Stephen J. Taylor"},stelpd1:{frequencies:[207.65234878997,208.19311011494,212.37172035338,214.14148468966,218.03496622947,219.00833661442,222.07265078927,222.48465941783,222.99030637105,224.84855892414,227.11975648903,229.43730502463,233.60889238872,237.93498298851,240.90917027586,242.2610735883,244.73312535961,245.28933700815,247.76700707894,249.83173213793,250.29524184505,254.84606442405,255.50972605016,256.96978162759,259.56543598746,262.81000393731,267.67685586207,272.54370778684,275.32476602956,277.59081348659,280.33067086646,281.06069865517,283.1622938045,285.52197958621,292.0111154859,297.32040849473,299.79807856552,302.82634198537,305.91640669951,306.61167126019,311.47852318496,312.28966517242,317.24664398468,317.96765908464,318.55758053007,321.21222703448,324.45679498433,327.0524493442,330.35600943859,333.10897618391,333.72698912674,340.67963473354,342.62637550345,346.08724798328,350.41333858307,356.90247448276,363.39161038245,367.09968803941,371.65051061841,374.7475982069,380.69597278161,385.45467244138,389.34815398119,392.59272193104,396.42721132631,399.73077142069,400.47238695209,401.51528379311,403.7684559805,407.88854226601,408.81556168025,415.30469757994],description:"Stellated two out of 1 3 5 7 9 11 pentadekany"},stelpd1s:{frequencies:[21.82676446456,21.88360499702,22.15715005948,22.2309638065,22.3228272933,22.50885085408,22.68892166091,22.91810268779,23.02041564622,23.14959867453,23.15196087848,23.34251199682,23.38581906917,23.43896865797,23.624449876,23.63429339678,23.87302363311,24.11662591508,24.35217522905,24.55511002263,24.61905562165,25.00983428231,25.20991295657,25.32245721084,25.46455854199,25.72440097609,25.78286552376,25.93612444091,26.04329850885,26.26032599642,26.30904645282,26.78739275196,26.85715158725,27.01062102489,27.2834555807,27.56185818867,27.62449877546,27.69643757435,28.01101439619,28.1360635676,28.29395393554,28.36115207614,28.41087110056,28.58266775121,28.64762835974,28.9399510981,29.17813999603,29.29871082246,29.46613202716,29.54286674598,29.7637697244,30.01180113877,30.06748166036,30.69388752829,30.99367756425,31.12334932909,31.25195821062,31.51239119571,31.65307151355,31.83069817748,32.15550122011,32.2285819047,32.41274522987,32.74014669684,32.82540749553,33.0742298264,33.34644570974,33.42223308636,33.48424093995,33.76327628112,34.09304532068,34.10431947588,34.37715403168,34.58149925455,34.7243980118,35.01376799523,35.07872860376,35.45144009517,35.80953544967,36.01416136652,36.17493887262,36.37794077427,36.74914425156,36.83266503394,36.92858343247,37.50234985274,37.51475142346,37.81486943485,37.88116146742,38.19683781298,38.26770393137,38.58660146413,38.90418666137,39.06494776328,39.39048899464,40.01573485169,40.28572738088,40.51593153734,40.92518337105,41.25258483802,41.26622656581,41.342787283,41.66927761416,42.01652159428,42.09447432451,42.2040953514,42.44093090331,42.61630665085,42.87400162681,42.9714425396,43.65352892912],description:"Superstellated two out of 1 3 5 7 9 11 pentadekany"},stelpent1:{frequencies:[261.6255653006,274.70684356563,280.31310567921,286.15296204753,290.69507255622,294.32876096318,305.22982618403,313.95067836072,327.03195662575,336.37572681506,343.38355445704,348.83408706747,353.19451315581,366.27579142084,367.91095120397,373.75080757229,381.53728273004,392.4383479509,406.97310157871,412.06026534844,420.46965851882,436.04260883433,441.49314144476,448.50096908674,457.84473927605,470.92601754108,490.54793493862,504.56359022259,508.71637697339,515.07533168556,523.2511306012],description:"Stellated one out of 1 3 5 7 9 pentany"},stelpent1s:{frequencies:[261.6255653006,271.31540105247,274.70684356563,275.93321340298,280.31310567921,282.55561052465,286.15296204753,288.32205155576,290.69507255622,294.32876096318,301.46155672497,305.22982618403,309.04519901133,313.95067836072,315.35224388912,320.35783506196,321.92208230347,327.03195662575,329.64821227876,336.37572681506,339.14425131559,343.38355445704,348.83408706747,353.19451315581,360.4025644447,366.27579142084,367.91095120397,373.75080757229,381.53728273004,386.30649876417,387.59343007496,392.4383479509,395.57785473451,403.65087217807,406.97310157871,411.88864507966,412.06026534844,420.46965851882,429.2294430713,436.04260883433,439.53094970501,441.49314144476,448.50096908674,452.19233508746,457.84473927605,470.92601754108,480.53675259294,482.88312345521,488.36772189445,490.54793493862,494.47231841813,498.33441009638,504.56359022259,508.71637697339,515.07533168556,523.2511306012],description:"Superstellated one out of 1 3 5 7 9 pentany"},steltet1:{frequencies:[261.6255653006,274.70684356563,280.31310567921,286.15296204753,305.22982618403,313.95067836072,327.03195662575,343.38355445704,366.27579142084,373.75080757229,381.53728273004,392.4383479509,436.04260883433,448.50096908674,457.84473927605,490.54793493862,523.2511306012],description:"Stellated one out of 1 3 5 7 tetrany"},steltet1s:{frequencies:[261.6255653006,274.70684356563,280.31310567921,286.15296204753,305.22982618403,313.95067836072,320.35783506196,327.03195662575,343.38355445704,366.27579142084,373.75080757229,381.53728273004,392.4383479509,429.2294430713,436.04260883433,439.53094970501,448.50096908674,457.84473927605,490.54793493862,508.71637697339,523.2511306012],description:"Superstellated one out of 1 3 5 7 tetrany"},steltet2:{frequencies:[261.6255653006,267.07609791103,272.52663052146,286.15296204753,305.22982618403,327.03195662575,333.84512238879,343.38355445704,381.53728273004,392.4383479509,400.61414686654,408.78994578219,436.04260883433,457.84473927605,476.92160341255,490.54793493862,523.2511306012],description:"Stellated three out of 1 3 5 7 tetrany"},steltet2s:{frequencies:[261.6255653006,286.15296204753,294.32876096318,300.46061014991,306.59245933664,327.03195662575,343.38355445704,350.53737850823,357.69120255941,367.91095120397,392.4383479509,400.61414686654,408.78994578219,429.2294430713,441.49314144476,457.84473927605,490.54793493862,500.76768358318,510.98743222773,515.07533168556,523.2511306012],description:"Superstellated three out of 1 3 5 7 tetrany"},steltri1:{frequencies:[261.6255653006,313.95067836072,327.03195662575,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"Stellated one out of 1 3 5 triany"},steltri2:{frequencies:[261.6255653006,294.32876096318,327.03195662575,392.4383479509,408.78994578219,490.54793493862,523.2511306012],description:"Stellated two out of 1 3 5 triany"},stevin:{frequencies:[261.6255653006,277.20445571159,293.66434538175,311.1256573916,329.66931111467,349.25319089654,369.99797100919,392.00714009679,415.41055144586,440.15068186507,466.27261682516,494.00597677606,523.2511306012],description:"Simon Stevin, monochord division of 10000 parts for 12-tET (1585)"},stopper:{frequencies:[261.6255653006,277.19910487213,293.6996776193,311.18246278326,329.70593120198,349.3320268423,370.12638880276,392.15855510068,415.50221189151,440.23542223935,466.44090588941,494.20629608476,523.62445363767,554.79375523088,587.81844599272,622.80896314278,659.88233179115,699.16252826162,740.78092441407,784.8766959018],description:"Bernard Stopper, piano tuning with 19th root of 3 (1988)"},storbeck:{frequencies:[261.6255653006,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,339.14425131559,348.83408706747,353.19451315581,358.80077526939,381.53728273004,387.59343007496,392.4383479509,403.65087217807,418.60090448096,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,523.2511306012],description:"Ulrich Storbeck, 2001"},strahle:{frequencies:[261.6255653006,278.94941459687,296.90543930973,315.65242990842,335.0021118691,355.12744448111,376.24442122187,398.15684412917,421.10213511252,444.85552088095,469.94877954106,496.17080790016,523.2511306012],description:"Strahle's Geometrical scale"},"sub24-12":{frequencies:[261.6255653006,273.00058987889,285.40970760065,299.00064605783,313.95067836072,330.47439827444,348.83408706747,369.35373924791,392.4383479509,418.60090448096,448.50096908674,483.00104363188,523.2511306012],description:"Subharmonics 24-12"},sub24:{frequencies:[261.6255653006,10.90106522086,11.37502457829,11.89207115003,12.45836025241,13.08127826503,13.76976659477,14.53475362781,15.38973913533,16.35159783129,17.44170435337,18.68754037861,20.12504348466,21.80213044172,23.78414230005,26.16255653006,29.06950725562,32.70319566257,37.37508075723,43.60426088343,52.32511306012,65.40639132515,87.20852176687,130.8127826503,261.6255653006],description:"Subharmonics 24-1"},sub40:{frequencies:[261.6255653006,275.39533189537,290.69507255622,307.79478270659,327.03195662575,348.83408706747,373.75080757229,402.50086969323,418.60090448096,436.04260883433,475.68284600109,498.33441009638,523.2511306012],description:"sub 40-20"},sub48:{frequencies:[261.6255653006,279.06726965397,299.00064605783,313.95067836072,330.47439827444,348.83408706747,369.35373924791,392.4383479509,418.60090448096,448.50096908674,465.11211608996,502.32108537715,523.2511306012],description:"12 of sub 48 (Leven)"},sub50:{frequencies:[261.6255653006,272.52663052146,290.69507255622,311.45900631024,327.03195662575,344.24416486921,373.75080757229,384.74347838324,408.78994578219,436.04260883433,467.18850946536,484.4917875937,523.2511306012],description:"12 of sub 50"},sub8:{frequencies:[261.6255653006,279.06726965397,299.00064605783,322.00069575458,348.83408706747,380.54627680087,418.60090448096,465.11211608996,523.2511306012],description:"Subharmonic series 1/16 - 1/8"},sumatra:{frequencies:[261.6255653006,266.79889483106,324.44528279699,356.96377863828,390.9602296356,474.47355835313,530.64156666967,639.28283484968,713.92755727656,784.8766959018],description:'"Archeological" tuning of Pasirah Rus orch. in Muaralakitan, Sumatra. 1/1=354 Hz'},super_10:{frequencies:[261.6255653006,283.42769574232,305.22982618403,327.03195662575,348.83408706747,370.63621750918,392.4383479509,425.14154361347,457.84473927605,490.54793493862,523.2511306012],description:"A superparticular 10-tone scale"},super_11:{frequencies:[261.6255653006,283.42769574232,305.22982618403,327.03195662575,348.83408706747,370.63621750918,392.4383479509,418.60090448096,444.76346101102,470.92601754108,497.08857407114,523.2511306012],description:"A superparticular 11-tone scale"},super_12:{frequencies:[261.6255653006,279.06726965397,296.50897400735,313.95067836072,331.39238271409,348.83408706747,372.08969287196,395.34529867646,418.60090448096,441.85651028546,465.11211608996,494.18162334558,523.2511306012],description:"A superparticular 12-tone scale"},super_12_1:{frequencies:[261.6255653006,280.31310567921,299.00064605783,317.68818643644,336.37572681506,355.06326719367,373.75080757229,392.4383479509,418.60090448096,444.76346101102,470.92601754108,497.08857407114,523.2511306012],description:"Another superparticular 12-tone scale"},super_12_2:{frequencies:[261.6255653006,280.31310567921,299.00064605783,317.68818643644,336.37572681506,355.06326719367,373.75080757229,392.4383479509,420.46965851882,448.50096908674,473.41768959156,498.33441009638,523.2511306012],description:"Another superparticular 12-tone scale"},super_13:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,418.60090448096,444.76346101102,470.92601754108,497.08857407114,523.2511306012],description:"A superparticular 13-tone scale"},super_14:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,414.24047839262,436.04260883433,457.84473927605,479.64686971777,501.44900015948,523.2511306012],description:"A superparticular 14-tone scale"},super_15:{frequencies:[261.6255653006,276.16031892841,290.69507255622,305.22982618403,319.76457981184,334.29933343966,348.83408706747,363.36884069528,381.53728273004,399.70572476481,417.87416679957,436.04260883433,457.84473927605,479.64686971777,501.44900015948,523.2511306012],description:"A superparticular 15-tone scale"},super_17:{frequencies:[261.6255653006,274.08392555301,286.54228580542,299.00064605783,311.45900631024,323.91736656265,336.37572681506,348.83408706747,363.36884069528,377.90359432309,392.4383479509,411.12588832951,429.81342870813,448.50096908674,467.18850946536,485.87604984397,504.56359022259,523.2511306012],description:"Superparticular 17-tone scale"},super_19:{frequencies:[261.6255653006,272.52663052146,283.42769574232,294.32876096318,305.22982618403,316.13089140489,327.03195662575,340.11323489078,353.19451315581,366.27579142084,379.35706968587,392.4383479509,408.13588186894,423.83341578697,439.53094970501,455.22848362304,470.92601754108,488.36772189445,505.80942624783,523.2511306012],description:"Superparticular 19-tone scale"},super_19_1:{frequencies:[261.6255653006,272.09058791262,282.55561052465,293.02063313667,303.4856557487,313.95067836072,325.57848126297,337.20628416522,348.83408706747,363.36884069528,377.90359432309,392.4383479509,408.13588186894,423.83341578697,439.53094970501,455.22848362304,470.92601754108,488.36772189445,505.80942624783,523.2511306012],description:"Superparticular 19-tone scale"},super_19_2:{frequencies:[261.6255653006,269.80136421624,277.97716313189,294.32876096318,302.50455987882,310.68035879446,318.85615771011,327.03195662575,343.38355445704,359.73515228832,376.08675011961,392.4383479509,408.78994578219,425.14154361347,441.49314144476,457.84473927605,474.19633710734,490.54793493862,506.89953276991,523.2511306012],description:"Superparticular 19-tone scale"},super_22:{frequencies:[261.6255653006,270.96933548991,280.31310567921,289.65687586852,299.00064605783,308.34441624714,317.68818643644,327.03195662575,337.93302184661,348.83408706747,359.73515228832,370.63621750918,381.53728273004,392.4383479509,406.45400323486,420.46965851882,434.48531380278,448.50096908674,463.45100138963,478.40103369253,493.35106599542,508.30109829831,523.2511306012],description:"Superparticular 22-tone scale"},super_22_1:{frequencies:[261.6255653006,272.09058791262,282.55561052465,293.02063313667,303.4856557487,313.95067836072,325.16320258789,336.37572681506,347.58825104223,358.80077526939,370.01329949656,381.22582372373,392.4383479509,405.51962621593,418.60090448096,431.68218274599,444.76346101102,457.84473927605,470.92601754108,484.00729580611,497.08857407114,510.16985233617,523.2511306012],description:"Superparticular 22-tone scale"},super_24:{frequencies:[261.6255653006,270.34641747729,279.06726965397,287.78812183066,296.50897400735,305.22982618403,313.95067836072,322.67153053741,331.39238271409,340.11323489078,348.83408706747,359.73515228832,370.63621750918,381.53728273004,392.4383479509,405.51962621593,418.60090448096,431.68218274599,444.76346101102,457.84473927605,470.92601754108,484.00729580611,497.08857407114,510.16985233617,523.2511306012],description:"Superparticular 24-tone scale, inverse of Mans.ur 'Awad"},super_7:{frequencies:[261.6255653006,287.78812183066,313.95067836072,353.19451315581,392.4383479509,431.68218274599,470.92601754108,523.2511306012],description:"A superparticular 7-tone scale"},super_8:{frequencies:[261.6255653006,287.78812183066,313.95067836072,340.11323489078,366.27579142084,392.4383479509,436.04260883433,479.64686971777,523.2511306012],description:"A superparticular 8 tone scale"},super_9:{frequencies:[261.6255653006,287.78812183066,313.95067836072,340.11323489078,366.27579142084,392.4383479509,425.14154361347,457.84473927605,490.54793493862,523.2511306012],description:"A superparticular 9-tone scale"},suppig:{frequencies:[261.6255653006,272.52663052146,279.06726965397,294.32876096318,306.59245933664,313.95067836072,327.03195662575,340.65828815182,348.83408706747,367.91095120397,376.74081403286,392.4383479509,408.78994578219,418.60090448096,436.04260883433,459.88868900496,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"Friedrich Suppig's 19-tone JI scale. Calculus Musicus, Berlin 1722"},sur_7:{frequencies:[261.6255653006,280.40333801024,327.729041887,351.25128999693,383.0422478503,410.5345162762,479.82340237272,523.2511306012],description:"7-tone surupan"},sur_9:{frequencies:[261.6255653006,280.40333801024,305.78200836532,327.729041887,351.25128999693,383.0422478503,410.5345162762,447.69106452518,479.82340237272,523.2511306012],description:"Theoretical nine-tone surupan gamut"},sur_ajeng:{frequencies:[261.6255653006,285.30470202322,305.78200836532,383.0422478503,417.71053321823,523.2511306012],description:"Surupan ajeng"},sur_degung:{frequencies:[261.6255653006,322.09885310804,345.21700307457,396.55020354877,488.21056770985,523.2511306012],description:"Surupan degung"},sur_madenda:{frequencies:[261.6255653006,322.09885310804,345.21700307457,425.01198472693,488.21056770985,523.2511306012],description:"Surupan madenda"},sur_melog:{frequencies:[261.6255653006,280.40333801024,305.78200836532,383.0422478503,410.5345162762,523.2511306012],description:"Surupan melog"},sur_miring:{frequencies:[261.6255653006,285.30470202322,305.78200836532,389.73770840504,417.71053321823,523.2511306012],description:"Surupan miring"},sur_x:{frequencies:[261.6255653006,280.40333801024,305.78200836532,383.0422478503,417.71053321823,523.2511306012],description:"Surupan tone-gender X (= unmodified nyorog)"},sur_y:{frequencies:[261.6255653006,280.40333801024,300.52885648597,383.0422478503,410.5345162762,523.2511306012],description:"Surupan tone-gender Y (= mode on pamiring)"},sverige:{frequencies:[261.6255653006,293.66476791741,329.62755691287,349.22823143301,391.99543598175,440,466.16376151809,493.88330125613,523.2511306012,554.36526195375,587.32953583482,622.25396744417,659.25511382574,698.45646286601,739.98884542327,783.9908719635,830.60939515989,880,932.32752303618,987.76660251225,1046.5022612024,1174.65907166964,1318.51022765149,1396.91292573202,1567.98174392701],description:"Scale on Swedish 50 crown banknote of some kind of violin."},syntonolydian:{frequencies:[261.6255653006,294.32876096318,331.11985608357,372.50983809402,392.4383479509,441.49314144476,496.67978412536,523.2511306012],description:"Greek Syntonolydian, also genus duplicatum medium, or ditonum (Al-Farabi)"},syrian:{frequencies:[261.6255653006,268.67837258085,275.62199471997,279.38237857051,286.74979536837,294.32876096318,302.10804307229,310.07474405997,314.30517589183,322.59351978942,326.6631048533,331.11985608357,339.85160932548,348.83408706747,358.05397697456,367.49599295996,372.50983809402,382.33306049116,392.4383479509,402.81072409638,413.43299207996,419.07356785577,430.12469305256,441.49314144476,453.13547910064,465.11211608996,477.40530263275,489.99465727995,496.67978412536,509.77741398822,523.2511306012],description:"After ^Sayh.'Ali ad-Darwis^ (Shaykh Darvish) from d'Erlanger vol.5, p.29"},szpak_24:{frequencies:[261.6255653006,270.98948203641,277.18263097687,287.10335517712,293.66476791741,304.17540907689,311.12698372208,322.26262012861,329.62755691287,341.42535271779,349.22823143301,361.7275606831,369.99442271164,383.23700075636,391.99543598175,406.02545869431,415.30469757995,430.16898885692,440,455.74816803176,466.16376151809,482.84836435151,493.88330125613,511.56002220218,523.2511306012],description:"Stephen Szpak's scale, TL 2-1-2004"},pagano_b:{frequencies:[261.6255653006,277.97716313189,289.55954492905,312.72430852337,333.57259575826,351.8148470888,370.63621750918,389.16802838464,416.96574469783,444.76346101102,463.29527188648,486.4600354808,523.2511306012],description:"Pat Pagano and David Beardsley, 17-limit scale, TL 27-2-2001"},palace:{frequencies:[261.6255653006,277.01530443593,294.32876096318,299.00064605783,336.37572681506,348.83408706747,373.75080757229,392.4383479509,409.50088481833,428.11456140098,448.50096908674,470.92601754108,523.2511306012],description:"Palace mode+"},palace2:{frequencies:[261.6255653006,277.01530443593,336.37572681506,348.83408706747,392.4383479509,428.11456140098,470.92601754108,523.2511306012],description:"Byzantine Palace mode, 17-limit"},panpipe1:{frequencies:[261.6255653006,305.78200836532,346.61566493686,386.59871897734,424.03113209229,475.68400784708,523.2511306012],description:"Palina panpipe of Solomon Islands. 1/1=f+45c. From Ocora CD Guadalcanal"},panpipe2:{frequencies:[261.6255653006,301.39807245198,340.46429857933,389.512652082,435.70052664441,481.48922855473,540.45338572244,606.98892366383,675.83458963267,749.45240308975,819.17415016614,915.78156525194,979.24522642508,1073.44040298899,1178.73719255088,1360.28482360484],description:"Lalave panpipe of Solomon Islands. 1/1=f'+47c."},panpipe3:{frequencies:[261.6255653006,302.44445076078,341.44901934006,382.59999559751,433.19107626846,482.88183400971,542.01653249392,602.10016957865,677.78929781797,755.1012944609,822.018116801,906.30932187391,994.06270356141,1067.87449159209,1155.14617783291,1300.35790771888],description:"Tenaho panpipe of Solomon Islands. 1/1=f'+67c."},parachrom:{frequencies:[261.6255653006,274.52698453615,288.06460709314,349.22823143301,391.99543598175,411.32572372413,431.60923940535,523.2511306012],description:"Parachromatic, new genus 5 + 5 + 20 parts"},parakleismic:{frequencies:[261.6255653006,269.41173453909,271.00883762044,279.07425994419,280.72864356353,282.39283618632,290.79705467987,292.52093234567,301.22657042972,303.0122754386,312.03014360907,313.87989341557,323.22118988972,325.13728335605,327.06473376202,336.79842078181,338.79499972275,348.87778808468,350.94597487438,361.39038519337,363.53274806687,374.35175001315,376.5709514911,387.77797996035,390.07677146523,392.38919046486,404.06698135965,406.46233589795,418.55895395107,421.04021853379,433.57068509561,436.14094342919,449.12081866987,451.783257426,465.22865943552,467.98658728446,470.76086444006,484.77105399159,487.64483417146,502.15750307968,505.13434926963,520.16751901001,523.2511306012],description:"Parakleismic temperament, g=315.250913, 5-limit"},parizek:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,327.03195662575,343.38355445704,359.73515228832,392.4383479509,425.14154361347,441.49314144476,457.84473927605,490.54793493862,523.2511306012],description:"Petr Parizek, 12-tone Linear Level tuning, 1/1=Ab"},parizek_13lqmt:{frequencies:[261.6255653006,272.70676208351,292.18581651805,313.05623198362,325.57848126297,348.83408706747,365.23227064756,391.32028997953,406.97310157871,436.04260883433,467.18850946536,486.97636086341,523.2511306012],description:"April 2003 - Petr Parizek"},parizek_17lqmt:{frequencies:[261.6255653006,272.52663052146,291.99281841585,312.60407618638,327.03195662575,350.39138209902,364.70475555078,390.75509523297,408.78994578219,436.04260883433,467.18850946536,488.44386904122,523.2511306012],description:"To tune the scale by ear, please choose the intervals in the following order:"},parizek_7lmtd1:{frequencies:[261.6255653006,280.31310567921,293.02063313667,313.95067836072,327.03195662575,350.39138209902,366.27579142084,392.4383479509,418.60090448096,437.98922762377,468.83301301868,490.54793493862,523.2511306012],description:"Use SET MIDDLE 62"},parizek_7lqmtd2:{frequencies:[261.6255653006,280.31310567921,293.02063313667,313.95067836072,327.03195662575,350.39138209902,366.27579142084,390.69417751556,418.60090448096,437.98922762377,468.83301301868,488.36772189445,523.2511306012],description:"Use SET MIDDLE 62"},parizek_cirot:{frequencies:[261.6255653006,273.76082553017,293.33333347996,307.98092841354,327.40170814054,348.04713286849,366.66693712906,392.88175996935,409.71484950008,438.01699797506,463.01593599647,491.10256480205,523.2511306012],description:"Overtempered circular tuning (1/1 is F)"},parizek_epi:{frequencies:[261.6255653006,283.42769574232,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,392.4383479509,418.60090448096,436.04260883433,457.84473927605,479.64686971777,523.2511306012],description:"In The Epimoric World"},parizek_epi2:{frequencies:[261.6255653006,283.42769574232,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,523.2511306012,523.2511306012],description:"In the Epimoric World - extended (version for two keyboards)"},parizek_epi2a:{frequencies:[261.6255653006,283.42769574232,287.78812183066,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,392.4383479509,411.12588832951,418.60090448096,425.14154361347,436.04260883433,448.50096908674,457.84473927605,470.92601754108,479.64686971777,485.87604984397,523.2511306012,523.2511306012],description:"April 2003 - Petr Parizek"},parizek_ji1:{frequencies:[261.6255653006,274.70684356563,294.32876096318,305.22982618403,327.03195662575,343.38355445704,366.27579142084,392.4383479509,412.06026534844,436.04260883433,457.84473927605,490.54793493862,523.2511306012],description:"Petr Parizek, 12-tone septimal tuning, 2002."},parizek_jiweltmp:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,329.45441556372,348.83408706747,370.63621750918,392.4383479509,416.96574469783,440.63253103259,465.11211608996,494.18162334558,523.2511306012],description:"April 2003 - Petr Parizek"},jiwt2:{frequencies:[261.6255653006,277.97716313189,294.32876096318,310.68035879446,331.11985608357,348.83408706747,372.08969287196,392.4383479509,415.8649508569,441.49314144476,465.11211608996,496.67978412536,523.2511306012],description:"June 2003 - Petr Parizek"},parizek_llt7:{frequencies:[261.6255653006,283.42769574232,327.03195662575,359.73515228832,392.4383479509,425.14154361347,479.64686971777,523.2511306012],description:"7-tone mode of Linear Level Tuning 2000 (= wilson_helix)"},parizek_qmeb1:{frequencies:[261.6255653006,273.53155294581,293.066620053,305.25690181412,326.9069921792,350.33366042609,366.2083106197,392.1884190578,408.50877577745,437.87542071709,457.7197748295,488.61098601707,523.2511306012],description:"Equal beating quasi-meantone tuning no. 1 - F...A# (1/1 = 261.7Hz)(3/2 5/3 5/4 7/4 7/6)"},parizek_qmeb2:{frequencies:[261.6255653006,274.12423619715,293.39509530855,306.21121252767,327.1564453797,350.32795211486,366.55713600477,391.6914154272,409.44351174042,438.20041390279,457.4712730142,489.73875803795,523.2511306012],description:"Equal beating quasi-meantone tuning no. 2 - F...A# (1/1 = 262.7Hz)"},parizek_qmeb3:{frequencies:[261.6255653006,274.23252240717,293.57983281823,306.4052273004,327.28159934073,350.29865766202,366.78755898655,391.93906252094,409.53887392713,438.37260750749,457.59509656107,490.04864950866,523.2511306012],description:"Equal beating quasi-meantone tuning no. 3 - F...A#. 1/1 = 262Hz"},parizek_qmtp12:{frequencies:[261.6255653006,273.55480692456,293.00227310437,305.44101254122,326.6631048533,350.4133380576,366.39100206434,391.84790908124,408.48291326839,437.52264545758,457.47219685667,489.2574430773,523.2511306012],description:"12-tone quasi-meantone tuning with 1/9 Pyth. comma as basic tempering unit (F...A#)"},parizek_qmtp24:{frequencies:[261.6255653006,273.14323313659,280.64720643091,285.59764149034,293.00227310437,305.44101254122,313.83229199844,326.6631048533,335.63741195089,341.5578378819,350.4133380576,365.83975262993,375.89034660662,381.37064019061,391.84790908124,407.86833637529,419.07356785577,437.52264545758,448.86620556368,457.47219685667,469.33298761093,489.2574430773,502.69865025911,510.02774559919,523.2511306012],description:"24-tone quasi-meantone tuning with 1/9 Pyth. comma as basic tempering unit (Bbb...C##)"},parizek_syndiat:{frequencies:[261.6255653006,290.69507255622,294.32876096318,327.03195662575,348.83408706747,353.19451315581,387.59343007496,392.4383479509,436.04260883433,441.49314144476,484.4917875937,490.54793493862,523.2511306012],description:"Petr Parizek, diatonic scale with syntonic alternatives"},parizek_syntonal:{frequencies:[261.6255653006,272.52663052146,290.69507255622,294.32876096318,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,436.04260883433,441.49314144476,490.54793493862,523.2511306012],description:"Petr Parizek, Syntonic corrections in JI tonality, Jan. 2004"},parizek_temp19:{frequencies:[261.6255653006,276.69969455132,294.32876096318,310.68035879446,328.58088727969,349.51540364377,368.93292606842,392.4383479509,415.04954182698,438.10784970625,466.02053819169,492.87133091954,523.2511306012],description:"Petr Parizek, genus [3 3 19 19 19] well temperament"},"partch-barstow":{frequencies:[261.6255653006,279.06726965397,287.78812183066,290.69507255622,294.32876096318,299.00064605783,313.95067836072,327.03195662575,348.83408706747,359.73515228832,373.75080757229,392.4383479509,418.60090448096,436.04260883433,448.50096908674,470.92601754108,479.64686971777,490.54793493862,523.2511306012],description:"Guitar scale for Partch's Barstow (1941, 1968)"},"partch-greek":{frequencies:[261.6255653006,261.6255653006,271.31540105247,294.32876096318,279.06726965397,348.83408706747,313.95067836072,392.4383479509,392.4383479509,406.97310157871,418.60090448096,418.60090448096,523.2511306012],description:'Partch Greek scales from "Two Studies on Ancient Greek Scales" on black/white'},"partch-grm":{frequencies:[261.6255653006,271.31540105247,279.06726965397,294.32876096318,313.95067836072,348.83408706747,392.4383479509,406.97310157871,418.60090448096,523.2511306012],description:'Partch Greek scales from "Two Studies on Ancient Greek Scales" mixed'},"partch-indian":{frequencies:[261.6255653006,269.80136421624,277.97716313189,285.40970760065,294.32876096318,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,383.71749577421,392.4383479509,406.97310157871,411.12588832951,428.11456140098,441.49314144476,457.84473927605,475.68284600109,490.54793493862,507.3950357345,523.2511306012],description:"Partch's Indian Chromatic, Exposition of Monophony, 1933."},"partch-ur":{frequencies:[261.6255653006,267.07609791103,269.80136421624,274.08392555301,279.06726965397,285.40970760065,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,343.38355445704,348.83408706747,356.76213450082,359.73515228832,366.27579142084,373.75080757229,380.54627680087,383.71749577421,392.4383479509,398.6675280771,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,490.54793493862,499.46698830115,507.3950357345,512.57253609913,523.2511306012],description:"Ur-Partch curved keyboard, published in Interval"},"partch_29-av":{frequencies:[261.6255653006,269.80136421624,274.70684356563,280.31310567921,285.40970760065,290.69507255622,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,380.54627680087,392.4383479509,406.97310157871,418.60090448096,428.11456140098,436.04260883433,448.50096908674,457.84473927605,470.92601754108,479.64686971777,488.36772189445,498.33441009638,507.3950357345,523.2511306012],description:"29-tone JI scale from Partch's Adapted Viola 1928-30"},partch_29:{frequencies:[261.6255653006,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,380.54627680087,392.4383479509,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,523.2511306012],description:"Partch/Ptolemy 11-limit Diamond"},partch_37:{frequencies:[261.6255653006,267.07609791103,269.80136421624,274.08392555301,279.06726965397,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,380.54627680087,392.4383479509,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,490.54793493862,499.46698830115,507.3950357345,512.57253609913,523.2511306012],description:'From "Exposition on Monophony" 1933, unp. see Ayers, 1/1 vol.9(2)'},partch_39:{frequencies:[261.6255653006,267.07609791103,269.80136421624,274.08392555301,279.06726965397,285.40970760065,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,343.38355445704,348.83408706747,356.76213450082,359.73515228832,366.27579142084,373.75080757229,380.54627680087,383.71749577421,392.4383479509,398.6675280771,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,490.54793493862,499.46698830115,507.3950357345,512.57253609913,523.2511306012],description:"Ur-Partch Keyboard 39 tones, published in Interval"},partch_41:{frequencies:[261.6255653006,281.75060878526,283.42769574232,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,309.19384990071,313.95067836072,319.76457981184,322.00069575458,327.03195662575,332.97799220076,336.37572681506,340.11323489078,348.83408706747,359.73515228832,362.25078272391,366.27579142084,373.75080757229,377.90359432309,380.54627680087,392.4383479509,402.50086969323,406.97310157871,411.12588832951,418.60090448096,425.14154361347,428.11456140098,436.04260883433,442.75095666255,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,483.00104363188,485.87604984397,523.2511306012],description:"13-limit Diamond after Partch, Genesis of a Music, p 454, 2nd edition"},partch_41a:{frequencies:[261.6255653006,267.07609791103,269.80136421624,274.08392555301,279.06726965397,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,343.38355445704,348.83408706747,356.76213450082,359.73515228832,366.27579142084,373.75080757229,380.54627680087,383.71749577421,392.4383479509,398.6675280771,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,490.54793493862,499.46698830115,507.3950357345,512.57253609913,523.2511306012],description:'From "Exposition on Monophony" 1933, unp. see Ayers, 1/1 vol. 9(2)'},partch_41comb:{frequencies:[261.6255653006,267.07609791103,269.80136421624,274.08392555301,274.70684356563,279.06726965397,280.31310567921,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,348.83408706747,359.73515228832,366.27579142084,373.75080757229,380.54627680087,392.4383479509,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,488.36772189445,490.54793493862,498.33441009638,499.46698830115,507.3950357345,512.57253609913,523.2511306012],description:"41-tone JI combination from Partch's 29-tone and 37-tone scales"},partch_43:{frequencies:[261.6255653006,264.89588486686,269.80136421624,274.70684356563,279.06726965397,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,310.07474405997,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,343.38355445704,348.83408706747,353.19451315581,359.73515228832,366.27579142084,373.75080757229,380.54627680087,387.59343007496,392.4383479509,398.6675280771,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,441.49314144476,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,490.54793493862,498.33441009638,507.3950357345,516.79124009995,523.2511306012],description:"Harry Partch's 43-tone pure scale"},partch_43a:{frequencies:[261.6255653006,267.07609791103,269.80136421624,274.70684356563,279.06726965397,285.40970760065,287.78812183066,290.69507255622,294.32876096318,299.00064605783,305.22982618403,310.07474405997,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,343.38355445704,348.83408706747,356.76213450082,359.73515228832,366.27579142084,373.75080757229,380.54627680087,383.71749577421,392.4383479509,398.6675280771,406.97310157871,411.12588832951,418.60090448096,428.11456140098,436.04260883433,441.49314144476,448.50096908674,457.84473927605,465.11211608996,470.92601754108,475.68284600109,479.64686971777,490.54793493862,498.33441009638,507.3950357345,512.57253609913,523.2511306012],description:'From "Exposition on Monophony" 1933, unp. see Ayers, 1/1 vol. 9(2)'},patala:{frequencies:[261.6255653006,289.6217982776,320.24370022528,355.94891173479,393.58362272115,439.74591942221,480.6555937997,537.34060327431],description:"Observed patala tuning from Burma, Helmholtz/Ellis p. 518, nr.83"},pelog1:{frequencies:[261.6255653006,285.79952600623,313.83440569119,359.87690576543,393.35634555235,426.98050185716,482.04578814299,523.2511306012],description:"Gamelan Saih pitu from Ksatria, Den Pasar (South Bali). 1/1=312.5 Hz"},pelog10:{frequencies:[261.6255653006,290.16653606067,310.14521470005,342.49164912079,385.30310526088,418.60090448096,442.38504678101,523.2511306012],description:"Balinese saih 7 scale, Krobokan. 1/1=275 Hz. McPhee, 1966"},pelog11:{frequencies:[261.6255653006,289.11520789678,327.03195662575,352.6257619269,388.64667309147,441.73012112348,478.69895237627,523.2511306012],description:"Balinese saih pitu, gamelan luang, banjar Se`se'h. 1/1=276 Hz. McPhee, 1966"},pelog11i:{frequencies:[261.6255653006,267.83009854382,287.76973397991,309.19384990071,332.21296611011,356.94582815655,383.52002471837,392.61532371972,421.84506978464,453.25093845942,486.99493426005,523.2511306012],description:"George Secor's isopelogic scale with ~537.84194 generator and just 13/11"},pelog12:{frequencies:[261.6255653006,284.41230790592,308.04300430555,358.68021049276,385.68672051706,409.31741667997,472.61392441399,523.2511306012],description:"Balinese saih pitu, gamelan Semar Pegulingan, Tampak Gangsai, 1/1=310, McPhee"},pelog13:{frequencies:[261.6255653006,289.80062617913,323.61069924911,351.78575931905,394.45085229937,454.02098012766,494.27106657141,523.2511306012],description:"Balinese saih pitu, gamelan Semar Pegulingan, Klungkung, 1/1=325. McPhee, 1966"},pelog14:{frequencies:[261.6255653006,287.66412867175,309.98289727559,347.18084494866,375.69927149802,402.97776645827,427.77639824032,523.2511306012],description:"Balinese saih pitu, suling gambuh, Tabanan, 1/1=211 Hz, McPhee, 1966"},pelog15:{frequencies:[261.6255653006,284.9387344858,307.6043148279,344.51683351465,375.60105909492,407.98046074103,427.4081017287,523.2511306012],description:"Balinese saih pitu, suling gambuh, Batuan, 1/1=202 Hz. McPhee, 1966"},pelog2:{frequencies:[261.6255653006,285.30470202322,314.92395982138,345.81573716922,388.6137256405,424.52127512829,466.97226207056,523.2511306012],description:"Bamboo gambang from Batu lulan (South Bali). 1/1=315 Hz"},pelog3:{frequencies:[261.6255653006,285.63448939555,315.83481057014,390.18821123181,421.34544350737,523.2511306012],description:"Gamelan Gong from Padangtegal, distr. Ubud (South Bali). 1/1=555 Hz"},pelog4:{frequencies:[261.6255653006,290.96323214696,317.29765457754,352.87817160549,385.03871768789,434.94616895528,470.49199937597,523.2511306012],description:"Hindu-Jav. demung, excavated in Banjarnegara. 1/1=427 Hz"},pelog5:{frequencies:[261.6255653006,284.64626913494,310.94732162256,358.21775774651,390.8649420513,427.47405410759,468.32288027948,523.2511306012],description:"Gamelan Kyahi Munggang (Paku Alaman, Jogja). 1/1=199.5 Hz"},pelog6:{frequencies:[261.6255653006,282.02769802256,315.83481057014,354.51258839996,386.37547528213,413.39000965417,523.2511306012],description:"Gamelan Semar pegulingan, Ubud (S. Bali). 1/1=263.5 Hz"},pelog7:{frequencies:[261.6255653006,281.2143451833,303.31920717687,353.89879686059,384.81637482457,412.43597848639,448.72664641273,523.2511306012],description:"Gamelan Kantjilbelik (kraton Jogja). Measured by Surjodiningrat, 1972."},pelog8:{frequencies:[261.6255653006,281.2143451833,305.0763174688,362.1707891162,386.59871897734,415.30469757995,456.83405152976,529.33101587613,573.91491069685,623.33318620372,730.64478690489,786.25839925218,840.74610520523,945.88853913022,1075.30214607265],description:"from William Malm: Music Cultures of the Pacific, the Near East and Asia."},pelog9:{frequencies:[261.6255653006,282.57123920205,305.19382000629,356.01745236555,384.52011812375,415.30469757995,448.5538823653,523.2511306012],description:"9-tET Pelog"},pelog9i:{frequencies:[261.6255653006,287.76973397991,309.19384990071,332.21296611011,356.94582815655,383.52002471837,421.84506978464,453.25093845942,486.99493426005,523.2511306012],description:"George Secor's isopelogic scale with ~537.84194 generator and just 13/11"},pelog_24:{frequencies:[261.6255653006,293.66476791741,320.24370022528,349.22823143301,391.99543598175,440,479.82340237272,523.2511306012],description:"Subset of 24-tET (Sumatra?)"},pelog_a:{frequencies:[261.6255653006,280.7274598329,305.95868600104,363.84824628932,386.82209166041,411.72190027758,452.10885997356,523.2511306012],description:"Pelog, average class A. Kunst 1949"},pelog_alv:{frequencies:[261.6255653006,299.00064605783,313.95067836072,343.38355445704,392.4383479509,418.60090448096,457.84473927605,523.2511306012],description:"Bill Alves JI Pelog, 1/1 vol. 9 no. 4, 1997. 1/1=293.33"},pelog_av:{frequencies:[261.6255653006,280.40333801024,305.78200836532,357.39105439675,385.26118901859,411.72190027758,452.89298412314,523.2511306012],description:'"Normalised Pelog", Kunst, 1949. Average of 39 Javanese gamelans'},pelog_b:{frequencies:[261.6255653006,280.07959041159,302.79405018898,354.30787302884,382.82105786018,408.64182041696,451.58686491179,523.2511306012],description:"Pelog, average class B. Kunst 1949"},pelog_c:{frequencies:[261.6255653006,279.91785681123,304.37225518229,350.84574289301,384.81637482457,410.29745071461,451.58686491179,523.2511306012],description:"Pelog, average class C. Kunst 1949"},pelog_he:{frequencies:[261.6255653006,283.17034563789,338.50336851425,364.68988616898,389.06292924114,420.13030572059,493.31307433255,523.2511306012],description:"Observed Javanese Pelog scale, Helmholtz/Ellis p. 518, nr.96"},pelog_jc:{frequencies:[261.6255653006,294.32876096318,313.95067836072,392.4383479509,418.60090448096,523.2511306012],description:"John Chalmers' Pelog, on keys C# E F# A B c#, like Olympos' Enharmonic on 4/3"},pelog_laras:{frequencies:[261.6255653006,283.42769574232,305.22982618403,370.63621750918,392.4383479509,414.24047839262,457.84473927605,523.2511306012],description:'Lou Harrison, gamelan "Si Betty"'},pelog_me1:{frequencies:[261.6255653006,281.13654920971,305.96893643544,353.85975480175,389.33427481332,412.3928606827,454.07565526112,523.2511306012],description:"Gamelan Kyahi Kanyut Mesem pelog (Mangku Nagaran). 1/1=295 Hz"},pelog_me2:{frequencies:[261.6255653006,277.86440299076,299.96729002515,349.58586605592,383.41679241104,405.97081699752,447.47001910635,523.2511306012],description:"Gamelan Kyahi Bermara (kraton Jogja). 1/1=290 Hz"},pelog_me3:{frequencies:[261.6255653006,281.75056896146,306.90688773629,358.59164065877,385.12012728597,411.64865826518,457.38747412584,523.2511306012],description:"Gamelan Kyahi Pangasih (kraton Solo). 1/1=286 Hz"},pelog_pa:{frequencies:[261.6255653006,286.29520819723,313.29104303136,342.83241505062,387.04559340587,423.54155496477,463.47885582013,523.2511306012],description:'"Blown fifth" pelog, von Hornbostel, type a.'},pelog_pa2:{frequencies:[261.6255653006,286.29520819723,313.29104303136,353.69443592699,387.04559340587,423.54155496477,463.47885582013,523.2511306012],description:"New mixed gender Pelog"},pelog_pb:{frequencies:[261.6255653006,277.98432293805,304.19649364034,353.69443592699,387.04559340587,411.24653512154,450.02449304881,523.2511306012],description:'"Primitive" Pelog, step of blown semi-fourths, von Hornbostel, type b.'},pelog_pb2:{frequencies:[261.6255653006,277.50302994288,303.66981774726,353.69443592699,387.04559340587,410.5345162762,449.24533531117,523.2511306012],description:'"Primitive" Pelog, Kunst: Music in Java, p. 28'},pelog_schmidt:{frequencies:[261.6255653006,287.78812183066,313.95067836072,366.27579142084,392.4383479509,418.60090448096,470.92601754108,523.2511306012],description:"Modern Pelog designed by Dan Schmidt and used by Berkeley Gamelan"},pelog_selun:{frequencies:[261.6255653006,281.10829462369,350.68958753059,378.52209447746,416.55977244877,523.2511306012,562.21664032682,701.37917506118,757.04418895493,833.11970794305,1046.5022612024,1124.43328065364],description:"Gamelan selunding from Kengetan, South Bali (Pelog), 1/1=141 Hz"},pelog_slen:{frequencies:[261.6255653006,289.4545544734,306.66641795878,334.42210013281,344.22141564971,354.30787302884,386.37547528213,397.69714089209,446.39994737251,459.48046426806,493.88330125613,523.2511306012],description:"W.P. Malm, pelog+slendro, Musical Cultures Of The Pacific, The Near East, And Asia. P: 1,3,5,6,8,10; S: 2,4,7,9"},pelog_str:{frequencies:[261.6255653006,282.73796785026,305.22982618403,329.86096249197,356.10146388137,384.83778957396,415.4517078616,448.97742116962,484.69365917187,523.80699136456],description:"JI Pelog with stretched 2/1 and extra tones between 2-3, 6-7. Wolf, XH 11, '87"},pelogic:{frequencies:[261.6255653006,268.93425429917,294.59920226397,322.71340889889,353.51061198674,363.38617257172,398.06486099125,436.0530078362,477.66644151787,523.2511306012],description:"Pelogic temperament, g=521.1, 5-limit"},pelogic2:{frequencies:[261.6255653006,252.56770712848,285.96465797334,276.06414495892,312.56802260838,301.74646235804,341.64630500046,386.82209166041,373.42974737602,422.80824892286,408.17001145418,462.1422075194,523.2511306012],description:"Pelogic temperament, g=677.0 in cycle of fifths order"},penta1:{frequencies:[261.6255653006,282.55561052465,294.32876096318,313.95067836072,331.11985608357,372.50983809402,376.74081403286,397.34382730029,423.83341578697,441.49314144476,470.92601754108,496.67978412536,523.2511306012],description:"Pentagonal scale 9/8 3/2 16/15 4/3 5/3"},penta2:{frequencies:[261.6255653006,267.07609791103,286.15296204753,305.22982618403,312.97980223949,333.84512238879,356.10146388137,363.36884069528,400.61414686654,436.04260883433,457.84473927605,476.92160341255,523.2511306012],description:"Pentagonal scale 7/4 4/3 15/8 32/21 6/5"},penta_opt:{frequencies:[261.6255653006,292.5084949701,327.03692214239,391.62201198054,436.95817401562,523.2511306012],description:"Optimally consonant major pentatonic, John deLaubenfels, 2001"},pentadekany:{frequencies:[261.6255653006,283.42769574232,299.7792935736,305.22982618403,327.03195662575,354.2846196779,359.73515228832,381.53728273004,389.71308164569,419.69101100305,425.14154361347,436.04260883433,457.84473927605,479.64686971777,495.99846754905,523.2511306012],description:"2)6 1.3.5.7.11.13 Pentadekany (1.3 tonic)"},pentadekany2:{frequencies:[261.6255653006,269.80136421624,294.32876096318,299.7792935736,305.22982618403,327.03195662575,343.38355445704,359.73515228832,381.53728273004,392.4383479509,419.69101100305,436.04260883433,457.84473927605,479.64686971777,490.54793493862,523.2511306012],description:"2)6 1.3.5.7.9.11 Pentadekany (1.3 tonic)"},pentadekany3:{frequencies:[261.6255653006,277.97716313189,278.79474302345,287.78812183066,291.4672313427,300.86940009569,305.77487944508,319.67373760167,359.73515228832,376.08675011961,405.51962621593,413.69542513157,430.86460285443,444.76346101102,506.89953276991,523.2511306012],description:"2)6 1.5.11.17.23.31 Pentadekany (1.5 tonic)"},pentatetra1:{frequencies:[261.6255653006,275.39533189537,290.69507255622,327.03195662575,348.83408706747,392.4383479509,413.09299784305,436.04260883433,490.54793493862,523.2511306012],description:"Penta-tetrachord 20/19 x 19/18 x 18/17 x 17/16 = 5/4. 5/4 x 16/15 = 4/3"},pentatetra2:{frequencies:[261.6255653006,275.39533189537,307.79478270659,327.03195662575,348.83408706747,392.4383479509,413.09299784305,461.69217405988,490.54793493862,523.2511306012],description:"Penta-tetrachord 20/19 x 19/18 x 18/17 x 17/16 = 5/4. 5/4 x 16/15 = 4/3"},pentatetra3:{frequencies:[261.6255653006,290.69507255622,307.79478270659,327.03195662575,348.83408706747,392.4383479509,436.04260883433,461.69217405988,490.54793493862,523.2511306012],description:"Penta-tetrachord 20/19 x 19/18 x 18/17 x 17/16 = 5/4. 5/4 x 16/15 = 4/3"},pentatriad:{frequencies:[261.6255653006,290.69507255622,294.32876096318,327.03195662575,348.83408706747,367.91095120397,392.4383479509,436.04260883433,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:"4:5:6 Pentatriadic scale"},pentatriad1:{frequencies:[261.6255653006,290.69507255622,294.32876096318,327.03195662575,348.83408706747,387.59343007496,392.4383479509,436.04260883433,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:"3:5:9 Pentatriadic scale"},pepper:{frequencies:[261.6255653006,274.70684356563,290.69507255622,294.32876096318,305.22982618403,327.03195662575,343.38355445704,348.83408706747,367.91095120397,392.4383479509,406.97310157871,436.04260883433,441.49314144476,457.84473927605,465.11211608996,490.54793493862,515.07533168556,523.2511306012],description:"Keenan Pepper's 17-tone jazz tuning, TL 07-06-2000"},pepper2:{frequencies:[261.6255653006,281.81099471089,295.05751399041,308.92668738628,332.76158224462,348.40303271111,375.28368107222,392.9238840789,423.23948674937,443.13385158124,463.96335069158,499.75992392917,523.2511306012],description:`Keenan Pepper's "Noble Fifth" with chromatic/diatonic semitone = Phi (12)`},peprmint:{frequencies:[261.6255653006,270.64528749638,281.81099405977,291.52662269553,295.0575145017,305.22982618403,308.92668738628,319.57714845986,332.76158147578,344.23376699744,348.40303331485,360.41446869983,375.28368085545,388.22184514393,392.92388339801,406.47020562703,423.23948723831,437.83096109824,443.13385158124,458.41119713782,463.9633498876,479.95880678291,499.75992479518,516.98949333115,523.2511306012],description:"Peppermint 24: Wilson/Pepper apotome/limma=Phi, 2 chains spaced for pure 7:6"},"perkis-indian":{frequencies:[261.6255653006,269.10058145205,277.01530443593,285.40970760065,294.32876096318,303.82323712328,313.95067836072,327.03195662575,336.37572681506,348.83408706747,358.01393146398,369.99442271164,377.90359432309,388.70083987518,400.13321751856,412.18367363396,425.14154361347,438.99882991118,453.48431318771,469.12170329763,485.27322596079,503.87145909745,523.2511306012],description:"Indian 22 Perkis"},"perrett-tt":{frequencies:[261.6255653006,274.70684356563,286.15296204753,294.32876096318,305.22982618403,313.95067836072,327.03195662575,343.38355445704,348.83408706747,366.27579142084,381.53728273004,392.4383479509,412.06026534844,418.60090448096,436.04260883433,457.84473927605,470.92601754108,490.54793493862,515.07533168556,523.2511306012],description:"Perrett Tierce-Tone"},perrett:{frequencies:[261.6255653006,274.70684356563,279.06726965397,348.83408706747,392.4383479509,412.06026534844,418.60090448096,523.2511306012],description:"Perrett / Tartini / Pachymeres Enharmonic"},perrett_14:{frequencies:[261.6255653006,274.70684356563,294.32876096318,305.22982618403,327.03195662575,343.38355445704,348.83408706747,366.27579142084,392.4383479509,412.06026534844,436.04260883433,457.84473927605,490.54793493862,515.07533168556,523.2511306012],description:"Perrett's 14-tone system (subscale of tierce-tone)"},perrett_chrom:{frequencies:[261.6255653006,274.70684356563,294.32876096318,348.83408706747,392.4383479509,412.06026534844,441.49314144476,523.2511306012],description:"Perrett's Chromatic"},perry:{frequencies:[261.6255653006,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,490.54793493862,523.2511306012],description:"Robin Perry, Tuning List 22-9-'98"},perry2:{frequencies:[261.6255653006,274.70684356563,290.69507255622,305.22982618403,327.03195662575,348.83408706747,373.75080757229,392.4383479509,415.27867508032,436.04260883433,457.84473927605,498.33441009638,523.2511306012],description:"Robin Perry, 7-limit scale, TL 22-10-2006"},perry3:{frequencies:[261.6255653006,277.97716313189,294.32876096318,307.79478270659,327.03195662575,348.83408706747,369.35373924791,370.63621750918,392.4383479509,418.60090448096,444.76346101102,465.11211608996,492.47165233054,523.2511306012],description:"Robin Perry, symmetrical 3,5,17 scale, TL 22-10-2006"},"persian-far":{frequencies:[261.6255653006,275.58617649731,282.84340331238,294.51413096332,310.22971009486,318.39923223688,331.53706992441,349.22823143301,362.58942698662,376.46181130035,391.99543598175,412.91271853531,423.78627283082,441.27260666252,464.81937009253,477.05982293263,496.7443381147,523.2511306012],description:"Hormoz Farhat, average of observed Persian tar and sehtar tunings (1966)"},"persian-vaz":{frequencies:[261.6255653006,277.18263097687,285.30470202322,293.66476791741,311.12698372208,320.24370022528,329.62755691287,349.22823143301,359.46139971304,380.8360868427,391.99543598175,415.30469757995,427.47405410759,440,466.16376151809,479.82340237272,493.88330125613,523.2511306012],description:"Vaziri's Persian tuning, using quartertones"},persian:{frequencies:[261.6255653006,275.62199471997,282.55561052465,294.32876096318,310.07474405997,317.87506184023,331.11985608357,348.83408706747,363.36884069528,376.74081403286,392.4383479509,413.43299207996,423.83341578697,441.49314144476,465.11211608996,476.81259276034,496.67978412536,523.2511306012],description:"Persian Tar Scale, from Dariush Anooshfar, Internet Tuning List 2/10/94"},persian2:{frequencies:[261.6255653006,275.62199471997,288.32205155576,294.32876096318,310.07474405997,321.08592105074,331.11985608357,348.83408706747,367.49599295996,384.42940207435,392.4383479509,413.43299207996,428.11456140098,441.49314144476,465.11211608996,489.99465727995,512.57253609913,523.2511306012],description:"Traditional Persian scale, from Mark Rankin"},phi1_13:{frequencies:[261.6255653006,272.27874348295,293.41755524936,305.36527715608,329.07281683115,342.47239171077,356.41758627629,384.088434771,399.72820043646,416.00480451705,448.3020273708,466.55651779723,502.7784067407,523.2511306012],description:"Pythagorean scale with (Phi + 1) / 2 as fifth"},phi_10:{frequencies:[261.6255653006,277.06593756944,293.41755524936,323.38703872151,342.47239171077,362.68389667063,399.72820043646,423.31898451752,448.3020273708,494.09131284284,523.2511306012],description:"Pythagorean scale with Phi as fifth"},phi_12:{frequencies:[261.6255653006,280.653851324,301.06608340242,314.41721066027,337.28508524374,352.24238645938,377.86132347501,405.34355110824,423.31898451752,454.10739278061,474.24531572837,508.73764640933,531.29821178855],description:"Non-Octave Pythagorean scale with Phi as fourth. Jacky Ligon TL 12-04-2001"},phi_13:{frequencies:[261.6255653006,277.06593756944,293.41755524936,305.36527715608,323.38703872151,342.47239171077,362.68389667063,377.45230514615,399.72820043646,423.31898451752,448.3020273708,466.55651779723,494.09131284284,523.2511306012],description:"Pythagorean scale with Phi as fifth"},phi_13a:{frequencies:[261.6255653006,280.653851324,293.09977429907,314.41721066027,328.36040925687,352.24238645938,377.86132347501,394.61802538749,423.31898451752,442.09155952525,474.24531572837,508.73764640933,531.29821178855,569.94005600595],description:"Non-Octave Pythagorean scale with Phi as fifth, Jacky Ligon TL 12-04-2001"},phi_13b:{frequencies:[261.6255653006,277.56939878091,287.90530191745,305.45065986668,316.82478268872,336.13253486432,356.61692887617,369.89633953852,392.4383479509,407.05164722964,431.8579526603,458.17598957099,475.23717379553,504.19880204444],description:"Non-Octave Pythagorean scale with 12 3/2s, Jacky Ligon, TL 12-04-2001"},phi_17:{frequencies:[261.6255653006,276.86436108535,292.99059544936,310.05629713556,328.11582814217,347.22745468775,367.4522682176,388.8548834608,411.50435256812,435.47307590797,460.83762934409,487.67984759381,516.08523529366,546.14543793146,577.9565447239,611.62018657326,647.24497389216,684.94478342154],description:"Phi + 1 equal division by 17, Brouncker (1653)"},phi_7b:{frequencies:[261.6255653006,277.06593756944,299.7954575021,323.38703872151,342.47239171077,369.42210382256,399.72820043646,423.31898451752],description:"Heinz Bohlen's Pythagorean scale with Phi as fifth (1999)"},phi_7be:{frequencies:[261.6255653006,277.18263097687,299.37379946195,323.3415889232,342.56848033562,369.99442271164,399.61607881612,423.37848741825],description:"36-tET approximation of phi_7b"},phi_8:{frequencies:[261.6255653006,280.010356995,292.01318753119,312.53354015396,325.93049860793,348.83408706747,373.34714284662,389.35091690288,416.71138708025],description:"Non-Octave Pythagorean scale with 4/3s, Jacky Ligon, TL 12-04-2001"},phi_8a:{frequencies:[261.6255653006,275.77662731691,284.90271245142,300.31281179658,310.2506767011,327.03195662575,344.72084112096,356.12824371673,375.39107678967],description:"Non-Octave Pythagorean scale with 5/4s, Jacky Ligon, TL 12-04-2001"},phillips_19:{frequencies:[261.6255653006,274.63272075836,286.12988535196,293.66476791741,305.42895910556,326.59518553839,329.62755691287,342.83241505062,349.22823143301,366.5907009274,384.81637482457,391.99543598175,407.69874723177,428.71043212875,440,457.62637091093,489.33987776603,493.88330125613,513.66823365307,523.2511306012],description:"Pauline Phillips, organ manual scale, TL 7-10-2002"},phillips_19a:{frequencies:[261.6255653006,274.58143914872,285.65749968142,293.61100773131,305.45468261618,326.62388782443,329.50688232588,342.79852229325,349.26020182051,366.55580177366,381.34192228364,391.95955371998,407.7704102616,427.96347506501,439.87918162894,457.62301915088,489.33808574423,493.65730140218,509.07699553894,523.2511306012],description:"Adaptation by Gene Ward Smith with more consonant chords, TL 25-10-2002"},phillips_22:{frequencies:[261.6255653006,275.93321340298,286.15296204753,294.32876096318,305.5744765615,306.59245933664,327.03195662575,331.11985608357,343.38355445704,349.22797321314,367.91095120397,392.4383479509,407.76797091773,408.78994578219,416.96574469783,429.2294430713,441.49314144476,457.84473927605,459.88868900496,490.54793493862,496.67978412536,515.07533168556,523.2511306012],description:"All-key 19-limit JI scale (2002), TL 21-10-2002"},phillips_ji:{frequencies:[261.6255653006,275.93321340298,286.15296204753,294.32876096318,305.5744765615,306.59245933664,327.03195662575,331.11985608357,349.22797321314,367.91095120397,386.30649876417,392.4383479509,407.76797091773,408.78994578219,429.2294430713,441.49314144476,457.84473927605,459.88868900496,490.54793493862,496.67978412536,515.07533168556,523.2511306012],description:'Pauline Phillips, JI 0 #/b "C" scale (2002), TL 8-10-2002'},phryg_chromcon2:{frequencies:[261.6255653006,283.42769574232,294.32876096318,305.22982618403,392.4383479509,414.24047839262,436.04260883433,523.2511306012],description:"Harmonic Conjunct Chromatic Phrygian"},phryg_chromconi:{frequencies:[261.6255653006,283.42769574232,348.83408706747,370.63621750918,392.4383479509,479.64686971777,501.44900015948,523.2511306012],description:"Inverted Conjunct Chromatic Phrygian"},phryg_chrominv:{frequencies:[261.6255653006,272.52663052146,283.42769574232,348.83408706747,392.4383479509,414.24047839262,436.04260883433,523.2511306012],description:"Inverted Schlesinger's Chromatic Phrygian"},phryg_chromt:{frequencies:[261.6255653006,277.01530443593,294.32876096318,313.95067836072,324.77656382143,336.37572681506,362.25078272391,392.4383479509,409.50088481833,418.60090448096,428.11456140098,470.92601754108,523.2511306012,554.03060887186,588.65752192635,627.90135672144,649.55312764287,672.75145363011,724.50156544782,784.8766959018,819.00176963666,837.20180896192,856.22912280196,941.85203508216,1046.5022612024],description:"Phrygian Chromatic Tonos"},phryg_diat:{frequencies:[261.6255653006,285.40970760065,313.95067836072,348.83408706747,369.35373924791,392.4383479509,448.50096908674,483.00104363188,523.2511306012],description:"Schlesinger's Phrygian Harmonia, a subharmonic series through 13 from 24"},phryg_diatcon:{frequencies:[261.6255653006,285.40970760065,313.95067836072,348.83408706747,369.35373924791,448.50096908674,483.00104363188,523.2511306012],description:"A Phrygian Diatonic with its own trite synemmenon replacing paramese"},phryg_diatinv:{frequencies:[261.6255653006,283.42769574232,305.22982618403,370.63621750918,392.4383479509,436.04260883433,479.64686971777,523.2511306012],description:"Inverted Conjunct Phrygian Harmonia with 17, the local Trite Synemmenon"},phryg_diatsinv:{frequencies:[261.6255653006,283.42769574232,305.22982618403,348.83408706747,370.63621750918,392.4383479509,436.04260883433,479.64686971777,523.2511306012],description:"Inverted Schlesinger's Phrygian Harmonia, a harmonic series from 12 from 24"},phryg_enh:{frequencies:[261.6255653006,267.19206668997,273.00058987889,348.83408706747,392.4383479509,405.0976494977,418.60090448096,523.2511306012],description:"Schlesinger's Phrygian Harmonia in the enharmonic genus"},phryg_enhcon:{frequencies:[261.6255653006,283.42769574232,288.87822835275,294.32876096318,392.4383479509,403.33941317176,414.24047839262,523.2511306012],description:"Harmonic Conjunct Enharmonic Phrygian"},phryg_enhinv:{frequencies:[261.6255653006,327.03195662575,337.93302184661,348.83408706747,392.4383479509,501.44900015948,512.35006538034,523.2511306012],description:"Inverted Schlesinger's Enharmonic Phrygian Harmonia"},phryg_enhinv2:{frequencies:[261.6255653006,267.07609791103,272.52663052146,348.83408706747,392.4383479509,403.33941317176,414.24047839262,523.2511306012],description:"Inverted harmonic form of Schlesinger's Enharmonic Phrygian"},phryg_penta:{frequencies:[261.6255653006,270.64713651786,285.40970760065,348.83408706747,392.4383479509,413.09299784305,448.50096908674,523.2511306012],description:"Schlesinger's Phrygian Harmonia in the pentachromatic genus"},phryg_pis:{frequencies:[261.6255653006,294.32876096318,336.37572681506,362.25078272391,392.4383479509,428.11456140098,470.92601754108,523.2511306012,554.03060887186,588.65752192635,672.75145363011,724.50156544782,784.8766959018,856.22912280196,941.85203508216,1046.5022612024],description:"The Diatonic Perfect Immutable System in the Phrygian Tonos"},phryg_tri1:{frequencies:[261.6255653006,273.00058987889,285.40970760065,348.83408706747,392.4383479509,418.60090448096,448.50096908674,523.2511306012],description:"Schlesinger's Phrygian Harmonia in the chromatic genus"},phryg_tri1inv:{frequencies:[261.6255653006,305.22982618403,327.03195662575,348.83408706747,392.4383479509,479.64686971777,501.44900015948,523.2511306012],description:"Inverted Schlesinger's Chromatic Phrygian Harmonia"},phryg_tri2:{frequencies:[261.6255653006,269.10058145205,285.40970760065,348.83408706747,392.4383479509,409.50088481833,448.50096908674,523.2511306012],description:"Schlesinger's Phrygian Harmonia in the second trichromatic genus"},phryg_tri3:{frequencies:[261.6255653006,269.10058145205,277.01530443593,348.83408706747,392.4383479509,409.50088481833,428.11456140098,523.2511306012],description:"Schlesinger's Phrygian Harmonia in the first trichromatic genus"},phrygian:{frequencies:[261.6255653006,290.69507255622,313.95067836072,327.03195662575,348.83408706747,353.19451315581,387.59343007496,392.4383479509,418.60090448096,436.04260883433,465.11211608996,470.92601754108,523.2511306012],description:"Old Phrygian ??"},phrygian_diat:{frequencies:[261.6255653006,277.01530443593,294.32876096318,336.37572681506,348.83408706747,362.25078272391,376.74081403286,392.4383479509,428.11456140098,448.50096908674,470.92601754108,495.71159741166,523.2511306012,554.03060887186,588.65752192635,672.75145363011,697.66817413493,724.50156544782,753.48162806573,784.8766959018,856.22912280196,897.00193817349,941.85203508216,991.42319482333,1046.5022612024],description:"Phrygian Diatonic Tonos"},phrygian_enh:{frequencies:[261.6255653006,277.01530443593,294.32876096318,303.82323712328,308.80394592858,313.95067836072,348.83408706747,392.4383479509,400.78810003496,405.0976494977,409.50088481833,459.44001711325,523.2511306012],description:"Phrygian Enharmonic Tonos"},phrygian_harm:{frequencies:[261.6255653006,273.00058987889,285.40970760065,299.00064605783,313.95067836072,330.47439827444,348.83408706747,369.35373924791,392.4383479509,418.60090448096,448.50096908674,483.00104363188,523.2511306012],description:"Phrygian Harmonia-Aliquot 24 (flute tuning)"},piano:{frequencies:[261.6255653006,275.93321340298,279.06726965397,294.32876096318,305.22982618403,313.95067836072,327.03195662575,348.83408706747,367.91095120397,372.08969287196,392.4383479509,406.97310157871,418.60090448096,436.04260883433,441.49314144476,457.84473927605,465.11211608996,490.54793493862,515.07533168556,523.2511306012],description:"Enhanced Piano Total Gamut, see 1/1 vol. 8/2 January 1994"},piano7:{frequencies:[261.6255653006,275.93321340298,294.32876096318,305.22982618403,327.03195662575,348.83408706747,367.91095120397,392.4383479509,406.97310157871,441.49314144476,457.84473927605,490.54793493862,523.2511306012],description:"Enhanced piano 7-limit"},pipedum_10:{frequencies:[261.6255653006,279.06726965397,306.59245933664,327.03195662575,348.83408706747,372.08969287196,396.89567239676,431.14564594215,459.88868900496,490.54793493862,523.2511306012],description:"2048/2025 and 34171875/33554432 are homophonic intervals"},pipedum_10a:{frequencies:[261.6255653006,279.06726965397,294.32876096318,327.03195662575,348.83408706747,372.08969287196,392.4383479509,418.60090448096,465.11211608996,490.54793493862,523.2511306012],description:"2048/2025 and 25/24, Manuel Op de Coul, 2001"},pipedum_10b:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,348.83408706747,367.91095120397,392.4383479509,418.60090448096,446.50763144636,490.54793493862,523.2511306012],description:"225/224, 64/63 and 25/24 are homophonic intervals"},pipedum_10c:{frequencies:[261.6255653006,280.31310567921,305.22982618403,327.03195662575,348.83408706747,373.75080757229,392.4383479509,429.2294430713,457.84473927605,490.54793493862,523.2511306012],description:"225/224, 64/63 and 49/48 are homophonic intervals"},pipedum_10d:{frequencies:[261.6255653006,279.06726965397,299.00064605783,318.93402246168,343.38355445704,372.08969287196,392.4383479509,425.24536328225,448.50096908674,488.36772189445,523.2511306012],description:"1029/1024, 2048/2025 and 64/63 are homophonic intervals"},pipedum_10e:{frequencies:[261.6255653006,286.15296204753,305.22982618403,327.03195662575,348.83408706747,367.91095120397,406.97310157871,429.2294430713,465.11211608996,490.54793493862,523.2511306012],description:"2048/2025, 64/63 and 49/48 are homophonic intervals"},pipedum_10f:{frequencies:[261.6255653006,280.31310567921,294.32876096318,327.03195662575,348.83408706747,373.75080757229,392.4383479509,420.46965851882,465.11211608996,490.54793493862,523.2511306012],description:"225/224, 64/63 and 28/27 are homophonic intervals"},pipedum_10g:{frequencies:[261.6255653006,280.31310567921,299.00064605783,325.57848126297,348.83408706747,372.08969287196,398.6675280771,425.24536328225,457.84473927605,490.54793493862,523.2511306012],description:"225/224, 1029/1024 and 2048/2025 are homophonic intervals"},pipedum_10h:{frequencies:[261.6255653006,286.15296204753,305.22982618403,327.03195662575,348.83408706747,373.75080757229,400.61414686654,429.2294430713,457.84473927605,490.54793493862,523.2511306012],description:"225/224, 1029/1024 and 64/63 are homophonic intervals"},pipedum_10i:{frequencies:[261.6255653006,279.06726965397,294.32876096318,321.92208230347,343.38355445704,367.91095120397,392.4383479509,418.60090448096,457.84473927605,488.36772189445,523.2511306012],description:"225/224, 2048/2025 and 49/48 are homophonic intervals"},pipedum_10j:{frequencies:[261.6255653006,269.10058145205,305.22982618403,313.95067836072,348.83408706747,366.27579142084,392.4383479509,418.60090448096,457.84473927605,488.36772189445,523.2511306012],description:"25/24, 28/27 and 49/48, Gene Ward Smith, 2002"},pipedum_10k:{frequencies:[261.6255653006,280.31310567921,299.00064605783,320.49131749323,343.38355445704,367.91095120397,394.1903048614,420.46965851882,455.80987376816,488.36772189445,523.2511306012],description:"2048/2025, 225/224 and 2401/2400"},pipedum_11:{frequencies:[261.6255653006,272.52663052146,282.55561052465,313.95067836072,327.03195662575,363.36884069528,376.74081403286,392.4383479509,436.04260883433,454.2110508691,470.92601754108,523.2511306012],description:"16/15 and 15625/15552 are homophonic intervals"},pipedum_11a:{frequencies:[261.6255653006,269.10058145205,305.22982618403,313.95067836072,322.92069774245,366.27579142084,376.74081403286,381.53728273004,436.04260883433,448.50096908674,508.71637697339,523.2511306012],description:"126/125, 1728/1715 and 10/9, Gene Ward Smith, 2002"},pipedum_12:{frequencies:[261.6255653006,275.93321340298,294.32876096318,306.59245933664,327.03195662575,348.83408706747,367.91095120397,392.4383479509,413.89982010446,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"81/80 and 2048/2025 are homophonic intervals"},pipedum_12a:{frequencies:[261.6255653006,279.06726965397,297.67175429757,306.59245933664,327.03195662575,348.83408706747,372.08969287196,392.4383479509,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"81/80 and 2048/2025 are homophonic intervals"},pipedum_12b:{frequencies:[261.6255653006,274.70684356563,299.00064605783,313.95067836072,320.49131749323,348.83408706747,366.27579142084,392.4383479509,418.60090448096,448.50096908674,457.84473927605,488.36772189445,523.2511306012],description:"64/63, 50/49 comma and 36/35 chroma"},pipedum_12c:{frequencies:[261.6255653006,280.31310567921,294.32876096318,315.35224388912,327.03195662575,348.83408706747,367.91095120397,392.4383479509,420.46965851882,448.50096908674,457.84473927605,490.54793493862,523.2511306012],description:"225/224, 64/63 and 36/35 are homophonic intervals"},pipedum_12d:{frequencies:[261.6255653006,280.31310567921,293.02063313667,313.95067836072,327.03195662575,350.39138209902,366.27579142084,392.4383479509,418.60090448096,448.50096908674,457.84473927605,490.54793493862,523.2511306012],description:"50/49, 128/125 and 225/224 are homophonic intervals"},pipedum_12e:{frequencies:[261.6255653006,280.31310567921,293.02063313667,313.95067836072,327.03195662575,350.39138209902,373.75080757229,392.4383479509,418.60090448096,439.53094970501,467.18850946536,500.55911728431,523.2511306012],description:"50/49, 225/224 and 3136/3125 are homophonic intervals"},pipedum_12f:{frequencies:[261.6255653006,273.74326726486,293.02063313667,313.95067836072,327.03195662575,350.39138209902,366.27579142084,392.4383479509,408.78994578219,437.98922762377,468.83301301868,490.54793493862,523.2511306012],description:"128/125, 3136/3125 and 703125/702464 are homophonic intervals"},pipedum_12g:{frequencies:[261.6255653006,279.06726965397,286.15296204753,306.59245933664,327.03195662575,348.83408706747,366.27579142084,390.69417751556,408.78994578219,437.98922762377,457.84473927605,488.36772189445,523.2511306012],description:"50/49, 225/224 and 28672/28125 are homophonic intervals"},pipedum_12h:{frequencies:[261.6255653006,275.93321340298,291.02331101095,310.42486507835,330.74639366397,348.83408706747,367.91095120397,392.4383479509,413.89982010446,436.53496651643,465.11211608996,496.11959049595,523.2511306012],description:"2048/2025 and 67108864/66430125, Gene Ward Smith, 2004"},pipedum_12i:{frequencies:[261.6255653006,271.31540105247,294.32876096318,305.22982618403,336.37572681506,348.83408706747,378.42269266694,392.4383479509,406.97310157871,441.49314144476,465.11211608996,504.56359022259,523.2511306012],description:"64/63 and 6561/6272, Gene Ward Smith, 2004"},pipedum_12j:{frequencies:[261.6255653006,283.8170195002,285.83021674664,310.07474405997,336.37572681506,348.83408706747,378.42269266694,392.4383479509,413.43299207996,448.50096908674,465.11211608996,504.56359022259,523.2511306012],description:"6561/6272 and 59049/57344"},pipedum_12k:{frequencies:[261.6255653006,271.31540105247,294.32876096318,305.22982618403,336.37572681506,348.83408706747,356.10146388137,392.4383479509,406.97310157871,448.50096908674,457.84473927605,474.80195184183,523.2511306012],description:"64/63 and 729/686, Gene Ward Smith, 2004"},pipedum_12l:{frequencies:[261.6255653006,276.16031892841,294.32876096318,310.68035879446,331.39238271409,348.83408706747,368.21375857121,392.4383479509,414.24047839262,441.49314144476,465.11211608996,497.08857407114,523.2511306012],description:"81/80, 361/360 and 513/512, Gene Ward Smith"},pipedum_13:{frequencies:[261.6255653006,276.76092858245,287.78812183066,309.14739649778,327.03195662575,345.95116072807,359.73515228832,380.54627680087,408.78994578219,418.60090448096,449.66894036041,475.68284600109,494.63583439645,523.2511306012],description:"33275/32768 and 163840/161051 are homophonic intervals. Op de Coul, 2001"},pipedum_13a:{frequencies:[261.6255653006,266.96486255163,293.02063313667,299.00064605783,327.03195662575,334.88072358477,366.27579142084,373.75080757229,408.78994578219,418.60090448096,457.84473927605,467.18850946536,512.78610798918,523.2511306012],description:"15/14, 3136/3125, 2401/2400, Gene Ward Smith, 2002"},pipedum_13b:{frequencies:[261.6255653006,267.90457886781,293.02063313667,299.00064605783,327.03195662575,334.88072358477,366.27579142084,373.75080757229,408.78994578219,418.60090448096,457.84473927605,467.18850946536,510.98743222773,523.2511306012],description:"15/14, 3136/3125, 6144/6125, Gene Ward Smith, 2002"},pipedum_13bp:{frequencies:[261.6255653006,282.55561052465,305.16005936662,336.45263027341,363.36884069528,392.4383479509,436.04260883433,470.92601754108,508.60009894437,545.05326104292,605.61473449213,654.0639132515,706.38902631162,784.8766959018],description:"78732/78125 and 250/243, twelfth based, Manuel Op de Coul, 2003"},pipedum_13bp2:{frequencies:[261.6255653006,290.69507255622,313.95067836072,348.83408706747,376.74081403286,392.4383479509,436.04260883433,470.92601754108,523.2511306012,565.1112210493,627.90135672144,678.13346525916,726.73768139056,784.8766959018],description:"250/243 and 648/625, twelfth based, Manuel Op de Coul, 2003"},pipedum_13c:{frequencies:[261.6255653006,267.07609791103,293.02063313667,299.00064605783,327.03195662575,334.88072358477,366.27579142084,373.75080757229,408.78994578219,418.60090448096,457.84473927605,467.18850946536,512.57253609913,523.2511306012],description:"15/14, 2401/2400, 6144/6125, Gene Ward Smith, 2002"},pipedum_13d:{frequencies:[261.6255653006,281.04308772525,287.78812183066,309.14739649778,327.03195662575,334.88072358477,359.73515228832,380.54627680087,408.78994578219,418.60090448096,449.66894036041,475.68284600109,494.63583439645,523.2511306012],description:"125/121 and 33275/32768, Joe Monzo, 2003"},pipedum_13e:{frequencies:[261.6255653006,276.76092858245,287.78812183066,304.4370214407,327.03195662575,334.88072358477,359.73515228832,380.54627680087,408.78994578219,418.60090448096,449.66894036041,475.68284600109,494.63583439645,523.2511306012],description:"33275/32768 and 163840/161051, Manuel Op de Coul, 2004"},pipedum_14:{frequencies:[261.6255653006,274.70684356563,284.76252005507,305.22982618403,320.49131749323,336.37572681506,348.83408706747,373.90653707544,392.4383479509,406.97310157871,427.14378008261,448.50096908674,480.73697623985,498.33441009638,523.2511306012],description:"81/80, 49/48 and 2401/2400, Paul Erlich, TL 17-1-2001"},pipedum_14a:{frequencies:[261.6255653006,274.70684356563,284.8811711051,305.22982618403,320.35783506196,336.37572681506,348.83408706747,366.27579142084,392.4383479509,406.97310157871,427.32175665765,448.50096908674,480.53675259294,498.33441009638,523.2511306012],description:"81/80, 50/49 and 2401/2400, Paul Erlich, 2001"},pipedum_14b:{frequencies:[261.6255653006,274.70684356563,294.32876096318,305.22982618403,313.95067836072,339.14425131559,353.19451315581,366.27579142084,392.4383479509,406.97310157871,418.60090448096,457.84473927605,470.92601754108,508.71637697339,523.2511306012],description:"245/243, 81/80 comma and 25/24 chroma"},pipedum_14c:{frequencies:[261.6255653006,280.31310567921,282.55561052465,305.22982618403,327.03195662575,336.37572681506,363.36884069528,366.27579142084,392.4383479509,403.65087217807,436.04260883433,467.18850946536,470.92601754108,508.71637697339,523.2511306012],description:"245/243, 50/49 comma and 25/24 chroma"},pipedum_15:{frequencies:[261.6255653006,272.52663052146,290.69507255622,301.39265122629,313.95067836072,327.03195662575,348.83408706747,363.36884069528,376.74081403286,392.4383479509,418.60090448096,436.04260883433,454.2110508691,470.92601754108,502.32108537715,523.2511306012],description:"126/125, 128/125 and 875/864, 5-limit, Paul Erlich, 2001"},pipedum_15a:{frequencies:[261.6255653006,274.70684356563,290.69507255622,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,381.53728273004,392.4383479509,418.60090448096,436.04260883433,457.84473927605,488.36772189445,502.32108537715,523.2511306012],description:"Septimal version of pipedum_15, Manuel Op de Coul, 2001"},pipedum_15b:{frequencies:[261.6255653006,274.70684356563,286.15296204753,299.00064605783,311.45900631024,327.03195662575,343.38355445704,357.69120255941,382.72082695402,398.6675280771,418.60090448096,439.53094970501,457.84473927605,478.40103369253,498.33441009638,523.2511306012],description:"126/125, 128/125 and 1029/1024, Paul Erlich, 2001"},pipedum_15c:{frequencies:[261.6255653006,274.70684356563,284.76252005507,299.00064605783,313.95067836072,327.03195662575,341.71502406609,358.80077526939,381.53728273004,400.61414686654,418.60090448096,436.04260883433,457.84473927605,480.73697623985,498.33441009638,523.2511306012],description:"49/48, 126/125 and 1029/1024, Paul Erlich, 2001"},pipedum_15d:{frequencies:[261.6255653006,274.70684356563,286.15296204753,299.00064605783,313.95067836072,327.03195662575,343.38355445704,360.55273217989,379.68336007343,398.6675280771,418.60090448096,436.04260883433,457.84473927605,478.40103369253,498.33441009638,523.2511306012],description:"64/63, 126/125 and 1029/1024, Paul Erlich, 2001"},pipedum_15e:{frequencies:[261.6255653006,273.37201925287,286.15296204753,299.00064605783,313.95067836072,332.22294006425,343.38355445704,358.80077526939,381.53728273004,398.6675280771,412.06026534844,436.04260883433,457.84473927605,478.40103369253,500.76768358318,523.2511306012],description:"64/63, 875/864 and 1029/1024, Paul Erlich, 2001"},pipedum_15f:{frequencies:[261.6255653006,274.70684356563,290.69507255622,305.22982618403,313.95067836072,327.03195662575,348.83408706747,366.27579142084,387.59343007496,392.4383479509,418.60090448096,436.04260883433,465.11211608996,488.36772189445,490.54793493862,523.2511306012],description:"126/125, 64/63 comma and 28/27 chroma"},pipedum_15g:{frequencies:[261.6255653006,279.06726965397,290.69507255622,294.32876096318,313.95067836072,327.03195662575,348.83408706747,363.36884069528,376.74081403286,392.4383479509,418.60090448096,436.04260883433,465.11211608996,470.92601754108,502.32108537715,523.2511306012],description:"128/125 and 250/243"},pipedum_16:{frequencies:[261.6255653006,274.70684356563,286.15296204753,299.00064605783,313.95067836072,327.03195662575,343.38355445704,355.95315006884,373.75080757229,384.58958099188,400.61414686654,418.60090448096,439.53094970501,457.84473927605,480.73697623985,498.33441009638,523.2511306012],description:"50/49, 126/125 and 1029/1024, Paul Erlich, 2001"},pipedum_16a:{frequencies:[261.6255653006,272.52663052146,283.88190679319,301.39265122629,313.95067836072,327.03195662575,340.65828815182,354.85238349148,363.36884069528,385.78259356965,401.85686830172,418.60090448096,436.04260883433,454.2110508691,482.22824196207,502.32108537715,523.2511306012],description:"3125/3072 and 1990656/1953125, OdC 2004"},pipedum_17:{frequencies:[261.6255653006,269.10058145205,286.15296204753,294.32876096318,305.22982618403,318.93402246168,336.37572681506,348.83408706747,358.80077526939,381.53728273004,392.4383479509,406.97310157871,429.2294430713,448.50096908674,465.11211608996,478.40103369253,508.71637697339,523.2511306012],description:"245/243, 64/63 and 525/512, Paul Erlich, 2001"},pipedum_17a:{frequencies:[261.6255653006,271.31540105247,286.15296204753,296.75121990114,305.22982618403,318.93402246168,336.37572681506,348.83408706747,358.80077526939,381.53728273004,392.4383479509,406.97310157871,429.2294430713,448.50096908674,461.31528248922,478.40103369253,504.56359022259,523.2511306012],description:"245/243, 525/512 and 1728/1715, Paul Erlich, 2001"},pipedum_17b:{frequencies:[261.6255653006,264.89588486686,286.15296204753,294.32876096318,305.22982618403,327.03195662575,339.14425131559,343.38355445704,367.91095120397,381.53728273004,392.4383479509,406.97310157871,436.04260883433,441.49314144476,457.84473927605,490.54793493862,508.71637697339,523.2511306012],description:"245/243, 64/63 comma and 25/24 chroma"},pipedum_17c:{frequencies:[261.6255653006,273.6806973752,285.83021674664,299.00064605783,310.07474405997,321.55899383997,336.37572681506,348.83408706747,364.90759650026,378.42269266694,392.4383479509,413.43299207996,428.74532511996,448.50096908674,465.11211608996,486.54346200035,504.56359022259,523.2511306012],description:"1605632/1594323 and 177147/175616, Manuel Op de Coul, 2002"},pipedum_17d:{frequencies:[261.6255653006,274.08392555301,284.23518205497,299.00064605783,308.34441624714,319.76457981184,336.37572681506,348.83408706747,365.44523407068,373.05867644715,392.4383479509,411.12588832951,426.35277308246,448.50096908674,465.11211608996,479.64686971777,504.56359022259,523.2511306012],description:"243/242, 99/98 and 64/63, Manuel Op de Coul, 2002"},pipedum_17e:{frequencies:[261.6255653006,271.31540105247,286.15296204753,296.75121990114,310.07474405997,321.92208230347,336.37572681506,348.83408706747,362.16234259141,378.42269266694,395.66829320152,413.43299207996,429.2294430713,445.12682985172,465.11211608996,482.88312345521,504.56359022259,523.2511306012],description:"245/243, 1728/1715 and 32805/32768, Manuel Op de Coul, 2003"},pipedum_17f:{frequencies:[261.6255653006,269.80136421624,285.40970760065,294.32876096318,310.07474405997,319.76457981184,331.11985608357,348.83408706747,359.73515228832,380.54627680087,392.4383479509,413.43299207996,428.11456140098,441.49314144476,465.11211608996,479.64686971777,507.3950357345,523.2511306012],description:"243/242 and 8192/8019, Manuel Op de Coul"},pipedum_17g:{frequencies:[261.6255653006,274.08392555301,285.40970760065,299.00064605783,305.22982618403,319.76457981184,336.37572681506,348.83408706747,359.73515228832,380.54627680087,392.4383479509,406.97310157871,428.11456140098,448.50096908674,457.84473927605,479.64686971777,499.46698830115,523.2511306012],description:"243/242, 896/891 and 99/98, Manuel Op de Coul"},pipedum_18:{frequencies:[261.6255653006,272.52663052146,280.31310567921,296.75121990114,305.22982618403,317.94773560837,327.03195662575,340.65828815182,350.39138209902,379.84156147346,390.69417751556,406.97310157871,418.60090448096,436.04260883433,448.50096908674,474.80195184183,488.36772189445,508.71637697339,523.2511306012],description:"875/864, 686/675 and 128/125, Paul Erlich, 2001"},pipedum_18a:{frequencies:[261.6255653006,269.10058145205,280.31310567921,293.02063313667,305.22982618403,313.95067836072,327.03195662575,341.85740532612,356.10146388137,366.27579142084,384.42940207435,400.44729382745,418.60090448096,436.04260883433,448.50096908674,467.18850946536,488.36772189445,508.71637697339,523.2511306012],description:"875/864, 686/675 and 50/49, Paul Erlich, 2001"},pipedum_18b:{frequencies:[261.6255653006,272.52663052146,280.31310567921,296.75121990114,305.22982618403,317.94773560837,327.03195662575,346.20975655133,356.10146388137,373.75080757229,384.42940207435,400.44729382745,418.60090448096,436.04260883433,448.50096908674,467.18850946536,488.36772189445,508.71637697339,523.2511306012],description:"1728/1715, 875/864 and 686/675, Paul Erlich, 2001"},pipedum_19:{frequencies:[261.6255653006,272.52663052146,282.55561052465,290.69507255622,301.39265122629,313.95067836072,327.03195662575,339.06673262958,348.83408706747,363.36884069528,376.74081403286,392.4383479509,401.85686830172,418.60090448096,436.04260883433,452.08897683944,470.92601754108,484.4917875937,502.32108537715,523.2511306012],description:"81/80 and 15625/15552 are homophonic intervals, inverse of Mandelbaum"},pipedum_19a:{frequencies:[261.6255653006,271.25338610366,282.55561052465,294.32876096318,301.39265122629,313.95067836072,327.03195662575,339.06673262958,353.19451315581,361.67118147155,376.74081403286,392.4383479509,408.78994578219,416.64520105522,434.00541776586,452.08897683944,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"3125/3072 and 15625/15552 are homophonic intervals"},pipedum_19b:{frequencies:[261.6255653006,272.52663052146,282.55561052465,290.69507255622,302.80736724606,313.95067836072,327.03195662575,339.06673262958,348.83408706747,363.36884069528,376.74081403286,392.4383479509,403.74315632809,418.60090448096,436.04260883433,452.08897683944,470.92601754108,484.4917875937,502.32108537715,523.2511306012],description:"15625/15552 and 78732/78125, Paul Erlich, TL 19-2-2001"},pipedum_19c:{frequencies:[261.6255653006,269.10058145205,280.31310567921,290.69507255622,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,363.36884069528,376.74081403286,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,470.92601754108,488.36772189445,508.71637697339,523.2511306012],description:"Periodicity block by Paul Erlich, 2001"},pipedum_19d:{frequencies:[261.6255653006,271.31540105247,280.31310567921,290.69507255622,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,363.36884069528,376.74081403286,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,470.92601754108,488.36772189445,504.56359022259,523.2511306012],description:"Periodicity block by Paul Erlich, 2001"},pipedum_19e:{frequencies:[261.6255653006,269.10058145205,280.31310567921,287.04062021552,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,358.80077526939,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,476.92160341255,488.36772189445,508.71637697339,523.2511306012],description:"Periodicity block by Paul Erlich, 2001"},pipedum_19f:{frequencies:[261.6255653006,269.10058145205,279.06726965397,287.04062021552,305.22982618403,315.35224388912,327.03195662575,336.37572681506,348.83408706747,358.80077526939,381.53728273004,392.4383479509,406.97310157871,418.60090448096,434.10464168396,448.50096908674,476.92160341255,490.54793493862,508.71637697339,523.2511306012],description:"Periodicity block by Paul Erlich, 2001"},pipedum_19g:{frequencies:[261.6255653006,269.10058145205,280.31310567921,288.32205155576,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,360.4025644447,379.84156147346,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,474.80195184183,488.36772189445,508.71637697339,523.2511306012],description:"Periodicity block by Paul Erlich, 2001"},pipedum_19h:{frequencies:[261.6255653006,274.70684356563,286.15296204753,294.32876096318,305.22982618403,313.95067836072,327.03195662575,343.38355445704,353.19451315581,366.27579142084,381.53728273004,392.4383479509,412.06026534844,415.27867508032,436.04260883433,457.84473927605,470.92601754108,490.54793493862,508.71637697339,523.2511306012],description:"126/125, 81/80 comma and 49/48 chroma"},pipedum_19i:{frequencies:[261.6255653006,275.93321340298,286.15296204753,294.32876096318,305.22982618403,321.92208230347,327.03195662575,343.38355445704,348.83408706747,367.91095120397,381.53728273004,392.4383479509,406.97310157871,429.2294430713,436.04260883433,457.84473927605,465.11211608996,490.54793493862,515.07533168556,523.2511306012],description:"225/224, 81/80 comma and 49/48 chroma"},pipedum_19j:{frequencies:[261.6255653006,266.96486255163,286.15296204753,293.02063313667,299.00064605783,320.49131749323,327.03195662575,333.70607818954,358.95027559242,366.27579142084,373.75080757229,381.37837507376,410.22888639134,418.60090448096,427.14378008261,457.84473927605,467.18850946536,478.40103369253,512.78610798918,523.2511306012],description:"21/20, 3136/3125 and 2401/2400, Gene Ward Smith, 2002"},pipedum_19k:{frequencies:[261.6255653006,267.90457886781,286.15296204753,293.02063313667,299.00064605783,320.49131749323,327.03195662575,334.88072358477,357.69120255941,366.27579142084,373.75080757229,382.72082695402,408.78994578219,418.60090448096,427.14378008261,457.84473927605,467.18850946536,478.40103369253,510.98743222773,523.2511306012],description:"21/20, 3136/3125 and 6144/6125, Gene Ward Smith, 2002"},pipedum_19l:{frequencies:[261.6255653006,267.07609791103,286.15296204753,293.02063313667,299.00064605783,320.49131749323,327.03195662575,333.84512238879,358.80077526939,366.27579142084,373.75080757229,381.53728273004,410.05802887931,418.60090448096,427.14378008261,457.84473927605,467.18850946536,478.40103369253,512.57253609913,523.2511306012],description:"21/20, 2401/2400 and 6144/6125, Gene Ward Smith, 2002"},pipedum_19m:{frequencies:[261.6255653006,269.10058145205,293.02063313667,299.00064605783,305.22982618403,313.95067836072,317.94773560837,348.83408706747,358.80077526939,366.27579142084,373.75080757229,406.97310157871,418.60090448096,430.56093032327,436.04260883433,448.50096908674,488.36772189445,502.32108537715,508.71637697339,523.2511306012],description:"126/125, 1728/1715 and 16/15, Gene Ward Smith, 2002"},pipedum_19n:{frequencies:[261.6255653006,267.07609791103,274.70684356563,280.31310567921,305.22982618403,313.95067836072,320.49131749323,327.03195662575,333.70607818954,366.27579142084,373.75080757229,381.53728273004,392.4383479509,427.32175665765,436.04260883433,448.50096908674,457.84473927605,467.18850946536,512.78610798918,523.2511306012],description:"126/125, 2401/2400 and 16/15, Gene Ward Smith, 2002"},pipedum_19o:{frequencies:[261.6255653006,272.52663052146,280.31310567921,290.69507255622,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,363.36884069528,376.74081403286,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,470.92601754108,488.36772189445,502.32108537715,523.2511306012],description:"225/224, 3136/3125 and 4375/4374, OdC 2000"},pipedum_21:{frequencies:[261.6255653006,267.07609791103,280.31310567921,284.8811711051,299.00064605783,305.22982618403,320.35783506196,327.03195662575,341.85740532612,348.83408706747,366.27579142084,373.75080757229,392.4383479509,400.44729382745,418.60090448096,427.32175665765,448.50096908674,457.84473927605,480.53675259294,488.36772189445,512.57253609913,523.2511306012],description:"36/35, 225/224 and 2401/2400, P. Erlich, 2001. Just PB version of miracle1"},pipedum_21a:{frequencies:[261.6255653006,265.7783520514,286.15296204753,290.69507255622,299.00064605783,305.22982618403,327.03195662575,332.22294006425,343.38355445704,348.83408706747,373.75080757229,381.53728273004,392.4383479509,398.6675280771,429.2294430713,436.04260883433,448.50096908674,457.84473927605,490.54793493862,498.33441009638,515.07533168556,523.2511306012],description:"1029/1024, 81/80 comma and 25/24 chroma"},pipedum_21b:{frequencies:[261.6255653006,267.07609791103,279.06726965397,284.8811711051,299.00064605783,305.22982618403,318.93402246168,325.57848126297,343.38355445704,348.83408706747,366.27579142084,372.08969287196,392.4383479509,398.6675280771,418.60090448096,427.32175665765,448.50096908674,457.84473927605,478.40103369253,488.36772189445,496.11959049595,523.2511306012],description:"36/35, 225/224 and 1029/1024, Gene Ward Smith, 2002"},pipedum_21c:{frequencies:[261.6255653006,269.46602871384,279.06726965397,287.4304306281,297.67175429757,306.59245933664,317.51653791741,327.03195662575,344.91651675372,348.83408706747,367.91095120397,372.08969287196,392.4383479509,396.89567239676,418.60090448096,431.14564594215,446.50763144636,459.88868900496,476.27480687611,490.54793493862,508.02646066786,523.2511306012],description:"First 128/125 and ampersand comma Fokker block"},pipedum_22:{frequencies:[261.6255653006,267.90457886781,279.06726965397,285.76488412567,299.40669857094,306.59245933664,313.95067836072,327.03195662575,334.88072358477,348.83408706747,357.20610515709,365.77905168086,383.2405741708,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,457.22381460107,479.0507177135,490.54793493862,510.98743222773,523.2511306012],description:"3125/3072 and 2109375/2097152 are homophonic intervals"},pipedum_22a:{frequencies:[261.6255653006,267.90457886781,279.06726965397,287.4304306281,297.67175429757,306.59245933664,317.51653791741,327.03195662575,334.88072358477,348.83408706747,357.20610515709,372.08969287196,381.01984550089,392.4383479509,408.78994578219,418.60090448096,436.04260883433,446.50763144636,459.88868900496,476.27480687611,490.54793493862,508.02646066786,523.2511306012],description:"2048/2025 and 2109375/2097152 are homophonic intervals"},pipedum_22b:{frequencies:[261.6255653006,271.31540105247,279.06726965397,286.15296204753,294.32876096318,305.22982618403,313.95067836072,327.03195662575,339.14425131559,348.83408706747,357.69120255941,367.91095120397,381.53728273004,392.4383479509,406.97310157871,418.60090448096,429.2294430713,441.49314144476,457.84473927605,470.92601754108,490.54793493862,508.71637697339,523.2511306012],description:'2025/2048, 245/243 and 64/63. P. Erlich "7-limit Indian", TL 19-12-2000'},pipedum_22b2:{frequencies:[261.6255653006,271.31540105247,279.06726965397,286.15296204753,294.32876096318,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,358.80077526939,367.91095120397,381.53728273004,392.4383479509,406.97310157871,418.60090448096,429.2294430713,448.50096908674,465.11211608996,478.40103369253,490.54793493862,504.56359022259,523.2511306012],description:"Version of pipedum_22b with other shape, Paul Erlich"},pipedum_22c:{frequencies:[261.6255653006,267.07609791103,274.70684356563,290.69507255622,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,358.80077526939,366.27579142084,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,498.33441009638,512.57253609913,523.2511306012],description:"1728/1715, 64/63 and 50/49, Paul Erlich, 2001"},pipedum_22d:{frequencies:[261.6255653006,269.10058145205,274.70684356563,290.69507255622,299.00064605783,305.22982618403,313.95067836072,327.03195662575,333.84512238879,348.83408706747,358.80077526939,366.27579142084,381.53728273004,392.4383479509,410.05802887931,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,498.33441009638,508.71637697339,523.2511306012],description:"1728/1715, 875/864 and 64/63, Paul Erlich, 2001"},pipedum_22e:{frequencies:[261.6255653006,269.10058145205,274.70684356563,290.69507255622,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,356.10146388137,366.27579142084,384.42940207435,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,470.92601754108,498.33441009638,508.71637697339,523.2511306012],description:"1728/1715, 245/243 and 50/49, Paul Erlich, 2001"},pipedum_22f:{frequencies:[261.6255653006,269.10058145205,276.78916949353,290.69507255622,296.75121990114,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,358.80077526939,366.27579142084,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,461.31528248922,470.92601754108,494.58536650191,508.71637697339,523.2511306012],description:"1728/1715, 245/243 and 875/864, Paul Erlich, 2001"},pipedum_22g:{frequencies:[261.6255653006,267.07609791103,279.06726965397,286.15296204753,299.00064605783,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,358.80077526939,366.27579142084,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,457.84473927605,478.40103369253,490.54793493862,512.57253609913,523.2511306012],description:"225/224, 1728/1715 and 64/63, Paul Erlich, 2001"},pipedum_22h:{frequencies:[261.6255653006,269.10058145205,280.31310567921,287.04062021552,296.75121990114,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,358.80077526939,366.27579142084,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,461.31528248922,476.92160341255,488.36772189445,508.71637697339,523.2511306012],description:"225/224, 1728/1715 and 875/864, Paul Erlich, 2001"},pipedum_22i:{frequencies:[261.6255653006,269.10058145205,279.06726965397,288.32205155576,296.75121990114,305.22982618403,313.95067836072,327.03195662575,336.37572681506,348.83408706747,358.80077526939,366.27579142084,381.53728273004,392.4383479509,406.97310157871,418.60090448096,436.04260883433,448.50096908674,461.31528248922,474.80195184183,490.54793493862,508.71637697339,523.2511306012],description:"1728/1715, 245/243 and 245/243, Paul Erlich, 2001"},pipedum_22j:{frequencies:[261.6255653006,271.31540105247,280.31310567921,290.69507255622,299.00064605783,305.22982618403,320.35783506196,332.22294006425,336.37572681506,348.83408706747,353.19451315581,373.75080757229,387.59343007496,392.4383479509,406.97310157871,427.14378008261,436.04260883433,448.50096908674,465.11211608996,480.53675259294,498.33441009638,504.56359022259,523.2511306012],description:"50/49, 64/63 and 245/243, Gene Ward Smith, 2002"},pipedum_22k:{frequencies:[261.6255653006,272.52663052146,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,334.88072358477,348.83408706747,359.73515228832,367.91095120397,380.54627680087,392.4383479509,408.78994578219,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,502.32108537715,523.2511306012],description:"121/120, 2048/2025 and 4125/4096, Manuel Op de Coul"},pipedum_22l:{frequencies:[261.6255653006,275.62199471997,284.23518205497,290.69507255622,303.18419419197,310.07474405997,319.76457981184,330.74639366397,341.08221846597,348.83408706747,363.82103303037,372.08969287196,387.59343007496,404.24559225596,413.43299207996,426.35277308246,440.99519155196,454.77629128796,465.11211608996,485.09471070715,496.11959049595,511.62332769895,523.2511306012],description:"121/120, 736/729, 100/99 and 2048/2025"},pipedum_23:{frequencies:[261.6255653006,271.25338610366,276.85245005354,287.04062021552,297.60371503945,302.80736724606,313.95067836072,325.50406332439,332.22294006425,344.44874425862,348.83408706747,363.36884069528,376.74081403286,384.51729174103,398.6675280771,413.33849311034,420.56578784176,436.04260883433,452.08897683944,461.42075008924,478.40103369253,496.00619173241,504.67894541011,523.2511306012],description:"6144/6125, 15625/1552 and 5103/5000, Manuel Op de Coul, 2003"},pipedum_24:{frequencies:[261.6255653006,267.57160087561,275.93321340298,285.40970760065,290.69507255622,299.7792935736,310.07474405997,319.76457981184,327.03195662575,338.26335715633,348.83408706747,356.76213450082,367.91095120397,380.54627680087,392.4383479509,401.35740131342,413.43299207996,426.35277308246,436.04260883433,449.66894036041,465.11211608996,479.64686971777,490.54793493862,507.3950357345,523.2511306012],description:"121/120, 16384/16335 and 32805/32768. Manuel Op de Coul, 2001"},pipedum_24a:{frequencies:[261.6255653006,272.52663052146,274.70684356563,286.15296204753,294.32876096318,305.22982618403,313.95067836072,321.92208230347,327.03195662575,343.38355445704,348.83408706747,366.27579142084,367.91095120397,381.53728273004,392.4383479509,412.06026534844,418.60090448096,429.2294430713,436.04260883433,457.84473927605,470.92601754108,488.36772189445,490.54793493862,515.07533168556,523.2511306012],description:"49/48, 81/80 and 128/125, Gene Ward Smith, 2002"},pipedum_24b:{frequencies:[261.6255653006,271.31540105247,275.62199471997,289.72987407313,294.32876096318,305.22982618403,310.07474405997,325.94610833227,331.11985608357,343.38355445704,348.83408706747,361.75386806997,372.50983809402,386.30649876417,392.4383479509,406.97310157871,413.43299207996,434.59481110969,441.49314144476,457.84473927605,465.11211608996,482.33849075995,496.67978412536,515.07533168556,523.2511306012],description:"49/48, 81/80 and 531441/524288"},pipedum_25:{frequencies:[261.6255653006,268.26840191956,274.70684356563,281.29980781121,291.99281841585,299.00064605783,306.17666156322,313.95067836072,327.03195662575,335.33550239945,343.38355445704,351.62475976401,364.99102301981,373.75080757229,382.72082695402,392.4383479509,408.78994578219,418.60090448096,429.2294430713,439.53094970501,447.89271634391,467.18850946536,478.40103369253,490.54793493862,502.32108537715,523.2511306012],description:"65625/65536, 1029/1024 and 3125/3072, Manuel Op de Coul, 2003"},pipedum_26:{frequencies:[261.6255653006,267.07609791103,274.70684356563,286.15296204753,292.89859205665,299.00064605783,305.22982618403,313.95067836072,327.03195662575,333.84512238879,341.71502406609,348.83408706747,358.80077526939,366.27579142084,381.53728273004,392.4383479509,400.61414686654,410.05802887931,418.60090448096,436.04260883433,448.50096908674,457.84473927605,467.3831713443,478.40103369253,498.33441009638,512.57253609913,523.2511306012],description:"1029/1024, 1728/1715 and 50/49, Paul Erlich, 2001"},pipedum_26a:{frequencies:[261.6255653006,272.52663052146,274.70684356563,286.15296204753,294.32876096318,305.22982618403,306.59245933664,321.92208230347,325.57848126297,327.03195662575,343.38355445704,348.83408706747,366.27579142084,367.91095120397,381.53728273004,392.4383479509,408.78994578219,412.06026534844,429.2294430713,436.04260883433,457.84473927605,459.88868900496,465.11211608996,488.36772189445,490.54793493862,515.07533168556,523.2511306012],description:"50/49, 81/80 and 525/512, Gene Ward Smith, 2002"},pipedum_26b:{frequencies:[261.6255653006,267.90457886781,272.52663052146,279.06726965397,290.69507255622,301.39265122629,306.59245933664,313.95067836072,327.03195662575,334.88072358477,340.65828815182,348.83408706747,357.20610515709,363.36884069528,376.74081403286,392.4383479509,401.85686830172,408.78994578219,418.60090448096,436.04260883433,446.50763144636,454.2110508691,470.92601754108,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"81/80 and 78125/73728, Gene Ward Smith, 2005"},pipedum_27:{frequencies:[261.6255653006,271.20240005245,278.95104005395,284.76252005507,292.89859205665,299.00064605783,307.54352165948,316.40280006119,325.44288006294,332.22294006425,341.71502406609,351.47831046798,358.80077526939,369.05222599138,379.68336007343,390.53145607553,398.6675280771,410.05802887931,418.60090448096,430.56093032327,442.86267118965,455.62003208812,468.63774729064,478.40103369253,492.06963465517,502.32108537715,516.67311638793,523.2511306012],description:"126/125, 1728/1715 and 4000/3969 are homophonic intervals, Paul Erlich"},pipedum_27a:{frequencies:[261.6255653006,269.10058145205,274.70684356563,280.31310567921,290.69507255622,299.00064605783,305.22982618403,313.95067836072,320.49131749323,327.03195662575,336.37572681506,348.83408706747,358.80077526939,366.27579142084,373.75080757229,381.53728273004,392.4383479509,406.97310157871,418.60090448096,427.14378008261,436.04260883433,448.50096908674,457.84473927605,470.92601754108,488.36772189445,498.33441009638,508.71637697339,523.2511306012],description:"126/126, 1728/1715 and 64/63, Paul Erlich, 2001"},pipedum_27b:{frequencies:[261.6255653006,266.96486255163,272.52663052146,280.31310567921,293.02063313667,299.00064605783,305.22982618403,313.95067836072,320.49131749323,327.03195662575,333.70607818954,348.83408706747,358.80077526939,366.27579142084,373.75080757229,381.53728273004,392.4383479509,410.22888639134,418.60090448096,427.14378008261,436.04260883433,448.50096908674,457.84473927605,467.18850946536,488.36772189445,502.32108537715,512.78610798918,523.2511306012],description:"2401/2400, 126/125 and 128/125, Paul Erlich, 2001"},pipedum_27c:{frequencies:[261.6255653006,266.96486255163,274.70684356563,280.31310567921,290.69507255622,299.00064605783,305.22982618403,313.95067836072,320.35783506196,327.03195662575,336.37572681506,348.83408706747,356.10146388137,366.27579142084,373.75080757229,384.42940207435,392.4383479509,406.97310157871,418.60090448096,427.32175665765,436.04260883433,448.50096908674,457.84473927605,470.92601754108,488.36772189445,498.33441009638,512.78610798918,523.2511306012],description:"2401/2400, 126/125 and 686/675, Paul Erlich, 2001"},pipedum_27d:{frequencies:[261.6255653006,266.96486255163,274.70684356563,280.31310567921,290.69507255622,299.00064605783,305.22982618403,313.95067836072,320.49131749323,327.03195662575,336.37572681506,348.83408706747,355.95315006884,366.27579142084,373.75080757229,384.58958099188,392.4383479509,406.97310157871,418.60090448096,427.14378008261,436.04260883433,448.50096908674,457.84473927605,470.92601754108,488.36772189445,498.33441009638,512.78610798918,523.2511306012],description:"2401/2400, 126/125 and 64/63, Paul Erlich, 2001"},pipedum_27e:{frequencies:[261.6255653006,269.10058145205,274.70684356563,282.55561052465,290.69507255622,299.00064605783,305.22982618403,313.95067836072,320.35783506196,329.64821227876,336.37572681506,348.83408706747,356.10146388137,366.27579142084,373.75080757229,384.42940207435,392.4383479509,406.97310157871,415.27867508032,427.32175665765,436.04260883433,448.50096908674,457.84473927605,470.92601754108,484.4917875937,498.33441009638,508.71637697339,523.2511306012],description:"2401/2400, 126/125 and 245/243, Paul Erlich, 2001"},pipedum_27f:{frequencies:[261.6255653006,267.07609791103,272.52663052146,280.31310567921,293.02063313667,299.00064605783,305.22982618403,313.95067836072,320.35783506196,327.03195662575,333.84512238879,348.83408706747,358.80077526939,366.27579142084,373.75080757229,381.53728273004,392.4383479509,410.05802887931,418.60090448096,427.32175665765,436.04260883433,448.50096908674,457.84473927605,467.18850946536,488.36772189445,502.32108537715,512.57253609913,523.2511306012],description:"2401/2400, 1728/1715 and 128/125, Paul Erlich, 2001"},pipedum_27g:{frequencies:[261.6255653006,267.07609791103,274.59243005311,280.31310567921,290.81619550312,299.00064605783,305.22982618403,313.95067836072,320.35783506196,327.03195662575,336.37572681506,348.83408706747,356.10146388137,366.27579142084,373.75080757229,384.42940207435,392.4383479509,406.97310157871,418.60090448096,427.32175665765,436.04260883433,448.50096908674,457.84473927605,470.72988009104,488.36772189445,498.54204943392,512.57253609913,523.2511306012],description:"2401/2400, 1728/1715 and 686/675, Paul Erlich, 2001"},pipedum_27h:{frequencies:[261.6255653006,267.07609791103,274.70684356563,280.31310567921,290.69507255622,299.00064605783,305.22982618403,313.95067836072,320.49131749323,327.03195662575,336.37572681506,348.83408706747,356.10146388137,366.27579142084,373.75080757229,384.42940207435,392.4383479509,406.97310157871,418.60090448096,427.14378008261,436.04260883433,448.50096908674,457.84473927605,470.92601754108,488.36772189445,498.33441009638,512.57253609913,523.2511306012],description:"2401/2400, 1728/1715 and 64/63, Paul Erlich, 2001"},pipedum_27i:{frequencies:[261.6255653006,269.10058145205,274.70684356563,282.43792805463,290.69507255622,299.00064605783,305.22982618403,313.95067836072,320.49131749323,329.51091606373,336.37572681506,348.83408706747,356.10146388137,366.27579142084,373.75080757229,384.42940207435,392.4383479509,406.97310157871,415.4517078616,427.14378008261,436.04260883433,448.50096908674,457.84473927605,470.92601754108,484.69365917187,498.33441009638,508.71637697339,523.2511306012],description:"2401/2400, 1728/1715 and 245/243, Paul Erlich, 2001"},pipedum_27j:{frequencies:[261.6255653006,269.16210421872,276.91574508099,282.55561052465,290.69507255622,299.06900468747,305.16005936662,313.95067836072,322.99452506247,329.57286411595,339.06673262958,348.83408706747,358.88280562497,366.19207123994,376.74081403286,387.59343007496,395.48743693914,406.88007915549,418.60090448096,423.83341578697,436.04260883433,448.60350703121,461.52624180165,470.92601754108,484.4917875937,498.44834114579,508.60009894437,523.2511306012],description:"78732/78125 and 390625000/387420489"},pipedum_27k:{frequencies:[261.6255653006,264.89588486686,275.62199471997,279.38237857051,290.69507255622,294.32876096318,298.00787047521,310.07474405997,313.95067836072,331.11985608357,344.52749339997,348.83408706747,353.19451315581,367.49599295996,372.50983809402,387.59343007496,392.4383479509,397.34382730029,413.43299207996,418.60090448096,441.49314144476,447.01180571282,459.36999119996,465.11211608996,470.92601754108,496.67978412536,516.79124009995,523.2511306012],description:"67108864/66430125 and 25/24"},pipedum_28:{frequencies:[261.6255653006,267.90457886781,272.52663052146,279.06726965397,285.76488412567,299.40669857094,306.59245933664,313.95067836072,319.36714514233,327.03195662575,334.88072358477,340.65828815182,348.83408706747,357.20610515709,363.36884069528,383.2405741708,392.4383479509,401.85686830172,408.78994578219,418.60090448096,428.6473261885,436.04260883433,446.50763144636,457.22381460107,479.0507177135,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"393216/390625 and 16875/16384"},pipedum_29:{frequencies:[261.6255653006,266.96486255163,274.70684356563,280.31310567921,288.44218574391,294.32876096318,300.33547037059,310.07474405997,316.40280006119,325.57848126297,332.22294006425,341.85740532612,348.83408706747,355.95315006884,366.27579142084,373.75080757229,384.58958099188,392.4383479509,400.44729382745,412.06026534844,420.46965851882,434.10464168396,442.96392008567,455.80987376816,465.11211608996,474.60420009179,488.36772189445,498.33441009638,512.78610798918,523.2511306012],description:"5120/5103, 225/224 and 50421/50000, Manuel Op de Coul, 2003"},pipedum_29a:{frequencies:[261.6255653006,272.52663052146,274.70684356563,286.15296204753,290.69507255622,294.32876096318,305.22982618403,313.95067836072,317.94773560837,327.03195662575,339.14425131559,343.38355445704,348.83408706747,363.36884069528,366.27579142084,372.60080508745,381.53728273004,392.4383479509,408.78994578219,412.06026534844,429.2294430713,436.04260883433,441.49314144476,457.84473927605,470.92601754108,476.92160341255,490.54793493862,508.71637697339,515.07533168556,523.2511306012],description:"49/48, 55/54, 65/64, 91/90 and 100/99"},pipedum_31:{frequencies:[261.6255653006,271.62175694356,275.93321340298,281.68182201554,289.72987407313,294.32876096318,300.46061014991,310.42486507835,316.89204976748,321.92208230347,331.11985608357,338.01818641865,343.38355445704,356.50355598842,362.16234259141,367.91095120397,380.27045972098,386.30649876417,392.4383479509,407.43263541533,413.89982010446,422.52273302331,434.59481110969,441.49314144476,450.69091522486,465.63729761752,475.33807465122,482.88312345521,496.67978412536,507.02727962797,515.07533168556,523.2511306012],description:"81/80, 225/224 and 1029/1024 are homophonic intervals"},pipedum_31a:{frequencies:[261.6255653006,269.46602871384,275.93321340298,282.55561052465,287.4304306281,294.32876096318,301.39265122629,306.59245933664,313.95067836072,321.48549464138,329.20114651277,336.83253589231,344.91651675372,353.19451315581,359.28803828513,367.91095120397,376.74081403286,385.78259356965,392.4383479509,401.85686830172,411.50143314096,421.04066986538,431.14564594215,441.49314144476,452.08897683944,459.88868900496,470.92601754108,482.22824196207,490.54793493862,502.32108537715,514.3767914262,523.2511306012],description:"393216/390625 and 2109375/2097152 are homophonic intervals"},pipedum_31b:{frequencies:[261.6255653006,267.07609791103,280.31310567921,286.15296204753,290.69507255622,294.32876096318,299.00064605783,305.22982618403,307.54352165948,327.03195662575,333.84512238879,339.14425131559,343.38355445704,348.83408706747,356.10146388137,373.75080757229,381.53728273004,387.59343007496,392.4383479509,400.61414686654,406.97310157871,429.2294430713,436.04260883433,445.12682985172,448.50096908674,457.84473927605,465.11211608996,490.54793493862,498.33441009638,508.71637697339,515.07533168556,523.2511306012],description:"245/243, 1029/1024 comma and 25/24 chroma"},pipedum_31c:{frequencies:[261.6255653006,265.7783520514,274.70684356563,279.06726965397,286.15296204753,293.02063313667,299.00064605783,305.22982618403,313.95067836072,320.49131749323,327.03195662575,334.88072358477,343.38355445704,348.83408706747,360.55273217989,366.27579142084,373.75080757229,384.58958099188,392.4383479509,398.6675280771,412.06026534844,418.60090448096,429.2294430713,439.53094970501,448.50096908674,457.84473927605,470.92601754108,480.73697623985,490.54793493862,502.32108537715,515.07533168556,523.2511306012],description:"126/125, 225/224 and 1029/1024, Op de Coul"},pipedum_31d:{frequencies:[261.6255653006,269.10058145205,274.70684356563,280.31310567921,286.15296204753,294.32876096318,299.00064605783,305.22982618403,313.95067836072,316.53463456122,327.03195662575,336.37572681506,343.38355445704,348.83408706747,358.80077526939,366.27579142084,373.75080757229,381.53728273004,392.4383479509,403.65087217807,406.97310157871,418.60090448096,429.2294430713,436.04260883433,448.50096908674,457.84473927605,470.92601754108,478.40103369253,490.54793493862,504.56359022259,508.71637697339,523.2511306012],description:"1728/1715, 225/224 and 81/80"},pipedum_31e:{frequencies:[261.6255653006,267.07609791103,272.52663052146,276.85245005354,286.15296204753,290.69507255622,299.00064605783,305.22982618403,311.45900631024,317.94773560837,327.03195662575,332.22294006425,343.38355445704,348.83408706747,357.69120255941,363.36884069528,373.75080757229,381.53728273004,392.4383479509,398.6675280771,408.78994578219,415.27867508032,429.2294430713,436.04260883433,448.50096908674,457.84473927605,467.18850946536,476.92160341255,490.54793493862,498.33441009638,508.71637697339,523.2511306012],description:'81/80, 126/125 and 1029/1024, Gene Smith (2005) "Synstargam"'},pipedum_32:{frequencies:[261.6255653006,267.07609791103,270.30192333353,280.31310567921,286.15296204753,292.11448209019,299.00064605783,305.22982618403,311.5887808962,315.35224388912,325.57848126297,333.84512238879,337.87740416691,348.83408706747,356.10146388137,360.4025644447,367.91095120397,379.84156147346,384.42940207435,394.1903048614,406.97310157871,415.4517078616,420.46965851882,429.2294430713,443.14848838571,448.50096908674,457.84473927605,474.80195184183,480.53675259294,490.54793493862,500.76768358318,512.57253609913,523.2511306012],description:"225/224, 2048/2025 and 117649/116640"},pipedum_32a:{frequencies:[261.6255653006,268.26840191956,274.59243005311,280.31310567921,286.15296204753,292.89859205665,299.00064605783,305.22982618403,311.5887808962,320.35783506196,327.03195662575,333.84512238879,341.71502406609,348.83408706747,356.10146388137,364.4960256705,372.08969287196,381.53728273004,390.53145607553,398.6675280771,406.97310157871,416.56688648057,425.24536328225,434.10464168396,438.17172313528,450.50320555588,459.88868900496,469.46970335923,480.53675259294,490.54793493862,500.76768358318,512.57253609913,523.2511306012],description:"589824/588245, 225/224 and 2048/2025"},pipedum_34:{frequencies:[261.6255653006,267.90457886781,272.52663052146,279.06726965397,283.88190679319,290.69507255622,294.32876096318,301.39265122629,306.59245933664,313.95067836072,321.48549464138,327.03195662575,334.88072358477,340.65828815182,348.83408706747,354.85238349148,363.36884069528,367.91095120397,376.74081403286,385.78259356965,392.4383479509,401.85686830172,408.78994578219,418.60090448096,425.82286018978,436.04260883433,446.50763144636,454.2110508691,465.11211608996,470.92601754108,482.22824196207,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"15625/15552 and 393216/390625 are homophonic intervals"},pipedum_34a:{frequencies:[261.6255653006,264.89588486686,272.52663052146,279.06726965397,282.55561052465,290.69507255622,294.32876096318,301.39265122629,306.59245933664,313.95067836072,317.87506184023,327.03195662575,334.88072358477,340.65828815182,348.83408706747,353.19451315581,363.36884069528,367.91095120397,376.74081403286,387.59343007496,392.4383479509,401.85686830172,408.78994578219,418.60090448096,423.83341578697,436.04260883433,441.49314144476,452.08897683944,465.11211608996,470.92601754108,484.4917875937,490.54793493862,502.32108537715,510.98743222773,523.2511306012],description:"15625/15552 and 2048/2025, Manuel Op de Coul, 2001"},pipedum_34b:{frequencies:[261.6255653006,267.57160087561,272.52663052146,279.06726965397,285.40970760065,290.69507255622,294.32876096318,299.7792935736,310.07474405997,313.95067836072,319.76457981184,327.03195662575,334.88072358477,342.49164912079,348.83408706747,356.76213450082,359.73515228832,367.91095120397,380.54627680087,383.71749577421,392.4383479509,399.70572476481,408.78994578219,418.60090448096,428.11456140098,436.04260883433,441.49314144476,449.66894036041,465.11211608996,470.92601754108,479.64686971777,490.54793493862,502.32108537715,511.62332769895,523.2511306012],description:"100/99, 243/242 and 5632/5625, Manuel Op de Coul"},pipedum_36:{frequencies:[261.6255653006,267.07609791103,269.10058145205,280.31310567921,286.15296204753,290.69507255622,294.32876096318,300.46061014991,305.22982618403,311.5887808962,320.35783506196,327.03195662575,333.84512238879,336.37572681506,343.38355445704,348.83408706747,356.10146388137,367.91095120397,373.75080757229,381.53728273004,384.42940207435,392.4383479509,400.61414686654,406.97310157871,420.46965851882,429.2294430713,436.04260883433,445.12682985172,448.50096908674,457.84473927605,467.3831713443,480.53675259294,490.54793493862,498.33441009638,508.71637697339,515.07533168556,523.2511306012],description:"1029/1024, 245/243 comma and 50/49 chroma, Gene Ward Smith, 2001"},pipedum_36a:{frequencies:[261.6255653006,264.89588486686,275.62199471997,275.93321340298,279.06726965397,290.69507255622,293.99679436797,294.32876096318,310.07474405997,310.42486507835,313.95067836072,327.03195662575,330.74639366397,331.11985608357,348.83408706747,349.22797321314,353.19451315581,367.91095120397,372.08969287196,372.50983809402,387.59343007496,392.4383479509,397.34382730029,413.43299207996,413.89982010446,418.60090448096,436.04260883433,440.99519155196,441.49314144476,465.11211608996,465.63729761752,470.92601754108,490.54793493862,496.11959049595,496.67978412536,516.79124009995,523.2511306012],description:"1125/1024 and 531441/524288, Op de Coul"},pipedum_37:{frequencies:[261.6255653006,263.718569823,276.85245005354,279.06726965397,280.31310567921,290.69507255622,293.02063313667,299.00064605783,308.98710943476,311.45900631024,313.95067836072,325.57848126297,332.22294006425,333.70607818954,346.06556256693,348.83408706747,351.62475976401,353.19451315581,370.78453132171,373.75080757229,376.74081403286,390.69417751556,392.4383479509,400.44729382745,415.27867508032,418.60090448096,421.94971171681,436.04260883433,444.94143758605,448.50096908674,465.11211608996,467.18850946536,470.92601754108,494.37937509562,498.33441009638,502.32108537715,519.0983438504,523.2511306012],description:"250/243, 3136/3125 and 3125/3087, Gene Ward Smith, 2002"},pipedum_38:{frequencies:[261.6255653006,271.25338610366,272.52663052146,280.3771918945,282.55561052465,290.69507255622,292.95365699196,301.39265122629,302.80736724606,313.95067836072,315.42434088132,325.50406332439,327.03195662575,336.45263027341,339.06673262958,348.83408706747,350.47148986813,361.67118147155,363.36884069528,376.74081403286,378.50920905758,390.60487598927,392.4383479509,403.74315632809,406.88007915549,418.60090448096,420.56578784176,434.00541776586,436.04260883433,452.08897683944,454.2110508691,467.29531982417,470.92601754108,484.4917875937,488.25609498659,502.32108537715,504.67894541011,519.21702202686,523.2511306012],description:"81/80 and 1224440064/1220703125, Manuel Op de Coul, 2001"},pipedum_38a:{frequencies:[261.6255653006,268.26840191956,272.52663052146,274.70684356563,279.06726965397,286.15296204753,293.02063313667,294.32876096318,305.22982618403,306.59245933664,313.95067836072,321.92208230347,327.03195662575,329.64821227876,340.65828815182,343.38355445704,348.83408706747,357.69120255941,366.27579142084,367.91095120397,381.53728273004,383.2405741708,390.69417751556,392.4383479509,408.78994578219,412.06026534844,418.60090448096,429.2294430713,436.04260883433,439.53094970501,457.84473927605,459.88868900496,470.92601754108,476.92160341255,488.36772189445,490.54793493862,510.98743222773,515.07533168556,523.2511306012],description:"50/49, 81/80 and 3125/3072, Gene Ward Smith, 2002"},pipedum_41:{frequencies:[261.6255653006,265.71346475842,269.80136421624,274.70684356563,280.31310567921,286.15296204753,290.69507255622,294.32876096318,299.00064605783,303.67253115248,308.34441624714,313.95067836072,320.49131749323,327.03195662575,331.11985608357,336.37572681506,343.38355445704,348.83408706747,354.2846196779,359.73515228832,366.27579142084,373.75080757229,381.53728273004,387.40708707973,392.4383479509,400.61414686654,406.97310157871,412.06026534844,418.60090448096,425.14154361347,436.04260883433,441.49314144476,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,485.87604984397,495.99846754905,503.62921320365,513.90736041189,523.2511306012],description:"100/99 105/104 196/195 275/273 385/384, Paul Erlich, TL 3-11-2000"},pipedum_41a:{frequencies:[261.6255653006,265.71346475842,269.80136421624,274.70684356563,280.31310567921,285.40970760065,290.69507255622,294.32876096318,299.00064605783,305.22982618403,309.19384990071,313.95067836072,319.76457981184,327.03195662575,332.97799220076,336.37572681506,343.38355445704,348.83408706747,353.19451315581,359.73515228832,366.27579142084,373.75080757229,380.54627680087,387.59343007496,392.4383479509,400.61414686654,406.97310157871,411.12588832951,418.60090448096,425.14154361347,436.04260883433,441.49314144476,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,485.87604984397,495.99846754905,503.62921320365,513.90736041189,523.2511306012],description:"pipedum_41 improved shape by Manuel Op de Coul, all intervals superparticular"},pipedum_41b:{frequencies:[261.6255653006,265.7783520514,271.31540105247,274.70684356563,279.06726965397,284.8811711051,290.69507255622,294.32876096318,299.00064605783,305.22982618403,310.07474405997,313.95067836072,319.76457981184,327.03195662575,331.11985608357,336.37572681506,343.38355445704,348.83408706747,353.19451315581,359.73515228832,366.27579142084,373.75080757229,381.53728273004,387.59343007496,392.4383479509,398.6675280771,406.97310157871,412.06026534844,418.60090448096,425.14154361347,436.04260883433,441.49314144476,448.50096908674,457.84473927605,465.11211608996,470.92601754108,479.64686971777,490.54793493862,498.33441009638,504.56359022259,515.07533168556,523.2511306012],description:"pipedum_41 more improved shape by M. OdC, all intervals superparticular"},pipedum_41c:{frequencies:[261.6255653006,267.07609791103,271.31540105247,275.93321340298,280.31310567921,286.15296204753,290.69507255622,294.32876096318,299.00064605783,305.22982618403,310.07474405997,315.35224388912,320.35783506196,327.03195662575,333.84512238879,336.37572681506,343.38355445704,348.83408706747,356.10146388137,360.4025644447,367.91095120397,373.75080757229,381.53728273004,384.42940207435,392.4383479509,398.6675280771,406.97310157871,410.05802887931,420.46965851882,429.2294430713,436.04260883433,445.12682985172,448.50096908674,457.84473927605,465.11211608996,474.80195184183,480.53675259294,490.54793493862,498.33441009638,508.71637697339,512.57253609913,523.2511306012],description:"225/224, 245/243 and 1029/1024, Gene Ward Smith, 2002"},pipedum_41d:{frequencies:[261.6255653006,264.89588486686,272.52663052146,275.93321340298,279.06726965397,282.55561052465,290.69507255622,294.32876096318,297.67175429757,306.59245933664,310.07474405997,313.95067836072,317.51653791741,327.03195662575,331.11985608357,334.88072358477,344.91651675372,348.83408706747,353.19451315581,363.36884069528,367.91095120397,372.08969287196,376.74081403286,387.59343007496,392.4383479509,396.89567239676,408.78994578219,413.89982010446,418.60090448096,423.83341578697,436.04260883433,441.49314144476,446.50763144636,459.88868900496,465.11211608996,470.92601754108,484.4917875937,490.54793493862,496.11959049595,502.32108537715,517.37477513058,523.2511306012],description:"3125/3072 and 32805/32768"},pipedum_43:{frequencies:[261.6255653006,269.10058145205,273.37201925287,274.70684356563,282.55561052465,286.15296204753,287.04062021552,290.69507255622,299.00064605783,305.22982618403,307.54352165948,313.95067836072,322.92069774245,327.03195662575,328.04642310345,332.22294006425,341.71502406609,343.38355445704,348.83408706747,358.80077526939,366.27579142084,369.05222599138,376.74081403286,379.68336007343,381.53728273004,392.4383479509,398.6675280771,410.05802887931,412.06026534844,418.60090448096,423.93031414449,430.56093032327,436.04260883433,448.50096908674,455.62003208812,457.84473927605,470.92601754108,478.40103369253,492.06963465517,494.47231841813,498.33441009638,508.71637697339,512.57253609913,523.2511306012],description:"81/80, 126/125 and 12288/12005, Gene Ward Smith, 2002"},pipedum_45:{frequencies:[261.6255653006,265.7783520514,267.07609791103,274.70684356563,279.06726965397,280.31310567921,284.8811711051,293.02063313667,294.32876096318,299.00064605783,303.74668805875,305.22982618403,313.95067836072,320.49131749323,325.57848126297,327.03195662575,336.37572681506,341.85740532612,343.38355445704,348.83408706747,356.10146388137,358.80077526939,366.27579142084,372.08969287196,373.75080757229,384.58958099188,392.4383479509,398.6675280771,400.61414686654,406.97310157871,418.60090448096,420.46965851882,427.32175665765,436.04260883433,439.53094970501,448.50096908674,455.80987376816,457.84473927605,465.11211608996,478.40103369253,480.73697623985,488.36772189445,498.33441009638,512.78610798918,515.07533168556,523.2511306012],description:"81/80, 525/512 and 2401/2400, Gene Ward Smith, 2002"},scala205pipedum_45a:{frequencies:[261.6255653006,267.07609791103,269.10058145205,274.70684356563,276.85245005354,282.55561052465,288.32205155576,290.69507255622,296.75121990114,299.00064605783,305.22982618403,311.45900631024,313.95067836072,320.49131749323,322.99452506247,329.64821227876,336.37572681506,339.14425131559,345.98646186692,348.83408706747,356.10146388137,363.28578496026,366.27579142084,373.75080757229,376.82694590621,384.42940207435,392.4383479509,395.66829320152,403.65087217807,406.97310157871,415.27867508032,423.83341578697,427.14378008261,436.04260883433,439.53094970501,448.50096908674,457.84473927605,461.31528248922,470.92601754108,474.80195184183,484.4917875937,494.47231841813,498.33441009638,508.71637697339,512.57253609913,523.2511306012],description:"81/80, 2401/2400 and 4375/4374, Gene Ward Smith"},pipedum_46:{frequencies:[261.6255653006,265.7783520514,270.41454913492,274.70684356563,279.06726965397,280.31310567921,286.15296204753,290.69507255622,295.30928005711,300.46061014991,305.22982618403,310.07474405997,313.95067836072,320.49131749323,325.57848126297,327.03195662575,332.22294006425,339.14425131559,343.38355445704,348.83408706747,354.37113606854,360.55273217989,366.27579142084,372.08969287196,373.75080757229,381.53728273004,387.59343007496,392.4383479509,398.6675280771,406.97310157871,412.06026534844,418.60090448096,427.32175665765,429.2294430713,436.04260883433,442.96392008567,450.69091522486,457.84473927605,465.11211608996,470.92601754108,480.73697623985,488.36772189445,490.54793493862,498.33441009638,508.71637697339,515.07533168556,523.2511306012],description:"126/125, 1029/1024 and 5120/5103. Manuel Op de Coul, 2001"},pipedum_46a:{frequencies:[261.6255653006,267.07609791103,269.10058145205,274.70684356563,279.06726965397,280.31310567921,286.15296204753,290.69507255622,294.32876096318,299.00064605783,305.22982618403,307.54352165948,313.95067836072,320.35783506196,320.49131749323,327.03195662575,332.22294006425,336.37572681506,343.38355445704,348.83408706747,353.19451315581,358.80077526939,366.12324007081,366.27579142084,373.75080757229,381.53728273004,387.59343007496,392.4383479509,398.6675280771,406.97310157871,412.06026534844,418.60090448096,427.14378008261,427.32175665765,436.04260883433,445.12682985172,448.50096908674,457.84473927605,465.11211608996,470.92601754108,478.40103369253,488.36772189445,490.54793493862,498.33441009638,508.71637697339,512.57253609913,523.2511306012],description:"126/125, 1029/1024 and 245/243, Gene Ward Smith, 2002"},pipedum_46b:{frequencies:[261.6255653006,264.89588486686,271.25338610366,272.52663052146,279.06726965397,282.55561052465,283.88190679319,290.69507255622,294.32876096318,301.39265122629,302.80736724606,310.07474405997,313.95067836072,317.87506184023,322.99452506247,327.03195662575,334.88072358477,339.06673262958,340.65828815182,348.83408706747,353.19451315581,361.67118147155,363.36884069528,372.08969287196,376.74081403286,381.45007420827,387.59343007496,392.4383479509,401.85686830172,403.74315632809,408.78994578219,418.60090448096,423.83341578697,430.65936674996,436.04260883433,441.49314144476,452.08897683944,454.2110508691,465.11211608996,470.92601754108,482.22824196207,484.4917875937,490.54793493862,502.32108537715,508.60009894437,516.79124009995,523.2511306012],description:"2048/2025 and 78732/78125"},pipedum_46c:{frequencies:[261.6255653006,266.47048317654,271.31540105247,274.08392555301,279.06726965397,282.62020942966,287.78812183066,290.69507255622,297.67175429757,299.7792935736,306.97399661937,310.07474405997,313.95067836072,319.76457981184,325.57848126297,328.90071066361,332.22294006425,339.14425131559,342.60490694126,348.83408706747,355.29397756872,359.73515228832,363.36884069528,372.08969287196,374.72411696701,383.71749577421,387.59343007496,394.68085279633,399.70572476481,406.97310157871,411.12588832951,418.60090448096,426.35277308246,431.68218274599,436.04260883433,446.50763144636,449.66894036041,460.46099492906,465.11211608996,467.18850946536,479.64686971777,484.4917875937,496.11959049595,499.63215595601,511.62332769895,516.79124009995,523.2511306012],description:"126/125, 176/175, 385/384 and 896/891, Paul Erlich"},pipedum_46d:{frequencies:[261.6255653006,267.23182741418,272.79915715198,274.70684356563,278.36648688978,283.42769574232,287.78812183066,291.52562990638,297.59908052943,299.7792935736,303.67253115248,311.77046531655,313.95067836072,320.67819289702,324.7609013714,327.03195662575,334.03978426773,340.11323489078,343.04051394309,345.34574619679,354.2846196779,359.73515228832,366.27579142084,374.12455837986,376.74081403286,381.53728273004,389.71308164569,392.4383479509,402.90337056292,408.13588186894,411.12588832951,419.69101100305,425.14154361347,431.68218274599,439.53094970501,445.38637902364,448.50096908674,457.84473927605,467.65569797482,470.92601754108,479.64686971777,485.87604984397,490.54793493862,503.62921320365,510.16985233617,519.61744219425,523.2511306012],description:"91/90, 121/120, 126/125, 169/168 and 176/175"},pipedum_5:{frequencies:[261.6255653006,313.95067836072,348.83408706747,392.4383479509,436.04260883433,523.2511306012],description:"16/15 and 27/25"},pipedum_50:{frequencies:[261.6255653006,267.07609791103,269.10058145205,273.37201925287,274.70684356563,276.85245005354,284.76252005507,286.15296204753,290.69507255622,299.00064605783,300.46061014991,305.22982618403,307.54352165948,313.95067836072,316.40280006119,320.49131749323,327.03195662575,332.22294006425,333.84512238879,341.71502406609,343.38355445704,348.83408706747,358.80077526939,360.55273217989,361.60320006994,366.27579142084,373.75080757229,379.68336007343,381.53728273004,392.4383479509,398.6675280771,400.61414686654,410.05802887931,412.06026534844,418.60090448096,423.93031414449,427.14378008261,436.04260883433,445.12682985172,448.50096908674,455.62003208812,457.84473927605,470.92601754108,478.40103369253,480.73697623985,484.4917875937,498.33441009638,500.76768358318,508.71637697339,512.57253609913,523.2511306012],description:"81/80, 126/125 and 16807/16384, Gene Ward Smith, 2002"},pipedum_53:{frequencies:[261.6255653006,264.89588486686,269.16210421872,272.52663052146,275.93321340298,279.06726965397,282.55561052465,287.4304306281,290.69507255622,294.32876096318,298.00787047521,302.80736724606,306.59245933664,310.07474405997,313.95067836072,317.87506184023,322.99452506247,327.03195662575,331.11985608357,334.88072358477,340.65828815182,344.91651675372,348.83408706747,353.19451315581,357.20610515709,363.36884069528,367.91095120397,372.08969287196,376.74081403286,383.2405741708,387.59343007496,392.4383479509,397.34382730029,403.74315632809,408.78994578219,413.89982010446,418.60090448096,423.83341578697,430.65936674996,436.04260883433,441.49314144476,446.50763144636,454.2110508691,459.88868900496,465.11211608996,470.92601754108,476.81259276034,484.4917875937,490.54793493862,496.67978412536,502.32108537715,510.98743222773,516.79124009995,523.2511306012],description:"15625/15552 and 32805/32768, Manuel Op de Coul, 2001"},pipedum_53a:{frequencies:[261.6255653006,266.96486255163,269.10058145205,272.52663052146,276.85245005354,280.31310567921,282.55561052465,288.32205155576,290.69507255622,294.32876096318,299.00064605783,302.80736724606,305.22982618403,311.45900631024,313.95067836072,320.35783506196,322.99452506247,327.03195662575,332.22294006425,336.37572681506,339.14425131559,346.06556256693,348.83408706747,353.19451315581,358.80077526939,363.36884069528,366.27579142084,373.75080757229,376.74081403286,384.42940207435,387.59343007496,392.4383479509,398.6675280771,403.65087217807,406.97310157871,415.27867508032,418.60090448096,423.83341578697,430.56093032327,436.04260883433,441.49314144476,448.50096908674,454.2110508691,457.84473927605,467.18850946536,470.92601754108,480.53675259294,484.4917875937,490.54793493862,498.33441009638,504.56359022259,508.71637697339,519.0983438504,523.2511306012],description:"225/224, 1728/1715 and 4375/4374, Manuel Op de Coul, 2001"},pipedum_53b:{frequencies:[261.6255653006,266.96486255163,269.10058145205,272.52663052146,274.70684356563,280.31310567921,286.03378130532,288.32205155576,290.69507255622,293.02063313667,299.00064605783,301.39265122629,305.22982618403,311.45900631024,313.95067836072,320.35783506196,322.92069774245,327.03195662575,333.70607818954,336.37572681506,341.85740532612,343.24053756638,348.83408706747,351.62475976401,358.80077526939,363.36884069528,366.27579142084,373.75080757229,376.74081403286,384.42940207435,389.3237578878,392.4383479509,400.44729382745,403.65087217807,406.97310157871,410.22888639134,418.60090448096,427.14378008261,430.56093032327,436.04260883433,439.53094970501,448.50096908674,457.65405008851,457.84473927605,467.18850946536,470.92601754108,478.60036745656,480.53675259294,488.36772189445,498.33441009638,502.32108537715,512.57253609913,512.78610798918,523.2511306012],description:"225/224, 1728/1715 and 3125/3087, Gene Ward Smith, 2002"},pipedum_55:{frequencies:[261.6255653006,267.07609791103,269.10058145205,272.52663052146,274.70684356563,279.06726965397,280.31310567921,286.15296204753,293.02063313667,294.32876096318,296.75121990114,299.00064605783,305.22982618403,306.59245933664,313.95067836072,317.94773560837,320.49131749323,325.57848126297,327.03195662575,333.84512238879,336.37572681506,340.65828815182,343.38355445704,348.83408706747,356.10146388137,358.80077526939,366.27579142084,367.91095120397,373.75080757229,376.74081403286,381.53728273004,390.69417751556,392.4383479509,400.61414686654,403.65087217807,406.97310157871,408.78994578219,418.60090448096,427.32175665765,429.2294430713,436.04260883433,439.53094970501,445.12682985172,448.50096908674,457.84473927605,459.88868900496,470.92601754108,474.80195184183,476.92160341255,488.36772189445,490.54793493862,502.32108537715,504.56359022259,508.71637697339,520.92557002075,523.2511306012],description:"81/80, 686/675 and 6144/6125, Gene Ward Smith, 2002"},pipedum_58:{frequencies:[261.6255653006,264.29521392612,268.60224704195,271.31540105247,275.62199471997,277.50997462242,280.31310567921,284.8811711051,287.78812183066,292.35618725654,295.30928005711,297.33211566688,302.17752792219,305.22982618403,310.07474405997,313.23877206058,315.35224388912,320.49131749323,323.76163705949,328.90071066361,332.22294006425,337.63694353197,339.94971891247,343.38355445704,348.83408706747,352.39361856816,358.13632938927,361.75386806997,364.23184169193,370.01329949656,373.75080757229,379.84156147346,383.71749577421,389.80824967539,392.4383479509,396.44282088917,402.90337056292,406.97310157871,413.43299207996,417.65169608078,420.46965851882,427.32175665765,431.68218274599,438.53428088482,442.96392008567,445.99817350032,453.26629188329,457.84473927605,465.11211608996,469.85815809087,477.51510585235,480.73697623985,485.64245558924,493.35106599542,498.33441009638,506.45541529795,511.62332769895,515.07533168556,523.2511306012],description:"9801/9800, 2401/2400, 5120/5103 and 896/891"},pipedum_58a:{frequencies:[261.6255653006,265.65057399753,267.66008354786,270.48058443385,272.52663052146,277.4816601673,281.75060878526,285.40970760065,287.78812183066,293.02063313667,295.1673044417,297.30177875068,301.87565226992,305.22982618403,309.92566966379,313.95067836072,316.2506833304,322.00069575458,323.72860352852,327.03195662575,332.97799220076,338.10073054231,342.60490694126,344.24801655217,348.83408706747,352.18826098158,358.59168390851,362.25078272391,366.27579142084,368.95913055213,375.66747838035,379.50081999647,381.53728273004,388.47432423422,392.4383479509,399.57359064092,402.50086969323,406.97310157871,411.12588832951,418.60090448096,422.62591317789,428.25613367658,430.31002069022,436.04260883433,442.75095666255,450.80097405642,455.40098399577,457.84473927605,466.16918908107,469.58434797544,475.68284600109,483.00104363188,488.36772189445,495.88107146206,499.46698830115,503.12608711654,512.27383415502,516.54278277298,523.2511306012],description:"126/125, 144/143, 176/175, 196/195 and 364/363"},pipedum_5a:{frequencies:[261.6255653006,290.69507255622,348.83408706747,392.4383479509,470.92601754108,523.2511306012],description:"27/25 and 81/80"},pipedum_64:{frequencies:[261.6255653006,267.90457886781,266.96486255163,273.37201925287,274.70684356563,273.74326726486,280.31310567921,280.42990280658,284.76252005507,286.15296204753,294.32876096318,300.05312833195,299.00064605783,300.46061014991,307.67166479351,306.59245933664,313.95067836072,312.84944830269,320.35783506196,320.49131749323,328.18310911307,327.03195662575,336.37572681506,336.5158833679,341.71502406609,343.38355445704,351.62475976401,348.83408706747,358.80077526939,358.95027559242,366.12324007081,366.27579142084,375.06641041494,373.75080757229,382.72082695402,384.58958099188,383.2405741708,392.4383479509,392.60186392921,398.6675280771,400.61414686654,412.06026534844,408.78994578219,418.60090448096,428.6473261885,427.14378008261,429.2294430713,439.53094970501,437.98922762377,448.50096908674,448.68784449053,455.62003208812,457.84473927605,468.83301301868,467.18850946536,478.40103369253,480.73697623985,488.16432009441,490.54793493862,502.32108537715,500.55911728431,512.57253609913,512.78610798918,520.70860810071,523.2511306012],description:"225/224 235298/234375 and 67108864/66706983"},pipedum_65:{frequencies:[261.6255653006,264.59711493117,267.38234771992,270.72462706642,273.0589090967,275.93321340298,279.06726965397,282.00481986086,285.20783756792,287.99181818792,291.26283636981,294.32876096318,297.67175429757,300.80514118491,303.39878788522,306.84479880935,310.42486507835,313.95067836072,317.25542234346,320.85881726391,323.62537374423,327.30111872997,331.11985608357,334.60532825287,338.40578383303,341.32363637087,345.20039866051,348.83408706747,352.79615324157,356.9123501364,360.9661694219,364.07854546226,367.91095120397,372.08969287196,376.00642648114,380.70650681216,383.98909091723,388.35044849308,392.4383479509,396.89567239676,401.07352157989,404.53171718029,409.58836364504,413.89982010446,418.60090448096,423.00722979129,427.81175635188,431.50049832564,436.89425455471,441.49314144476,446.50763144636,451.20771177737,455.09818182783,460.26719821402,465.11211608996,470.92601754108,475.8831335152,481.28822589586,485.43806061635,490.95167809495,496.11959049595,501.90799237931,507.60867574954,511.9854545563,517.80059799077,523.2511306012],description:"1216/1215, 32805/32768 and 39858075/39845888. Manuel Op de Coul, 2001"},pipedum_65a:{frequencies:[261.6255653006,264.89588486686,267.90457886781,269.16210421872,272.52663052146,275.93321340298,279.06726965397,282.55561052465,286.08755565621,287.10624449997,290.69507255622,294.32876096318,298.00787047521,301.39265122629,302.80736724606,306.59245933664,310.07474405997,313.95067836072,317.87506184023,319.0069383333,322.99452506247,327.03195662575,331.11985608357,334.88072358477,339.06673262958,340.65828815182,344.52749339997,348.83408706747,353.19451315581,357.60944457026,358.88280562497,363.36884069528,367.91095120397,372.08969287196,376.74081403286,381.45007420827,383.2405741708,387.59343007496,392.4383479509,397.34382730029,401.85686830172,403.74315632809,408.78994578219,413.43299207996,418.60090448096,423.83341578697,429.13133348431,430.65936674996,436.04260883433,441.49314144476,446.50763144636,452.08897683944,454.2110508691,459.88868900496,465.11211608996,470.92601754108,476.81259276034,478.51040749995,484.4917875937,490.54793493862,496.67978412536,502.32108537715,508.60009894437,510.98743222773,516.79124009995,523.2511306012],description:"78732/78125 and 32805/32768"},pipedum_67:{frequencies:[261.6255653006,262.79353657426,266.96486255163,267.07609791103,272.52663052146,274.70684356563,279.06726965397,280.31310567921,284.8811711051,286.15296204753,293.02063313667,294.32876096318,299.00064605783,299.12522966035,300.33547037059,305.22982618403,306.59245933664,311.45900631024,313.95067836072,320.35783506196,320.49131749323,325.57848126297,327.03195662575,332.22294006425,336.5158833679,339.00300006557,341.85740532612,343.38355445704,348.83408706747,350.39138209902,355.95315006884,360.55273217989,366.27579142084,367.91095120397,373.75080757229,373.90653707544,381.53728273004,384.58958099188,390.69417751556,392.4383479509,398.83363954714,400.44729382745,400.61414686654,406.97310157871,408.78994578219,418.60090448096,420.46965851882,427.32175665765,429.2294430713,436.04260883433,439.53094970501,448.50096908674,448.68784449053,455.80987376816,457.84473927605,459.88868900496,465.11211608996,467.18850946536,474.60420009179,480.73697623985,488.36772189445,490.54793493862,498.33441009638,504.77382505185,512.78610798918,515.07533168556,520.92557002075,523.2511306012],description:"81/80, 1029/1024 and 9604/9375, Gene Ward Smith, 2002"},pipedum_68:{frequencies:[246.94165062806,250.86135936819,252.08626834948,253.99712636029,258.02882677871,259.28873315946,263.4044273366,264.58033995864,268.89201957278,272.13977824317,273.16014686758,276.57464870343,277.80935695657,282.21902928921,286.81815421096,288.0985923994,291.6998248044,292.67158592955,296.32998075367,301.03363124183,302.50352201937,307.30516522603,308.67706328508,311.01688942076,316.08531280392,317.49640795036,322.53603347338,324.11091644933,329.25553417075,333.37122834788,334.48181249092,338.66283514705,340.17472280396,345.71831087928,351.20590311546,352.77378661151,357.18345894416,358.5226927637,362.85303765756,368.76619827124,370.41247594209,376.29203905228,378.12940252422,384.13145653254,387.04324016806,388.93309973919,395.1066410049,396.87050993795,403.33802935916,409.74022030137,411.56941771343,414.86197305514,416.71403543485,423.32854393382,430.22723131644,432.1478885991,439.00737889433,441.15096961159,444.49497113051,451.55044686274,453.56629707195,460.95774783905,468.27453748728,470.36504881535,474.12796920588,476.24461192554,483.80405021008,491.68826436165,493.88330125612],description:"245/243, 2048/2025 and 2401/2400, Gene Ward Smith, 2002"},pipedum_7:{frequencies:[261.6255653006,290.69507255622,317.94773560837,347.75533582165,392.4383479509,429.2294430713,476.92160341255,523.2511306012],description:"81/80, 64/63 and 6144/6125, Manuel Op de Coul"},pipedum_72:{frequencies:[195.99771799087,198.44768946576,200.08100378235,201.59765279061,204.16428957382,205.79760389041,208.41771227328,209.06423252359,211.67753543014,214.37250405251,216.08748408493,217.77524221208,220.49743273973,222.31222642483,223.99739198957,226.79735938944,228.66400432268,231.52230437672,232.29359169288,235.19726158904,238.19167116946,240.09720453882,241.91718334873,244.99714748859,246.9571246685,250.10125472793,251.99706598826,254.07111591409,257.24700486302,258.04499557198,261.33029065449,264.59691928767,266.7746717098,268.79687038748,272.2190527651,274.39680518722,277.89028303104,279.99673998696,282.23671390685,285.83000540335,289.40288047089,290.3669896161,293.99657698631,296.41630189977,300.12150567352,302.39647918591,304.88533909691,308.69640583562,311.1074888744,313.59634878539,317.58889489261,321.55875607877,322.55624446497,326.66286331812,329.27616622466,333.46833963724,335.99608798435,338.76148788545,342.99600648402,347.28345656507,348.44038753932,352.79589238357,357.28750675419,360.14580680822,362.95873702013,365.86240691629,370.43568700274,373.32898664928,376.31561854247,381.10667387114,385.87050729453,387.1559861548,391.99543598174],description:"225/224, 1029/1024 and 4375/4374, Gene Ward Smith, 2002"},pipedum_72a:{frequencies:[195.99771799087,197.5656997348,200.08100378235,201.59765279061,203.21043401293,205.79760389041,207.44398472154,209.99755499022,211.67753543014,213.41973736784,216.04686727389,217.77524221208,219.51744414977,222.31222642483,223.99739198957,226.84921063758,228.66400432268,230.49331635726,233.3306166558,235.19726158904,237.07883968176,240.09720453882,241.91718334873,244.99714748859,246.9571246685,248.93278166584,251.99706598826,254.07111591409,256.1036848414,259.25624072866,261.33029065449,264.65741241051,266.7746717098,268.79687038748,272.2190527651,274.39680518722,276.59197962872,279.99673998696,282.23671390685,285.83000540335,288.11664544658,290.30062001848,293.99657698631,296.3485496022,298.59492344758,302.46561418344,304.88533909691,308.7669811456,311.1074888744,313.59634878539,317.58889489261,320.12960605175,322.55624446497,326.66286331812,329.27616622466,333.46833963724,335.99608798435,338.68405668822,342.99600648402,345.73997453589,348.36074402217,352.79589238357,355.69956227973,360.07811212314,362.95873702013,365.86240691629,370.52037737472,373.32898664928,376.31561854247,381.10667387114,384.15552726211,388.884361093,391.99543598174],description:"4375/4374, 2401/2400 and 15625/15552, Manuel Op de Coul, 2002"},pipedum_72b:{frequencies:[195.99771799087,197.5656997348,200.51849868858,202.12264667808,204.16428957382,205.79760389041,207.94510975112,209.60867062912,211.67753543014,213.41973736784,215.59748978996,218.74745311481,220.49743273973,222.7983318762,224.58071853121,226.79735938944,228.66400432268,230.99731048924,232.89852292125,235.19726158904,238.19167116946,240.62219842629,242.5471760137,244.99714748859,246.9571246685,249.53413170134,251.53040475495,254.07111591409,256.1036848414,259.87197430039,262.49694373777,264.59691928767,267.35799825143,269.49686223745,272.2190527651,274.39680518722,277.19677258709,279.4782275055,283.49669923679,285.83000540335,288.74663811155,291.12315365156,293.99657698631,296.3485496022,299.44095804161,301.83648570594,304.88533909691,309.37139797666,311.91766462667,314.99633248533,317.51630314521,320.82959790172,323.39623468494,326.66286331812,329.27616622466,332.71217560179,336.87107779681,340.19603908415,342.99600648402,346.49596573386,349.34778438187,352.79589238357,355.69956227973,359.32914964993,362.08404605941,367.49572123288,371.24567757199,374.30119755201,377.99559898239,381.10667387114,384.99551748207,388.16420486875,391.99543598174],description:"225/224, 3025/3024, 1375/1372 and 4375/4374"},pipedum_72b2:{frequencies:[195.99771799087,198.44768946576,200.45221158157,202.12264667808,204.16428957382,205.79760389041,207.87636756607,209.06423252359,211.67753543014,213.81569235368,215.59748978996,217.77524221208,220.49743273973,222.72467953508,223.99739198957,226.79735938944,228.66400432268,230.99731048924,233.3306166558,235.19726158904,237.57299150408,239.55276643329,241.97249134675,244.99714748859,246.39713118852,249.45164107929,251.99706598826,254.07111591409,257.24700486302,258.71698774795,261.33029065449,264.59691928767,267.2696154421,269.49686223745,272.2190527651,274.39680518722,277.19677258709,279.99673998696,282.23671390685,285.0875898049,287.46331971994,290.3669896161,293.99657698631,296.96623938011,298.66318931942,302.39647918591,304.88533909691,307.99641398565,311.81455134911,313.59634878539,317.51630314521,320.72353853051,323.39623468494,326.66286331812,329.27616622466,332.60218810572,335.99608798435,338.76148788545,342.99600648402,344.95598366393,348.44038753932,352.79589238357,356.35948725613,359.32914964993,362.95873702013,367.49572123288,369.59569678278,374.17746161893,376.31561854247,380.11678640654,383.28442629326,387.1559861548,391.99543598174],description:"Optimised version of pipedum_72b, Manuel Op de Coul"},pipedum_72c:{frequencies:[195.99771799087,197.5656997348,199.99767141926,201.59765279061,203.25689273127,205.79760389041,207.40499258293,209.99755499022,211.67753543014,213.41973736784,215.9974851328,217.77524221208,219.51744414977,222.31222642483,223.99739198957,226.79735938944,228.66400432268,230.49331635726,233.3306166558,235.19726158904,237.13304151982,239.99720570311,241.91718334873,244.99714748859,246.9571246685,248.88599109952,251.99706598826,254.07111591409,256.1036848414,259.19698215935,261.33029065449,264.59691928767,266.7746717098,268.79687038748,272.2190527651,274.39680518722,276.47678096998,279.99673998696,282.23671390685,285.83000540335,287.99664684373,290.3669896161,293.99657698631,296.41630189977,298.66318931942,302.39647918591,304.88533909691,308.69640583562,311.1074888744,313.59634878539,317.58889489261,320.12960605175,322.55624446497,326.66286331812,329.27616622466,333.32945236543,335.99608798435,338.76148788545,342.99600648402,345.59597621247,348.44038753932,352.79589238357,355.69956227973,359.99580855466,362.95873702013,365.86240691629,370.43568700274,373.32898664928,376.31561854247,381.10667387114,384.15552726211,388.884361093,391.99543598174],description:"441/440, 2401/2400, 4375/4374 and 1375/1372"},pipedum_74:{frequencies:[174.6141157165,175.4667237034,177.38576834692,178.25190979393,182.45393315683,183.34482150233,186.25505676427,187.16450528362,187.6669026756,191.57662981467,192.51206257744,194.01568412944,194.96302633711,195.48635695375,199.55898939029,200.53339851817,202.72659239648,203.71646833592,208.51878075067,209.5369388598,210.56006844408,212.8629220163,213.90229175271,216.62558481901,218.9447197882,220.01378580279,221.73221043365,222.81488724241,228.06741644604,229.18102687791,231.68753416741,232.81882095533,233.95563160453,239.47078726834,240.6400782218,243.27191087578,244.4597620031,249.5526737115,250.2225369008,251.44432663176,253.4082404956,254.6455854199,259.95070178281,260.64847593833,261.92117357475,266.07865252038,267.37786469089,273.68089973525,275.01723225349,278.02504100089,279.3825851464,280.74675792544,285.20305567028,287.36494472201,291.02352619417,291.92629305093,292.44453950566,297.08651632321,299.33848408543,304.08988859472,305.57470250388,310.42509460711,311.94084213937,312.778171126,319.29438302446,320.85343762907,325.94634933747,328.4170796823,333.63004920107,334.22233086361,335.25910217568,339.52744722653,342.10112466906,347.53130125111,349.228231433],description:"81/80, 126/125 and 4194304/4117715, Gene Ward Smith, 2002"},pipedum_81:{frequencies:[116.54094037952,117.10998793997,118.96887663743,119.87068153322,121.77339076391,122.3679873985,122.96548733697,124.86529326377,124.9173204693,126.84728204574,127.4666535401,128.08904930934,130.12220882219,130.47149010419,131.10855792696,133.18964614802,133.83998621711,135.96443044277,136.62831926329,136.99506460939,139.16958944446,139.84912845542,140.53198552796,142.70319230145,142.76265196491,144.96832233798,145.6761754744,146.38748492496,148.71109579678,149.83835191653,152.21673845488,152.95998424812,153.70685917121,155.38792050603,156.14665058662,156.56578812502,159.82757537763,160.60798346053,163.08936263023,163.15731653133,163.95398311595,166.48705768503,167.29998277138,169.12970939431,169.95553805347,170.78539907912,173.96198680558,174.81141056928,175.66498190995,177.58619486403,178.45331495614,182.66008614586,183.55198109774,184.08675852442,184.44823100545,186.46550460723,187.37598070395,190.2709230686,191.19998031015,193.29109645065,194.23490063253,195.18331323328,199.78446922203,200.75997932566,202.95565127318,203.94664566416,204.94247889494,208.7543841667,209.77369268314,210.79797829194,213.10343383684,214.14397794737,217.45248350698,218.5142632116,218.60531082127,221.98274358004,223.06664369518,227.71386543882,228.32510768232,229.43997637218,231.94931574077,233.08188075904],description:"81/80, 126/125 and 17294403/16777216, Gene Ward Smith, 2002"},pipedum_87:{frequencies:[82.40688922822,83.34286871081,83.43697534357,84.3846545697,84.87648045204,85.84050961273,86.81548824043,86.91351598289,87.90068184343,87.99993493267,88.99944036648,90.43280025045,90.53491248218,91.56321025358,92.60318745646,92.70775038175,93.76072729966,93.86659726152,95.37834401414,96.46165360048,96.57057331432,97.66742427048,97.77770548075,98.88826707386,100.01144245297,100.59434720242,101.73690028175,101.85177654245,103.00861153527,104.17858588852,104.29621917947,105.48081821212,105.59992191921,107.30063701591,108.51936030054,108.64189497861,109.87585230429,111.12382494775,111.2493004581,112.5128727596,113.16864060272,114.45401281697,115.75398432057,115.88468797718,117.20090912458,117.3332465769,118.66592048864,120.5770670006,120.7132166429,122.0842803381,122.22213185094,123.61033384233,125.01430306622,125.15546301536,127.17112535219,128.61553813397,128.76076441909,130.22323236064,130.37027397433,131.85102276515,133.3485899373,133.49916054972,135.64920037567,135.80236872326,137.34481538037,138.90478118469,139.06162557262,140.6410909495,140.79989589228,143.06751602122,144.69248040072,144.85585997148,146.50113640572,146.66655822112,148.3324006108,150.01716367946,150.89152080363,152.60535042263,154.33864576076,154.51291730291,156.26787883277,156.4443287692,158.22122731818,160.76942266746,160.95095552387,162.7790404508,162.96284246792,164.81377845644],description:"67108864/66430125 and 15625/15552, Op de Coul"},pipedum_9:{frequencies:[261.6255653006,280.31310567921,305.22982618403,327.03195662575,348.83408706747,392.4383479509,420.46965851882,448.50096908674,490.54793493862,523.2511306012],description:"225/224, 49/48 and 36/35 are homophonic intervals"},pipedum_99:{frequencies:[41.20344461411,41.53307217102,41.72802550619,42.06184971024,42.3806858888,42.72949811834,42.92025480636,43.26361684482,43.60972577957,43.95034092172,44.14654780083,44.49972018324,44.86597302425,45.06626754668,45.407877738,45.78160512679,46.1478579678,46.35387519087,46.73538856693,47.08965098755,47.46636819545,47.68917200707,48.07068538313,48.45525086619,48.65129757643,49.0517197787,49.44413353693,49.83968660523,50.07363060743,50.47421965228,50.85682306656,51.275397742,51.50430576764,51.91634021378,52.34363519496,52.55541404861,52.975857361,53.41187264792,53.8391676291,54.07952105602,54.50191086522,54.93792615215,55.37742956136,55.62465022905,56.08246628032,56.50758118507,56.7598471725,57.22700640849,57.68482245975,58.14630103943,58.41923570866,58.86206373444,59.33296024432,59.82129736567,60.08835672891,60.56906358274,61.04214016905,61.31464972338,61.80516692116,62.29960825653,62.81236223395,63.06649685833,63.5710288332,64.0942471775,64.60700115492,64.89542526722,65.40229303827,65.92551138258,66.21982170125,66.7648408099,67.29895953638,67.80909742208,68.12738858153,68.67240769018,69.2217869517,69.77556124732,70.1030828504,70.63447648133,71.19955229318,71.53375801061,72.10602807469,72.68287629929,73.25056820286,73.57757966805,74.1662003054,74.77662170709,75.37483468075,75.67979623,76.30267521131,76.91309661301,77.25645865146,77.87451032067,78.48275164592,79.11061365909,79.4637860415,80.11780897188,80.75875144366,81.37091690649,81.75286629784,82.40688922822],description:"2401/2400, 3136/3125 and 4375/4374, Gene Ward Smith, 2002"},pipedum_9a:{frequencies:[261.6255653006,282.62020942966,305.22982618403,329.72357766794,356.10146388137,384.67750727926,415.4517078616,448.79042515914,484.69365917187,523.2511306012],description:"4375/4374, 2401/2400 and 21/20 are homophonic intervals"},pipedum_9b:{frequencies:[261.6255653006,279.06726965397,306.59245933664,327.03195662575,357.20610515709,383.2405741708,418.60090448096,446.50763144636,490.54793493862,523.2511306012],description:"128/125 and 2109375/2097152 are homophonic intervals"},pipedum_9c:{frequencies:[261.6255653006,285.40970760065,305.22982618403,332.97799220076,348.83408706747,392.4383479509,411.12588832951,448.50096908674,479.64686971777,523.2511306012],description:"49/48, 21/20, 99/98 and 121/120, Gene Ward Smith, 2002"},pipedum_9d:{frequencies:[261.6255653006,277.4816601673,308.34441624714,327.03195662575,346.85207520913,394.68085279633,418.60090448096,443.97065626768,493.35106599542,523.2511306012],description:"128/125, 36/35, 99/98 and 121/120, Gene Ward Smith, 2002"},pipedum_9e:{frequencies:[261.6255653006,272.52663052146,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,502.32108537715,523.2511306012],description:"21/20, 27/25 and 128/125"},polansky_ps:{frequencies:[261.6255653006,523.2511306012,784.8766959018,1046.5022612024,1308.127826503,1569.7533918036,1831.3789571042,2093.0045224048,2354.6300877054,2616.255653006,2877.8812183066,3139.5067836072,3401.1323489078,3662.7579142084,3924.383479509,4186.0090448096,4447.6346101102,327.03195662575,654.0639132515,981.09586987725,1308.127826503,1635.15978312875,1962.1917397545,2289.22369638025,2616.255653006,2943.28760963175,3270.3195662575,3597.35152288325,3924.383479509,4251.41543613475,4578.4473927605,4905.47934938625,5232.511306012,5559.54326263775,392.4383479509,784.8766959018,1177.3150438527,1569.7533918036,1962.1917397545,2354.6300877054,2747.0684356563,3139.5067836072,3531.9451315581,3924.383479509,4316.8218274599,4709.2601754108,5101.6985233617,5494.1368713126,5886.5752192635,6279.0135672144,6671.4519151653],description:"Three interlocking harmonic series on 1:5:3 by Larry Polansky in Psaltery"},poole:{frequencies:[261.6255653006,294.32876096318,327.03195662575,348.83408706747,392.4383479509,436.04260883433,457.84473927605,523.2511306012],description:"Poole's double diatonic or dichordal scale"},porcupine:{frequencies:[261.6255653006,268.5059110196,275.56719913678,277.81869773502,285.12489766782,287.45448663717,295.01409284105,302.77250493809,305.24628043356,313.27378316024,315.83336022842,324.13928669805,332.66364612382,335.38164643474,344.20166244741,347.01393314922,356.13986022226,365.50578499276,368.49211923405,378.18288921726,381.27279846892,391.29968045081,401.5902538439,404.87141319969,415.51890206933,418.91386427268,429.93064777916,441.23715556831,444.84224659643,456.54090625717,460.27103529174,472.37544811397,484.79818817936,488.75918813348,501.6127950959,505.71118020326,519.01059820838,523.2511306012],description:"porcupine temperament, g=162.996, 5-limit"},portbag1:{frequencies:[261.6255653006,281.75060878526,311.64221749042,334.88072358477,376.74081403286,413.43299207996,457.84473927605,523.2511306012],description:"Portugese bagpipe tuning"},portbag2:{frequencies:[261.6255653006,274.70684356563,281.75060878526,310.07474405997,317.68818643644,343.38355445704,372.08969287196,392.4383479509,408.78994578219,482.37213602298,523.2511306012],description:"Portugese bagpipe tuning 2"},prelleur:{frequencies:[261.6255653006,276.42153822591,293.20376052703,310.91918875105,328.72923110101,349.43408698743,368.89538496172,391.53834819612,414.55891854195,438.90564190541,466.17878415199,492.19384741628,523.2511306012],description:"Peter Prelleur's well temperament (1731)"},preston:{frequencies:[261.6255653006,276.24946721727,293.45376109391,311.26733605541,328.91048112005,349.30075403587,368.79929095641,391.73834630677,413.67420227347,439.48064068428,466.20100528964,492.6657196346,523.2511306012],description:"Preston's equal beating temperament (1785)"},preston2:{frequencies:[261.6255653006,276.2302000593,293.37610901672,311.58628319174,328.97985807656,349.39999567988,368.9044325484,391.80273191286,413.67420227347,439.35140993827,466.62242981045,492.67053466508,523.2511306012],description:"Preston's theoretically correct well temperament"},prime_10:{frequencies:[261.6255653006,277.97716313189,310.68035879446,327.03195662575,359.73515228832,376.08675011961,392.4383479509,425.14154361347,457.84473927605,474.19633710734,523.2511306012],description:"First 10 prime numbers reduced by 2/1"},prime_5:{frequencies:[261.6255653006,294.32876096318,327.03195662575,392.4383479509,436.04260883433,523.2511306012],description:'What Lou Harrison calls "the Prime Pentatonic", a widely used scale'},primes6:{frequencies:[261.6255653006,523.2511306012,784.8766959018,1308.127826503,1831.3789571042,2877.8812183066,3401.1323489078],description:"First 6 primes"},prinz:{frequencies:[261.6255653006,275.62199471997,292.50627485027,310.07474405997,327.03195662575,348.83408706747,367.49599295996,391.22147055517,413.43299207996,437.39890198442,465.11211608996,490.54793493862,523.2511306012],description:"Prinz well-tempermament (1808)"},prinz2:{frequencies:[261.6255653006,275.62199471997,291.81313052759,310.07474405997,327.03195662575,348.83408706747,367.49599295996,390.42584360243,413.43299207996,436.71344361716,465.11211608996,490.54793493862,523.2511306012],description:"Prinz equal beating temperament (1808)"},"prod13-2":{frequencies:[261.6255653006,265.71346475842,269.80136421624,286.15296204753,292.28481123426,294.32876096318,314.76825825228,318.85615771011,327.03195662575,343.38355445704,345.42750418595,359.73515228832,371.99885066179,392.4383479509,400.61414686654,408.78994578219,425.14154361347,449.66894036041,457.84473927605,490.54793493862,494.63583439645,523.2511306012],description:"13-limit binary products [1 3 5 7 11 13]"},prod13:{frequencies:[261.6255653006,265.71346475842,269.80136421624,286.15296204753,292.28481123426,294.32876096318,314.76825825228,318.85615771011,327.03195662575,331.11985608357,343.38355445704,345.42750418595,359.73515228832,367.91095120397,371.99885066179,392.4383479509,400.61414686654,404.70204632437,408.78994578219,425.14154361347,441.49314144476,449.66894036041,457.84473927605,478.28423656516,490.54793493862,494.63583439645,515.07533168556,523.2511306012],description:"13-limit binary products [1 3 5 7 9 11 13]"},prod7d:{frequencies:[261.6255653006,265.7783520514,267.90457886781,273.37201925287,279.06726965397,286.15296204753,294.32876096318,299.00064605783,300.46061014991,306.59245933664,310.07474405997,318.93402246168,327.03195662575,334.88072358477,341.71502406609,343.38355445704,348.83408706747,350.53737850823,357.69120255941,367.91095120397,372.08969287196,382.72082695402,390.53145607553,392.4383479509,398.6675280771,400.61414686654,408.78994578219,418.60090448096,429.2294430713,441.49314144476,446.50763144636,455.62003208812,457.84473927605,465.11211608996,478.40103369253,490.54793493862,500.76768358318,510.98743222773,515.07533168556,523.2511306012],description:"Double Cubic Corner 7-limit. Chalmers '96"},prod7s:{frequencies:[261.6255653006,286.15296204753,294.32876096318,300.46061014991,306.59245933664,327.03195662575,343.38355445704,350.53737850823,357.69120255941,367.91095120397,392.4383479509,400.61414686654,408.78994578219,429.2294430713,441.49314144476,457.84473927605,490.54793493862,500.76768358318,510.98743222773,515.07533168556,523.2511306012],description:"Single Cubic Corner 7-limit"},prodq13:{frequencies:[261.6255653006,265.71346475842,269.80136421624,276.76092858245,279.06726965397,286.15296204753,292.28481123426,294.32876096318,299.00064605783,304.4370214407,314.76825825228,318.85615771011,322.00069575458,327.03195662575,334.88072358477,341.71502406609,343.38355445704,345.42750418595,348.83408706747,359.73515228832,368.0007951481,371.99885066179,380.54627680087,392.4383479509,396.30854862103,400.61414686654,408.78994578219,418.60090448096,425.14154361347,429.33426100611,434.91003062957,449.66894036041,457.84473927605,465.11211608996,468.3646483703,478.40103369253,490.54793493862,494.63583439645,507.3950357345,515.20111320734,523.2511306012],description:"13-limit Binary products and quotients. Chalmers '96"},prog_ennea:{frequencies:[261.6255653006,269.29177952703,285.30470202322,311.12698372208,349.22823143301,391.99543598175,403.48177901006,427.47405410759,466.16376151809,523.2511306012],description:"Progressive Enneatonic, 50+100+150+200 cents in each half (500 cents)"},prog_ennea1:{frequencies:[261.6255653006,269.10058145205,285.40970760065,310.68035879446,348.83408706747,392.4383479509,404.33041910093,428.11456140098,465.11211608996,523.2511306012],description:"Progressive Enneatonic, appr. 50+100+150+200 cents in each half (500 cents)"},prog_ennea2:{frequencies:[261.6255653006,269.55361273395,285.40970760065,321.08592105074,348.83408706747,392.4383479509,404.33041910093,428.11456140098,481.6288815761,523.2511306012],description:"Progressive Enneatonic, appr. 50+100+200+150 cents in each half (500 cents)"},prog_ennea3:{frequencies:[261.6255653006,269.55361273395,285.40970760065,310.07474405997,348.83408706747,392.4383479509,404.33041910093,428.11456140098,465.11211608996,523.2511306012],description:"Progressive Enneatonic, appr. 50+100+150+200 cents in each half (500 cents)"},prooijen1:{frequencies:[261.6255653006,339.14425131559,366.27579142084,436.04260883433,470.92601754108,610.45965236807,726.73768139056,784.8766959018],description:"Kees van Prooijen, major mode of Bohlen-Pierce"},prooijen2:{frequencies:[261.6255653006,311.45900631024,336.37572681506,436.04260883433,470.92601754108,560.62621135843,726.73768139056,784.8766959018],description:"Kees van Prooijen, minor mode of Bohlen-Pierce"},"ps-dorian":{frequencies:[261.6255653006,271.31540105247,279.06726965397,348.83408706747,392.4383479509,490.54793493862,504.56359022259,523.2511306012],description:"Complex 4 of p. 115 based on Archytas's Enharmonic"},"ps-enh":{frequencies:[261.6255653006,266.38239376061,279.06726965397,348.83408706747,392.4383479509,399.57359064092,418.60090448096,523.2511306012],description:"Dorian mode of an Enharmonic genus found in Ptolemy's Harmonics"},"ps-hypod":{frequencies:[261.6255653006,294.32876096318,367.91095120397,378.42269266694,392.4383479509,406.97310157871,418.60090448096,523.2511306012],description:"Complex 7 of p. 115 based on Archytas's Enharmonic"},"ps-hypod2":{frequencies:[261.6255653006,294.32876096318,305.22982618403,313.95067836072,392.4383479509,490.54793493862,504.56359022259,523.2511306012],description:"Complex 8 of p. 115 based on Archytas's Enharmonic"},"ps-mixol":{frequencies:[261.6255653006,271.31540105247,279.06726965397,348.83408706747,436.04260883433,448.50096908674,465.11211608996,523.2511306012],description:"Complex 3 of p. 115 based on Archytas's Enharmonic"},ptolemy:{frequencies:[261.6255653006,294.32876096318,327.03195662575,348.83408706747,392.4383479509,436.04260883433,490.54793493862,523.2511306012],description:"Intense Diatonic Syntonon, also Zarlino's scale"},ptolemy_chrom:{frequencies:[261.6255653006,271.31540105247,290.69507255622,348.83408706747,392.4383479509,406.97310157871,436.04260883433,523.2511306012],description:"Ptolemy Soft Chromatic"},ptolemy_ddiat:{frequencies:[261.6255653006,271.31540105247,310.07474405997,348.83408706747,392.4383479509,413.43299207996,465.11211608996,523.2511306012],description:"Lyra tuning, Dorian mode, comb. of diatonon toniaion & diatonon ditoniaion"},ptolemy_diat:{frequencies:[261.6255653006,290.69507255622,313.95067836072,348.83408706747,392.4383479509,436.04260883433,470.92601754108,523.2511306012],description:"Ptolemy's Diatonon Ditoniaion & Archytas' Diatonic, also Lyra tuning"},ptolemy_diat2:{frequencies:[261.6255653006,271.31540105247,305.22982618403,348.83408706747,392.4383479509,406.97310157871,457.84473927605,523.2511306012],description:"Dorian mode of a permutation of Ptolemy's Tonic Diatonic"},ptolemy_diat3:{frequencies:[261.6255653006,294.32876096318,313.95067836072,348.83408706747,392.4383479509,441.49314144476,470.92601754108,523.2511306012],description:"Dorian mode of the remaining permutation of Ptolemy's Intense Diatonic"},ptolemy_diat4:{frequencies:[261.6255653006,299.00064605783,310.07474405997,348.83408706747,392.4383479509,448.50096908674,465.11211608996,523.2511306012],description:"permuted Ptolemy's diatonic"},ptolemy_diat5:{frequencies:[261.6255653006,271.31540105247,310.07474405997,348.83408706747,392.4383479509,406.97310157871,465.11211608996,523.2511306012],description:"Sterea lyra, Dorian, comb. of 2 Tonic Diatonic 4chords, also Archytas' diatonic"},ptolemy_diff:{frequencies:[261.6255653006,294.32876096318,327.03195662575,343.38355445704,392.4383479509,425.14154361347,490.54793493862,523.2511306012],description:"Difference tones of Intense Diatonic reduced by 2/1"},ptolemy_enh:{frequencies:[261.6255653006,267.43946675172,279.06726965397,348.83408706747,392.4383479509,401.15920012759,418.60090448096,523.2511306012],description:"Dorian mode of Ptolemy's Enharmonic"},ptolemy_exp:{frequencies:[261.6255653006,272.52663052146,275.93321340298,287.4304306281,290.69507255622,294.32876096318,306.59245933664,327.03195662575,340.65828815182,344.91651675372,348.83408706747,363.36884069528,367.91095120397,383.2405741708,392.4383479509,408.78994578219,413.89982010446,431.14564594215,436.04260883433,441.49314144476,459.88868900496,490.54793493862,510.98743222773,517.37477513058,523.2511306012],description:"Intense Diatonic expanded: all interval combinations"},ptolemy_hom:{frequencies:[261.6255653006,285.40970760065,313.95067836072,348.83408706747,392.4383479509,428.11456140098,470.92601754108,523.2511306012],description:"Dorian mode of Ptolemy's Equable Diatonic or Diatonon Homalon"},ptolemy_iast:{frequencies:[261.6255653006,271.31540105247,310.07474405997,348.83408706747,392.4383479509,418.60090448096,470.92601754108,523.2511306012],description:"Ptolemy's Iastia or Lydia tuning, mixture of Tonic Diatonic & Intense Diatonic"},ptolemy_iastaiol:{frequencies:[261.6255653006,271.31540105247,310.07474405997,348.83408706747,392.4383479509,441.49314144476,465.11211608996,523.2511306012],description:"Ptolemy's kithara tuning, mixture of Tonic Diatonic and Ditone Diatonic"},ptolemy_ichrom:{frequencies:[261.6255653006,274.08392555301,299.00064605783,348.83408706747,392.4383479509,411.12588832951,448.50096908674,523.2511306012],description:"Dorian mode of Ptolemy's Intense Chromatic"},ptolemy_idiat:{frequencies:[261.6255653006,279.06726965397,313.95067836072,348.83408706747,392.4383479509,418.60090448096,470.92601754108,523.2511306012],description:"Dorian mode of Ptolemy's Intense Diatonic (Diatonon Syntonon)"},ptolemy_imix:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,327.03195662575,348.83408706747,392.4383479509,418.60090448096,436.04260883433,465.11211608996,490.54793493862,523.2511306012],description:"Ptolemy Intense Diatonic mixed with its inverse"},ptolemy_malak:{frequencies:[261.6255653006,274.08392555301,299.00064605783,348.83408706747,392.4383479509,406.97310157871,465.11211608996,523.2511306012],description:"Ptolemy's Malaka lyra tuning, a mixture of Intense Chrom. & Tonic Diatonic"},ptolemy_malak2:{frequencies:[261.6255653006,271.31540105247,290.69507255622,348.83408706747,392.4383479509,406.97310157871,465.11211608996,523.2511306012],description:"Malaka lyra, mixture of his Soft Chromatic and Tonic Diatonic."},ptolemy_mdiat:{frequencies:[261.6255653006,274.70684356563,305.22982618403,348.83408706747,392.4383479509,412.06026534844,457.84473927605,523.2511306012],description:"Ptolemy soft diatonic"},ptolemy_mdiat2:{frequencies:[261.6255653006,290.69507255622,305.22982618403,348.83408706747,392.4383479509,436.04260883433,457.84473927605,523.2511306012],description:"permuted Ptolemy soft diatonic"},ptolemy_mdiat3:{frequencies:[261.6255653006,299.00064605783,313.95067836072,348.83408706747,392.4383479509,448.50096908674,470.92601754108,523.2511306012],description:"permuted Ptolemy soft diatonic"},ptolemy_meta:{frequencies:[261.6255653006,274.70684356563,305.22982618403,348.83408706747,392.4383479509,406.97310157871,465.11211608996,523.2511306012],description:"Metabolika lyra tuning, mixture of Soft Diatonic & Tonic Diatonic"},ptolemy_mix:{frequencies:[261.6255653006,279.06726965397,290.69507255622,294.32876096318,310.07474405997,313.95067836072,327.03195662575,348.83408706747,353.19451315581,367.91095120397,372.08969287196,387.59343007496,392.4383479509,418.60090448096,436.04260883433,441.49314144476,465.11211608996,470.92601754108,490.54793493862,523.2511306012],description:"All modes of Ptolemy Intense Diatonic mixed"},ptolemy_prod:{frequencies:[261.6255653006,272.52663052146,275.93321340298,279.06726965397,290.69507255622,294.32876096318,313.95067836072,327.03195662575,331.11985608357,348.83408706747,363.36884069528,367.91095120397,372.08969287196,387.59343007496,392.4383479509,418.60090448096,436.04260883433,441.49314144476,465.11211608996,484.4917875937,490.54793493862,523.2511306012],description:"Product of Intense Diatonic with its intervals"},ptolemy_tree:{frequencies:[261.6255653006,294.32876096318,299.00064605783,305.22982618403,313.95067836072,327.03195662575,348.83408706747,392.4383479509,436.04260883433,457.84473927605,470.92601754108,479.64686971777,485.87604984397,490.54793493862,523.2511306012],description:"Intense Diatonic with all their Farey parent fractions"},pygmie:{frequencies:[261.6255653006,299.00064605783,343.38355445704,392.4383479509,457.84473927605,523.2511306012],description:"Pygmie scale"},pyle:{frequencies:[261.6255653006,277.19063644077,293.6461094938,311.15753660095,329.66944764997,349.23831768549,369.99228554622,391.93430587921,415.28070933274,439.96441988338,466.23108306565,493.99742571239,523.2511306012],description:"Howard Willet Pyle quasi equal temperament"},pyramid:{frequencies:[261.6255653006,294.32876096318,306.59245933664,327.03195662575,348.83408706747,367.91095120397,392.4383479509,408.78994578219,436.04260883433,441.49314144476,465.11211608996,490.54793493862,523.2511306012],description:'This scale may also be called the "Wedding Cake"'},pyramid_down:{frequencies:[261.6255653006,279.06726965397,294.32876096318,313.95067836072,334.88072358477,348.83408706747,392.4383479509,418.60090448096,441.49314144476,465.11211608996,470.92601754108,502.32108537715,523.2511306012],description:"Upside-Down Wedding Cake (divorce cake)"},pyth_12:{frequencies:[261.6255653006,279.38237857051,294.32876096318,310.07474405997,331.11985608357,348.83408706747,372.50983809402,392.4383479509,419.07356785577,441.49314144476,465.11211608996,496.67978412536,523.2511306012],description:"12-tone Pythagorean scale"},pyth_12s:{frequencies:[261.6255653006,279.38237857051,294.32876096318,314.30517589183,326.6631048533,348.83408706747,367.49599295996,392.4383479509,419.07356785577,435.55080647107,471.45776383774,489.99465727995,523.2511306012],description:"Scale with major thirds flat by a schisma"},pyth_17:{frequencies:[261.6255653006,275.62199471997,279.38237857051,294.32876096318,310.07474405997,314.30517589183,331.11985608357,348.83408706747,367.49599295996,372.50983809402,392.4383479509,413.43299207996,419.07356785577,441.49314144476,465.11211608996,471.45776383774,496.67978412536,523.2511306012],description:"17-tone Pythagorean scale"},pyth_17s:{frequencies:[261.6255653006,275.62199471997,279.06726965397,294.32876096318,310.07474405997,313.95067836072,331.11985608357,348.83408706747,367.49599295996,372.08969287196,392.4383479509,413.43299207996,418.60090448096,441.49314144476,465.11211608996,470.92601754108,496.67978412536,523.2511306012],description:"Schismatically altered 17-tone Pythagorean scale"},pyth_22:{frequencies:[261.6255653006,275.62199471997,279.38237857051,290.36720431405,294.32876096318,310.07474405997,314.30517589183,326.6631048533,331.11985608357,348.83408706747,353.59332287831,367.49599295996,372.50983809402,392.4383479509,413.43299207996,419.07356785577,435.55080647107,441.49314144476,465.11211608996,471.45776383774,489.99465727995,496.67978412536,523.2511306012],description:"Pythagorean shrutis"},pyth_27:{frequencies:[261.6255653006,265.19499215873,275.62199471997,279.38237857051,290.36720431405,294.32876096318,298.34436617857,310.07474405997,314.30517589183,326.6631048533,331.11985608357,348.83408706747,353.59332287831,367.49599295996,372.50983809402,387.15627241873,392.4383479509,397.79248823809,413.43299207996,419.07356785577,435.55080647107,441.49314144476,447.51654926786,465.11211608996,471.45776383774,489.99465727995,496.67978412536,523.2511306012],description:"27-tone Pythagorean scale"},pyth_31:{frequencies:[261.6255653006,265.19499215873,275.62199471997,279.38237857051,283.19406633357,294.32876096318,298.34436617857,310.07474405997,314.30517589183,318.59332496145,326.6631048533,331.11985608357,335.63741195089,348.83408706747,353.59332287831,367.49599295996,372.50983809402,377.59208844475,392.4383479509,397.79248823809,413.43299207996,419.07356785577,424.79110016094,441.49314144476,447.51654926786,465.11211608996,471.45776383774,477.8899872033,489.99465727995,496.67978412536,503.45611792634,523.2511306012],description:"31-tone Pythagorean scale"},pyth_7a:{frequencies:[261.6255653006,277.97716313189,294.32876096318,312.72430852337,331.11985608357,348.83408706747,370.63621750918,392.4383479509,416.96574469783,441.49314144476,469.08646278506,496.67978412536,523.2511306012],description:"Pythagorean 7-tone with whole tones divided arithmetically"},pyth_7h:{frequencies:[261.6255653006,277.01530443593,294.32876096318,311.64221749042,331.11985608357,348.83408706747,369.35373924791,392.4383479509,415.52295665389,441.49314144476,467.46332623563,496.67978412536,523.2511306012],description:"Pythagorean 7-tone with whole tones divided harmonically"},pyth_chrom:{frequencies:[261.6255653006,275.62199471997,294.32876096318,348.83408706747,392.4383479509,413.43299207996,441.49314144476,465.11211608996,523.2511306012],description:"Dorian mode of the so-called Pythagorean chromatic, recorded by Gaudentius"},pyth_sev:{frequencies:[261.6255653006,268.38018042036,275.30918532257,282.41708286353,291.47537246454,299.00064605783,306.7202061947,314.63906894008,322.76237975718,333.11471138804,341.71502406609,350.53737850823,359.58750736009,368.87129039875,380.70252730062,390.53145607553,400.61414686654,410.95715126868,421.56719060242,435.08860262928,446.32166408632,457.84473927605,469.66531573563,481.7910743145,497.2441172906,510.08190181294,523.2511306012],description:"26-tone Pythagorean scale based on 7/4"},pyth_sev_16:{frequencies:[261.6255653006,268.38018042036,275.30918532257,282.41708286353,306.7202061947,314.63906894008,322.76237975718,350.53737850823,359.58750736009,368.87129039875,400.61414686654,410.95715126868,421.56719060242,457.84473927605,469.66531573563,481.7910743145,523.2511306012],description:'16-tone Pythagorean scale based on 7/4, "Armodue"'},pyth_third:{frequencies:[261.6255653006,267.90457886781,274.33428876064,280.9183116909,287.66035117148,290.46272611903,297.43383186155,304.57224382623,311.88197767806,319.36714514233,327.03195662575,334.88072358477,342.9178609508,351.14788961362,359.57543896435,363.07840893547,371.79228894479,380.71530478279,389.85247209758,399.20893142792,408.78994578219,418.60090448096,428.6473261885,438.93486201703,449.46929870544,453.84801015616,464.74036282794,475.89413097849,487.31559012197,499.0111642849,510.98743222773,523.2511306012],description:"Cycle of 5/4 thirds"}};o.prototype._tune=function(i,n=220){const e=new t;if(!e.isValidScale(i))throw new Error('not a valid tune.js scale name: "'+i+'". See http://abbernie.github.io/tune/scales.html');return e.loadScale(i),e.tonicize(n),this._asNumber()._withHap(r=>r.withValue(()=>e.note(r.value)).setContext({...r.context,type:"frequency"}))};o.prototype.define("tune",(i,n)=>n.tune(i),{composable:!0,patternified:!0}); diff --git a/packages/react/examples/nano-repl/dist/assets/index.75f8960b.css b/packages/react/examples/nano-repl/dist/assets/index.75f8960b.css new file mode 100644 index 00000000..61ea9b3d --- /dev/null +++ b/packages/react/examples/nano-repl/dist/assets/index.75f8960b.css @@ -0,0 +1 @@ +.cm-editor{background-color:transparent!important;height:100%;z-index:11;font-size:16px}.cm-theme-light{width:100%}.cm-line>*{background:#00000095}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.fixed{position:fixed}.absolute{position:absolute}.bottom-0{bottom:0px}.z-\[12\]{z-index:12}.flex{display:flex}.w-full{width:100%}.justify-center{justify-content:center}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.bg-slate-500{--tw-bg-opacity: 1;background-color:rgb(100 116 139 / var(--tw-bg-opacity))}.px-2{padding-left:.5rem;padding-right:.5rem}body{background:#123} diff --git a/packages/react/examples/nano-repl/dist/assets/index.bb9bb2c4.js b/packages/react/examples/nano-repl/dist/assets/index.bb9bb2c4.js new file mode 100644 index 00000000..f1e6bb65 --- /dev/null +++ b/packages/react/examples/nano-repl/dist/assets/index.bb9bb2c4.js @@ -0,0 +1,8 @@ +import{b as ut,d as Se,e as pt}from"./index.ec9f9930.js";function gt(a,c){function r(){this.constructor=a}r.prototype=c.prototype,a.prototype=new r}function D(a,c,r,_){var p=Error.call(this,a);return Object.setPrototypeOf&&Object.setPrototypeOf(p,D.prototype),p.expected=c,p.found=r,p.location=_,p.name="SyntaxError",p}gt(D,Error);function U(a,c,r){return r=r||" ",a.length>c?a:(c-=a.length,r+=r.repeat(c),a+r.slice(0,c))}D.prototype.format=function(a){var c="Error: "+this.message;if(this.location){var r=null,_;for(_=0;_ `+$+` +`+A+` | +`+p.line+" | "+E+` +`+A+" | "+U("",p.column-1," ")+U("",h,"^")}else c+=` + at `+$}return c};D.buildMessage=function(a,c){var r={literal:function(m){return'"'+p(m.text)+'"'},class:function(m){var h=m.parts.map(function(b){return Array.isArray(b)?$(b[0])+"-"+$(b[1]):$(b)});return"["+(m.inverted?"^":"")+h.join("")+"]"},any:function(){return"any character"},end:function(){return"end of input"},other:function(m){return m.description}};function _(m){return m.charCodeAt(0).toString(16).toUpperCase()}function p(m){return m.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(h){return"\\x0"+_(h)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(h){return"\\x"+_(h)})}function $(m){return m.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(h){return"\\x0"+_(h)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(h){return"\\x"+_(h)})}function w(m){return r[m.type](m)}function A(m){var h=m.map(w),b,F;if(h.sort(),h.length>0){for(b=1,F=1;b",Me="@",We="!",Ze="(",Ge=")",Ue="/",Xe="*",He="%",Je="?",V="struct",Y="target",ee="euclid",re="slow",se="rotL",te="rotR",ne="fast",ae="scale",ie="//",fe="cat",Ke="$",oe="setcps",ce="setbpm",le="hush",Qe=/^[1-9]/,Ve=/^[eE]/,Ye=/^[0-9]/,ue=/^[ \n\r\t]/,er=/^[0-9a-zA-Z~]/,pe=/^[^\n]/,rr=Ae("number"),ge=g(".",!1),sr=j([["1","9"]],!1,!1),tr=j(["e","E"],!1,!1),ve=g("-",!1),nr=g("+",!1),ar=g("0",!1),ir=j([["0","9"]],!1,!1),fr=Ae("whitespace"),$e=j([" ",` +`,"\r"," "],!1,!1),or=g(",",!1),cr=g("|",!1),lr=g('"',!1),ur=g("'",!1),pr=j([["0","9"],["a","z"],["A","Z"],"~"],!1,!1),gr=g("#",!1),vr=g("^",!1),$r=g("_",!1),hr=g(":",!1),he=g("[",!1),me=g("]",!1),mr=g("<",!1),_r=g(">",!1),dr=g("@",!1),Ar=g("!",!1),wr=g("(",!1),yr=g(")",!1),br=g("/",!1),Cr=g("*",!1),xr=g("%",!1),Er=g("?",!1),Fr=g("struct",!1),jr=g("target",!1),Sr=g("euclid",!1),Rr=g("slow",!1),Pr=g("rotL",!1),Or=g("rotR",!1),qr=g("fast",!1),Ir=g("scale",!1),Dr=g("//",!1),_e=j([` +`],!0,!1),kr=g("cat",!1),Nr=g("$",!1),Br=g("setcps",!1),Tr=g("setbpm",!1),zr=g("hush",!1),Lr=function(){return parseFloat(As())},Mr=function(e){return e.join("")},Wr=function(e){return e},Zr=function(e){return e.arguments_.alignment="t",e},Gr=function(e){return{weight:e}},Ur=function(e){return{replicate:e}},Xr=function(e,t,n){return{operator:{type_:"bjorklund",arguments_:{pulse:e,step:t,rotation:n||0}}}},Hr=function(e){return{operator:{type_:"stretch",arguments_:{amount:e}}}},Jr=function(e){return{operator:{type_:"stretch",arguments_:{amount:"1/"+e}}}},Kr=function(e){return{operator:{type_:"fixed-step",arguments_:{amount:e}}}},Qr=function(e){return{operator:{type_:"degradeBy",arguments_:{amount:e||.5}}}},Vr=function(e,t){return new lt(e,t)},Yr=function(e){return new Z(e,"h")},es=function(e){return{alignment:"v",list:e}},rs=function(e){return{alignment:"r",list:e}},ss=function(e,t){return t&&t.list.length>0?new Z([e,...t.list],t.alignment):e},ts=function(e){return e},ns=function(e){return{name:"struct",args:{sequence:e}}},as=function(e){return{name:"target",args:{name:e}}},is=function(e,t,n){return{name:"bjorklund",args:{pulse:parseInt(e),step:parseInt(t)}}},fs=function(e){return{name:"stretch",args:{amount:e}}},os=function(e){return{name:"shift",args:{amount:"-"+e}}},cs=function(e){return{name:"shift",args:{amount:e}}},ls=function(e){return{name:"stretch",args:{amount:"1/"+e}}},us=function(e){return{name:"scale",args:{scale:e.join("")}}},de=function(e,t){return t},ps=function(e,t){return t.unshift(e),new Z(t,"t")},gs=function(e){return e},vs=function(e,t){return new ct(e.name,e.args,t)},$s=function(e){return e},hs=function(e){return e},ms=function(e){return new G("setcps",{value:e})},_s=function(e){return new G("setcps",{value:e/120/2})},ds=function(){return new G("hush")},s=0,v=0,N=[{line:1,column:1}],x=0,L=[],f=0,B;if("startRule"in c){if(!(c.startRule in p))throw new Error(`Can't start parsing from rule "`+c.startRule+'".');$=p[c.startRule]}function As(){return a.substring(v,s)}function ws(){return M(v,s)}function g(e,t){return{type:"literal",text:e,ignoreCase:t}}function j(e,t,n){return{type:"class",parts:e,inverted:t,ignoreCase:n}}function ys(){return{type:"end"}}function Ae(e){return{type:"other",description:e}}function we(e){var t=N[e],n;if(t)return t;for(n=e-1;!N[n];)n--;for(t=N[n],t={line:t.line,column:t.column};nx&&(x=s,L=[]),L.push(e))}function bs(e,t,n){return new D(D.buildMessage(e,t),e,t,n)}function ye(){var e;return e=ot(),e}function y(){var e,t;return f++,e=s,be(),t=T(),t!==r?(js(),Fs(),v=e,e=Lr()):(s=e,e=r),f--,e===r&&f===0&&o(rr),e}function Cs(){var e;return a.charCodeAt(s)===46?(e=w,s++):(e=r,f===0&&o(ge)),e}function xs(){var e;return Qe.test(a.charAt(s))?(e=a.charAt(s),s++):(e=r,f===0&&o(sr)),e}function Es(){var e;return Ve.test(a.charAt(s))?(e=a.charAt(s),s++):(e=r,f===0&&o(tr)),e}function Fs(){var e,t,n,i,l;if(e=s,t=Es(),t!==r){if(n=be(),n===r&&(n=Ss()),n===r&&(n=null),i=[],l=S(),l!==r)for(;l!==r;)i.push(l),l=S();else i=r;i!==r?(t=[t,n,i],e=t):(s=e,e=r)}else s=e,e=r;return e}function js(){var e,t,n,i;if(e=s,t=Cs(),t!==r){if(n=[],i=S(),i!==r)for(;i!==r;)n.push(i),i=S();else n=r;n!==r?(t=[t,n],e=t):(s=e,e=r)}else s=e,e=r;return e}function T(){var e,t,n,i;if(e=Rs(),e===r)if(e=s,t=xs(),t!==r){for(n=[],i=S();i!==r;)n.push(i),i=S();t=[t,n],e=t}else s=e,e=r;return e}function be(){var e;return a.charCodeAt(s)===45?(e=A,s++):(e=r,f===0&&o(ve)),e}function Ss(){var e;return a.charCodeAt(s)===43?(e=E,s++):(e=r,f===0&&o(nr)),e}function Rs(){var e;return a.charCodeAt(s)===48?(e=m,s++):(e=r,f===0&&o(ar)),e}function S(){var e;return Ye.test(a.charAt(s))?(e=a.charAt(s),s++):(e=r,f===0&&o(ir)),e}function u(){var e,t;for(f++,e=[],ue.test(a.charAt(s))?(t=a.charAt(s),s++):(t=r,f===0&&o($e));t!==r;)e.push(t),ue.test(a.charAt(s))?(t=a.charAt(s),s++):(t=r,f===0&&o($e));return f--,t=r,f===0&&o(fr),e}function R(){var e,t,n,i;return e=s,t=u(),a.charCodeAt(s)===44?(n=h,s++):(n=r,f===0&&o(or)),n!==r?(i=u(),t=[t,n,i],e=t):(s=e,e=r),e}function Ce(){var e,t,n,i;return e=s,t=u(),a.charCodeAt(s)===124?(n=b,s++):(n=r,f===0&&o(cr)),n!==r?(i=u(),t=[t,n,i],e=t):(s=e,e=r),e}function P(){var e;return a.charCodeAt(s)===34?(e=F,s++):(e=r,f===0&&o(lr)),e===r&&(a.charCodeAt(s)===39?(e=De,s++):(e=r,f===0&&o(ur))),e}function z(){var e;return er.test(a.charAt(s))?(e=a.charAt(s),s++):(e=r,f===0&&o(pr)),e===r&&(a.charCodeAt(s)===45?(e=A,s++):(e=r,f===0&&o(ve)),e===r&&(a.charCodeAt(s)===35?(e=ke,s++):(e=r,f===0&&o(gr)),e===r&&(a.charCodeAt(s)===46?(e=w,s++):(e=r,f===0&&o(ge)),e===r&&(a.charCodeAt(s)===94?(e=Ne,s++):(e=r,f===0&&o(vr)),e===r&&(a.charCodeAt(s)===95?(e=Be,s++):(e=r,f===0&&o($r)),e===r&&(a.charCodeAt(s)===58?(e=Te,s++):(e=r,f===0&&o(hr)))))))),e}function xe(){var e,t,n;if(e=s,u(),t=[],n=z(),n!==r)for(;n!==r;)t.push(n),n=z();else t=r;return t!==r?(n=u(),v=e,e=Mr(t)):(s=e,e=r),e}function Ps(){var e,t,n,i;return e=s,u(),a.charCodeAt(s)===91?(t=K,s++):(t=r,f===0&&o(he)),t!==r?(u(),n=Fe(),n!==r?(u(),a.charCodeAt(s)===93?(i=Q,s++):(i=r,f===0&&o(me)),i!==r?(u(),v=e,e=Wr(n)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Os(){var e,t,n,i;return e=s,u(),a.charCodeAt(s)===60?(t=ze,s++):(t=r,f===0&&o(mr)),t!==r?(u(),n=O(),n!==r?(u(),a.charCodeAt(s)===62?(i=Le,s++):(i=r,f===0&&o(_r)),i!==r?(u(),v=e,e=Zr(n)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function qs(){var e;return e=xe(),e===r&&(e=Ps(),e===r&&(e=Os())),e}function Is(){var e;return e=Ds(),e===r&&(e=Ns(),e===r&&(e=Bs(),e===r&&(e=Ts(),e===r&&(e=zs(),e===r&&(e=ks(),e===r&&(e=Ls())))))),e}function Ds(){var e,t,n;return e=s,a.charCodeAt(s)===64?(t=Me,s++):(t=r,f===0&&o(dr)),t!==r?(n=y(),n!==r?(v=e,e=Gr(n)):(s=e,e=r)):(s=e,e=r),e}function ks(){var e,t,n;return e=s,a.charCodeAt(s)===33?(t=We,s++):(t=r,f===0&&o(Ar)),t!==r?(n=y(),n!==r?(v=e,e=Ur(n)):(s=e,e=r)):(s=e,e=r),e}function Ns(){var e,t,n,i,l,d,C;return e=s,a.charCodeAt(s)===40?(t=Ze,s++):(t=r,f===0&&o(wr)),t!==r?(u(),n=y(),n!==r?(u(),i=R(),i!==r?(u(),l=y(),l!==r?(u(),R(),u(),d=y(),d===r&&(d=null),u(),a.charCodeAt(s)===41?(C=Ge,s++):(C=r,f===0&&o(yr)),C!==r?(v=e,e=Xr(n,l,d)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Bs(){var e,t,n;return e=s,a.charCodeAt(s)===47?(t=Ue,s++):(t=r,f===0&&o(br)),t!==r?(n=y(),n!==r?(v=e,e=Hr(n)):(s=e,e=r)):(s=e,e=r),e}function Ts(){var e,t,n;return e=s,a.charCodeAt(s)===42?(t=Xe,s++):(t=r,f===0&&o(Cr)),t!==r?(n=y(),n!==r?(v=e,e=Jr(n)):(s=e,e=r)):(s=e,e=r),e}function zs(){var e,t,n;return e=s,a.charCodeAt(s)===37?(t=He,s++):(t=r,f===0&&o(xr)),t!==r?(n=y(),n!==r?(v=e,e=Kr(n)):(s=e,e=r)):(s=e,e=r),e}function Ls(){var e,t,n;return e=s,a.charCodeAt(s)===63?(t=Je,s++):(t=r,f===0&&o(Er)),t!==r?(n=y(),n===r&&(n=null),v=e,e=Qr(n)):(s=e,e=r),e}function Ee(){var e,t,n;return e=s,t=qs(),t!==r?(n=Is(),n===r&&(n=null),v=e,e=Vr(t,n)):(s=e,e=r),e}function O(){var e,t,n;if(e=s,t=[],n=Ee(),n!==r)for(;n!==r;)t.push(n),n=Ee();else t=r;return t!==r&&(v=e,t=Yr(t)),e=t,e}function Ms(){var e,t,n,i,l;if(e=s,t=[],n=s,i=R(),i!==r?(l=O(),l!==r?n=l:(s=n,n=r)):(s=n,n=r),n!==r)for(;n!==r;)t.push(n),n=s,i=R(),i!==r?(l=O(),l!==r?n=l:(s=n,n=r)):(s=n,n=r);else t=r;return t!==r&&(v=e,t=es(t)),e=t,e}function Ws(){var e,t,n,i,l;if(e=s,t=[],n=s,i=Ce(),i!==r?(l=O(),l!==r?n=l:(s=n,n=r)):(s=n,n=r),n!==r)for(;n!==r;)t.push(n),n=s,i=Ce(),i!==r?(l=O(),l!==r?n=l:(s=n,n=r)):(s=n,n=r);else t=r;return t!==r&&(v=e,t=rs(t)),e=t,e}function Fe(){var e,t,n;return e=s,t=O(),t!==r?(n=Ms(),n===r&&(n=Ws()),n===r&&(n=null),v=e,e=ss(t,n)):(s=e,e=r),e}function Zs(){var e,t,n,i;return e=s,u(),t=P(),t!==r?(n=Fe(),n!==r?(i=P(),i!==r?(v=e,e=ts(n)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Gs(){var e;return e=Ys(),e===r&&(e=Js(),e===r&&(e=Vs(),e===r&&(e=Xs(),e===r&&(e=Hs(),e===r&&(e=Us(),e===r&&(e=Qs(),e===r&&(e=Ks()))))))),e}function Us(){var e,t,n;return e=s,a.substr(s,6)===V?(t=V,s+=6):(t=r,f===0&&o(Fr)),t!==r?(u(),n=q(),n!==r?(v=e,e=ns(n)):(s=e,e=r)):(s=e,e=r),e}function Xs(){var e,t,n,i,l;return e=s,a.substr(s,6)===Y?(t=Y,s+=6):(t=r,f===0&&o(jr)),t!==r?(u(),n=P(),n!==r?(i=xe(),i!==r?(l=P(),l!==r?(v=e,e=as(i)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Hs(){var e,t,n,i;return e=s,a.substr(s,6)===ee?(t=ee,s+=6):(t=r,f===0&&o(Sr)),t!==r?(u(),n=T(),n!==r?(u(),i=T(),i!==r?(u(),T(),v=e,e=is(n,i)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r),e}function Js(){var e,t,n;return e=s,a.substr(s,4)===re?(t=re,s+=4):(t=r,f===0&&o(Rr)),t!==r?(u(),n=y(),n!==r?(v=e,e=fs(n)):(s=e,e=r)):(s=e,e=r),e}function Ks(){var e,t,n;return e=s,a.substr(s,4)===se?(t=se,s+=4):(t=r,f===0&&o(Pr)),t!==r?(u(),n=y(),n!==r?(v=e,e=os(n)):(s=e,e=r)):(s=e,e=r),e}function Qs(){var e,t,n;return e=s,a.substr(s,4)===te?(t=te,s+=4):(t=r,f===0&&o(Or)),t!==r?(u(),n=y(),n!==r?(v=e,e=cs(n)):(s=e,e=r)):(s=e,e=r),e}function Vs(){var e,t,n;return e=s,a.substr(s,4)===ne?(t=ne,s+=4):(t=r,f===0&&o(qr)),t!==r?(u(),n=y(),n!==r?(v=e,e=ls(n)):(s=e,e=r)):(s=e,e=r),e}function Ys(){var e,t,n,i,l;if(e=s,a.substr(s,5)===ae?(t=ae,s+=5):(t=r,f===0&&o(Ir)),t!==r)if(u(),n=P(),n!==r){if(i=[],l=z(),l!==r)for(;l!==r;)i.push(l),l=z();else i=r;i!==r?(l=P(),l!==r?(v=e,e=us(i)):(s=e,e=r)):(s=e,e=r)}else s=e,e=r;else s=e,e=r;return e}function W(){var e,t,n,i;if(e=s,a.substr(s,2)===ie?(t=ie,s+=2):(t=r,f===0&&o(Dr)),t!==r){for(n=[],pe.test(a.charAt(s))?(i=a.charAt(s),s++):(i=r,f===0&&o(_e));i!==r;)n.push(i),pe.test(a.charAt(s))?(i=a.charAt(s),s++):(i=r,f===0&&o(_e));t=[t,n],e=t}else s=e,e=r;return e}function et(){var e,t,n,i,l,d,C,I;if(e=s,a.substr(s,3)===fe?(t=fe,s+=3):(t=r,f===0&&o(kr)),t!==r)if(u(),a.charCodeAt(s)===91?(n=K,s++):(n=r,f===0&&o(he)),n!==r)if(u(),i=q(),i!==r){for(l=[],d=s,C=R(),C!==r?(I=q(),I!==r?(v=d,d=de(i,I)):(s=d,d=r)):(s=d,d=r);d!==r;)l.push(d),d=s,C=R(),C!==r?(I=q(),I!==r?(v=d,d=de(i,I)):(s=d,d=r)):(s=d,d=r);d=u(),a.charCodeAt(s)===93?(C=Q,s++):(C=r,f===0&&o(me)),C!==r?(v=e,e=ps(i,l)):(s=e,e=r)}else s=e,e=r;else s=e,e=r;else s=e,e=r;return e}function rt(){var e;return e=et(),e===r&&(e=Zs()),e}function q(){var e,t,n,i,l;if(e=s,t=rt(),t!==r){for(u(),n=[],i=W();i!==r;)n.push(i),i=W();v=e,e=gs(t)}else s=e,e=r;return e===r&&(e=s,t=Gs(),t!==r?(u(),a.charCodeAt(s)===36?(n=Ke,s++):(n=r,f===0&&o(Nr)),n!==r?(i=u(),l=q(),l!==r?(v=e,e=vs(t,l)):(s=e,e=r)):(s=e,e=r)):(s=e,e=r)),e}function st(){var e,t;return e=s,t=q(),t!==r&&(v=e,t=$s(t)),e=t,e===r&&(e=W()),e}function tt(){var e;return e=st(),e}function nt(){var e,t;return e=s,u(),t=at(),t===r&&(t=it(),t===r&&(t=ft())),t!==r?(u(),v=e,e=hs(t)):(s=e,e=r),e}function at(){var e,t,n;return e=s,a.substr(s,6)===oe?(t=oe,s+=6):(t=r,f===0&&o(Br)),t!==r?(u(),n=y(),n!==r?(v=e,e=ms(n)):(s=e,e=r)):(s=e,e=r),e}function it(){var e,t,n;return e=s,a.substr(s,6)===ce?(t=ce,s+=6):(t=r,f===0&&o(Tr)),t!==r?(u(),n=y(),n!==r?(v=e,e=_s(n)):(s=e,e=r)):(s=e,e=r),e}function ft(){var e,t;return e=s,a.substr(s,4)===le?(t=le,s+=4):(t=r,f===0&&o(zr)),t!==r&&(v=e,t=ds()),e=t,e}function ot(){var e;return e=tt(),e===r&&(e=nt()),e}var Z=function(e,t){this.type_="pattern",this.arguments_={alignment:t},this.source_=e},ct=function(e,t,n){this.type_=e,this.arguments_=t,this.source_=n},lt=function(e,t){this.type_="element",this.source_=e,this.options_=t,this.location_=ws()},G=function(e,t){this.type_="command",this.name_=e,this.options_=t};if(B=$(),B!==r&&s===a.length)return B;throw B!==r&&s(c,r)=>{const p=a.source_[r].options_,$=p==null?void 0:p.operator;if($){switch($.type_){case"stretch":const A=Pe($.arguments_.amount).inverse();return X(c).fast(A);case"bjorklund":return c.euclid($.arguments_.pulse,$.arguments_.step,$.arguments_.rotation);case"degradeBy":return X(c)._degradeByWith(Se.early(qe*Ie()).segment(1),$.arguments_.amount)}console.warn(`operator "${$.type_}" not implemented`)}if(p!=null&&p.weight)return c;const w=Object.keys(p||{}).filter(A=>A!=="operator");return w.length&&console.warn(`option${w.length>1?"s":""} ${w.map(A=>`"${A}"`).join(", ")} not implemented`),c};function At(a){a.source_=a.source_.map(c=>{const{replicate:r,..._}=c.options_||{};return r?{...c,options_:{..._,weight:r},source_:{type_:"pattern",arguments_:{alignment:"h"},source_:[{type_:"element",source_:c.source_,location_:c.location_,options_:{operator:{type_:"stretch",arguments_:{amount:Pe(r).inverse().toString()}}}}]}}:c})}function k(a){switch(a.type_){case"pattern":At(a);const c=a.source_.map(k).map(dt(a)),r=a.arguments_.alignment;if(r==="v")return $t(...c);if(r==="r")return ut(Se.early(qe*Ie()).segment(1),c);const _=a.source_.some(p=>{var $;return!!(($=p.options_)!=null&&$.weight)});if(!_&&r==="t")return ht(...c);if(_){const p=mt(...a.source_.map(($,w)=>{var A;return[((A=$.options_)==null?void 0:A.weight)||1,c[w]]}));if(r==="t"){const $=a.source_.reduce((w,A)=>{var E;return w+(((E=A.options_)==null?void 0:E.weight)||1)},0);return p._slow($)}return p}return Oe(...c);case"element":if(a.source_==="~")return je;if(typeof a.source_!="object"){if(!a.location_)return console.warn("no location for",a),a.source_;const{start:p,end:$}=a.location_,w=isNaN(Number(a.source_))?a.source_:Number(a.source_);return vt(w).withLocation([p.line,p.column,p.offset],[$.line,$.column,$.offset])}return k(a.source_);case"stretch":return k(a.source_).slow(a.arguments_.amount);default:return console.warn(`node type "${a.type_}" not implemented -> returning silence`),je}}const J=(...a)=>{const c=a.map(r=>{const _=Re(`"${r}"`);return k(_)});return Oe(...c)},wt=a=>{const c=Re(a);return k(c)};H.prototype.define("mini",J,{composable:!0});H.prototype.define("m",J,{composable:!0});H.prototype.define("h",wt,{composable:!0});function bt(a){return typeof a=="string"?J(a):X(a)}export{D as SyntaxError,wt as h,J as mini,bt as minify,Re as parse,k as patternifyAST}; diff --git a/packages/react/examples/nano-repl/dist/assets/index.cc0b04cf.js b/packages/react/examples/nano-repl/dist/assets/index.cc0b04cf.js new file mode 100644 index 00000000..3e833bfc --- /dev/null +++ b/packages/react/examples/nano-repl/dist/assets/index.cc0b04cf.js @@ -0,0 +1 @@ +import{P as Pattern}from"./index.ec9f9930.js";let loadCache={};async function loadFont(name){if(loadCache[name])return loadCache[name];const load=async()=>{const url=`https://felixroos.github.io/webaudiofontdata/sound/${name}.js`;console.log("load font",name,url);const preset=await fetch(url).then(h=>h.text());let[_,data]=preset.split("={");return eval("{"+data)};return loadCache[name]=load(),loadCache[name]}async function getFontBufferSource(h,y,S){typeof y=="string"&&(y=toMidi(y));const{buffer:n,zone:e}=await getFontPitch(h,y,S),f=S.createBufferSource();f.buffer=n;const i=e.originalPitch-100*e.coarseTune-e.fineTune,l=1*Math.pow(2,(100*y-i)/1200);return f.playbackRate.value=l,e.loopStart>1&&e.loopStart{const f=await loadFont(h);if(!f)throw new Error(`Could not load soundfont ${h}`);const i=findZone(f,y);if(!i)throw new Error("no soundfont zone found for preset ",h,"pitch",y);const l=await getBuffer(i,S);if(!l)throw new Error(`no soundfont buffer found for preset ${h}, pitch: ${y}`);return{buffer:l,zone:i}};return bufferCache[n]=e(),bufferCache[n]}function findZone(h,y){return h.find(S=>S.keyRangeLow<=y&&S.keyRangeHigh+1>=y)}async function getBuffer(h,y){if(h.sample){console.warn("zone.sample untested!");const n=atob(h.sample);h.buffer=y.createBuffer(1,n.length/2,h.sampleRate);const e=h.buffer.getChannelData(0);let f,i,l;for(var S=0;S=65536/2&&(l=l-65536),e[S]=l/65536}else if(h.file){const n=h.file.length,e=new ArrayBuffer(n),f=new Uint8Array(e),i=atob(h.file);let l;for(let t=0;ty.decodeAudioData(e,t))}}const instruments=["0000_JCLive_sf2_file","0000_Aspirin_sf2_file","0000_Chaos_sf2_file","0000_FluidR3_GM_sf2_file","0000_GeneralUserGS_sf2_file","0000_SBLive_sf2","0000_SoundBlasterOld_sf2","0001_FluidR3_GM_sf2_file","0001_GeneralUserGS_sf2_file","0002_GeneralUserGS_sf2_file","0003_GeneralUserGS_sf2_file","0010_Aspirin_sf2_file","0010_Chaos_sf2_file","0010_FluidR3_GM_sf2_file","0010_GeneralUserGS_sf2_file","0010_JCLive_sf2_file","0010_SBLive_sf2","0010_SoundBlasterOld_sf2","0011_Aspirin_sf2_file","0011_FluidR3_GM_sf2_file","0011_GeneralUserGS_sf2_file","0012_GeneralUserGS_sf2_file","0020_Aspirin_sf2_file","0020_Chaos_sf2_file","0020_FluidR3_GM_sf2_file","0020_GeneralUserGS_sf2_file","0020_JCLive_sf2_file","0020_SBLive_sf2","0020_SoundBlasterOld_sf2","0021_Aspirin_sf2_file","0021_GeneralUserGS_sf2_file","0022_Aspirin_sf2_file","0030_Aspirin_sf2_file","0030_Chaos_sf2_file","0030_FluidR3_GM_sf2_file","0030_GeneralUserGS_sf2_file","0030_JCLive_sf2_file","0030_SBLive_sf2","0030_SoundBlasterOld_sf2","0031_Aspirin_sf2_file","0031_FluidR3_GM_sf2_file","0031_GeneralUserGS_sf2_file","0031_SoundBlasterOld_sf2","0040_Aspirin_sf2_file","0040_Chaos_sf2_file","0040_FluidR3_GM_sf2_file","0040_GeneralUserGS_sf2_file","0040_JCLive_sf2_file","0040_SBLive_sf2","0040_SoundBlasterOld_sf2","0041_FluidR3_GM_sf2_file","0041_GeneralUserGS_sf2_file","0041_SoundBlasterOld_sf2","0042_GeneralUserGS_sf2_file","0043_GeneralUserGS_sf2_file","0044_GeneralUserGS_sf2_file","0045_GeneralUserGS_sf2_file","0046_GeneralUserGS_sf2_file","0050_Aspirin_sf2_file","0050_Chaos_sf2_file","0050_FluidR3_GM_sf2_file","0050_GeneralUserGS_sf2_file","0050_JCLive_sf2_file","0050_SBLive_sf2","0050_SoundBlasterOld_sf2","0051_FluidR3_GM_sf2_file","0051_GeneralUserGS_sf2_file","0052_GeneralUserGS_sf2_file","0053_GeneralUserGS_sf2_file","0054_GeneralUserGS_sf2_file","0060_Aspirin_sf2_file","0060_Chaos_sf2_file","0060_FluidR3_GM_sf2_file","0060_GeneralUserGS_sf2_file","0060_JCLive_sf2_file","0060_SBLive_sf2","0060_SoundBlasterOld_sf2","0061_Aspirin_sf2_file","0061_GeneralUserGS_sf2_file","0061_SoundBlasterOld_sf2","0062_GeneralUserGS_sf2_file","0070_Aspirin_sf2_file","0070_Chaos_sf2_file","0070_FluidR3_GM_sf2_file","0070_GeneralUserGS_sf2_file","0070_JCLive_sf2_file","0070_SBLive_sf2","0070_SoundBlasterOld_sf2","0071_GeneralUserGS_sf2_file","0080_Aspirin_sf2_file","0080_Chaos_sf2_file","0080_FluidR3_GM_sf2_file","0080_GeneralUserGS_sf2_file","0080_JCLive_sf2_file","0080_SBLive_sf2","0080_SoundBlasterOld_sf2","0081_FluidR3_GM_sf2_file","0081_GeneralUserGS_sf2_file","0081_SoundBlasterOld_sf2","0090_Aspirin_sf2_file","0090_Chaos_sf2_file","0090_FluidR3_GM_sf2_file","0090_GeneralUserGS_sf2_file","0090_JCLive_sf2_file","0090_SBLive_sf2","0090_SoundBlasterOld_sf2","0091_SoundBlasterOld_sf2","0100_Aspirin_sf2_file","0100_Chaos_sf2_file","0100_FluidR3_GM_sf2_file","0100_GeneralUserGS_sf2_file","0100_JCLive_sf2_file","0100_SBLive_sf2","0100_SoundBlasterOld_sf2","0101_GeneralUserGS_sf2_file","0101_SoundBlasterOld_sf2","0110_Aspirin_sf2_file","0110_Chaos_sf2_file","0110_FluidR3_GM_sf2_file","0110_GeneralUserGS_sf2_file","0110_JCLive_sf2_file","0110_SBLive_sf2","0110_SoundBlasterOld_sf2","0111_FluidR3_GM_sf2_file","0120_Aspirin_sf2_file","0120_Chaos_sf2_file","0120_FluidR3_GM_sf2_file","0120_GeneralUserGS_sf2_file","0120_JCLive_sf2_file","0120_SBLive_sf2","0120_SoundBlasterOld_sf2","0121_FluidR3_GM_sf2_file","0121_GeneralUserGS_sf2_file","0130_Aspirin_sf2_file","0130_Chaos_sf2_file","0130_FluidR3_GM_sf2_file","0130_GeneralUserGS_sf2_file","0130_JCLive_sf2_file","0130_SBLive_sf2","0130_SoundBlasterOld_sf2","0131_FluidR3_GM_sf2_file","0140_Aspirin_sf2_file","0140_Chaos_sf2_file","0140_FluidR3_GM_sf2_file","0140_GeneralUserGS_sf2_file","0140_JCLive_sf2_file","0140_SBLive_sf2","0140_SoundBlasterOld_sf2","0141_FluidR3_GM_sf2_file","0141_GeneralUserGS_sf2_file","0142_GeneralUserGS_sf2_file","0143_GeneralUserGS_sf2_file","0150_Aspirin_sf2_file","0150_Chaos_sf2_file","0150_FluidR3_GM_sf2_file","0150_GeneralUserGS_sf2_file","0150_JCLive_sf2_file","0150_SBLive_sf2","0150_SoundBlasterOld_sf2","0151_FluidR3_GM_sf2_file","0160_Aspirin_sf2_file","0160_Chaos_sf2_file","0160_FluidR3_GM_sf2_file","0160_GeneralUserGS_sf2_file","0160_JCLive_sf2_file","0160_SBLive_sf2","0160_SoundBlasterOld_sf2","0161_Aspirin_sf2_file","0161_FluidR3_GM_sf2_file","0161_SoundBlasterOld_sf2","0170_Aspirin_sf2_file","0170_Chaos_sf2_file","0170_FluidR3_GM_sf2_file","0170_GeneralUserGS_sf2_file","0170_JCLive_sf2_file","0170_SBLive_sf2","0170_SoundBlasterOld_sf2","0171_FluidR3_GM_sf2_file","0171_GeneralUserGS_sf2_file","0172_FluidR3_GM_sf2_file","0180_Aspirin_sf2_file","0180_Chaos_sf2_file","0180_FluidR3_GM_sf2_file","0180_GeneralUserGS_sf2_file","0180_JCLive_sf2_file","0180_SBLive_sf2","0180_SoundBlasterOld_sf2","0181_Aspirin_sf2_file","0181_GeneralUserGS_sf2_file","0181_SoundBlasterOld_sf2","0190_Aspirin_sf2_file","0190_Chaos_sf2_file","0190_FluidR3_GM_sf2_file","0190_GeneralUserGS_sf2_file","0190_JCLive_sf2_file","0190_SBLive_sf2","0190_SoundBlasterOld_sf2","0191_Aspirin_sf2_file","0191_GeneralUserGS_sf2_file","0191_SoundBlasterOld_sf2","0200_Aspirin_sf2_file","0200_Chaos_sf2_file","0200_FluidR3_GM_sf2_file","0200_GeneralUserGS_sf2_file","0200_JCLive_sf2_file","0200_SBLive_sf2","0200_SoundBlasterOld_sf2","0201_Aspirin_sf2_file","0201_FluidR3_GM_sf2_file","0201_GeneralUserGS_sf2_file","0201_SoundBlasterOld_sf2","0210_Aspirin_sf2_file","0210_Chaos_sf2_file","0210_FluidR3_GM_sf2_file","0210_GeneralUserGS_sf2_file","0210_JCLive_sf2_file","0210_SBLive_sf2","0210_SoundBlasterOld_sf2","0211_Aspirin_sf2_file","0211_FluidR3_GM_sf2_file","0211_GeneralUserGS_sf2_file","0211_SoundBlasterOld_sf2","0212_GeneralUserGS_sf2_file","0220_Aspirin_sf2_file","0220_Chaos_sf2_file","0220_FluidR3_GM_sf2_file","0220_GeneralUserGS_sf2_file","0220_JCLive_sf2_file","0220_SBLive_sf2","0220_SoundBlasterOld_sf2","0221_FluidR3_GM_sf2_file","0230_Aspirin_sf2_file","0230_Chaos_sf2_file","0230_FluidR3_GM_sf2_file","0230_GeneralUserGS_sf2_file","0230_JCLive_sf2_file","0230_SBLive_sf2","0230_SoundBlasterOld_sf2","0231_FluidR3_GM_sf2_file","0231_GeneralUserGS_sf2_file","0231_JCLive_sf2_file","0231_SoundBlasterOld_sf2","0232_FluidR3_GM_sf2_file","0233_FluidR3_GM_sf2_file","0240_Aspirin_sf2_file","0240_Chaos_sf2_file","0240_FluidR3_GM_sf2_file","0240_GeneralUserGS_sf2_file","0240_JCLive_sf2_file","0240_LK_Godin_Nylon_SF2_file","0240_SBLive_sf2","0240_SoundBlasterOld_sf2","0241_GeneralUserGS_sf2_file","0241_JCLive_sf2_file","0242_JCLive_sf2_file","0243_JCLive_sf2_file","0253_Acoustic_Guitar_sf2_file","0250_Aspirin_sf2_file","0250_Chaos_sf2_file","0250_FluidR3_GM_sf2_file","0250_GeneralUserGS_sf2_file","0250_JCLive_sf2_file","0250_LK_AcousticSteel_SF2_file","0250_SBLive_sf2","0250_SoundBlasterOld_sf2","0251_Acoustic_Guitar_sf2_file","0251_GeneralUserGS_sf2_file","0252_Acoustic_Guitar_sf2_file","0252_GeneralUserGS_sf2_file","0253_Acoustic_Guitar_sf2_file","0253_GeneralUserGS_sf2_file","0254_Acoustic_Guitar_sf2_file","0254_GeneralUserGS_sf2_file","0255_GeneralUserGS_sf2_file","0260_Aspirin_sf2_file","0260_Chaos_sf2_file","0260_FluidR3_GM_sf2_file","0260_GeneralUserGS_sf2_file","0260_JCLive_sf2_file","0260_SBLive_sf2","0260_SoundBlasterOld_sf2","0260_Stratocaster_sf2_file","0261_GeneralUserGS_sf2_file","0261_SoundBlasterOld_sf2","0261_Stratocaster_sf2_file","0262_Stratocaster_sf2_file","0270_Aspirin_sf2_file","0270_Chaos_sf2_file","0270_FluidR3_GM_sf2_file","0270_GeneralUserGS_sf2_file","0270_Gibson_Les_Paul_sf2_file","0270_JCLive_sf2_file","0270_SBAWE32_sf2_file","0270_SBLive_sf2","0270_SoundBlasterOld_sf2","0270_Stratocaster_sf2_file","0271_GeneralUserGS_sf2_file","0271_Stratocaster_sf2_file","0272_Stratocaster_sf2_file","0280_Aspirin_sf2_file","0280_Chaos_sf2_file","0280_FluidR3_GM_sf2_file","0280_GeneralUserGS_sf2_file","0280_JCLive_sf2_file","0280_LesPaul_sf2","0280_LesPaul_sf2_file","0280_SBAWE32_sf2_file","0280_SBLive_sf2","0280_SoundBlasterOld_sf2","0281_Aspirin_sf2_file","0281_FluidR3_GM_sf2_file","0281_GeneralUserGS_sf2_file","0282_FluidR3_GM_sf2_file","0282_GeneralUserGS_sf2_file","0283_GeneralUserGS_sf2_file","0290_Aspirin_sf2_file","0290_Chaos_sf2_file","0290_FluidR3_GM_sf2_file","0290_GeneralUserGS_sf2_file","0290_JCLive_sf2_file","0290_LesPaul_sf2","0290_LesPaul_sf2_file","0290_SBAWE32_sf2_file","0290_SBLive_sf2","0290_SoundBlasterOld_sf2","0291_Aspirin_sf2_file","0291_LesPaul_sf2","0291_LesPaul_sf2_file","0291_SBAWE32_sf2_file","0291_SoundBlasterOld_sf2","0292_Aspirin_sf2_file","0292_LesPaul_sf2","0292_LesPaul_sf2_file","0300_Aspirin_sf2_file","0300_Chaos_sf2_file","0300_FluidR3_GM_sf2_file","0300_GeneralUserGS_sf2_file","0300_JCLive_sf2_file","0300_LesPaul_sf2","0300_LesPaul_sf2_file","0300_SBAWE32_sf2_file","0300_SBLive_sf2","0300_SoundBlasterOld_sf2","0301_Aspirin_sf2_file","0301_FluidR3_GM_sf2_file","0301_GeneralUserGS_sf2_file","0301_JCLive_sf2_file","0301_LesPaul_sf2","0301_LesPaul_sf2_file","0302_Aspirin_sf2_file","0302_GeneralUserGS_sf2_file","0302_JCLive_sf2_file","0303_Aspirin_sf2_file","0304_Aspirin_sf2_file","0310_Aspirin_sf2_file","0310_Chaos_sf2_file","0310_FluidR3_GM_sf2_file","0310_GeneralUserGS_sf2_file","0310_JCLive_sf2_file","0310_LesPaul_sf2","0310_LesPaul_sf2_file","0310_SBAWE32_sf2_file","0310_SBLive_sf2","0310_SoundBlasterOld_sf2","0311_FluidR3_GM_sf2_file","0311_GeneralUserGS_sf2_file","0320_Aspirin_sf2_file","0320_Chaos_sf2_file","0320_FluidR3_GM_sf2_file","0320_GeneralUserGS_sf2_file","0320_JCLive_sf2_file","0320_SBLive_sf2","0320_SoundBlasterOld_sf2","0321_GeneralUserGS_sf2_file","0322_GeneralUserGS_sf2_file","0330_Aspirin_sf2_file","0330_Chaos_sf2_file","0330_FluidR3_GM_sf2_file","0330_GeneralUserGS_sf2_file","0330_JCLive_sf2_file","0330_SBLive_sf2","0330_SoundBlasterOld_sf2","0331_GeneralUserGS_sf2_file","0332_GeneralUserGS_sf2_file","0340_Aspirin_sf2_file","0340_Chaos_sf2_file","0340_FluidR3_GM_sf2_file","0340_GeneralUserGS_sf2_file","0340_JCLive_sf2_file","0340_SBLive_sf2","0340_SoundBlasterOld_sf2","0341_Aspirin_sf2_file","0341_GeneralUserGS_sf2_file","0350_Aspirin_sf2_file","0350_Chaos_sf2_file","0350_FluidR3_GM_sf2_file","0350_GeneralUserGS_sf2_file","0350_JCLive_sf2_file","0350_SBLive_sf2","0350_SoundBlasterOld_sf2","0351_GeneralUserGS_sf2_file","0360_Aspirin_sf2_file","0360_Chaos_sf2_file","0360_FluidR3_GM_sf2_file","0360_GeneralUserGS_sf2_file","0360_JCLive_sf2_file","0360_SBLive_sf2","0360_SoundBlasterOld_sf2","0361_GeneralUserGS_sf2_file","0370_Aspirin_sf2_file","0370_Chaos_sf2_file","0370_FluidR3_GM_sf2_file","0370_GeneralUserGS_sf2_file","0370_JCLive_sf2_file","0370_SBLive_sf2","0370_SoundBlasterOld_sf2","0371_GeneralUserGS_sf2_file","0372_GeneralUserGS_sf2_file","0385_GeneralUserGS_sf2_file","0380_Aspirin_sf2_file","0380_Chaos_sf2_file","0380_FluidR3_GM_sf2_file","0380_GeneralUserGS_sf2_file","0380_JCLive_sf2_file","0380_SBLive_sf2","0380_SoundBlasterOld_sf2","0381_FluidR3_GM_sf2_file","0381_GeneralUserGS_sf2_file","0382_FluidR3_GM_sf2_file","0382_GeneralUserGS_sf2_file","0383_GeneralUserGS_sf2_file","0384_GeneralUserGS_sf2_file","0386_GeneralUserGS_sf2_file","0387_GeneralUserGS_sf2_file","0390_Aspirin_sf2_file","0390_Chaos_sf2_file","0390_FluidR3_GM_sf2_file","0390_GeneralUserGS_sf2_file","0390_JCLive_sf2_file","0390_SBLive_sf2","0390_SoundBlasterOld_sf2","0391_FluidR3_GM_sf2_file","0391_GeneralUserGS_sf2_file","0391_SoundBlasterOld_sf2","0392_FluidR3_GM_sf2_file","0392_GeneralUserGS_sf2_file","0393_GeneralUserGS_sf2_file","0400_Aspirin_sf2_file","0400_Chaos_sf2_file","0400_FluidR3_GM_sf2_file","0400_GeneralUserGS_sf2_file","0400_JCLive_sf2_file","0400_SBLive_sf2","0400_SoundBlasterOld_sf2","0401_Aspirin_sf2_file","0401_FluidR3_GM_sf2_file","0401_GeneralUserGS_sf2_file","0402_GeneralUserGS_sf2_file","0410_Aspirin_sf2_file","0410_Chaos_sf2_file","0410_FluidR3_GM_sf2_file","0410_GeneralUserGS_sf2_file","0410_JCLive_sf2_file","0410_SBLive_sf2","0410_SoundBlasterOld_sf2","0411_FluidR3_GM_sf2_file","0420_Aspirin_sf2_file","0420_Chaos_sf2_file","0420_FluidR3_GM_sf2_file","0420_GeneralUserGS_sf2_file","0420_JCLive_sf2_file","0420_SBLive_sf2","0420_SoundBlasterOld_sf2","0421_FluidR3_GM_sf2_file","0421_GeneralUserGS_sf2_file","0430_Aspirin_sf2_file","0430_Chaos_sf2_file","0430_FluidR3_GM_sf2_file","0430_GeneralUserGS_sf2_file","0430_JCLive_sf2_file","0430_SBLive_sf2","0430_SoundBlasterOld_sf2","0431_FluidR3_GM_sf2_file","0440_Aspirin_sf2_file","0440_Chaos_sf2_file","0440_FluidR3_GM_sf2_file","0440_GeneralUserGS_sf2_file","0440_JCLive_sf2_file","0440_SBLive_sf2","0440_SoundBlasterOld_sf2","0441_GeneralUserGS_sf2_file","0442_GeneralUserGS_sf2_file","0450_Aspirin_sf2_file","0450_Chaos_sf2_file","0450_FluidR3_GM_sf2_file","0450_GeneralUserGS_sf2_file","0450_JCLive_sf2_file","0450_SBLive_sf2","0450_SoundBlasterOld_sf2","0451_FluidR3_GM_sf2_file","0460_Aspirin_sf2_file","0460_Chaos_sf2_file","0460_FluidR3_GM_sf2_file","0460_GeneralUserGS_sf2_file","0460_JCLive_sf2_file","0460_SBLive_sf2","0460_SoundBlasterOld_sf2","0461_FluidR3_GM_sf2_file","0470_Aspirin_sf2_file","0470_Chaos_sf2_file","0470_FluidR3_GM_sf2_file","0470_GeneralUserGS_sf2_file","0470_JCLive_sf2_file","0470_SBLive_sf2","0470_SoundBlasterOld_sf2","0471_FluidR3_GM_sf2_file","0471_GeneralUserGS_sf2_file","0480_Aspirin_sf2_file","0480_Chaos_sf2_file","0480_FluidR3_GM_sf2_file","0480_GeneralUserGS_sf2_file","0480_JCLive_sf2_file","0480_SBLive_sf2","0480_SoundBlasterOld_sf2","04810_GeneralUserGS_sf2_file","04811_GeneralUserGS_sf2_file","04812_GeneralUserGS_sf2_file","04813_GeneralUserGS_sf2_file","04814_GeneralUserGS_sf2_file","04815_GeneralUserGS_sf2_file","04816_GeneralUserGS_sf2_file","04817_GeneralUserGS_sf2_file","0481_Aspirin_sf2_file","0481_FluidR3_GM_sf2_file","0481_GeneralUserGS_sf2_file","0482_Aspirin_sf2_file","0482_GeneralUserGS_sf2_file","0483_GeneralUserGS_sf2_file","0484_GeneralUserGS_sf2_file","0485_GeneralUserGS_sf2_file","0486_GeneralUserGS_sf2_file","0487_GeneralUserGS_sf2_file","0488_GeneralUserGS_sf2_file","0489_GeneralUserGS_sf2_file","0490_Aspirin_sf2_file","0490_Chaos_sf2_file","0490_FluidR3_GM_sf2_file","0490_GeneralUserGS_sf2_file","0490_JCLive_sf2_file","0490_SBLive_sf2","0490_SoundBlasterOld_sf2","0491_GeneralUserGS_sf2_file","0492_GeneralUserGS_sf2_file","0500_Aspirin_sf2_file","0500_Chaos_sf2_file","0500_FluidR3_GM_sf2_file","0500_GeneralUserGS_sf2_file","0500_JCLive_sf2_file","0500_SBLive_sf2","0500_SoundBlasterOld_sf2","0501_FluidR3_GM_sf2_file","0501_GeneralUserGS_sf2_file","0502_FluidR3_GM_sf2_file","0502_GeneralUserGS_sf2_file","0503_FluidR3_GM_sf2_file","0504_FluidR3_GM_sf2_file","0505_FluidR3_GM_sf2_file","0510_Aspirin_sf2_file","0510_Chaos_sf2_file","0510_FluidR3_GM_sf2_file","0510_GeneralUserGS_sf2_file","0510_JCLive_sf2_file","0510_SBLive_sf2","0510_SoundBlasterOld_sf2","0511_GeneralUserGS_sf2_file","0511_SoundBlasterOld_sf2","0520_Aspirin_sf2_file","0520_Chaos_sf2_file","0520_FluidR3_GM_sf2_file","0520_GeneralUserGS_sf2_file","0520_JCLive_sf2_file","0520_SBLive_sf2","0520_Soul_Ahhs_sf2_file","0520_SoundBlasterOld_sf2","0521_FluidR3_GM_sf2_file","0521_Soul_Ahhs_sf2_file","0521_SoundBlasterOld_sf2","0522_Soul_Ahhs_sf2_file","0530_Aspirin_sf2_file","0530_Chaos_sf2_file","0530_FluidR3_GM_sf2_file","0530_GeneralUserGS_sf2_file","0530_JCLive_sf2_file","0530_SBLive_sf2","0530_Soul_Ahhs_sf2_file","0530_SoundBlasterOld_sf2","0531_FluidR3_GM_sf2_file","0531_GeneralUserGS_sf2_file","0531_JCLive_sf2_file","0531_SoundBlasterOld_sf2","0540_Aspirin_sf2_file","0540_Chaos_sf2_file","0540_FluidR3_GM_sf2_file","0540_GeneralUserGS_sf2_file","0540_JCLive_sf2_file","0540_SBLive_sf2","0540_SoundBlasterOld_sf2","0541_FluidR3_GM_sf2_file","0550_Aspirin_sf2_file","0550_Chaos_sf2_file","0550_FluidR3_GM_sf2_file","0550_GeneralUserGS_sf2_file","0550_JCLive_sf2_file","0550_SBLive_sf2","0550_SoundBlasterOld_sf2","0551_Aspirin_sf2_file","0551_FluidR3_GM_sf2_file","0560_Aspirin_sf2_file","0560_Chaos_sf2_file","0560_FluidR3_GM_sf2_file","0560_GeneralUserGS_sf2_file","0560_JCLive_sf2_file","0560_SBLive_sf2","0560_SoundBlasterOld_sf2","0570_Aspirin_sf2_file","0570_Chaos_sf2_file","0570_FluidR3_GM_sf2_file","0570_GeneralUserGS_sf2_file","0570_JCLive_sf2_file","0570_SBLive_sf2","0570_SoundBlasterOld_sf2","0571_GeneralUserGS_sf2_file","0580_Aspirin_sf2_file","0580_Chaos_sf2_file","0580_FluidR3_GM_sf2_file","0580_GeneralUserGS_sf2_file","0580_JCLive_sf2_file","0580_SBLive_sf2","0580_SoundBlasterOld_sf2","0581_GeneralUserGS_sf2_file","0590_Aspirin_sf2_file","0590_Chaos_sf2_file","0590_FluidR3_GM_sf2_file","0590_GeneralUserGS_sf2_file","0590_JCLive_sf2_file","0590_SBLive_sf2","0590_SoundBlasterOld_sf2","0591_GeneralUserGS_sf2_file","0600_Aspirin_sf2_file","0600_Chaos_sf2_file","0600_FluidR3_GM_sf2_file","0600_GeneralUserGS_sf2_file","0600_JCLive_sf2_file","0600_SBLive_sf2","0600_SoundBlasterOld_sf2","0601_FluidR3_GM_sf2_file","0601_GeneralUserGS_sf2_file","0602_GeneralUserGS_sf2_file","0603_GeneralUserGS_sf2_file","0610_Aspirin_sf2_file","0610_Chaos_sf2_file","0610_FluidR3_GM_sf2_file","0610_GeneralUserGS_sf2_file","0610_JCLive_sf2_file","0610_SBLive_sf2","0610_SoundBlasterOld_sf2","0611_GeneralUserGS_sf2_file","0612_GeneralUserGS_sf2_file","0613_GeneralUserGS_sf2_file","0614_GeneralUserGS_sf2_file","0615_GeneralUserGS_sf2_file","0620_Aspirin_sf2_file","0620_Chaos_sf2_file","0620_FluidR3_GM_sf2_file","0620_GeneralUserGS_sf2_file","0620_JCLive_sf2_file","0620_SBLive_sf2","0620_SoundBlasterOld_sf2","0621_Aspirin_sf2_file","0621_FluidR3_GM_sf2_file","0621_GeneralUserGS_sf2_file","0622_FluidR3_GM_sf2_file","0622_GeneralUserGS_sf2_file","0630_Aspirin_sf2_file","0630_Chaos_sf2_file","0630_FluidR3_GM_sf2_file","0630_GeneralUserGS_sf2_file","0630_JCLive_sf2_file","0630_SBLive_sf2","0630_SoundBlasterOld_sf2","0631_Aspirin_sf2_file","0631_FluidR3_GM_sf2_file","0631_GeneralUserGS_sf2_file","0632_FluidR3_GM_sf2_file","0633_FluidR3_GM_sf2_file","0640_Aspirin_sf2_file","0640_Chaos_sf2_file","0640_FluidR3_GM_sf2_file","0640_GeneralUserGS_sf2_file","0640_JCLive_sf2_file","0640_SBLive_sf2","0640_SoundBlasterOld_sf2","0641_FluidR3_GM_sf2_file","0650_Aspirin_sf2_file","0650_Chaos_sf2_file","0650_FluidR3_GM_sf2_file","0650_GeneralUserGS_sf2_file","0650_JCLive_sf2_file","0650_SBLive_sf2","0650_SoundBlasterOld_sf2","0651_Aspirin_sf2_file","0651_FluidR3_GM_sf2_file","0660_Aspirin_sf2_file","0660_Chaos_sf2_file","0660_FluidR3_GM_sf2_file","0660_GeneralUserGS_sf2_file","0660_JCLive_sf2_file","0660_SBLive_sf2","0660_SoundBlasterOld_sf2","0661_FluidR3_GM_sf2_file","0661_GeneralUserGS_sf2_file","0670_Aspirin_sf2_file","0670_Chaos_sf2_file","0670_FluidR3_GM_sf2_file","0670_GeneralUserGS_sf2_file","0670_JCLive_sf2_file","0670_SBLive_sf2","0670_SoundBlasterOld_sf2","0671_FluidR3_GM_sf2_file","0680_Aspirin_sf2_file","0680_Chaos_sf2_file","0680_FluidR3_GM_sf2_file","0680_GeneralUserGS_sf2_file","0680_JCLive_sf2_file","0680_SBLive_sf2","0680_SoundBlasterOld_sf2","0681_FluidR3_GM_sf2_file","0690_Aspirin_sf2_file","0690_Chaos_sf2_file","0690_FluidR3_GM_sf2_file","0690_GeneralUserGS_sf2_file","0690_JCLive_sf2_file","0690_SBLive_sf2","0690_SoundBlasterOld_sf2","0691_FluidR3_GM_sf2_file","0700_Aspirin_sf2_file","0700_Chaos_sf2_file","0700_FluidR3_GM_sf2_file","0700_GeneralUserGS_sf2_file","0700_JCLive_sf2_file","0700_SBLive_sf2","0700_SoundBlasterOld_sf2","0701_FluidR3_GM_sf2_file","0701_GeneralUserGS_sf2_file","0710_Aspirin_sf2_file","0710_Chaos_sf2_file","0710_FluidR3_GM_sf2_file","0710_GeneralUserGS_sf2_file","0710_JCLive_sf2_file","0710_SBLive_sf2","0710_SoundBlasterOld_sf2","0711_FluidR3_GM_sf2_file","0720_Aspirin_sf2_file","0720_Chaos_sf2_file","0720_FluidR3_GM_sf2_file","0720_GeneralUserGS_sf2_file","0720_JCLive_sf2_file","0720_SBLive_sf2","0720_SoundBlasterOld_sf2","0721_FluidR3_GM_sf2_file","0721_SoundBlasterOld_sf2","0730_Aspirin_sf2_file","0730_Chaos_sf2_file","0730_FluidR3_GM_sf2_file","0730_GeneralUserGS_sf2_file","0730_JCLive_sf2_file","0730_SBLive_sf2","0730_SoundBlasterOld_sf2","0731_Aspirin_sf2_file","0731_FluidR3_GM_sf2_file","0731_SoundBlasterOld_sf2","0740_Aspirin_sf2_file","0740_Chaos_sf2_file","0740_FluidR3_GM_sf2_file","0740_GeneralUserGS_sf2_file","0740_JCLive_sf2_file","0740_SBLive_sf2","0740_SoundBlasterOld_sf2","0741_GeneralUserGS_sf2_file","0750_Aspirin_sf2_file","0750_Chaos_sf2_file","0750_FluidR3_GM_sf2_file","0750_GeneralUserGS_sf2_file","0750_JCLive_sf2_file","0750_SBLive_sf2","0750_SoundBlasterOld_sf2","0751_Aspirin_sf2_file","0751_FluidR3_GM_sf2_file","0751_GeneralUserGS_sf2_file","0751_SoundBlasterOld_sf2","0760_Aspirin_sf2_file","0760_Chaos_sf2_file","0760_FluidR3_GM_sf2_file","0760_GeneralUserGS_sf2_file","0760_JCLive_sf2_file","0760_SBLive_sf2","0760_SoundBlasterOld_sf2","0761_FluidR3_GM_sf2_file","0761_GeneralUserGS_sf2_file","0761_SoundBlasterOld_sf2","0762_GeneralUserGS_sf2_file","0770_Aspirin_sf2_file","0770_Chaos_sf2_file","0770_FluidR3_GM_sf2_file","0770_GeneralUserGS_sf2_file","0770_JCLive_sf2_file","0770_SBLive_sf2","0770_SoundBlasterOld_sf2","0771_FluidR3_GM_sf2_file","0771_GeneralUserGS_sf2_file","0772_GeneralUserGS_sf2_file","0780_Aspirin_sf2_file","0780_Chaos_sf2_file","0780_FluidR3_GM_sf2_file","0780_GeneralUserGS_sf2_file","0780_JCLive_sf2_file","0780_SBLive_sf2","0780_SoundBlasterOld_sf2","0781_GeneralUserGS_sf2_file","0790_Aspirin_sf2_file","0790_Chaos_sf2_file","0790_FluidR3_GM_sf2_file","0790_GeneralUserGS_sf2_file","0790_JCLive_sf2_file","0790_SBLive_sf2","0790_SoundBlasterOld_sf2","0791_GeneralUserGS_sf2_file","0800_Aspirin_sf2_file","0800_Chaos_sf2_file","0800_FluidR3_GM_sf2_file","0800_GeneralUserGS_sf2_file","0800_JCLive_sf2_file","0800_SBLive_sf2","0800_SoundBlasterOld_sf2","0801_FluidR3_GM_sf2_file","0801_GeneralUserGS_sf2_file","0810_Aspirin_sf2_file","0810_Chaos_sf2_file","0810_FluidR3_GM_sf2_file","0810_GeneralUserGS_sf2_file","0810_JCLive_sf2_file","0810_SBLive_sf2","0810_SoundBlasterOld_sf2","0811_Aspirin_sf2_file","0811_GeneralUserGS_sf2_file","0811_SoundBlasterOld_sf2","0820_Aspirin_sf2_file","0820_Chaos_sf2_file","0820_FluidR3_GM_sf2_file","0820_GeneralUserGS_sf2_file","0820_JCLive_sf2_file","0820_SBLive_sf2","0820_SoundBlasterOld_sf2","0821_FluidR3_GM_sf2_file","0821_GeneralUserGS_sf2_file","0821_SoundBlasterOld_sf2","0822_GeneralUserGS_sf2_file","0823_GeneralUserGS_sf2_file","0830_Aspirin_sf2_file","0830_Chaos_sf2_file","0830_FluidR3_GM_sf2_file","0830_GeneralUserGS_sf2_file","0830_JCLive_sf2_file","0830_SBLive_sf2","0830_SoundBlasterOld_sf2","0831_FluidR3_GM_sf2_file","0831_GeneralUserGS_sf2_file","0831_SoundBlasterOld_sf2","0840_Aspirin_sf2_file","0840_Chaos_sf2_file","0840_FluidR3_GM_sf2_file","0840_GeneralUserGS_sf2_file","0840_JCLive_sf2_file","0840_SBLive_sf2","0840_SoundBlasterOld_sf2","0841_Aspirin_sf2_file","0841_Chaos_sf2_file","0841_FluidR3_GM_sf2_file","0841_GeneralUserGS_sf2_file","0841_JCLive_sf2_file","0841_SoundBlasterOld_sf2","0842_FluidR3_GM_sf2_file","0850_Aspirin_sf2_file","0850_Chaos_sf2_file","0850_FluidR3_GM_sf2_file","0850_GeneralUserGS_sf2_file","0850_JCLive_sf2_file","0850_SBLive_sf2","0850_SoundBlasterOld_sf2","0851_FluidR3_GM_sf2_file","0851_GeneralUserGS_sf2_file","0851_JCLive_sf2_file","0851_SoundBlasterOld_sf2","0860_Aspirin_sf2_file","0860_Chaos_sf2_file","0860_FluidR3_GM_sf2_file","0860_GeneralUserGS_sf2_file","0860_JCLive_sf2_file","0860_SBLive_sf2","0860_SoundBlasterOld_sf2","0861_Aspirin_sf2_file","0861_FluidR3_GM_sf2_file","0861_SoundBlasterOld_sf2","0870_Aspirin_sf2_file","0870_Chaos_sf2_file","0870_FluidR3_GM_sf2_file","0870_GeneralUserGS_sf2_file","0870_JCLive_sf2_file","0870_SBLive_sf2","0870_SoundBlasterOld_sf2","0871_GeneralUserGS_sf2_file","0872_GeneralUserGS_sf2_file","0873_GeneralUserGS_sf2_file","0880_Aspirin_sf2_file","0880_Chaos_sf2_file","0880_FluidR3_GM_sf2_file","0880_GeneralUserGS_sf2_file","0880_JCLive_sf2_file","0880_SBLive_sf2","0880_SoundBlasterOld_sf2","0881_Aspirin_sf2_file","0881_FluidR3_GM_sf2_file","0881_GeneralUserGS_sf2_file","0881_SoundBlasterOld_sf2","0882_Aspirin_sf2_file","0882_FluidR3_GM_sf2_file","0882_GeneralUserGS_sf2_file","0883_GeneralUserGS_sf2_file","0884_GeneralUserGS_sf2_file","0885_GeneralUserGS_sf2_file","0886_GeneralUserGS_sf2_file","0887_GeneralUserGS_sf2_file","0888_GeneralUserGS_sf2_file","0889_GeneralUserGS_sf2_file","0890_Aspirin_sf2_file","0890_Chaos_sf2_file","0890_FluidR3_GM_sf2_file","0890_GeneralUserGS_sf2_file","0890_JCLive_sf2_file","0890_SBLive_sf2","0890_SoundBlasterOld_sf2","0891_Aspirin_sf2_file","0891_FluidR3_GM_sf2_file","0891_GeneralUserGS_sf2_file","0900_Aspirin_sf2_file","0900_Chaos_sf2_file","0900_FluidR3_GM_sf2_file","0900_GeneralUserGS_sf2_file","0900_JCLive_sf2_file","0900_SBLive_sf2","0900_SoundBlasterOld_sf2","0901_Aspirin_sf2_file","0901_FluidR3_GM_sf2_file","0901_GeneralUserGS_sf2_file","0901_SoundBlasterOld_sf2","0910_Aspirin_sf2_file","0910_Chaos_sf2_file","0910_FluidR3_GM_sf2_file","0910_GeneralUserGS_sf2_file","0910_JCLive_sf2_file","0910_SBLive_sf2","0910_SoundBlasterOld_sf2","0911_Aspirin_sf2_file","0911_GeneralUserGS_sf2_file","0911_JCLive_sf2_file","0911_SoundBlasterOld_sf2","0920_Aspirin_sf2_file","0920_Chaos_sf2_file","0920_FluidR3_GM_sf2_file","0920_GeneralUserGS_sf2_file","0920_JCLive_sf2_file","0920_SBLive_sf2","0920_SoundBlasterOld_sf2","0921_Aspirin_sf2_file","0921_GeneralUserGS_sf2_file","0921_SoundBlasterOld_sf2","0930_Aspirin_sf2_file","0930_Chaos_sf2_file","0930_FluidR3_GM_sf2_file","0930_GeneralUserGS_sf2_file","0930_JCLive_sf2_file","0930_SBLive_sf2","0930_SoundBlasterOld_sf2","0931_Aspirin_sf2_file","0931_FluidR3_GM_sf2_file","0931_GeneralUserGS_sf2_file","0931_SoundBlasterOld_sf2","0940_Aspirin_sf2_file","0940_Chaos_sf2_file","0940_FluidR3_GM_sf2_file","0940_GeneralUserGS_sf2_file","0940_JCLive_sf2_file","0940_SBLive_sf2","0940_SoundBlasterOld_sf2","0941_Aspirin_sf2_file","0941_FluidR3_GM_sf2_file","0941_GeneralUserGS_sf2_file","0941_JCLive_sf2_file","0950_Aspirin_sf2_file","0950_Chaos_sf2_file","0950_FluidR3_GM_sf2_file","0950_GeneralUserGS_sf2_file","0950_JCLive_sf2_file","0950_SBLive_sf2","0950_SoundBlasterOld_sf2","0951_FluidR3_GM_sf2_file","0951_GeneralUserGS_sf2_file","0960_Aspirin_sf2_file","0960_Chaos_sf2_file","0960_FluidR3_GM_sf2_file","0960_GeneralUserGS_sf2_file","0960_JCLive_sf2_file","0960_SBLive_sf2","0960_SoundBlasterOld_sf2","0961_Aspirin_sf2_file","0961_FluidR3_GM_sf2_file","0961_GeneralUserGS_sf2_file","0961_SoundBlasterOld_sf2","0962_GeneralUserGS_sf2_file","0970_Aspirin_sf2_file","0970_Chaos_sf2_file","0970_FluidR3_GM_sf2_file","0970_GeneralUserGS_sf2_file","0970_JCLive_sf2_file","0970_SBLive_sf2","0970_SoundBlasterOld_sf2","0971_FluidR3_GM_sf2_file","0971_GeneralUserGS_sf2_file","0971_SoundBlasterOld_sf2","0980_Aspirin_sf2_file","0980_Chaos_sf2_file","0980_FluidR3_GM_sf2_file","0980_GeneralUserGS_sf2_file","0980_JCLive_sf2_file","0980_SBLive_sf2","0980_SoundBlasterOld_sf2","0981_Aspirin_sf2_file","0981_FluidR3_GM_sf2_file","0981_GeneralUserGS_sf2_file","0981_SoundBlasterOld_sf2","0982_GeneralUserGS_sf2_file","0983_GeneralUserGS_sf2_file","0984_GeneralUserGS_sf2_file","0990_Aspirin_sf2_file","0990_Chaos_sf2_file","0990_FluidR3_GM_sf2_file","0990_GeneralUserGS_sf2_file","0990_JCLive_sf2_file","0990_SBLive_sf2","0990_SoundBlasterOld_sf2","0991_Aspirin_sf2_file","0991_FluidR3_GM_sf2_file","0991_GeneralUserGS_sf2_file","0991_JCLive_sf2_file","0991_SoundBlasterOld_sf2","0992_FluidR3_GM_sf2_file","0992_JCLive_sf2_file","0993_JCLive_sf2_file","0994_JCLive_sf2_file","1000_Aspirin_sf2_file","1000_Chaos_sf2_file","1000_FluidR3_GM_sf2_file","1000_GeneralUserGS_sf2_file","1000_JCLive_sf2_file","1000_SBLive_sf2","1000_SoundBlasterOld_sf2","1001_Aspirin_sf2_file","1001_FluidR3_GM_sf2_file","1001_GeneralUserGS_sf2_file","1001_JCLive_sf2_file","1001_SoundBlasterOld_sf2","1002_Aspirin_sf2_file","1002_FluidR3_GM_sf2_file","1002_GeneralUserGS_sf2_file","1010_Aspirin_sf2_file","1010_Chaos_sf2_file","1010_FluidR3_GM_sf2_file","1010_GeneralUserGS_sf2_file","1010_JCLive_sf2_file","1010_SBLive_sf2","1010_SoundBlasterOld_sf2","1011_Aspirin_sf2_file","1011_FluidR3_GM_sf2_file","1011_JCLive_sf2_file","1012_Aspirin_sf2_file","1020_Aspirin_sf2_file","1020_Chaos_sf2_file","1020_FluidR3_GM_sf2_file","1020_GeneralUserGS_sf2_file","1020_JCLive_sf2_file","1020_SBLive_sf2","1020_SoundBlasterOld_sf2","1021_Aspirin_sf2_file","1021_FluidR3_GM_sf2_file","1021_GeneralUserGS_sf2_file","1021_JCLive_sf2_file","1021_SoundBlasterOld_sf2","1022_GeneralUserGS_sf2_file","1030_Aspirin_sf2_file","1030_Chaos_sf2_file","1030_FluidR3_GM_sf2_file","1030_GeneralUserGS_sf2_file","1030_JCLive_sf2_file","1030_SBLive_sf2","1030_SoundBlasterOld_sf2","1031_Aspirin_sf2_file","1031_FluidR3_GM_sf2_file","1031_GeneralUserGS_sf2_file","1031_SoundBlasterOld_sf2","1032_FluidR3_GM_sf2_file","1040_Aspirin_sf2_file","1040_Chaos_sf2_file","1040_FluidR3_GM_sf2_file","1040_GeneralUserGS_sf2_file","1040_JCLive_sf2_file","1040_SBLive_sf2","1040_SoundBlasterOld_sf2","1041_FluidR3_GM_sf2_file","1041_GeneralUserGS_sf2_file","1050_Aspirin_sf2_file","1050_Chaos_sf2_file","1050_FluidR3_GM_sf2_file","1050_GeneralUserGS_sf2_file","1050_JCLive_sf2_file","1050_SBLive_sf2","1050_SoundBlasterOld_sf2","1051_GeneralUserGS_sf2_file","1060_Aspirin_sf2_file","1060_Chaos_sf2_file","1060_FluidR3_GM_sf2_file","1060_GeneralUserGS_sf2_file","1060_JCLive_sf2_file","1060_SBLive_sf2","1060_SoundBlasterOld_sf2","1061_FluidR3_GM_sf2_file","1061_GeneralUserGS_sf2_file","1061_SoundBlasterOld_sf2","1070_Aspirin_sf2_file","1070_Chaos_sf2_file","1070_FluidR3_GM_sf2_file","1070_GeneralUserGS_sf2_file","1070_JCLive_sf2_file","1070_SBLive_sf2","1070_SoundBlasterOld_sf2","1071_FluidR3_GM_sf2_file","1071_GeneralUserGS_sf2_file","1072_GeneralUserGS_sf2_file","1073_GeneralUserGS_sf2_file","1080_Aspirin_sf2_file","1080_Chaos_sf2_file","1080_FluidR3_GM_sf2_file","1080_GeneralUserGS_sf2_file","1080_JCLive_sf2_file","1080_SBLive_sf2","1080_SoundBlasterOld_sf2","1081_SoundBlasterOld_sf2","1090_Aspirin_sf2_file","1090_Chaos_sf2_file","1090_FluidR3_GM_sf2_file","1090_GeneralUserGS_sf2_file","1090_JCLive_sf2_file","1090_SBLive_sf2","1090_SoundBlasterOld_sf2","1091_SoundBlasterOld_sf2","1100_Aspirin_sf2_file","1100_Chaos_sf2_file","1100_FluidR3_GM_sf2_file","1100_GeneralUserGS_sf2_file","1100_JCLive_sf2_file","1100_SBLive_sf2","1100_SoundBlasterOld_sf2","1101_Aspirin_sf2_file","1101_FluidR3_GM_sf2_file","1101_GeneralUserGS_sf2_file","1102_GeneralUserGS_sf2_file","1110_Aspirin_sf2_file","1110_Chaos_sf2_file","1110_FluidR3_GM_sf2_file","1110_GeneralUserGS_sf2_file","1110_JCLive_sf2_file","1110_SBLive_sf2","1110_SoundBlasterOld_sf2","1120_Aspirin_sf2_file","1120_Chaos_sf2_file","1120_FluidR3_GM_sf2_file","1120_GeneralUserGS_sf2_file","1120_JCLive_sf2_file","1120_SBLive_sf2","1120_SoundBlasterOld_sf2","1121_SoundBlasterOld_sf2","1130_Aspirin_sf2_file","1130_Chaos_sf2_file","1130_FluidR3_GM_sf2_file","1130_GeneralUserGS_sf2_file","1130_JCLive_sf2_file","1130_SBLive_sf2","1130_SoundBlasterOld_sf2","1131_FluidR3_GM_sf2_file","1131_SoundBlasterOld_sf2","1140_Aspirin_sf2_file","1140_Chaos_sf2_file","1140_FluidR3_GM_sf2_file","1140_GeneralUserGS_sf2_file","1140_JCLive_sf2_file","1140_SBLive_sf2","1140_SoundBlasterOld_sf2","1141_FluidR3_GM_sf2_file","1150_Aspirin_sf2_file","1150_Chaos_sf2_file","1150_FluidR3_GM_sf2_file","1150_GeneralUserGS_sf2_file","1150_JCLive_sf2_file","1150_SBLive_sf2","1150_SoundBlasterOld_sf2","1151_FluidR3_GM_sf2_file","1151_GeneralUserGS_sf2_file","1152_FluidR3_GM_sf2_file","1152_GeneralUserGS_sf2_file","1160_Aspirin_sf2_file","1160_Chaos_sf2_file","1160_FluidR3_GM_sf2_file","1160_GeneralUserGS_sf2_file","1160_JCLive_sf2_file","1160_SBLive_sf2","1160_SoundBlasterOld_sf2","1161_FluidR3_GM_sf2_file","1161_GeneralUserGS_sf2_file","1161_SoundBlasterOld_sf2","1162_FluidR3_GM_sf2_file","1162_GeneralUserGS_sf2_file","1163_FluidR3_GM_sf2_file","1170_Aspirin_sf2_file","1170_Chaos_sf2_file","1170_FluidR3_GM_sf2_file","1170_GeneralUserGS_sf2_file","1170_JCLive_sf2_file","1170_SBLive_sf2","1170_SoundBlasterOld_sf2","1171_FluidR3_GM_sf2_file","1171_GeneralUserGS_sf2_file","1172_FluidR3_GM_sf2_file","1173_FluidR3_GM_sf2_file","1180_Aspirin_sf2_file","1180_Chaos_sf2_file","1180_FluidR3_GM_sf2_file","1180_GeneralUserGS_sf2_file","1180_JCLive_sf2_file","1180_SBLive_sf2","1180_SoundBlasterOld_sf2","1181_FluidR3_GM_sf2_file","1181_GeneralUserGS_sf2_file","1181_SoundBlasterOld_sf2","1190_Aspirin_sf2_file","1190_Chaos_sf2_file","1190_FluidR3_GM_sf2_file","1190_GeneralUserGS_sf2_file","1190_JCLive_sf2_file","1190_SBLive_sf2","1190_SoundBlasterOld_sf2","1191_GeneralUserGS_sf2_file","1192_GeneralUserGS_sf2_file","1193_GeneralUserGS_sf2_file","1194_GeneralUserGS_sf2_file","1200_Aspirin_sf2_file","1200_Chaos_sf2_file","1200_FluidR3_GM_sf2_file","1200_GeneralUserGS_sf2_file","1200_JCLive_sf2_file","1200_SBLive_sf2","1200_SoundBlasterOld_sf2","1201_Aspirin_sf2_file","1201_GeneralUserGS_sf2_file","1202_GeneralUserGS_sf2_file","1210_Aspirin_sf2_file","1210_Chaos_sf2_file","1210_FluidR3_GM_sf2_file","1210_GeneralUserGS_sf2_file","1210_JCLive_sf2_file","1210_SBLive_sf2","1210_SoundBlasterOld_sf2","1211_Aspirin_sf2_file","1211_GeneralUserGS_sf2_file","1212_GeneralUserGS_sf2_file","1220_Aspirin_sf2_file","1220_Chaos_sf2_file","1220_FluidR3_GM_sf2_file","1220_GeneralUserGS_sf2_file","1220_JCLive_sf2_file","1220_SBLive_sf2","1220_SoundBlasterOld_sf2","1221_Aspirin_sf2_file","1221_GeneralUserGS_sf2_file","1221_JCLive_sf2_file","1222_Aspirin_sf2_file","1222_GeneralUserGS_sf2_file","1223_Aspirin_sf2_file","1223_GeneralUserGS_sf2_file","1224_Aspirin_sf2_file","1224_GeneralUserGS_sf2_file","1225_GeneralUserGS_sf2_file","1226_GeneralUserGS_sf2_file","1230_Aspirin_sf2_file","1230_Chaos_sf2_file","1230_FluidR3_GM_sf2_file","1230_GeneralUserGS_sf2_file","1230_JCLive_sf2_file","1230_SBLive_sf2","1230_SoundBlasterOld_sf2","1231_Aspirin_sf2_file","1231_GeneralUserGS_sf2_file","1232_Aspirin_sf2_file","1232_GeneralUserGS_sf2_file","1233_GeneralUserGS_sf2_file","1234_GeneralUserGS_sf2_file","1240_Aspirin_sf2_file","1240_Chaos_sf2_file","1240_FluidR3_GM_sf2_file","1240_GeneralUserGS_sf2_file","1240_JCLive_sf2_file","1240_SBLive_sf2","1240_SoundBlasterOld_sf2","1241_Aspirin_sf2_file","1241_GeneralUserGS_sf2_file","1242_Aspirin_sf2_file","1242_GeneralUserGS_sf2_file","1243_Aspirin_sf2_file","1243_GeneralUserGS_sf2_file","1244_Aspirin_sf2_file","1244_GeneralUserGS_sf2_file","1250_Aspirin_sf2_file","1250_Chaos_sf2_file","1250_FluidR3_GM_sf2_file","1250_GeneralUserGS_sf2_file","1250_JCLive_sf2_file","1250_SBLive_sf2","1250_SoundBlasterOld_sf2","1251_Aspirin_sf2_file","1251_FluidR3_GM_sf2_file","1251_GeneralUserGS_sf2_file","1252_Aspirin_sf2_file","1252_FluidR3_GM_sf2_file","1252_GeneralUserGS_sf2_file","1253_Aspirin_sf2_file","1253_GeneralUserGS_sf2_file","1254_Aspirin_sf2_file","1254_GeneralUserGS_sf2_file","1255_Aspirin_sf2_file","1255_GeneralUserGS_sf2_file","1256_Aspirin_sf2_file","1256_GeneralUserGS_sf2_file","1257_Aspirin_sf2_file","1257_GeneralUserGS_sf2_file","1258_Aspirin_sf2_file","1258_GeneralUserGS_sf2_file","1259_GeneralUserGS_sf2_file","1260_Aspirin_sf2_file","1260_Chaos_sf2_file","1260_FluidR3_GM_sf2_file","1260_GeneralUserGS_sf2_file","1260_JCLive_sf2_file","1260_SBLive_sf2","1260_SoundBlasterOld_sf2","1261_Aspirin_sf2_file","1261_GeneralUserGS_sf2_file","1262_Aspirin_sf2_file","1262_GeneralUserGS_sf2_file","1263_Aspirin_sf2_file","1263_GeneralUserGS_sf2_file","1264_Aspirin_sf2_file","1264_GeneralUserGS_sf2_file","1265_Aspirin_sf2_file","1265_GeneralUserGS_sf2_file","1270_Aspirin_sf2_file","1270_Chaos_sf2_file","1270_FluidR3_GM_sf2_file","1270_GeneralUserGS_sf2_file","1270_JCLive_sf2_file","1270_SBLive_sf2","1270_SoundBlasterOld_sf2","1271_Aspirin_sf2_file","1271_GeneralUserGS_sf2_file","1272_Aspirin_sf2_file","1272_GeneralUserGS_sf2_file","1273_GeneralUserGS_sf2_file","1274_GeneralUserGS_sf2_file"],drums=["35_0_Chaos_sf2_file","35_12_JCLive_sf2_file","35_16_JCLive_sf2_file","35_18_JCLive_sf2_file","35_4_Chaos_sf2_file","36_0_SBLive_sf2","36_12_JCLive_sf2_file","36_16_JCLive_sf2_file","36_18_JCLive_sf2_file","36_4_Chaos_sf2_file","37_0_SBLive_sf2","37_12_JCLive_sf2_file","37_16_JCLive_sf2_file","37_18_JCLive_sf2_file","37_4_Chaos_sf2_file","38_0_SBLive_sf2","38_12_JCLive_sf2_file","38_16_JCLive_sf2_file","38_18_JCLive_sf2_file","38_4_Chaos_sf2_file","39_0_SBLive_sf2","39_12_JCLive_sf2_file","39_16_JCLive_sf2_file","39_18_JCLive_sf2_file","39_4_Chaos_sf2_file","40_0_SBLive_sf2","40_12_JCLive_sf2_file","40_16_JCLive_sf2_file","40_18_JCLive_sf2_file","40_4_Chaos_sf2_file","41_0_SBLive_sf2","41_12_JCLive_sf2_file","41_16_JCLive_sf2_file","41_18_JCLive_sf2_file","41_4_Chaos_sf2_file","42_0_SBLive_sf2","42_12_JCLive_sf2_file","42_16_JCLive_sf2_file","42_18_JCLive_sf2_file","42_4_Chaos_sf2_file","43_0_SBLive_sf2","43_12_JCLive_sf2_file","43_16_JCLive_sf2_file","43_18_JCLive_sf2_file","43_4_Chaos_sf2_file","44_0_SBLive_sf2","44_12_JCLive_sf2_file","44_16_JCLive_sf2_file","44_18_JCLive_sf2_file","44_4_Chaos_sf2_file","45_0_SBLive_sf2","45_12_JCLive_sf2_file","45_16_JCLive_sf2_file","45_18_JCLive_sf2_file","45_4_Chaos_sf2_file","46_0_SBLive_sf2","46_12_JCLive_sf2_file","46_16_JCLive_sf2_file","46_18_JCLive_sf2_file","46_4_Chaos_sf2_file","47_0_SBLive_sf2","47_12_JCLive_sf2_file","47_16_JCLive_sf2_file","47_18_JCLive_sf2_file","47_4_Chaos_sf2_file","48_0_SBLive_sf2","48_12_JCLive_sf2_file","48_16_JCLive_sf2_file","48_18_JCLive_sf2_file","48_4_Chaos_sf2_file","49_0_SBLive_sf2","49_12_JCLive_sf2_file","49_16_JCLive_sf2_file","49_18_JCLive_sf2_file","49_4_Chaos_sf2_file","50_0_SBLive_sf2","50_12_JCLive_sf2_file","50_16_JCLive_sf2_file","50_18_JCLive_sf2_file","50_4_Chaos_sf2_file","51_0_SBLive_sf2","51_12_JCLive_sf2_file","51_16_JCLive_sf2_file","51_18_JCLive_sf2_file","51_4_Chaos_sf2_file","52_0_SBLive_sf2","52_12_JCLive_sf2_file","52_16_JCLive_sf2_file","52_18_JCLive_sf2_file","52_4_Chaos_sf2_file","53_0_SBLive_sf2","53_12_JCLive_sf2_file","53_16_JCLive_sf2_file","53_18_JCLive_sf2_file","53_4_Chaos_sf2_file","54_0_SBLive_sf2","54_12_JCLive_sf2_file","54_16_JCLive_sf2_file","54_18_JCLive_sf2_file","54_4_Chaos_sf2_file","55_0_SBLive_sf2","55_12_JCLive_sf2_file","55_16_JCLive_sf2_file","55_18_JCLive_sf2_file","55_4_Chaos_sf2_file","56_0_SBLive_sf2","56_12_JCLive_sf2_file","56_16_JCLive_sf2_file","56_18_JCLive_sf2_file","56_4_Chaos_sf2_file","57_0_SBLive_sf2","57_12_JCLive_sf2_file","57_16_JCLive_sf2_file","57_18_JCLive_sf2_file","57_4_Chaos_sf2_file","58_0_SBLive_sf2","58_12_JCLive_sf2_file","58_16_JCLive_sf2_file","58_18_JCLive_sf2_file","58_4_Chaos_sf2_file","59_0_SBLive_sf2","59_12_JCLive_sf2_file","59_16_JCLive_sf2_file","59_18_JCLive_sf2_file","59_4_Chaos_sf2_file","60_0_SBLive_sf2","60_12_JCLive_sf2_file","60_16_JCLive_sf2_file","60_18_JCLive_sf2_file","60_4_Chaos_sf2_file","61_0_SBLive_sf2","61_12_JCLive_sf2_file","61_16_JCLive_sf2_file","61_18_JCLive_sf2_file","61_4_Chaos_sf2_file","62_0_SBLive_sf2","62_12_JCLive_sf2_file","62_16_JCLive_sf2_file","62_18_JCLive_sf2_file","62_4_Chaos_sf2_file","63_0_SBLive_sf2","63_12_JCLive_sf2_file","63_16_JCLive_sf2_file","63_18_JCLive_sf2_file","63_4_Chaos_sf2_file","64_0_SBLive_sf2","64_12_JCLive_sf2_file","64_16_JCLive_sf2_file","64_18_JCLive_sf2_file","64_4_Chaos_sf2_file","65_0_SBLive_sf2","65_12_JCLive_sf2_file","65_16_JCLive_sf2_file","65_18_JCLive_sf2_file","65_4_Chaos_sf2_file","66_0_SBLive_sf2","66_12_JCLive_sf2_file","66_16_JCLive_sf2_file","66_18_JCLive_sf2_file","66_4_Chaos_sf2_file","67_0_SBLive_sf2","67_12_JCLive_sf2_file","67_16_JCLive_sf2_file","67_18_JCLive_sf2_file","67_4_Chaos_sf2_file","68_0_SBLive_sf2","68_12_JCLive_sf2_file","68_16_JCLive_sf2_file","68_18_JCLive_sf2_file","68_4_Chaos_sf2_file","69_0_SBLive_sf2","69_12_JCLive_sf2_file","69_16_JCLive_sf2_file","69_18_JCLive_sf2_file","69_4_Chaos_sf2_file","70_0_SBLive_sf2","70_12_JCLive_sf2_file","70_16_JCLive_sf2_file","70_18_JCLive_sf2_file","70_4_Chaos_sf2_file","71_0_SBLive_sf2","71_12_JCLive_sf2_file","71_16_JCLive_sf2_file","71_18_JCLive_sf2_file","71_4_Chaos_sf2_file","72_0_SBLive_sf2","72_12_JCLive_sf2_file","72_16_JCLive_sf2_file","72_18_JCLive_sf2_file","72_4_Chaos_sf2_file","73_0_SBLive_sf2","73_12_JCLive_sf2_file","73_16_JCLive_sf2_file","73_18_JCLive_sf2_file","73_4_Chaos_sf2_file","74_0_SBLive_sf2","74_12_JCLive_sf2_file","74_16_JCLive_sf2_file","74_18_JCLive_sf2_file","74_4_Chaos_sf2_file","75_0_SBLive_sf2","75_12_JCLive_sf2_file","75_16_JCLive_sf2_file","75_18_JCLive_sf2_file","75_4_Chaos_sf2_file","76_0_SBLive_sf2","76_12_JCLive_sf2_file","76_16_JCLive_sf2_file","76_18_JCLive_sf2_file","76_4_Chaos_sf2_file","77_0_SBLive_sf2","77_12_JCLive_sf2_file","77_16_JCLive_sf2_file","77_18_JCLive_sf2_file","77_4_Chaos_sf2_file","78_0_SBLive_sf2","78_12_JCLive_sf2_file","78_16_JCLive_sf2_file","78_18_JCLive_sf2_file","78_4_Chaos_sf2_file","79_0_SBLive_sf2","79_12_JCLive_sf2_file","79_16_JCLive_sf2_file","79_18_JCLive_sf2_file","79_4_Chaos_sf2_file","80_0_SBLive_sf2","80_12_JCLive_sf2_file","80_16_JCLive_sf2_file","80_18_JCLive_sf2_file","80_4_Chaos_sf2_file","81_0_SBLive_sf2","81_12_JCLive_sf2_file","81_16_JCLive_sf2_file","81_18_JCLive_sf2_file","81_4_Chaos_sf2_file"],instrumentNames=[];instrumentNames[0]="Acoustic Grand Piano: Piano";instrumentNames[1]="Bright Acoustic Piano: Piano";instrumentNames[2]="Electric Grand Piano: Piano";instrumentNames[3]="Honky-tonk Piano: Piano";instrumentNames[4]="Electric Piano 1: Piano";instrumentNames[5]="Electric Piano 2: Piano";instrumentNames[6]="Harpsichord: Piano";instrumentNames[7]="Clavinet: Piano";instrumentNames[8]="Celesta: Chromatic Percussion";instrumentNames[9]="Glockenspiel: Chromatic Percussion";instrumentNames[10]="Music Box: Chromatic Percussion";instrumentNames[11]="Vibraphone: Chromatic Percussion";instrumentNames[12]="Marimba: Chromatic Percussion";instrumentNames[13]="Xylophone: Chromatic Percussion";instrumentNames[14]="Tubular Bells: Chromatic Percussion";instrumentNames[15]="Dulcimer: Chromatic Percussion";instrumentNames[16]="Drawbar Organ: Organ";instrumentNames[17]="Percussive Organ: Organ";instrumentNames[18]="Rock Organ: Organ";instrumentNames[19]="Church Organ: Organ";instrumentNames[20]="Reed Organ: Organ";instrumentNames[21]="Accordion: Organ";instrumentNames[22]="Harmonica: Organ";instrumentNames[23]="Tango Accordion: Organ";instrumentNames[24]="Acoustic Guitar (nylon): Guitar";instrumentNames[25]="Acoustic Guitar (steel): Guitar";instrumentNames[26]="Electric Guitar (jazz): Guitar";instrumentNames[27]="Electric Guitar (clean): Guitar";instrumentNames[28]="Electric Guitar (muted): Guitar";instrumentNames[29]="Overdriven Guitar: Guitar";instrumentNames[30]="Distortion Guitar: Guitar";instrumentNames[31]="Guitar Harmonics: Guitar";instrumentNames[32]="Acoustic Bass: Bass";instrumentNames[33]="Electric Bass (finger): Bass";instrumentNames[34]="Electric Bass (pick): Bass";instrumentNames[35]="Fretless Bass: Bass";instrumentNames[36]="Slap Bass 1: Bass";instrumentNames[37]="Slap Bass 2: Bass";instrumentNames[38]="Synth Bass 1: Bass";instrumentNames[39]="Synth Bass 2: Bass";instrumentNames[40]="Violin: Strings";instrumentNames[41]="Viola: Strings";instrumentNames[42]="Cello: Strings";instrumentNames[43]="Contrabass: Strings";instrumentNames[44]="Tremolo Strings: Strings";instrumentNames[45]="Pizzicato Strings: Strings";instrumentNames[46]="Orchestral Harp: Strings";instrumentNames[47]="Timpani: Strings";instrumentNames[48]="String Ensemble 1: Ensemble";instrumentNames[49]="String Ensemble 2: Ensemble";instrumentNames[50]="Synth Strings 1: Ensemble";instrumentNames[51]="Synth Strings 2: Ensemble";instrumentNames[52]="Choir Aahs: Ensemble";instrumentNames[53]="Voice Oohs: Ensemble";instrumentNames[54]="Synth Choir: Ensemble";instrumentNames[55]="Orchestra Hit: Ensemble";instrumentNames[56]="Trumpet: Brass";instrumentNames[57]="Trombone: Brass";instrumentNames[58]="Tuba: Brass";instrumentNames[59]="Muted Trumpet: Brass";instrumentNames[60]="French Horn: Brass";instrumentNames[61]="Brass Section: Brass";instrumentNames[62]="Synth Brass 1: Brass";instrumentNames[63]="Synth Brass 2: Brass";instrumentNames[64]="Soprano Sax: Reed";instrumentNames[65]="Alto Sax: Reed";instrumentNames[66]="Tenor Sax: Reed";instrumentNames[67]="Baritone Sax: Reed";instrumentNames[68]="Oboe: Reed";instrumentNames[69]="English Horn: Reed";instrumentNames[70]="Bassoon: Reed";instrumentNames[71]="Clarinet: Reed";instrumentNames[72]="Piccolo: Pipe";instrumentNames[73]="Flute: Pipe";instrumentNames[74]="Recorder: Pipe";instrumentNames[75]="Pan Flute: Pipe";instrumentNames[76]="Blown bottle: Pipe";instrumentNames[77]="Shakuhachi: Pipe";instrumentNames[78]="Whistle: Pipe";instrumentNames[79]="Ocarina: Pipe";instrumentNames[80]="Lead 1 (square): Synth Lead";instrumentNames[81]="Lead 2 (sawtooth): Synth Lead";instrumentNames[82]="Lead 3 (calliope): Synth Lead";instrumentNames[83]="Lead 4 (chiff): Synth Lead";instrumentNames[84]="Lead 5 (charang): Synth Lead";instrumentNames[85]="Lead 6 (voice): Synth Lead";instrumentNames[86]="Lead 7 (fifths): Synth Lead";instrumentNames[87]="Lead 8 (bass + lead): Synth Lead";instrumentNames[88]="Pad 1 (new age): Synth Pad";instrumentNames[89]="Pad 2 (warm): Synth Pad";instrumentNames[90]="Pad 3 (polysynth): Synth Pad";instrumentNames[91]="Pad 4 (choir): Synth Pad";instrumentNames[92]="Pad 5 (bowed): Synth Pad";instrumentNames[93]="Pad 6 (metallic): Synth Pad";instrumentNames[94]="Pad 7 (halo): Synth Pad";instrumentNames[95]="Pad 8 (sweep): Synth Pad";instrumentNames[96]="FX 1 (rain): Synth Effects";instrumentNames[97]="FX 2 (soundtrack): Synth Effects";instrumentNames[98]="FX 3 (crystal): Synth Effects";instrumentNames[99]="FX 4 (atmosphere): Synth Effects";instrumentNames[100]="FX 5 (brightness): Synth Effects";instrumentNames[101]="FX 6 (goblins): Synth Effects";instrumentNames[102]="FX 7 (echoes): Synth Effects";instrumentNames[103]="FX 8 (sci-fi): Synth Effects";instrumentNames[104]="Sitar: Ethnic";instrumentNames[105]="Banjo: Ethnic";instrumentNames[106]="Shamisen: Ethnic";instrumentNames[107]="Koto: Ethnic";instrumentNames[108]="Kalimba: Ethnic";instrumentNames[109]="Bagpipe: Ethnic";instrumentNames[110]="Fiddle: Ethnic";instrumentNames[111]="Shanai: Ethnic";instrumentNames[112]="Tinkle Bell: Percussive";instrumentNames[113]="Agogo: Percussive";instrumentNames[114]="Steel Drums: Percussive";instrumentNames[115]="Woodblock: Percussive";instrumentNames[116]="Taiko Drum: Percussive";instrumentNames[117]="Melodic Tom: Percussive";instrumentNames[118]="Synth Drum: Percussive";instrumentNames[119]="Reverse Cymbal: Percussive";instrumentNames[120]="Guitar Fret Noise: Sound effects";instrumentNames[121]="Breath Noise: Sound effects";instrumentNames[122]="Seashore: Sound effects";instrumentNames[123]="Bird Tweet: Sound effects";instrumentNames[124]="Telephone Ring: Sound effects";instrumentNames[125]="Helicopter: Sound effects";instrumentNames[126]="Applause: Sound effects";instrumentNames[127]="Gunshot: Sound effects";const list=Object.freeze(Object.defineProperty({__proto__:null,instruments,drums,instrumentNames},Symbol.toStringTag,{value:"Module"}));var SoundFont2={exports:{}};(function(h,y){(function(S,n){h.exports=n()})(window,function(){return function(S){var n={};function e(f){if(n[f])return n[f].exports;var i=n[f]={i:f,l:!1,exports:{}};return S[f].call(i.exports,i,i.exports,e),i.l=!0,i.exports}return e.m=S,e.c=n,e.d=function(f,i,l){e.o(f,i)||Object.defineProperty(f,i,{enumerable:!0,get:l})},e.r=function(f){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(f,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(f,"__esModule",{value:!0})},e.t=function(f,i){if(1&i&&(f=e(f)),8&i||4&i&&typeof f=="object"&&f&&f.__esModule)return f;var l=Object.create(null);if(e.r(l),Object.defineProperty(l,"default",{enumerable:!0,value:f}),2&i&&typeof f!="string")for(var t in f)e.d(l,t,function(s){return f[s]}.bind(null,t));return l},e.n=function(f){var i=f&&f.__esModule?function(){return f.default}:function(){return f};return e.d(i,"a",i),i},e.o=function(f,i){return Object.prototype.hasOwnProperty.call(f,i)},e.p="",e(e.s="./src/index.ts")}({"./src/chunk.ts":function(S,n,e){e.r(n),e.d(n,"SF2Chunk",function(){return r});var f=e("./src/riff/index.ts"),i=e("./src/constants.ts"),l=e("./src/chunks/index.ts");function t(u){return(t=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(o){return typeof o}:function(o){return o&&typeof Symbol=="function"&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o})(u)}function s(u,o){for(var d=0;d>10&63,polarity:s>>9&1,direction:s>>8&1,palette:s>>7&1,index:127&s}},t=function(s,c){if(s.id!==c)throw new f.ParseError("Unexpected chunk ID","'".concat(c,"'"),"'".concat(s.id,"'"));if(s.length%i.SF_MODULATOR_SIZE)throw new f.ParseError("Invalid size for the '".concat(c,"' sub-chunk"));return s.iterate(function(v){return{source:l(v.getInt16BE()),id:v.getInt16BE(),value:v.getInt16BE(),valueSource:l(v.getInt16BE()),transform:v.getInt16BE()}})}},"./src/chunks/presets/headers.ts":function(S,n,e){e.r(n),e.d(n,"getPresetHeaders",function(){return l});var f=e("./src/riff/index.ts"),i=e("./src/constants.ts"),l=function(t){if(t.id!=="phdr")throw new f.ParseError("Invalid chunk ID","'phdr'","'".concat(t.id,"'"));if(t.length%i.SF_PRESET_HEADER_SIZE)throw new f.ParseError("Invalid size for the 'phdr' sub-chunk");return t.iterate(function(s){return{name:s.getString(),preset:s.getInt16(),bank:s.getInt16(),bagIndex:s.getInt16(),library:s.getUInt32(),genre:s.getUInt32(),morphology:s.getUInt32()}})}},"./src/chunks/presets/index.ts":function(S,n,e){e.r(n);var f=e("./src/chunks/presets/headers.ts");e.d(n,"getPresetHeaders",function(){return f.getPresetHeaders})},"./src/chunks/samples/headers.ts":function(S,n,e){e.r(n),e.d(n,"getSampleHeaders",function(){return l});var f=e("./src/riff/index.ts"),i=e("./src/constants.ts"),l=function(t){if(t.id!=="shdr")throw new f.ParseError("Unexpected chunk ID","'shdr'","'".concat(t.id,"'"));if(t.length%i.SF_SAMPLE_HEADER_SIZE)throw new f.ParseError("Invalid size for the 'shdr' sub-chunk");return t.iterate(function(s){return{name:s.getString(),start:s.getUInt32(),end:s.getUInt32(),startLoop:s.getUInt32(),endLoop:s.getUInt32(),sampleRate:s.getUInt32(),originalPitch:s.getByte(),pitchCorrection:s.getChar(),link:s.getInt16(),type:s.getInt16()}})}},"./src/chunks/samples/index.ts":function(S,n,e){e.r(n);var f=e("./src/chunks/samples/headers.ts");e.d(n,"getSampleHeaders",function(){return f.getSampleHeaders})},"./src/chunks/zones.ts":function(S,n,e){e.r(n),e.d(n,"getZones",function(){return t}),e.d(n,"getItemsInZone",function(){return s});var f=e("./src/riff/index.ts"),i=e("./src/constants.ts"),l=e("./src/types/index.ts"),t=function(r,u){if(r.id!==u)throw new f.ParseError("Unexpected chunk ID","'".concat(u,"'"),"'".concat(r.id,"'"));if(r.length%i.SF_BAG_SIZE)throw new f.ParseError("Invalid size for the '".concat(u,"' sub-chunk"));return r.iterate(function(o){return{generatorIndex:o.getInt16(),modulatorIndex:o.getInt16()}})},s=function(r,u,o,d,a,L){for(var g=[],U=0;U1&&arguments[1]!==void 0?arguments[1]:0;(function(u,o){if(!(u instanceof o))throw new TypeError("Cannot call a class as a function")})(this,s),l(this,"target",[]),l(this,"chunk",void 0),l(this,"position",0),this.chunk=p,this.position=r}var c,v;return c=s,(v=[{key:"iterate",value:function(p){for(;this.position0&&arguments[0]!==void 0?arguments[0]:20,r=Object(f.getStringFromBuffer)(this.getBuffer(this.position,p));return this.position+=p,r}},{key:"getInt16",value:function(){return this.chunk.buffer[this.position++]|this.chunk.buffer[this.position++]<<8}},{key:"getInt16BE",value:function(){return this.getInt16()<<16>>16}},{key:"getUInt32",value:function(){return(this.chunk.buffer[this.position++]|this.chunk.buffer[this.position++]<<8|this.chunk.buffer[this.position++]<<16|this.chunk.buffer[this.position++]<<24)>>>0}},{key:"getByte",value:function(){return this.chunk.buffer[this.position++]}},{key:"getChar",value:function(){return this.chunk.buffer[this.position++]<<24>>24}},{key:"skip",value:function(p){this.position+=p}},{key:"getBuffer",value:function(p,r){return this.chunk.buffer.subarray(p,p+r)}},{key:"currentPosition",get:function(){return this.position}}])&&i(c.prototype,v),s}()},"./src/riff/index.ts":function(S,n,e){e.r(n);var f=e("./src/riff/chunkIterator.ts");e.d(n,"ChunkIterator",function(){return f.ChunkIterator});var i=e("./src/riff/parseError.ts");e.d(n,"ParseError",function(){return i.ParseError});var l=e("./src/riff/parser.ts");e.d(n,"parseBuffer",function(){return l.parseBuffer}),e.d(n,"getChunk",function(){return l.getChunk}),e.d(n,"getChunkLength",function(){return l.getChunkLength}),e.d(n,"getSubChunks",function(){return l.getSubChunks}),e.d(n,"getChunkId",function(){return l.getChunkId});var t=e("./src/riff/riffChunk.ts");e.d(n,"RIFFChunk",function(){return t.RIFFChunk})},"./src/riff/parseError.ts":function(S,n,e){function f(p){return(f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(r){return typeof r}:function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r})(p)}function i(p,r){return!r||f(r)!=="object"&&typeof r!="function"?function(u){if(u===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return u}(p):r}function l(p){var r=typeof Map=="function"?new Map:void 0;return(l=function(u){if(u===null||(o=u,Function.toString.call(o).indexOf("[native code]")===-1))return u;var o;if(typeof u!="function")throw new TypeError("Super expression must either be null or a function");if(r!==void 0){if(r.has(u))return r.get(u);r.set(u,d)}function d(){return t(u,arguments,c(this).constructor)}return d.prototype=Object.create(u.prototype,{constructor:{value:d,enumerable:!1,writable:!0,configurable:!0}}),s(d,u)})(p)}function t(p,r,u){return(t=function(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch{return!1}}()?Reflect.construct:function(o,d,a){var L=[null];L.push.apply(L,d);var g=new(Function.bind.apply(o,L));return a&&s(g,a.prototype),g}).apply(null,arguments)}function s(p,r){return(s=Object.setPrototypeOf||function(u,o){return u.__proto__=o,u})(p,r)}function c(p){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(r){return r.__proto__||Object.getPrototypeOf(r)})(p)}e.r(n),e.d(n,"ParseError",function(){return v});var v=function(p){function r(u,o,d){return function(a,L){if(!(a instanceof L))throw new TypeError("Cannot call a class as a function")}(this,r),i(this,c(r).call(this,"".concat(u).concat(o&&d?", expected ".concat(o,", received ").concat(d):"")))}return function(u,o){if(typeof o!="function"&&o!==null)throw new TypeError("Super expression must either be null or a function");u.prototype=Object.create(o&&o.prototype,{constructor:{value:u,writable:!0,configurable:!0}}),o&&s(u,o)}(r,l(Error)),r}()},"./src/riff/parser.ts":function(S,n,e){e.r(n),e.d(n,"parseBuffer",function(){return t}),e.d(n,"getChunk",function(){return s}),e.d(n,"getChunkLength",function(){return c}),e.d(n,"getSubChunks",function(){return v}),e.d(n,"getChunkId",function(){return p});var f=e("./src/riff/parseError.ts"),i=e("./src/utils/buffer.ts"),l=e("./src/riff/riffChunk.ts"),t=function(r){var u=p(r);if(u!=="RIFF")throw new f.ParseError("Invalid file format","RIFF",u);var o=p(r,8);if(o!=="sfbk")throw new f.ParseError("Invalid signature","sfbk",o);var d=r.subarray(8),a=v(d.subarray(4));return new l.RIFFChunk(u,d.length,d,a)},s=function(r,u){var o=p(r,u),d=c(r,u+4),a=[];return o!=="RIFF"&&o!=="LIST"||(a=v(r.subarray(u+12))),new l.RIFFChunk(o,d,r.subarray(u+8),a)},c=function(r,u){return((r=r.subarray(u,u+4))[0]|r[1]<<8|r[2]<<16|r[3]<<24)>>>0},v=function(r){for(var u=[],o=0;o<=r.length-8;){var d=s(r,o);u.push(d),o=(o+=8+d.length)%2?o+1:o}return u},p=function(r){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return Object(i.getStringFromBuffer)(r.subarray(u,u+4))}},"./src/riff/riffChunk.ts":function(S,n,e){e.r(n),e.d(n,"RIFFChunk",function(){return s});var f=e("./src/riff/chunkIterator.ts"),i=e("./src/utils/index.ts");function l(c,v){for(var p=0;p0&&arguments[0]!==void 0?arguments[0]:0,u=arguments.length>1?arguments[1]:void 0;return Object(i.getStringFromBuffer)(this.getBuffer(r,u||this.length-r))}},{key:"getInt16",value:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return this.buffer[r++]|this.buffer[r]<<8}},{key:"getUInt32",value:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return(this.buffer[r++]|this.buffer[r++]<<8|this.buffer[r++]<<16|this.buffer[r]<<24)>>>0}},{key:"getByte",value:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return this.buffer[r]}},{key:"getChar",value:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return this.buffer[r]<<24>>24}},{key:"iterator",value:function(){var r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return new f.ChunkIterator(this,r)}},{key:"iterate",value:function(r){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=new f.ChunkIterator(this,u);return o.iterate(r),o.target}},{key:"getBuffer",value:function(r,u){return this.buffer.subarray(r,r+u)}}])&&l(v.prototype,p),c}()},"./src/soundFont2.ts":function(S,n,e){e.r(n),e.d(n,"SoundFont2",function(){return u});var f=e("./src/types/index.ts"),i=e("./src/chunk.ts"),l=e("./src/riff/index.ts"),t=e("./src/chunks/index.ts"),s=e("./src/utils/index.ts");function c(o){for(var d=1;d1&&arguments[1]!==void 0?arguments[1]:0,g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;return Object(s.memoize)(function(U,B,F){var M=a.banks[B];if(M){var O=M.presets[F];if(O){var R=O.zones.find(function(N){return a.isKeyInRange(N,U)});if(R){var E=R.instrument,A=E.zones.find(function(N){return a.isKeyInRange(N,U)});if(A){var k=A.sample,b=c({},R.generators,A.generators),P=c({},R.modulators,A.modulators);return{keyNumber:U,preset:O,instrument:E,sample:k,generators:b,modulators:P}}}}}return null})(d,L,g)}},{key:"isKeyInRange",value:function(d,a){return d.keyRange===void 0||d.keyRange.lo<=a&&d.keyRange.hi>=a}},{key:"getBanks",value:function(){return this.presets.reduce(function(d,a){var L=a.header.bank;return d[L]||(d[L]={presets:[]}),d[L].presets[a.header.preset]=a,d},[])}},{key:"getPresets",value:function(){var d=this.presetData,a=d.presetHeaders,L=d.presetZones,g=d.presetGenerators,U=d.presetModulators;return Object(t.getItemsInZone)(a,L,U,g,this.instruments,f.GeneratorType.Instrument).filter(function(B){return B.header.name!=="EOP"}).map(function(B){return{header:B.header,globalZone:B.globalZone,zones:B.zones.map(function(F){return{keyRange:F.keyRange,generators:F.generators,modulators:F.modulators,instrument:F.reference}})}})}},{key:"getInstruments",value:function(){var d=this.presetData,a=d.instrumentHeaders,L=d.instrumentZones,g=d.instrumentModulators,U=d.instrumentGenerators;return Object(t.getItemsInZone)(a,L,g,U,this.samples,f.GeneratorType.SampleId).filter(function(B){return B.header.name!=="EOI"}).map(function(B){return{header:B.header,globalZone:B.globalZone,zones:B.zones.map(function(F){return{keyRange:F.keyRange,generators:F.generators,modulators:F.modulators,sample:F.reference}})}})}},{key:"getSamples",value:function(){var d=this;return this.presetData.sampleHeaders.filter(function(a){return a.name!=="EOS"}).map(function(a){if(a.name!=="EOS"&&a.sampleRate<=0)throw new Error("Illegal sample rate of ".concat(a.sampleRate," hz in sample '").concat(a.name,"'"));return a.originalPitch>=128&&a.originalPitch<=254&&(a.originalPitch=60),a.startLoop-=a.start,a.endLoop-=a.start,{header:a,data:new Int16Array(new Uint8Array(d.sampleData.subarray(2*a.start,2*a.end)).buffer)}})}}]),o}()},"./src/types/bank.ts":function(S,n){},"./src/types/generator.ts":function(S,n,e){var f,i;function l(s,c,v){return c in s?Object.defineProperty(s,c,{value:v,enumerable:!0,configurable:!0,writable:!0}):s[c]=v,s}e.r(n),e.d(n,"GeneratorType",function(){return i}),e.d(n,"DEFAULT_GENERATOR_VALUES",function(){return t}),function(s){s[s.StartAddrsOffset=0]="StartAddrsOffset",s[s.EndAddrsOffset=1]="EndAddrsOffset",s[s.StartLoopAddrsOffset=2]="StartLoopAddrsOffset",s[s.EndLoopAddrsOffset=3]="EndLoopAddrsOffset",s[s.StartAddrsCoarseOffset=4]="StartAddrsCoarseOffset",s[s.ModLFOToPitch=5]="ModLFOToPitch",s[s.VibLFOToPitch=6]="VibLFOToPitch",s[s.ModEnvToPitch=7]="ModEnvToPitch",s[s.InitialFilterFc=8]="InitialFilterFc",s[s.InitialFilterQ=9]="InitialFilterQ",s[s.ModLFOToFilterFc=10]="ModLFOToFilterFc",s[s.ModEnvToFilterFc=11]="ModEnvToFilterFc",s[s.EndAddrsCoarseOffset=12]="EndAddrsCoarseOffset",s[s.ModLFOToVolume=13]="ModLFOToVolume",s[s.Unused1=14]="Unused1",s[s.ChorusEffectsSend=15]="ChorusEffectsSend",s[s.ReverbEffectsSend=16]="ReverbEffectsSend",s[s.Pan=17]="Pan",s[s.Unused2=18]="Unused2",s[s.Unused3=19]="Unused3",s[s.Unused4=20]="Unused4",s[s.DelayModLFO=21]="DelayModLFO",s[s.FreqModLFO=22]="FreqModLFO",s[s.DelayVibLFO=23]="DelayVibLFO",s[s.FreqVibLFO=24]="FreqVibLFO",s[s.DelayModEnv=25]="DelayModEnv",s[s.AttackModEnv=26]="AttackModEnv",s[s.HoldModEnv=27]="HoldModEnv",s[s.DecayModEnv=28]="DecayModEnv",s[s.SustainModEnv=29]="SustainModEnv",s[s.ReleaseModEnv=30]="ReleaseModEnv",s[s.KeyNumToModEnvHold=31]="KeyNumToModEnvHold",s[s.KeyNumToModEnvDecay=32]="KeyNumToModEnvDecay",s[s.DelayVolEnv=33]="DelayVolEnv",s[s.AttackVolEnv=34]="AttackVolEnv",s[s.HoldVolEnv=35]="HoldVolEnv",s[s.DecayVolEnv=36]="DecayVolEnv",s[s.SustainVolEnv=37]="SustainVolEnv",s[s.ReleaseVolEnv=38]="ReleaseVolEnv",s[s.KeyNumToVolEnvHold=39]="KeyNumToVolEnvHold",s[s.KeyNumToVolEnvDecay=40]="KeyNumToVolEnvDecay",s[s.Instrument=41]="Instrument",s[s.Reserved1=42]="Reserved1",s[s.KeyRange=43]="KeyRange",s[s.VelRange=44]="VelRange",s[s.StartLoopAddrsCoarseOffset=45]="StartLoopAddrsCoarseOffset",s[s.KeyNum=46]="KeyNum",s[s.Velocity=47]="Velocity",s[s.InitialAttenuation=48]="InitialAttenuation",s[s.Reserved2=49]="Reserved2",s[s.EndLoopAddrsCoarseOffset=50]="EndLoopAddrsCoarseOffset",s[s.CoarseTune=51]="CoarseTune",s[s.FineTune=52]="FineTune",s[s.SampleId=53]="SampleId",s[s.SampleModes=54]="SampleModes",s[s.Reserved3=55]="Reserved3",s[s.ScaleTuning=56]="ScaleTuning",s[s.ExclusiveClass=57]="ExclusiveClass",s[s.OverridingRootKey=58]="OverridingRootKey",s[s.Unused5=59]="Unused5",s[s.EndOper=60]="EndOper"}(i||(i={}));var t=(l(f={},i.StartAddrsOffset,0),l(f,i.EndAddrsOffset,0),l(f,i.StartLoopAddrsOffset,0),l(f,i.EndLoopAddrsOffset,0),l(f,i.StartAddrsCoarseOffset,0),l(f,i.ModLFOToPitch,0),l(f,i.VibLFOToPitch,0),l(f,i.ModEnvToPitch,0),l(f,i.InitialFilterFc,13500),l(f,i.InitialFilterQ,0),l(f,i.ModLFOToFilterFc,0),l(f,i.ModEnvToFilterFc,0),l(f,i.EndAddrsCoarseOffset,0),l(f,i.ModLFOToVolume,0),l(f,i.ChorusEffectsSend,0),l(f,i.ReverbEffectsSend,0),l(f,i.Pan,0),l(f,i.DelayModLFO,-12e3),l(f,i.FreqModLFO,0),l(f,i.DelayVibLFO,-12e3),l(f,i.FreqVibLFO,0),l(f,i.DelayModEnv,-12e3),l(f,i.AttackModEnv,-12e3),l(f,i.HoldModEnv,-12e3),l(f,i.DecayModEnv,-12e3),l(f,i.SustainModEnv,0),l(f,i.ReleaseModEnv,-12e3),l(f,i.KeyNumToModEnvHold,0),l(f,i.KeyNumToModEnvDecay,0),l(f,i.DelayVolEnv,-12e3),l(f,i.AttackVolEnv,-12e3),l(f,i.HoldVolEnv,-12e3),l(f,i.DecayVolEnv,-12e3),l(f,i.SustainVolEnv,0),l(f,i.ReleaseVolEnv,-12e3),l(f,i.KeyNumToVolEnvHold,0),l(f,i.KeyNumToVolEnvDecay,0),l(f,i.StartLoopAddrsCoarseOffset,0),l(f,i.KeyNum,-1),l(f,i.Velocity,-1),l(f,i.InitialAttenuation,0),l(f,i.EndLoopAddrsCoarseOffset,0),l(f,i.CoarseTune,0),l(f,i.FineTune,0),l(f,i.SampleModes,0),l(f,i.ScaleTuning,100),l(f,i.ExclusiveClass,0),l(f,i.OverridingRootKey,-1),f)},"./src/types/index.ts":function(S,n,e){e.r(n);var f=e("./src/types/bank.ts");for(var i in f)i!=="default"&&function(d){e.d(n,d,function(){return f[d]})}(i);var l=e("./src/types/generator.ts");e.d(n,"GeneratorType",function(){return l.GeneratorType}),e.d(n,"DEFAULT_GENERATOR_VALUES",function(){return l.DEFAULT_GENERATOR_VALUES});var t=e("./src/types/instrument.ts");for(var i in t)["GeneratorType","DEFAULT_GENERATOR_VALUES","default"].indexOf(i)<0&&function(a){e.d(n,a,function(){return t[a]})}(i);var s=e("./src/types/key.ts");for(var i in s)["GeneratorType","DEFAULT_GENERATOR_VALUES","default"].indexOf(i)<0&&function(a){e.d(n,a,function(){return s[a]})}(i);var c=e("./src/types/metaData.ts");for(var i in c)["GeneratorType","DEFAULT_GENERATOR_VALUES","default"].indexOf(i)<0&&function(a){e.d(n,a,function(){return c[a]})}(i);var v=e("./src/types/modulator.ts");e.d(n,"ControllerType",function(){return v.ControllerType}),e.d(n,"ControllerPolarity",function(){return v.ControllerPolarity}),e.d(n,"ControllerDirection",function(){return v.ControllerDirection}),e.d(n,"ControllerPalette",function(){return v.ControllerPalette}),e.d(n,"Controller",function(){return v.Controller}),e.d(n,"TransformType",function(){return v.TransformType}),e.d(n,"DEFAULT_INSTRUMENT_MODULATORS",function(){return v.DEFAULT_INSTRUMENT_MODULATORS});var p=e("./src/types/preset.ts");for(var i in p)["GeneratorType","DEFAULT_GENERATOR_VALUES","ControllerType","ControllerPolarity","ControllerDirection","ControllerPalette","Controller","TransformType","DEFAULT_INSTRUMENT_MODULATORS","default"].indexOf(i)<0&&function(a){e.d(n,a,function(){return p[a]})}(i);var r=e("./src/types/presetData.ts");for(var i in r)["GeneratorType","DEFAULT_GENERATOR_VALUES","ControllerType","ControllerPolarity","ControllerDirection","ControllerPalette","Controller","TransformType","DEFAULT_INSTRUMENT_MODULATORS","default"].indexOf(i)<0&&function(a){e.d(n,a,function(){return r[a]})}(i);var u=e("./src/types/sample.ts");e.d(n,"SampleType",function(){return u.SampleType});var o=e("./src/types/zone.ts");for(var i in o)["GeneratorType","DEFAULT_GENERATOR_VALUES","ControllerType","ControllerPolarity","ControllerDirection","ControllerPalette","Controller","TransformType","DEFAULT_INSTRUMENT_MODULATORS","SampleType","default"].indexOf(i)<0&&function(a){e.d(n,a,function(){return o[a]})}(i)},"./src/types/instrument.ts":function(S,n){},"./src/types/key.ts":function(S,n){},"./src/types/metaData.ts":function(S,n){},"./src/types/modulator.ts":function(S,n,e){e.r(n),e.d(n,"ControllerType",function(){return f}),e.d(n,"ControllerPolarity",function(){return i}),e.d(n,"ControllerDirection",function(){return l}),e.d(n,"ControllerPalette",function(){return t}),e.d(n,"Controller",function(){return s}),e.d(n,"TransformType",function(){return c}),e.d(n,"DEFAULT_INSTRUMENT_MODULATORS",function(){return p});var f,i,l,t,s,c,v=e("./src/types/generator.ts");(function(r){r[r.Linear=0]="Linear",r[r.Concave=1]="Concave",r[r.Convex=2]="Convex",r[r.Switch=3]="Switch"})(f||(f={})),function(r){r[r.Unipolar=0]="Unipolar",r[r.Bipolar=1]="Bipolar"}(i||(i={})),function(r){r[r.Increasing=0]="Increasing",r[r.Decreasing=1]="Decreasing"}(l||(l={})),function(r){r[r.GeneralController=0]="GeneralController",r[r.MidiController=1]="MidiController"}(t||(t={})),function(r){r[r.NoController=0]="NoController",r[r.NoteOnVelocity=2]="NoteOnVelocity",r[r.NoteOnKeyNumber=3]="NoteOnKeyNumber",r[r.PolyPressure=10]="PolyPressure",r[r.ChannelPressure=13]="ChannelPressure",r[r.PitchWheel=14]="PitchWheel",r[r.PitchWheelSensitivity=16]="PitchWheelSensitivity",r[r.Link=127]="Link"}(s||(s={})),function(r){r[r.Linear=0]="Linear",r[r.Absolute=2]="Absolute"}(c||(c={}));var p=[{id:v.GeneratorType.InitialAttenuation,source:{type:f.Concave,polarity:i.Unipolar,direction:l.Decreasing,palette:t.GeneralController,index:s.NoteOnVelocity},value:960,valueSource:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.GeneralController,index:s.NoController},transform:c.Linear},{id:v.GeneratorType.InitialFilterFc,source:{type:f.Linear,polarity:i.Unipolar,direction:l.Decreasing,palette:t.GeneralController,index:s.NoteOnVelocity},value:-2400,valueSource:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.GeneralController,index:s.NoController},transform:c.Linear},{id:v.GeneratorType.VibLFOToPitch,source:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.GeneralController,index:s.ChannelPressure},value:50,valueSource:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.GeneralController,index:s.NoController},transform:c.Linear},{id:v.GeneratorType.VibLFOToPitch,source:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.MidiController,index:1},value:50,valueSource:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.GeneralController,index:s.NoController},transform:c.Linear},{id:v.GeneratorType.InitialAttenuation,source:{type:f.Concave,polarity:i.Unipolar,direction:l.Decreasing,palette:t.MidiController,index:7},value:960,valueSource:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.GeneralController,index:s.NoController},transform:c.Linear},{id:v.GeneratorType.InitialAttenuation,source:{type:f.Linear,polarity:i.Bipolar,direction:l.Increasing,palette:t.MidiController,index:10},value:1e3,valueSource:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.GeneralController,index:s.NoController},transform:c.Linear},{id:v.GeneratorType.InitialAttenuation,source:{type:f.Concave,polarity:i.Unipolar,direction:l.Decreasing,palette:t.MidiController,index:11},value:960,valueSource:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.GeneralController,index:s.NoController},transform:c.Linear},{id:v.GeneratorType.ReverbEffectsSend,source:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.MidiController,index:91},value:200,valueSource:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.GeneralController,index:s.NoController},transform:c.Linear},{id:v.GeneratorType.ChorusEffectsSend,source:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.MidiController,index:93},value:200,valueSource:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.GeneralController,index:s.NoController},transform:c.Linear},{id:v.GeneratorType.CoarseTune,source:{type:f.Linear,polarity:i.Bipolar,direction:l.Increasing,palette:t.GeneralController,index:s.PitchWheel},value:12700,valueSource:{type:f.Linear,polarity:i.Unipolar,direction:l.Increasing,palette:t.GeneralController,index:s.PitchWheelSensitivity},transform:c.Linear}]},"./src/types/preset.ts":function(S,n){},"./src/types/presetData.ts":function(S,n){},"./src/types/sample.ts":function(S,n,e){var f;e.r(n),e.d(n,"SampleType",function(){return f}),function(i){i[i.EOS=0]="EOS",i[i.Mono=1]="Mono",i[i.Right=2]="Right",i[i.Left=4]="Left",i[i.Linked=8]="Linked",i[i.RomMono=32769]="RomMono",i[i.RomRight=32770]="RomRight",i[i.RomLeft=32772]="RomLeft",i[i.RomLinked=32776]="RomLinked"}(f||(f={}))},"./src/types/zone.ts":function(S,n){},"./src/utils/buffer.ts":function(S,n,e){e.r(n),e.d(n,"getStringFromBuffer",function(){return f});var f=function(i){return new TextDecoder("utf8").decode(i).split(/\0/)[0].trim()}},"./src/utils/index.ts":function(S,n,e){e.r(n);var f=e("./src/utils/buffer.ts");e.d(n,"getStringFromBuffer",function(){return f.getStringFromBuffer});var i=e("./src/utils/memoize.ts");e.d(n,"memoize",function(){return i.memoize})},"./src/utils/memoize.ts":function(S,n,e){e.r(n),e.d(n,"memoize",function(){return f});var f=function(i){var l={};return function(){for(var t=arguments.length,s=new Array(t),c=0;cMath.pow(2,h/1200),Q=h=>h/1e3,G=(h,y)=>{const S=Math.pow(10,y);return Math.round(h*S)/S};typeof AudioParam<"u"&&(AudioParam.prototype.dahdsr=function(h,y,S,n,e,f,i,l,t){e=Math.max(G(e,4),.001),i=Math.max(G(i,4),.001),t=G(t,4),y=Math.max(y,.001);let s=h;return this.setValueAtTime(y,s),this.setValueAtTime(y,s+=n),this.exponentialRampToValueAtTime(S,s+=e),this.setValueAtTime(S,s+=f),this.exponentialRampToValueAtTime(Math.max(l*S,.001),s+=i),(c,v)=>{this.cancelAndHoldAtTime(c);const p=Math.max(v!=null?v:y,.001);this.exponentialRampToValueAtTime(p,c+t)}});const T={0:"startAddrOffset",1:"endAddrOffset",2:"startloopAddrsOffset",3:"endloopAddrsOffset",4:"startAddrsCoarseOffset",5:"modLfoToPitch",6:"vibLfoToPitch",7:"modEnvToPitch",8:"initialFilterFc",9:"initialFilterQ",10:"modLfoToFilterFc",11:"modEnvToFilterFc",12:"endAddrsCoarseOffset",13:"modLfoToVolume",14:"unused1",15:"chorusEffectsSend",16:"reverbEffectsSend",17:"pan",18:"unused2",19:"unused3",20:"unused4",21:"delayModLFO",22:"freqModLFO",23:"delayVibLFO",24:"freqVibLFO",25:"delayModEnv",26:"attackModEnv",27:"holdModEnv",28:"decayModEnv",29:"sustainModEnv",30:"releaseModEnv",31:"keyNumToModEnvHold",32:"keyNumToModEnvDecay",33:"delayVolEnv",34:"attackVolEnv",35:"holdVolEnv",36:"decayVolEnv",37:"sustainVolEnv",38:"releaseVolEnv",39:"keyNumToVolEnvHold",40:"keyNumToVolEnvDecay",41:"instrument",42:"reserved1",43:"keyRange",44:"velRange",45:"startloopAddrsCoarseOffset",46:"keyNum",47:"velocity",48:"initialAttenuation",49:"reserved2",50:"endloopAddrsCoarseOffset",51:"coarseTune",52:"fineTune",53:"sampleID",54:"sampleModes",55:"reserved3",56:"scaleTuning",57:"exclusiveClass",58:"overridingRootKey",59:"unused5",60:"endOper"};Object.fromEntries(Object.entries(SoundFont2.exports.DEFAULT_GENERATOR_VALUES).map(([h,y])=>[T[h],y]));const D=(h,y,S,n,e)=>{var f,i,l,t,s,c,v;const p=SoundFont2.exports.DEFAULT_GENERATOR_VALUES[h];if(typeof p!="number")throw new Error(`no default value found for generator with index ${h}`);const r=y.generators[h],u=(i=(f=S.globalZone)==null?void 0:f.generators)==null?void 0:i[h],o=(l=n==null?void 0:n.generators)==null?void 0:l[h],d=(s=(t=e.globalZone)==null?void 0:t.generators)==null?void 0:s[h],a=r&&"value"in r?r.value:void 0,L=u&&"value"in u?u.value:void 0,g=o&&"value"in o?o.value:void 0,U=d&&"value"in d?d.value:void 0,B=(c=a!=null?a:L)!=null?c:p,F=(v=g!=null?g:U)!=null?v:0;return B+F},J=h=>SoundFont2.exports.DEFAULT_GENERATOR_VALUES[h]!==void 0,W=(h,y,S)=>{var n,e,f,i;return Object.fromEntries(Array.from(new Set([Object.keys((e=(n=S.globalZone)==null?void 0:n.generators)!=null?e:{}),Object.keys(y.generators),Object.keys((i=(f=y.instrument.globalZone)==null?void 0:f.generators)!=null?i:{}),Object.keys(h.generators)].flat())).filter(J).map(l=>[T[l],D(parseInt(l),h,y.instrument,y,S)]))};async function ae(h){const y=await fetch(h).then(n=>n.arrayBuffer()),S=new Uint8Array(y);return new SoundFont2.exports.SoundFont2(S)}function X(h,y,S){let{time:n=h.currentTime}=S;const{midi:e,start:f,velocity:i=.3,startLoop:l,endLoop:t,sampleRate:s,originalPitch:c,pitchCorrection:v,type:p,sampleModes:r=0,overridingRootKey:u,fineTune:o=0,startloopAddrsOffset:d=0,startloopAddrsCoarseOffset:a=0,endloopAddrsOffset:L=0,endloopAddrsCoarseOffset:g=0,delayVolEnv:U=-12e3,attackVolEnv:B=-12e3,holdVolEnv:F=-12e3,decayVolEnv:M=-12e3,sustainVolEnv:O=0,releaseVolEnv:R=-12e3,pan:E=0,...A}=S,k=100*(u!==void 0&&u!==-1?u:c)+v-o,b=e*100-k,P=1*Math.pow(2,b/1200);y.playbackRate.value=P;const N=l+d+a*32768,I=t+L+g*32768;I>N&&r===1?(y.loopStart=N/s,y.loopEnd=I/s,y.loop=!0):r===3&&console.warn("unimplemented sampleMode 3 (play till end on note off)"),Object.keys(A).filter(w=>!["name","instrument","keyRange","sampleID","end"].includes(w)).length;const V=h.createGain(),j=[n,0,i,m(U),m(B),m(F),m(M),O>=960?0:1-Q(O),m(R)],Z=V.gain.dahdsr(...j),H=h.createStereoPanner();return H.pan.value=E/1e3,V.connect(H),y.connect(V),H.connect(h.destination),y.start(n),(w=h.currentTime)=>{y.stop(w+m(R)),Z(w)}}function Y(h,y,S={}){const{header:n,data:e}=y,f=new Float32Array(e.length);for(let t=0;t!h.keyRange||h.keyRange.lo<=y&&y<=h.keyRange.hi,x=(h,y)=>h.zones.filter(S=>C(S,y)&&S.instrument).map(S=>S.instrument.zones.filter(n=>C(n,y)).map(n=>{const e=W(n,S,h);return{...n,mergedGenerators:e}})).flat(),ce=(h,y,S,n=h.currentTime)=>{const e=x(y,S).map(f=>Y(h,f.sample,{...f.mergedGenerators,midi:S,time:n}));return(f=h.currentTime)=>{e.forEach(i=>i(f))}};Pattern.prototype.soundfont=function(h,y=0){return this.onTrigger((S,n,e)=>{const f=getAudioContext(),i=getPlayableNoteValue(n),l=h.presets[y%h.presets.length],t=f.currentTime+S-e,s=[f,l,toMidi(i),t];ce(...s)(t+n.duration)})};const soundfontCache=new Map;function loadSoundfont(h){if(soundfontCache.get(h))return soundfontCache.get(h);const y=ae(h);return soundfontCache.set(h,y),y}export{getFontBufferSource,loadSoundfont,list as soundfontList,ce as startPresetNote}; diff --git a/packages/react/examples/nano-repl/dist/assets/index.e7ac54e9.js b/packages/react/examples/nano-repl/dist/assets/index.e7ac54e9.js new file mode 100644 index 00000000..cf1d497e --- /dev/null +++ b/packages/react/examples/nano-repl/dist/assets/index.e7ac54e9.js @@ -0,0 +1 @@ +import{f as s,i as t,h as o,j as d,q as f,l as p,k as u,p as i,o as l,n as r,w as g}from"./index.ec9f9930.js";export{s as getAudioContext,t as getCachedBuffer,o as getDestination,d as getLoadedBuffer,f as getLoadedSamples,p as loadBuffer,u as loadGithubSamples,i as panic,l as resetLoadedSamples,r as samples,g as webaudioOutput}; diff --git a/packages/react/examples/nano-repl/dist/assets/index.ec9f9930.js b/packages/react/examples/nano-repl/dist/assets/index.ec9f9930.js new file mode 100644 index 00000000..de4a10a0 --- /dev/null +++ b/packages/react/examples/nano-repl/dist/assets/index.ec9f9930.js @@ -0,0 +1,124 @@ +var pn=Object.defineProperty;var fn=(o,e,s)=>e in o?pn(o,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):o[e]=s;var Rt=(o,e,s)=>(fn(o,typeof e!="symbol"?e+"":e,s),s);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))a(c);new MutationObserver(c=>{for(const h of c)if(h.type==="childList")for(const d of h.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&a(d)}).observe(document,{childList:!0,subtree:!0});function s(c){const h={};return c.integrity&&(h.integrity=c.integrity),c.referrerpolicy&&(h.referrerPolicy=c.referrerpolicy),c.crossorigin==="use-credentials"?h.credentials="include":c.crossorigin==="anonymous"?h.credentials="omit":h.credentials="same-origin",h}function a(c){if(c.ep)return;c.ep=!0;const h=s(c);fetch(c.href,h)}})();var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(o){return o&&o.__esModule&&Object.prototype.hasOwnProperty.call(o,"default")?o.default:o}function getAugmentedNamespace(o){var e=o.default;if(typeof e=="function"){var s=function(){return e.apply(this,arguments)};s.prototype=e.prototype}else s={};return Object.defineProperty(s,"__esModule",{value:!0}),Object.keys(o).forEach(function(a){var c=Object.getOwnPropertyDescriptor(o,a);Object.defineProperty(s,a,c.get?c:{enumerable:!0,get:function(){return o[a]}})}),s}var react={exports:{}},react_production_min={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var l$1=Symbol.for("react.element"),n$1=Symbol.for("react.portal"),p$3=Symbol.for("react.fragment"),q$1=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),t$2=Symbol.for("react.provider"),u=Symbol.for("react.context"),v$1=Symbol.for("react.forward_ref"),w=Symbol.for("react.suspense"),x=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),z$1=Symbol.iterator;function A$1(o){return o===null||typeof o!="object"?null:(o=z$1&&o[z$1]||o["@@iterator"],typeof o=="function"?o:null)}var B$1={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C$2=Object.assign,D$1={};function E$1(o,e,s){this.props=o,this.context=e,this.refs=D$1,this.updater=s||B$1}E$1.prototype.isReactComponent={};E$1.prototype.setState=function(o,e){if(typeof o!="object"&&typeof o!="function"&&o!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,o,e,"setState")};E$1.prototype.forceUpdate=function(o){this.updater.enqueueForceUpdate(this,o,"forceUpdate")};function F$1(){}F$1.prototype=E$1.prototype;function G$1(o,e,s){this.props=o,this.context=e,this.refs=D$1,this.updater=s||B$1}var H$1=G$1.prototype=new F$1;H$1.constructor=G$1;C$2(H$1,E$1.prototype);H$1.isPureReactComponent=!0;var I$2=Array.isArray,J=Object.prototype.hasOwnProperty,K$1={current:null},L$1={key:!0,ref:!0,__self:!0,__source:!0};function M$1(o,e,s){var a,c={},h=null,d=null;if(e!=null)for(a in e.ref!==void 0&&(d=e.ref),e.key!==void 0&&(h=""+e.key),e)J.call(e,a)&&!L$1.hasOwnProperty(a)&&(c[a]=e[a]);var g=arguments.length-2;if(g===1)c.children=s;else if(1>>1,Tt=dt[xt];if(0>>1;xtc(Bt,Ct))Ftc(Lt,Bt)?(dt[xt]=Lt,dt[Ft]=Ct,xt=Ft):(dt[xt]=Bt,dt[_t]=Ct,xt=_t);else if(Ftc(Lt,Ct))dt[xt]=Lt,dt[Ft]=Ct,xt=Ft;else break e}}return Dt}function c(dt,Dt){var Ct=dt.sortIndex-Dt.sortIndex;return Ct!==0?Ct:dt.id-Dt.id}if(typeof performance=="object"&&typeof performance.now=="function"){var h=performance;o.unstable_now=function(){return h.now()}}else{var d=Date,g=d.now();o.unstable_now=function(){return d.now()-g}}var _=[],b=[],$=1,j=null,_e=3,et=!1,tt=!1,nt=!1,st=typeof setTimeout=="function"?setTimeout:null,rt=typeof clearTimeout=="function"?clearTimeout:null,it=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function at(dt){for(var Dt=s(b);Dt!==null;){if(Dt.callback===null)a(b);else if(Dt.startTime<=dt)a(b),Dt.sortIndex=Dt.expirationTime,e(_,Dt);else break;Dt=s(b)}}function ot(dt){if(nt=!1,at(dt),!tt)if(s(_)!==null)tt=!0,St(ut);else{var Dt=s(b);Dt!==null&&At(ot,Dt.startTime-dt)}}function ut(dt,Dt){tt=!1,nt&&(nt=!1,rt(lt),lt=-1),et=!0;var Ct=_e;try{for(at(Dt),j=s(_);j!==null&&(!(j.expirationTime>Dt)||dt&&!gt());){var xt=j.callback;if(typeof xt=="function"){j.callback=null,_e=j.priorityLevel;var Tt=xt(j.expirationTime<=Dt);Dt=o.unstable_now(),typeof Tt=="function"?j.callback=Tt:j===s(_)&&a(_),at(Dt)}else a(_);j=s(_)}if(j!==null)var kt=!0;else{var _t=s(b);_t!==null&&At(ot,_t.startTime-Dt),kt=!1}return kt}finally{j=null,_e=Ct,et=!1}}var ct=!1,ht=null,lt=-1,pt=5,ft=-1;function gt(){return!(o.unstable_now()-ftdt||125xt?(dt.sortIndex=Ct,e(b,dt),s(_)===null&&dt===s(b)&&(nt?(rt(lt),lt=-1):nt=!0,At(ot,Ct-xt))):(dt.sortIndex=Tt,e(_,dt),tt||et||(tt=!0,St(ut))),dt},o.unstable_shouldYield=gt,o.unstable_wrapCallback=function(dt){var Dt=_e;return function(){var Ct=_e;_e=Dt;try{return dt.apply(this,arguments)}finally{_e=Ct}}}})(scheduler_production_min);(function(o){o.exports=scheduler_production_min})(scheduler);/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var aa=react.exports,ca=scheduler.exports;function p$2(o){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+o,s=1;s"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ja=Object.prototype.hasOwnProperty,ka=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,la={},ma={};function oa(o){return ja.call(ma,o)?!0:ja.call(la,o)?!1:ka.test(o)?ma[o]=!0:(la[o]=!0,!1)}function pa(o,e,s,a){if(s!==null&&s.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return a?!1:s!==null?!s.acceptsBooleans:(o=o.toLowerCase().slice(0,5),o!=="data-"&&o!=="aria-");default:return!1}}function qa(o,e,s,a){if(e===null||typeof e>"u"||pa(o,e,s,a))return!0;if(a)return!1;if(s!==null)switch(s.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function v(o,e,s,a,c,h,d){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=a,this.attributeNamespace=c,this.mustUseProperty=s,this.propertyName=o,this.type=e,this.sanitizeURL=h,this.removeEmptyString=d}var z={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(o){z[o]=new v(o,0,!1,o,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(o){var e=o[0];z[e]=new v(e,1,!1,o[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(o){z[o]=new v(o,2,!1,o.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(o){z[o]=new v(o,2,!1,o,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(o){z[o]=new v(o,3,!1,o.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(o){z[o]=new v(o,3,!0,o,null,!1,!1)});["capture","download"].forEach(function(o){z[o]=new v(o,4,!1,o,null,!1,!1)});["cols","rows","size","span"].forEach(function(o){z[o]=new v(o,6,!1,o,null,!1,!1)});["rowSpan","start"].forEach(function(o){z[o]=new v(o,5,!1,o.toLowerCase(),null,!1,!1)});var ra=/[\-:]([a-z])/g;function sa(o){return o[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(o){var e=o.replace(ra,sa);z[e]=new v(e,1,!1,o,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(o){var e=o.replace(ra,sa);z[e]=new v(e,1,!1,o,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(o){var e=o.replace(ra,sa);z[e]=new v(e,1,!1,o,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(o){z[o]=new v(o,1,!1,o.toLowerCase(),null,!1,!1)});z.xlinkHref=new v("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(o){z[o]=new v(o,1,!1,o.toLowerCase(),null,!0,!0)});function ta(o,e,s,a){var c=z.hasOwnProperty(e)?z[e]:null;(c!==null?c.type!==0:a||!(2g||c[d]!==h[g]){var _=` +`+c[d].replace(" at new "," at ");return o.displayName&&_.includes("")&&(_=_.replace("",o.displayName)),_}while(1<=d&&0<=g);break}}}finally{Na=!1,Error.prepareStackTrace=s}return(o=o?o.displayName||o.name:"")?Ma(o):""}function Pa(o){switch(o.tag){case 5:return Ma(o.type);case 16:return Ma("Lazy");case 13:return Ma("Suspense");case 19:return Ma("SuspenseList");case 0:case 2:case 15:return o=Oa(o.type,!1),o;case 11:return o=Oa(o.type.render,!1),o;case 1:return o=Oa(o.type,!0),o;default:return""}}function Qa(o){if(o==null)return null;if(typeof o=="function")return o.displayName||o.name||null;if(typeof o=="string")return o;switch(o){case ya:return"Fragment";case wa:return"Portal";case Aa:return"Profiler";case za:return"StrictMode";case Ea:return"Suspense";case Fa:return"SuspenseList"}if(typeof o=="object")switch(o.$$typeof){case Ca:return(o.displayName||"Context")+".Consumer";case Ba:return(o._context.displayName||"Context")+".Provider";case Da:var e=o.render;return o=o.displayName,o||(o=e.displayName||e.name||"",o=o!==""?"ForwardRef("+o+")":"ForwardRef"),o;case Ga:return e=o.displayName||null,e!==null?e:Qa(o.type)||"Memo";case Ha:e=o._payload,o=o._init;try{return Qa(o(e))}catch{}}return null}function Ra(o){var e=o.type;switch(o.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return o=e.render,o=o.displayName||o.name||"",e.displayName||(o!==""?"ForwardRef("+o+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Qa(e);case 8:return e===za?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function Sa(o){switch(typeof o){case"boolean":case"number":case"string":case"undefined":return o;case"object":return o;default:return""}}function Ta(o){var e=o.type;return(o=o.nodeName)&&o.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function Ua(o){var e=Ta(o)?"checked":"value",s=Object.getOwnPropertyDescriptor(o.constructor.prototype,e),a=""+o[e];if(!o.hasOwnProperty(e)&&typeof s<"u"&&typeof s.get=="function"&&typeof s.set=="function"){var c=s.get,h=s.set;return Object.defineProperty(o,e,{configurable:!0,get:function(){return c.call(this)},set:function(d){a=""+d,h.call(this,d)}}),Object.defineProperty(o,e,{enumerable:s.enumerable}),{getValue:function(){return a},setValue:function(d){a=""+d},stopTracking:function(){o._valueTracker=null,delete o[e]}}}}function Va(o){o._valueTracker||(o._valueTracker=Ua(o))}function Wa(o){if(!o)return!1;var e=o._valueTracker;if(!e)return!0;var s=e.getValue(),a="";return o&&(a=Ta(o)?o.checked?"true":"false":o.value),o=a,o!==s?(e.setValue(o),!0):!1}function Xa(o){if(o=o||(typeof document<"u"?document:void 0),typeof o>"u")return null;try{return o.activeElement||o.body}catch{return o.body}}function Ya(o,e){var s=e.checked;return A({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:s!=null?s:o._wrapperState.initialChecked})}function Za(o,e){var s=e.defaultValue==null?"":e.defaultValue,a=e.checked!=null?e.checked:e.defaultChecked;s=Sa(e.value!=null?e.value:s),o._wrapperState={initialChecked:a,initialValue:s,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function ab(o,e){e=e.checked,e!=null&&ta(o,"checked",e,!1)}function bb(o,e){ab(o,e);var s=Sa(e.value),a=e.type;if(s!=null)a==="number"?(s===0&&o.value===""||o.value!=s)&&(o.value=""+s):o.value!==""+s&&(o.value=""+s);else if(a==="submit"||a==="reset"){o.removeAttribute("value");return}e.hasOwnProperty("value")?cb(o,e.type,s):e.hasOwnProperty("defaultValue")&&cb(o,e.type,Sa(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(o.defaultChecked=!!e.defaultChecked)}function db(o,e,s){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var a=e.type;if(!(a!=="submit"&&a!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+o._wrapperState.initialValue,s||e===o.value||(o.value=e),o.defaultValue=e}s=o.name,s!==""&&(o.name=""),o.defaultChecked=!!o._wrapperState.initialChecked,s!==""&&(o.name=s)}function cb(o,e,s){(e!=="number"||Xa(o.ownerDocument)!==o)&&(s==null?o.defaultValue=""+o._wrapperState.initialValue:o.defaultValue!==""+s&&(o.defaultValue=""+s))}var eb=Array.isArray;function fb(o,e,s,a){if(o=o.options,e){e={};for(var c=0;c"+e.valueOf().toString()+"",e=mb.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;e.firstChild;)o.appendChild(e.firstChild)}});function ob(o,e){if(e){var s=o.firstChild;if(s&&s===o.lastChild&&s.nodeType===3){s.nodeValue=e;return}}o.textContent=e}var pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=["Webkit","ms","Moz","O"];Object.keys(pb).forEach(function(o){qb.forEach(function(e){e=e+o.charAt(0).toUpperCase()+o.substring(1),pb[e]=pb[o]})});function rb(o,e,s){return e==null||typeof e=="boolean"||e===""?"":s||typeof e!="number"||e===0||pb.hasOwnProperty(o)&&pb[o]?(""+e).trim():e+"px"}function sb(o,e){o=o.style;for(var s in e)if(e.hasOwnProperty(s)){var a=s.indexOf("--")===0,c=rb(s,e[s],a);s==="float"&&(s="cssFloat"),a?o.setProperty(s,c):o[s]=c}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ub(o,e){if(e){if(tb[o]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(p$2(137,o));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(p$2(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(p$2(61))}if(e.style!=null&&typeof e.style!="object")throw Error(p$2(62))}}function vb(o,e){if(o.indexOf("-")===-1)return typeof e.is=="string";switch(o){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var wb=null;function xb(o){return o=o.target||o.srcElement||window,o.correspondingUseElement&&(o=o.correspondingUseElement),o.nodeType===3?o.parentNode:o}var yb=null,zb=null,Ab=null;function Bb(o){if(o=Cb(o)){if(typeof yb!="function")throw Error(p$2(280));var e=o.stateNode;e&&(e=Db(e),yb(o.stateNode,o.type,e))}}function Eb(o){zb?Ab?Ab.push(o):Ab=[o]:zb=o}function Fb(){if(zb){var o=zb,e=Ab;if(Ab=zb=null,Bb(o),e)for(o=0;o>>=0,o===0?32:31-(pc(o)/qc|0)|0}var rc=64,sc=4194304;function tc(o){switch(o&-o){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return o&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return o&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return o}}function uc(o,e){var s=o.pendingLanes;if(s===0)return 0;var a=0,c=o.suspendedLanes,h=o.pingedLanes,d=s&268435455;if(d!==0){var g=d&~c;g!==0?a=tc(g):(h&=d,h!==0&&(a=tc(h)))}else d=s&~c,d!==0?a=tc(d):h!==0&&(a=tc(h));if(a===0)return 0;if(e!==0&&e!==a&&(e&c)===0&&(c=a&-a,h=e&-e,c>=h||c===16&&(h&4194240)!==0))return e;if((a&4)!==0&&(a|=s&16),e=o.entangledLanes,e!==0)for(o=o.entanglements,e&=a;0s;s++)e.push(o);return e}function Ac(o,e,s){o.pendingLanes|=e,e!==536870912&&(o.suspendedLanes=0,o.pingedLanes=0),o=o.eventTimes,e=31-oc(e),o[e]=s}function Bc(o,e){var s=o.pendingLanes&~e;o.pendingLanes=e,o.suspendedLanes=0,o.pingedLanes=0,o.expiredLanes&=e,o.mutableReadLanes&=e,o.entangledLanes&=e,e=o.entanglements;var a=o.eventTimes;for(o=o.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;function ge(o,e){switch(o){case"keyup":return $d.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function he(o){return o=o.detail,typeof o=="object"&&"data"in o?o.data:null}var ie$2=!1;function je(o,e){switch(o){case"compositionend":return he(e);case"keypress":return e.which!==32?null:(fe=!0,ee);case"textInput":return o=e.data,o===ee&&fe?null:o;default:return null}}function ke(o,e){if(ie$2)return o==="compositionend"||!ae&&ge(o,e)?(o=nd(),md=ld=kd=null,ie$2=!1,o):null;switch(o){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:s,offset:e-o};o=a}e:{for(;s;){if(s.nextSibling){s=s.nextSibling;break e}s=s.parentNode}s=void 0}s=Je(s)}}function Le(o,e){return o&&e?o===e?!0:o&&o.nodeType===3?!1:e&&e.nodeType===3?Le(o,e.parentNode):"contains"in o?o.contains(e):o.compareDocumentPosition?!!(o.compareDocumentPosition(e)&16):!1:!1}function Me(){for(var o=window,e=Xa();e instanceof o.HTMLIFrameElement;){try{var s=typeof e.contentWindow.location.href=="string"}catch{s=!1}if(s)o=e.contentWindow;else break;e=Xa(o.document)}return e}function Ne(o){var e=o&&o.nodeName&&o.nodeName.toLowerCase();return e&&(e==="input"&&(o.type==="text"||o.type==="search"||o.type==="tel"||o.type==="url"||o.type==="password")||e==="textarea"||o.contentEditable==="true")}function Oe(o){var e=Me(),s=o.focusedElem,a=o.selectionRange;if(e!==s&&s&&s.ownerDocument&&Le(s.ownerDocument.documentElement,s)){if(a!==null&&Ne(s)){if(e=a.start,o=a.end,o===void 0&&(o=e),"selectionStart"in s)s.selectionStart=e,s.selectionEnd=Math.min(o,s.value.length);else if(o=(e=s.ownerDocument||document)&&e.defaultView||window,o.getSelection){o=o.getSelection();var c=s.textContent.length,h=Math.min(a.start,c);a=a.end===void 0?h:Math.min(a.end,c),!o.extend&&h>a&&(c=a,a=h,h=c),c=Ke(s,h);var d=Ke(s,a);c&&d&&(o.rangeCount!==1||o.anchorNode!==c.node||o.anchorOffset!==c.offset||o.focusNode!==d.node||o.focusOffset!==d.offset)&&(e=e.createRange(),e.setStart(c.node,c.offset),o.removeAllRanges(),h>a?(o.addRange(e),o.extend(d.node,d.offset)):(e.setEnd(d.node,d.offset),o.addRange(e)))}}for(e=[],o=s;o=o.parentNode;)o.nodeType===1&&e.push({element:o,left:o.scrollLeft,top:o.scrollTop});for(typeof s.focus=="function"&&s.focus(),s=0;s=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;function Ue(o,e,s){var a=s.window===s?s.document:s.nodeType===9?s:s.ownerDocument;Te||Qe==null||Qe!==Xa(a)||(a=Qe,"selectionStart"in a&&Ne(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Se&&Ie(Se,a)||(Se=a,a=oe(Re,"onSelect"),0Tf||(o.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(o,e){Tf++,Sf[Tf]=o.current,o.current=e}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(o,e){var s=o.type.contextTypes;if(!s)return Vf;var a=o.stateNode;if(a&&a.__reactInternalMemoizedUnmaskedChildContext===e)return a.__reactInternalMemoizedMaskedChildContext;var c={},h;for(h in s)c[h]=e[h];return a&&(o=o.stateNode,o.__reactInternalMemoizedUnmaskedChildContext=e,o.__reactInternalMemoizedMaskedChildContext=c),c}function Zf(o){return o=o.childContextTypes,o!=null}function $f(){E(Wf),E(H)}function ag(o,e,s){if(H.current!==Vf)throw Error(p$2(168));G(H,e),G(Wf,s)}function bg(o,e,s){var a=o.stateNode;if(e=e.childContextTypes,typeof a.getChildContext!="function")return s;a=a.getChildContext();for(var c in a)if(!(c in e))throw Error(p$2(108,Ra(o)||"Unknown",c));return A({},s,a)}function cg(o){return o=(o=o.stateNode)&&o.__reactInternalMemoizedMergedChildContext||Vf,Xf=H.current,G(H,o),G(Wf,Wf.current),!0}function dg(o,e,s){var a=o.stateNode;if(!a)throw Error(p$2(169));s?(o=bg(o,e,Xf),a.__reactInternalMemoizedMergedChildContext=o,E(Wf),E(H),G(H,o)):E(Wf),G(Wf,s)}var eg=null,fg=!1,gg=!1;function hg(o){eg===null?eg=[o]:eg.push(o)}function ig(o){fg=!0,hg(o)}function jg(){if(!gg&&eg!==null){gg=!0;var o=0,e=C$1;try{var s=eg;for(C$1=1;o>=d,c-=d,rg=1<<32-oc(e)+c|s<lt?(pt=ht,ht=null):pt=ht.sibling;var ft=_e(rt,ht,at[lt],ot);if(ft===null){ht===null&&(ht=pt);break}o&&ht&&ft.alternate===null&&e(rt,ht),it=h(ft,it,lt),ct===null?ut=ft:ct.sibling=ft,ct=ft,ht=pt}if(lt===at.length)return s(rt,ht),I$1&&tg(rt,lt),ut;if(ht===null){for(;ltlt?(pt=ht,ht=null):pt=ht.sibling;var gt=_e(rt,ht,ft.value,ot);if(gt===null){ht===null&&(ht=pt);break}o&&ht&>.alternate===null&&e(rt,ht),it=h(gt,it,lt),ct===null?ut=gt:ct.sibling=gt,ct=gt,ht=pt}if(ft.done)return s(rt,ht),I$1&&tg(rt,lt),ut;if(ht===null){for(;!ft.done;lt++,ft=at.next())ft=j(rt,ft.value,ot),ft!==null&&(it=h(ft,it,lt),ct===null?ut=ft:ct.sibling=ft,ct=ft);return I$1&&tg(rt,lt),ut}for(ht=a(rt,ht);!ft.done;lt++,ft=at.next())ft=et(ht,rt,lt,ft.value,ot),ft!==null&&(o&&ft.alternate!==null&&ht.delete(ft.key===null?lt:ft.key),it=h(ft,it,lt),ct===null?ut=ft:ct.sibling=ft,ct=ft);return o&&ht.forEach(function(yt){return e(rt,yt)}),I$1&&tg(rt,lt),ut}function st(rt,it,at,ot){if(typeof at=="object"&&at!==null&&at.type===ya&&at.key===null&&(at=at.props.children),typeof at=="object"&&at!==null){switch(at.$$typeof){case va:e:{for(var ut=at.key,ct=it;ct!==null;){if(ct.key===ut){if(ut=at.type,ut===ya){if(ct.tag===7){s(rt,ct.sibling),it=c(ct,at.props.children),it.return=rt,rt=it;break e}}else if(ct.elementType===ut||typeof ut=="object"&&ut!==null&&ut.$$typeof===Ha&&uh(ut)===ct.type){s(rt,ct.sibling),it=c(ct,at.props),it.ref=sh(rt,ct,at),it.return=rt,rt=it;break e}s(rt,ct);break}else e(rt,ct);ct=ct.sibling}at.type===ya?(it=Ah(at.props.children,rt.mode,ot,at.key),it.return=rt,rt=it):(ot=yh(at.type,at.key,at.props,null,rt.mode,ot),ot.ref=sh(rt,it,at),ot.return=rt,rt=ot)}return d(rt);case wa:e:{for(ct=at.key;it!==null;){if(it.key===ct)if(it.tag===4&&it.stateNode.containerInfo===at.containerInfo&&it.stateNode.implementation===at.implementation){s(rt,it.sibling),it=c(it,at.children||[]),it.return=rt,rt=it;break e}else{s(rt,it);break}else e(rt,it);it=it.sibling}it=zh(at,rt.mode,ot),it.return=rt,rt=it}return d(rt);case Ha:return ct=at._init,st(rt,it,ct(at._payload),ot)}if(eb(at))return tt(rt,it,at,ot);if(Ka(at))return nt(rt,it,at,ot);th(rt,at)}return typeof at=="string"&&at!==""||typeof at=="number"?(at=""+at,it!==null&&it.tag===6?(s(rt,it.sibling),it=c(it,at),it.return=rt,rt=it):(s(rt,it),it=xh(at,rt.mode,ot),it.return=rt,rt=it),d(rt)):s(rt,it)}return st}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(o){if(o===Dh)throw Error(p$2(174));return o}function Ih(o,e){switch(G(Gh,e),G(Fh,o),G(Eh,Dh),o=e.nodeType,o){case 9:case 11:e=(e=e.documentElement)?e.namespaceURI:lb(null,"");break;default:o=o===8?e.parentNode:e,e=o.namespaceURI||null,o=o.tagName,e=lb(e,o)}E(Eh),G(Eh,e)}function Jh(){E(Eh),E(Fh),E(Gh)}function Kh(o){Hh(Gh.current);var e=Hh(Eh.current),s=lb(e,o.type);e!==s&&(G(Fh,o),G(Eh,s))}function Lh(o){Fh.current===o&&(E(Eh),E(Fh))}var M=Uf(0);function Mh(o){for(var e=o;e!==null;){if(e.tag===13){var s=e.memoizedState;if(s!==null&&(s=s.dehydrated,s===null||s.data==="$?"||s.data==="$!"))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if((e.flags&128)!==0)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===o)break;for(;e.sibling===null;){if(e.return===null||e.return===o)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}var Nh=[];function Oh(){for(var o=0;os?s:4,o(!0);var a=Qh.transition;Qh.transition={};try{o(!1),e()}finally{C$1=s,Qh.transition=a}}function Fi(){return di().memoizedState}function Gi(o,e,s){var a=lh(o);if(s={lane:a,action:s,hasEagerState:!1,eagerState:null,next:null},Hi(o))Ii(e,s);else if(s=Yg(o,e,s,a),s!==null){var c=L();mh(s,o,a,c),Ji(s,e,a)}}function ri(o,e,s){var a=lh(o),c={lane:a,action:s,hasEagerState:!1,eagerState:null,next:null};if(Hi(o))Ii(e,c);else{var h=o.alternate;if(o.lanes===0&&(h===null||h.lanes===0)&&(h=e.lastRenderedReducer,h!==null))try{var d=e.lastRenderedState,g=h(d,s);if(c.hasEagerState=!0,c.eagerState=g,He(g,d)){var _=e.interleaved;_===null?(c.next=c,Xg(e)):(c.next=_.next,_.next=c),e.interleaved=c;return}}catch{}finally{}s=Yg(o,e,c,a),s!==null&&(c=L(),mh(s,o,a,c),Ji(s,e,a))}}function Hi(o){var e=o.alternate;return o===N||e!==null&&e===N}function Ii(o,e){Th=Sh=!0;var s=o.pending;s===null?e.next=e:(e.next=s.next,s.next=e),o.pending=e}function Ji(o,e,s){if((s&4194240)!==0){var a=e.lanes;a&=o.pendingLanes,s|=a,e.lanes=s,Cc(o,s)}}var ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(o,e){return ci().memoizedState=[o,e===void 0?null:e],o},useContext:Vg,useEffect:vi,useImperativeHandle:function(o,e,s){return s=s!=null?s.concat([o]):null,ti(4194308,4,yi.bind(null,e,o),s)},useLayoutEffect:function(o,e){return ti(4194308,4,o,e)},useInsertionEffect:function(o,e){return ti(4,2,o,e)},useMemo:function(o,e){var s=ci();return e=e===void 0?null:e,o=o(),s.memoizedState=[o,e],o},useReducer:function(o,e,s){var a=ci();return e=s!==void 0?s(e):e,a.memoizedState=a.baseState=e,o={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:o,lastRenderedState:e},a.queue=o,o=o.dispatch=Gi.bind(null,N,o),[a.memoizedState,o]},useRef:function(o){var e=ci();return o={current:o},e.memoizedState=o},useState:qi,useDebugValue:Ai,useDeferredValue:function(o){return ci().memoizedState=o},useTransition:function(){var o=qi(!1),e=o[0];return o=Ei.bind(null,o[1]),ci().memoizedState=o,[e,o]},useMutableSource:function(){},useSyncExternalStore:function(o,e,s){var a=N,c=ci();if(I$1){if(s===void 0)throw Error(p$2(407));s=s()}else{if(s=e(),R===null)throw Error(p$2(349));(Rh&30)!==0||ni(a,e,s)}c.memoizedState=s;var h={value:s,getSnapshot:e};return c.queue=h,vi(ki.bind(null,a,h,o),[o]),a.flags|=2048,li(9,mi.bind(null,a,h,s,e),void 0,null),s},useId:function(){var o=ci(),e=R.identifierPrefix;if(I$1){var s=sg,a=rg;s=(a&~(1<<32-oc(a)-1)).toString(32)+s,e=":"+e+"R"+s,s=Uh++,0<\/script>",o=o.removeChild(o.firstChild)):typeof a.is=="string"?o=d.createElement(s,{is:a.is}):(o=d.createElement(s),s==="select"&&(d=o,a.multiple?d.multiple=!0:a.size&&(d.size=a.size))):o=d.createElementNS(o,s),o[Of]=e,o[Pf]=a,Aj(o,e,!1,!1),e.stateNode=o;e:{switch(d=vb(s,a),s){case"dialog":D("cancel",o),D("close",o),c=a;break;case"iframe":case"object":case"embed":D("load",o),c=a;break;case"video":case"audio":for(c=0;cHj&&(e.flags|=128,a=!0,Ej(h,!1),e.lanes=4194304)}else{if(!a)if(o=Mh(d),o!==null){if(e.flags|=128,a=!0,s=o.updateQueue,s!==null&&(e.updateQueue=s,e.flags|=4),Ej(h,!0),h.tail===null&&h.tailMode==="hidden"&&!d.alternate&&!I$1)return S(e),null}else 2*B()-h.renderingStartTime>Hj&&s!==1073741824&&(e.flags|=128,a=!0,Ej(h,!1),e.lanes=4194304);h.isBackwards?(d.sibling=e.child,e.child=d):(s=h.last,s!==null?s.sibling=d:e.child=d,h.last=d)}return h.tail!==null?(e=h.tail,h.rendering=e,h.tail=e.sibling,h.renderingStartTime=B(),e.sibling=null,s=M.current,G(M,a?s&1|2:s&1),e):(S(e),null);case 22:case 23:return Ij(),a=e.memoizedState!==null,o!==null&&o.memoizedState!==null!==a&&(e.flags|=8192),a&&(e.mode&1)!==0?(gj&1073741824)!==0&&(S(e),e.subtreeFlags&6&&(e.flags|=8192)):S(e),null;case 24:return null;case 25:return null}throw Error(p$2(156,e.tag))}function Jj(o,e){switch(wg(e),e.tag){case 1:return Zf(e.type)&&$f(),o=e.flags,o&65536?(e.flags=o&-65537|128,e):null;case 3:return Jh(),E(Wf),E(H),Oh(),o=e.flags,(o&65536)!==0&&(o&128)===0?(e.flags=o&-65537|128,e):null;case 5:return Lh(e),null;case 13:if(E(M),o=e.memoizedState,o!==null&&o.dehydrated!==null){if(e.alternate===null)throw Error(p$2(340));Ig()}return o=e.flags,o&65536?(e.flags=o&-65537|128,e):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(e.type._context),null;case 22:case 23:return Ij(),null;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=typeof WeakSet=="function"?WeakSet:Set,V=null;function Mj(o,e){var s=o.ref;if(s!==null)if(typeof s=="function")try{s(null)}catch(a){W(o,e,a)}else s.current=null}function Nj(o,e,s){try{s()}catch(a){W(o,e,a)}}var Oj=!1;function Pj(o,e){if(Cf=dd,o=Me(),Ne(o)){if("selectionStart"in o)var s={start:o.selectionStart,end:o.selectionEnd};else e:{s=(s=o.ownerDocument)&&s.defaultView||window;var a=s.getSelection&&s.getSelection();if(a&&a.rangeCount!==0){s=a.anchorNode;var c=a.anchorOffset,h=a.focusNode;a=a.focusOffset;try{s.nodeType,h.nodeType}catch{s=null;break e}var d=0,g=-1,_=-1,b=0,$=0,j=o,_e=null;t:for(;;){for(var et;j!==s||c!==0&&j.nodeType!==3||(g=d+c),j!==h||a!==0&&j.nodeType!==3||(_=d+a),j.nodeType===3&&(d+=j.nodeValue.length),(et=j.firstChild)!==null;)_e=j,j=et;for(;;){if(j===o)break t;if(_e===s&&++b===c&&(g=d),_e===h&&++$===a&&(_=d),(et=j.nextSibling)!==null)break;j=_e,_e=j.parentNode}j=et}s=g===-1||_===-1?null:{start:g,end:_}}else s=null}s=s||{start:0,end:0}}else s=null;for(Df={focusedElem:o,selectionRange:s},dd=!1,V=e;V!==null;)if(e=V,o=e.child,(e.subtreeFlags&1028)!==0&&o!==null)o.return=e,V=o;else for(;V!==null;){e=V;try{var tt=e.alternate;if((e.flags&1024)!==0)switch(e.tag){case 0:case 11:case 15:break;case 1:if(tt!==null){var nt=tt.memoizedProps,st=tt.memoizedState,rt=e.stateNode,it=rt.getSnapshotBeforeUpdate(e.elementType===e.type?nt:Lg(e.type,nt),st);rt.__reactInternalSnapshotBeforeUpdate=it}break;case 3:var at=e.stateNode.containerInfo;at.nodeType===1?at.textContent="":at.nodeType===9&&at.documentElement&&at.removeChild(at.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p$2(163))}}catch(ot){W(e,e.return,ot)}if(o=e.sibling,o!==null){o.return=e.return,V=o;break}V=e.return}return tt=Oj,Oj=!1,tt}function Qj(o,e,s){var a=e.updateQueue;if(a=a!==null?a.lastEffect:null,a!==null){var c=a=a.next;do{if((c.tag&o)===o){var h=c.destroy;c.destroy=void 0,h!==void 0&&Nj(e,s,h)}c=c.next}while(c!==a)}}function Rj(o,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var s=e=e.next;do{if((s.tag&o)===o){var a=s.create;s.destroy=a()}s=s.next}while(s!==e)}}function Sj(o){var e=o.ref;if(e!==null){var s=o.stateNode;switch(o.tag){case 5:o=s;break;default:o=s}typeof e=="function"?e(o):e.current=o}}function Tj(o){var e=o.alternate;e!==null&&(o.alternate=null,Tj(e)),o.child=null,o.deletions=null,o.sibling=null,o.tag===5&&(e=o.stateNode,e!==null&&(delete e[Of],delete e[Pf],delete e[of],delete e[Qf],delete e[Rf])),o.stateNode=null,o.return=null,o.dependencies=null,o.memoizedProps=null,o.memoizedState=null,o.pendingProps=null,o.stateNode=null,o.updateQueue=null}function Uj(o){return o.tag===5||o.tag===3||o.tag===4}function Vj(o){e:for(;;){for(;o.sibling===null;){if(o.return===null||Uj(o.return))return null;o=o.return}for(o.sibling.return=o.return,o=o.sibling;o.tag!==5&&o.tag!==6&&o.tag!==18;){if(o.flags&2||o.child===null||o.tag===4)continue e;o.child.return=o,o=o.child}if(!(o.flags&2))return o.stateNode}}function Wj(o,e,s){var a=o.tag;if(a===5||a===6)o=o.stateNode,e?s.nodeType===8?s.parentNode.insertBefore(o,e):s.insertBefore(o,e):(s.nodeType===8?(e=s.parentNode,e.insertBefore(o,s)):(e=s,e.appendChild(o)),s=s._reactRootContainer,s!=null||e.onclick!==null||(e.onclick=Bf));else if(a!==4&&(o=o.child,o!==null))for(Wj(o,e,s),o=o.sibling;o!==null;)Wj(o,e,s),o=o.sibling}function Xj(o,e,s){var a=o.tag;if(a===5||a===6)o=o.stateNode,e?s.insertBefore(o,e):s.appendChild(o);else if(a!==4&&(o=o.child,o!==null))for(Xj(o,e,s),o=o.sibling;o!==null;)Xj(o,e,s),o=o.sibling}var X=null,Yj=!1;function Zj(o,e,s){for(s=s.child;s!==null;)ak(o,e,s),s=s.sibling}function ak(o,e,s){if(lc&&typeof lc.onCommitFiberUnmount=="function")try{lc.onCommitFiberUnmount(kc,s)}catch{}switch(s.tag){case 5:U||Mj(s,e);case 6:var a=X,c=Yj;X=null,Zj(o,e,s),X=a,Yj=c,X!==null&&(Yj?(o=X,s=s.stateNode,o.nodeType===8?o.parentNode.removeChild(s):o.removeChild(s)):X.removeChild(s.stateNode));break;case 18:X!==null&&(Yj?(o=X,s=s.stateNode,o.nodeType===8?Kf(o.parentNode,s):o.nodeType===1&&Kf(o,s),bd(o)):Kf(X,s.stateNode));break;case 4:a=X,c=Yj,X=s.stateNode.containerInfo,Yj=!0,Zj(o,e,s),X=a,Yj=c;break;case 0:case 11:case 14:case 15:if(!U&&(a=s.updateQueue,a!==null&&(a=a.lastEffect,a!==null))){c=a=a.next;do{var h=c,d=h.destroy;h=h.tag,d!==void 0&&((h&2)!==0||(h&4)!==0)&&Nj(s,e,d),c=c.next}while(c!==a)}Zj(o,e,s);break;case 1:if(!U&&(Mj(s,e),a=s.stateNode,typeof a.componentWillUnmount=="function"))try{a.props=s.memoizedProps,a.state=s.memoizedState,a.componentWillUnmount()}catch(g){W(s,e,g)}Zj(o,e,s);break;case 21:Zj(o,e,s);break;case 22:s.mode&1?(U=(a=U)||s.memoizedState!==null,Zj(o,e,s),U=a):Zj(o,e,s);break;default:Zj(o,e,s)}}function bk(o){var e=o.updateQueue;if(e!==null){o.updateQueue=null;var s=o.stateNode;s===null&&(s=o.stateNode=new Lj),e.forEach(function(a){var c=ck.bind(null,o,a);s.has(a)||(s.add(a),a.then(c,c))})}}function dk(o,e){var s=e.deletions;if(s!==null)for(var a=0;ac&&(c=d),a&=~h}if(a=c,a=B()-a,a=(120>a?120:480>a?480:1080>a?1080:1920>a?1920:3e3>a?3e3:4320>a?4320:1960*mk(a/1960))-a,10o?16:o,xk===null)var a=!1;else{if(o=xk,xk=null,yk=0,(K&6)!==0)throw Error(p$2(331));var c=K;for(K|=4,V=o.current;V!==null;){var h=V,d=h.child;if((V.flags&16)!==0){var g=h.deletions;if(g!==null){for(var _=0;_B()-gk?Lk(o,0):sk|=s),Ek(o,e)}function Zk(o,e){e===0&&((o.mode&1)===0?e=1:(e=sc,sc<<=1,(sc&130023424)===0&&(sc=4194304)));var s=L();o=Zg(o,e),o!==null&&(Ac(o,e,s),Ek(o,s))}function vj(o){var e=o.memoizedState,s=0;e!==null&&(s=e.retryLane),Zk(o,s)}function ck(o,e){var s=0;switch(o.tag){case 13:var a=o.stateNode,c=o.memoizedState;c!==null&&(s=c.retryLane);break;case 19:a=o.stateNode;break;default:throw Error(p$2(314))}a!==null&&a.delete(e),Zk(o,s)}var Wk;Wk=function(o,e,s){if(o!==null)if(o.memoizedProps!==e.pendingProps||Wf.current)Ug=!0;else{if((o.lanes&s)===0&&(e.flags&128)===0)return Ug=!1,zj(o,e,s);Ug=(o.flags&131072)!==0}else Ug=!1,I$1&&(e.flags&1048576)!==0&&ug(e,ng,e.index);switch(e.lanes=0,e.tag){case 2:var a=e.type;jj(o,e),o=e.pendingProps;var c=Yf(e,H.current);Tg(e,s),c=Xh(null,e,a,o,c,s);var h=bi();return e.flags|=1,typeof c=="object"&&c!==null&&typeof c.render=="function"&&c.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,Zf(a)?(h=!0,cg(e)):h=!1,e.memoizedState=c.state!==null&&c.state!==void 0?c.state:null,ah(e),c.updater=nh,e.stateNode=c,c._reactInternals=e,rh(e,a,o,s),e=kj(null,e,a,!0,h,s)):(e.tag=0,I$1&&h&&vg(e),Yi(null,e,c,s),e=e.child),e;case 16:a=e.elementType;e:{switch(jj(o,e),o=e.pendingProps,c=a._init,a=c(a._payload),e.type=a,c=e.tag=$k(a),o=Lg(a,o),c){case 0:e=dj(null,e,a,o,s);break e;case 1:e=ij(null,e,a,o,s);break e;case 11:e=Zi(null,e,a,o,s);break e;case 14:e=aj(null,e,a,Lg(a.type,o),s);break e}throw Error(p$2(306,a,""))}return e;case 0:return a=e.type,c=e.pendingProps,c=e.elementType===a?c:Lg(a,c),dj(o,e,a,c,s);case 1:return a=e.type,c=e.pendingProps,c=e.elementType===a?c:Lg(a,c),ij(o,e,a,c,s);case 3:e:{if(lj(e),o===null)throw Error(p$2(387));a=e.pendingProps,h=e.memoizedState,c=h.element,bh(o,e),gh(e,a,null,s);var d=e.memoizedState;if(a=d.element,h.isDehydrated)if(h={element:a,isDehydrated:!1,cache:d.cache,pendingSuspenseBoundaries:d.pendingSuspenseBoundaries,transitions:d.transitions},e.updateQueue.baseState=h,e.memoizedState=h,e.flags&256){c=Ki(Error(p$2(423)),e),e=mj(o,e,a,s,c);break e}else if(a!==c){c=Ki(Error(p$2(424)),e),e=mj(o,e,a,s,c);break e}else for(yg=Lf(e.stateNode.containerInfo.firstChild),xg=e,I$1=!0,zg=null,s=Ch(e,null,a,s),e.child=s;s;)s.flags=s.flags&-3|4096,s=s.sibling;else{if(Ig(),a===c){e=$i(o,e,s);break e}Yi(o,e,a,s)}e=e.child}return e;case 5:return Kh(e),o===null&&Eg(e),a=e.type,c=e.pendingProps,h=o!==null?o.memoizedProps:null,d=c.children,Ef(a,c)?d=null:h!==null&&Ef(a,h)&&(e.flags|=32),hj(o,e),Yi(o,e,d,s),e.child;case 6:return o===null&&Eg(e),null;case 13:return pj(o,e,s);case 4:return Ih(e,e.stateNode.containerInfo),a=e.pendingProps,o===null?e.child=Bh(e,null,a,s):Yi(o,e,a,s),e.child;case 11:return a=e.type,c=e.pendingProps,c=e.elementType===a?c:Lg(a,c),Zi(o,e,a,c,s);case 7:return Yi(o,e,e.pendingProps,s),e.child;case 8:return Yi(o,e,e.pendingProps.children,s),e.child;case 12:return Yi(o,e,e.pendingProps.children,s),e.child;case 10:e:{if(a=e.type._context,c=e.pendingProps,h=e.memoizedProps,d=c.value,G(Mg,a._currentValue),a._currentValue=d,h!==null)if(He(h.value,d)){if(h.children===c.children&&!Wf.current){e=$i(o,e,s);break e}}else for(h=e.child,h!==null&&(h.return=e);h!==null;){var g=h.dependencies;if(g!==null){d=h.child;for(var _=g.firstContext;_!==null;){if(_.context===a){if(h.tag===1){_=ch(-1,s&-s),_.tag=2;var b=h.updateQueue;if(b!==null){b=b.shared;var $=b.pending;$===null?_.next=_:(_.next=$.next,$.next=_),b.pending=_}}h.lanes|=s,_=h.alternate,_!==null&&(_.lanes|=s),Sg(h.return,s,e),g.lanes|=s;break}_=_.next}}else if(h.tag===10)d=h.type===e.type?null:h.child;else if(h.tag===18){if(d=h.return,d===null)throw Error(p$2(341));d.lanes|=s,g=d.alternate,g!==null&&(g.lanes|=s),Sg(d,s,e),d=h.sibling}else d=h.child;if(d!==null)d.return=h;else for(d=h;d!==null;){if(d===e){d=null;break}if(h=d.sibling,h!==null){h.return=d.return,d=h;break}d=d.return}h=d}Yi(o,e,c.children,s),e=e.child}return e;case 9:return c=e.type,a=e.pendingProps.children,Tg(e,s),c=Vg(c),a=a(c),e.flags|=1,Yi(o,e,a,s),e.child;case 14:return a=e.type,c=Lg(a,e.pendingProps),c=Lg(a.type,c),aj(o,e,a,c,s);case 15:return cj(o,e,e.type,e.pendingProps,s);case 17:return a=e.type,c=e.pendingProps,c=e.elementType===a?c:Lg(a,c),jj(o,e),e.tag=1,Zf(a)?(o=!0,cg(e)):o=!1,Tg(e,s),ph(e,a,c),rh(e,a,c,s),kj(null,e,a,!0,o,s);case 19:return yj(o,e,s);case 22:return ej(o,e,s)}throw Error(p$2(156,e.tag))};function Gk(o,e){return ac(o,e)}function al(o,e,s,a){this.tag=o,this.key=s,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=a,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Bg(o,e,s,a){return new al(o,e,s,a)}function bj(o){return o=o.prototype,!(!o||!o.isReactComponent)}function $k(o){if(typeof o=="function")return bj(o)?1:0;if(o!=null){if(o=o.$$typeof,o===Da)return 11;if(o===Ga)return 14}return 2}function wh(o,e){var s=o.alternate;return s===null?(s=Bg(o.tag,e,o.key,o.mode),s.elementType=o.elementType,s.type=o.type,s.stateNode=o.stateNode,s.alternate=o,o.alternate=s):(s.pendingProps=e,s.type=o.type,s.flags=0,s.subtreeFlags=0,s.deletions=null),s.flags=o.flags&14680064,s.childLanes=o.childLanes,s.lanes=o.lanes,s.child=o.child,s.memoizedProps=o.memoizedProps,s.memoizedState=o.memoizedState,s.updateQueue=o.updateQueue,e=o.dependencies,s.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},s.sibling=o.sibling,s.index=o.index,s.ref=o.ref,s}function yh(o,e,s,a,c,h){var d=2;if(a=o,typeof o=="function")bj(o)&&(d=1);else if(typeof o=="string")d=5;else e:switch(o){case ya:return Ah(s.children,c,h,e);case za:d=8,c|=8;break;case Aa:return o=Bg(12,s,e,c|2),o.elementType=Aa,o.lanes=h,o;case Ea:return o=Bg(13,s,e,c),o.elementType=Ea,o.lanes=h,o;case Fa:return o=Bg(19,s,e,c),o.elementType=Fa,o.lanes=h,o;case Ia:return qj(s,c,h,e);default:if(typeof o=="object"&&o!==null)switch(o.$$typeof){case Ba:d=10;break e;case Ca:d=9;break e;case Da:d=11;break e;case Ga:d=14;break e;case Ha:d=16,a=null;break e}throw Error(p$2(130,o==null?o:typeof o,""))}return e=Bg(d,s,e,c),e.elementType=o,e.type=a,e.lanes=h,e}function Ah(o,e,s,a){return o=Bg(7,o,a,e),o.lanes=s,o}function qj(o,e,s,a){return o=Bg(22,o,a,e),o.elementType=Ia,o.lanes=s,o.stateNode={isHidden:!1},o}function xh(o,e,s){return o=Bg(6,o,null,e),o.lanes=s,o}function zh(o,e,s){return e=Bg(4,o.children!==null?o.children:[],o.key,e),e.lanes=s,e.stateNode={containerInfo:o.containerInfo,pendingChildren:null,implementation:o.implementation},e}function bl(o,e,s,a,c){this.tag=e,this.containerInfo=o,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=zc(0),this.expirationTimes=zc(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=zc(0),this.identifierPrefix=a,this.onRecoverableError=c,this.mutableSourceEagerHydrationData=null}function cl(o,e,s,a,c,h,d,g,_){return o=new bl(o,e,s,g,_),e===1?(e=1,h===!0&&(e|=8)):e=0,h=Bg(3,null,null,e),o.current=h,h.stateNode=o,h.memoizedState={element:a,isDehydrated:s,cache:null,transitions:null,pendingSuspenseBoundaries:null},ah(h),o}function dl(o,e,s){var a=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(s){console.error(s)}}e(),o.exports=reactDom_production_min})(reactDom);var m$1=reactDom.exports;client.createRoot=m$1.createRoot,client.hydrateRoot=m$1.hydrateRoot;const scriptRel="modulepreload",assetsURL=function(o){return"/"+o},seen={},__vitePreload=function(e,s,a){return!s||s.length===0?e():Promise.all(s.map(c=>{if(c=assetsURL(c),c in seen)return;seen[c]=!0;const h=c.endsWith(".css"),d=h?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${d}`))return;const g=document.createElement("link");if(g.rel=h?"stylesheet":scriptRel,h||(g.as="script",g.crossOrigin=""),g.href=c,document.head.appendChild(g),h)return new Promise((_,b)=>{g.addEventListener("load",_),g.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${c}`)))})})).then(()=>e())};var fraction$1={exports:{}};/** + * @license Fraction.js v4.2.0 05/03/2022 + * https://www.xarg.org/2014/03/rational-numbers-in-javascript/ + * + * Copyright (c) 2021, Robert Eisele (robert@xarg.org) + * Dual licensed under the MIT or GPL Version 2 licenses. + **/(function(o,e){(function(s){var a=2e3,c={s:1,n:0,d:1};function h(tt,nt){if(isNaN(tt=parseInt(tt,10)))throw et.InvalidParameter;return tt*nt}function d(tt,nt){if(nt===0)throw et.DivisionByZero;var st=Object.create(et.prototype);st.s=tt<0?-1:1,tt=tt<0?-tt:tt;var rt=_e(tt,nt);return st.n=tt/rt,st.d=nt/rt,st}function g(tt){for(var nt={},st=tt,rt=2,it=4;it<=st;){for(;st%rt===0;)st/=rt,nt[rt]=(nt[rt]||0)+1;it+=1+2*rt++}return st!==tt?st>1&&(nt[st]=(nt[st]||0)+1):nt[tt]=(nt[tt]||0)+1,nt}var _=function(tt,nt){var st=0,rt=1,it=1,at=0,ot=0,ut=0,ct=1,ht=1,lt=0,pt=1,ft=1,gt=1,yt=1e7,mt;if(tt!=null)if(nt!==void 0){if(st=tt,rt=nt,it=st*rt,st%1!==0||rt%1!==0)throw et.NonIntegerParameter}else switch(typeof tt){case"object":{if("d"in tt&&"n"in tt)st=tt.n,rt=tt.d,"s"in tt&&(st*=tt.s);else if(0 in tt)st=tt[0],1 in tt&&(rt=tt[1]);else throw et.InvalidParameter;it=st*rt;break}case"number":{if(tt<0&&(it=tt,tt=-tt),tt%1===0)st=tt;else if(tt>0){for(tt>=1&&(ht=Math.pow(10,Math.floor(1+Math.log(tt)/Math.LN10)),tt/=ht);pt<=yt&><=yt;)if(mt=(lt+ft)/(pt+gt),tt===mt){pt+gt<=yt?(st=lt+ft,rt=pt+gt):gt>pt?(st=ft,rt=gt):(st=lt,rt=pt);break}else tt>mt?(lt+=ft,pt+=gt):(ft+=lt,gt+=pt),pt>yt?(st=ft,rt=gt):(st=lt,rt=pt);st*=ht}else(isNaN(tt)||isNaN(nt))&&(rt=st=NaN);break}case"string":{if(pt=tt.match(/\d+|./g),pt===null)throw et.InvalidParameter;if(pt[lt]==="-"?(it=-1,lt++):pt[lt]==="+"&<++,pt.length===lt+1?ot=h(pt[lt++],it):pt[lt+1]==="."||pt[lt]==="."?(pt[lt]!=="."&&(at=h(pt[lt++],it)),lt++,(lt+1===pt.length||pt[lt+1]==="("&&pt[lt+3]===")"||pt[lt+1]==="'"&&pt[lt+3]==="'")&&(ot=h(pt[lt],it),ct=Math.pow(10,pt[lt].length),lt++),(pt[lt]==="("&&pt[lt+2]===")"||pt[lt]==="'"&&pt[lt+2]==="'")&&(ut=h(pt[lt+1],it),ht=Math.pow(10,pt[lt+1].length)-1,lt+=3)):pt[lt+1]==="/"||pt[lt+1]===":"?(ot=h(pt[lt],it),ct=h(pt[lt+2],1),lt+=3):pt[lt+3]==="/"&&pt[lt+1]===" "&&(at=h(pt[lt],it),ot=h(pt[lt+2],it),ct=h(pt[lt+4],1),lt+=5),pt.length<=lt){rt=ct*ht,it=st=ut+rt*at+ht*ot;break}}default:throw et.InvalidParameter}if(rt===0)throw et.DivisionByZero;c.s=it<0?-1:1,c.n=Math.abs(st),c.d=Math.abs(rt)};function b(tt,nt,st){for(var rt=1;nt>0;tt=tt*tt%st,nt>>=1)nt&1&&(rt=rt*tt%st);return rt}function $(tt,nt){for(;nt%2===0;nt/=2);for(;nt%5===0;nt/=5);if(nt===1)return 0;for(var st=10%nt,rt=1;st!==1;rt++)if(st=st*10%nt,rt>a)return 0;return rt}function j(tt,nt,st){for(var rt=1,it=b(10,st,nt),at=0;at<300;at++){if(rt===it)return at;rt=rt*10%nt,it=it*10%nt}return 0}function _e(tt,nt){if(!tt)return nt;if(!nt)return tt;for(;;){if(tt%=nt,!tt)return nt;if(nt%=tt,!nt)return tt}}function et(tt,nt){if(_(tt,nt),this instanceof et)tt=_e(c.d,c.n),this.s=c.s,this.n=c.n/tt,this.d=c.d/tt;else return d(c.s*c.n,c.d)}et.DivisionByZero=new Error("Division by Zero"),et.InvalidParameter=new Error("Invalid argument"),et.NonIntegerParameter=new Error("Parameters must be integer"),et.prototype={s:1,n:0,d:1,abs:function(){return d(this.n,this.d)},neg:function(){return d(-this.s*this.n,this.d)},add:function(tt,nt){return _(tt,nt),d(this.s*this.n*c.d+c.s*this.d*c.n,this.d*c.d)},sub:function(tt,nt){return _(tt,nt),d(this.s*this.n*c.d-c.s*this.d*c.n,this.d*c.d)},mul:function(tt,nt){return _(tt,nt),d(this.s*c.s*this.n*c.n,this.d*c.d)},div:function(tt,nt){return _(tt,nt),d(this.s*c.s*this.n*c.d,this.d*c.n)},clone:function(){return d(this.s*this.n,this.d)},mod:function(tt,nt){if(isNaN(this.n)||isNaN(this.d))return new et(NaN);if(tt===void 0)return d(this.s*this.n%this.d,1);if(_(tt,nt),c.n===0&&this.d===0)throw et.DivisionByZero;return d(this.s*(c.d*this.n)%(c.n*this.d),c.d*this.d)},gcd:function(tt,nt){return _(tt,nt),d(_e(c.n,this.n)*_e(c.d,this.d),c.d*this.d)},lcm:function(tt,nt){return _(tt,nt),c.n===0&&this.n===0?d(0,1):d(c.n*this.n,_e(c.n,this.n)*_e(c.d,this.d))},ceil:function(tt){return tt=Math.pow(10,tt||0),isNaN(this.n)||isNaN(this.d)?new et(NaN):d(Math.ceil(tt*this.s*this.n/this.d),tt)},floor:function(tt){return tt=Math.pow(10,tt||0),isNaN(this.n)||isNaN(this.d)?new et(NaN):d(Math.floor(tt*this.s*this.n/this.d),tt)},round:function(tt){return tt=Math.pow(10,tt||0),isNaN(this.n)||isNaN(this.d)?new et(NaN):d(Math.round(tt*this.s*this.n/this.d),tt)},inverse:function(){return d(this.s*this.d,this.n)},pow:function(tt,nt){if(_(tt,nt),c.d===1)return c.s<0?d(Math.pow(this.s*this.d,c.n),Math.pow(this.n,c.n)):d(Math.pow(this.s*this.n,c.n),Math.pow(this.d,c.n));if(this.s<0)return null;var st=g(this.n),rt=g(this.d),it=1,at=1;for(var ot in st)if(ot!=="1"){if(ot==="0"){it=0;break}if(st[ot]*=c.n,st[ot]%c.d===0)st[ot]/=c.d;else return null;it*=Math.pow(ot,st[ot])}for(var ot in rt)if(ot!=="1"){if(rt[ot]*=c.n,rt[ot]%c.d===0)rt[ot]/=c.d;else return null;at*=Math.pow(ot,rt[ot])}return c.s<0?d(at,it):d(it,at)},equals:function(tt,nt){return _(tt,nt),this.s*this.n*c.d===c.s*c.n*this.d},compare:function(tt,nt){_(tt,nt);var st=this.s*this.n*c.d-c.s*c.n*this.d;return(0=0;at--)it=it.inverse().add(st[at]);if(it.sub(nt).abs().valueOf()0&&(st+=nt,st+=" ",rt%=it),st+=rt,st+="/",st+=it),st},toLatex:function(tt){var nt,st="",rt=this.n,it=this.d;return this.s<0&&(st+="-"),it===1?st+=rt:(tt&&(nt=Math.floor(rt/it))>0&&(st+=nt,rt%=it),st+="\\frac{",st+=rt,st+="}{",st+=it,st+="}"),st},toContinued:function(){var tt,nt=this.n,st=this.d,rt=[];if(isNaN(nt)||isNaN(st))return rt;do rt.push(Math.floor(nt/st)),tt=nt%st,nt=st,st=tt;while(nt!==1);return rt},toString:function(tt){var nt=this.n,st=this.d;if(isNaN(nt)||isNaN(st))return"NaN";tt=tt||15;var rt=$(nt,st),it=j(nt,st,rt),at=this.s<0?"-":"";if(at+=nt/st|0,nt%=st,nt*=10,nt&&(at+="."),rt){for(var ot=it;ot--;)at+=nt/st|0,nt%=st,nt*=10;at+="(";for(var ot=rt;ot--;)at+=nt/st|0,nt%=st,nt*=10;at+=")"}else for(var ot=tt;nt&&ot--;)at+=nt/st|0,nt%=st,nt*=10;return at}},Object.defineProperty(et,"__esModule",{value:!0}),et.default=et,et.Fraction=et,o.exports=et})()})(fraction$1);const Fraction=getDefaultExportFromCjs(fraction$1.exports);Fraction.prototype.sam=function(){return this.floor()};Fraction.prototype.nextSam=function(){return this.sam().add(1)};Fraction.prototype.wholeCycle=function(){return new TimeSpan(this.sam(),this.nextSam())};Fraction.prototype.cyclePos=function(){return this.sub(this.sam())};Fraction.prototype.lt=function(o){return this.compare(o)<0};Fraction.prototype.gt=function(o){return this.compare(o)>0};Fraction.prototype.lte=function(o){return this.compare(o)<=0};Fraction.prototype.gte=function(o){return this.compare(o)>=0};Fraction.prototype.eq=function(o){return this.compare(o)==0};Fraction.prototype.max=function(o){return this.gt(o)?this:o};Fraction.prototype.min=function(o){return this.lt(o)?this:o};Fraction.prototype.show=function(){return this.s*this.n+"/"+this.d};Fraction.prototype.or=function(o){return this.eq(0)?o:this};const fraction=o=>(typeof o=="number"&&(o=String(o)),Fraction(o)),gcd=(...o)=>o.reduce((e,s)=>e.gcd(s),fraction(1));fraction._original=Fraction;class TimeSpan{constructor(e,s){this.begin=fraction(e),this.end=fraction(s)}get spanCycles(){const e=[];var s=this.begin;const a=this.end,c=a.sam();for(;a.gt(s);){if(s.sam().equals(c)){e.push(new TimeSpan(s,this.end));break}const h=s.nextSam();e.push(new TimeSpan(s,h)),s=h}return e}get duration(){return this.end.sub(this.begin)}cycleArc(){const e=this.begin.cyclePos(),s=e.add(this.duration);return new TimeSpan(e,s)}withTime(e){return new TimeSpan(e(this.begin),e(this.end))}withEnd(e){return new TimeSpan(this.begin,e(this.end))}withCycle(e){const s=this.begin.sam(),a=s.add(e(this.begin.sub(s))),c=s.add(e(this.end.sub(s)));return new TimeSpan(a,c)}intersection(e){const s=this.begin.max(e.begin),a=this.end.min(e.end);if(!s.gt(a)&&!(s.equals(a)&&(s.equals(this.end)&&this.begin.lt(this.end)||s.equals(e.end)&&e.begin.lt(e.end))))return new TimeSpan(s,a)}intersection_e(e){const s=this.intersection(e);if(s==null)throw"TimeSpans do not intersect";return s}midpoint(){return this.begin.add(this.duration.div(fraction(2)))}equals(e){return this.begin.equals(e.begin)&&this.end.equals(e.end)}show(){return this.begin.show()+" -> "+this.end.show()}}class Hap{constructor(e,s,a,c={},h=!1){this.whole=e,this.part=s,this.value=a,this.context=c,this.stateful=h,h&&console.assert(typeof this.value=="function","Stateful values must be functions")}get duration(){return this.whole.end.sub(this.whole.begin)}wholeOrPart(){return this.whole?this.whole:this.part}withSpan(e){const s=this.whole?e(this.whole):void 0;return new Hap(s,e(this.part),this.value,this.context)}withValue(e){return new Hap(this.whole,this.part,e(this.value),this.context)}hasOnset(){return this.whole!=null&&this.whole.begin.equals(this.part.begin)}resolveState(e){if(this.stateful&&this.hasOnset()){console.log("stateful");const s=this.value,[a,c]=s(e);return[a,new Hap(this.whole,this.part,c,this.context,!1)]}return[e,this]}spanEquals(e){return this.whole==null&&e.whole==null||this.whole.equals(e.whole)}equals(e){return this.spanEquals(e)&&this.part.equals(e.part)&&this.value===e.value}show(){return"("+(this.whole==null?"~":this.whole.show())+", "+this.part.show()+", "+this.value+")"}showWhole(){return`${this.whole==null?"~":this.whole.show()}: ${typeof this.value=="object"?JSON.stringify(this.value):this.value}`}combineContext(e){const s=this;return{...s.context,...e.context,locations:(s.context.locations||[]).concat(e.context.locations||[])}}setContext(e){return new Hap(this.whole,this.part,this.value,e)}}class State{constructor(e,s={}){this.span=e,this.controls=s}setSpan(e){return new State(e,this.controls)}withSpan(e){return this.setSpan(e(this.span))}setControls(e){return new State(this.span,e)}}const isNote$1=o=>/^[a-gA-G][#b]*[0-9]$/.test(o),tokenizeNote=o=>{var c;if(typeof o!="string")return[];const[e,s="",a]=((c=o.match(/^([a-gA-G])([#bs]*)([0-9])?$/))==null?void 0:c.slice(1))||[];return e?[e,s,a?Number(a):void 0]:[]},toMidi=o=>{const[e,s,a]=tokenizeNote(o);if(!e)throw new Error('not a note: "'+o+'"');const c={c:0,d:2,e:4,f:5,g:7,a:9,b:11}[e.toLowerCase()],h=(s==null?void 0:s.split("").reduce((d,g)=>d+{"#":1,b:-1,s:1}[g],0))||0;return(Number(a)+1)*12+c+h},fromMidi=o=>Math.pow(2,(o-69)/12)*440,getFreq=o=>fromMidi(typeof o=="number"?o:toMidi(o)),midi2note=o=>{const e=Math.floor(o/12)-1;return["C","Db","D","Eb","E","F","Gb","G","Ab","A","Bb","B"][o%12]+e},mod=(o,e)=>(o%e+e)%e,getPlayableNoteValue=o=>{let{value:e,context:s}=o;if(typeof e=="object"&&!Array.isArray(e)&&(e=e.note||e.n||e.value),typeof e=="number"&&s.type!=="frequency")e=fromMidi(o.value);else if(typeof e=="number"&&s.type==="frequency")e=o.value;else if(typeof e!="string"||!isNote$1(e))throw new Error("not a note: "+JSON.stringify(e));return e},getFrequency=o=>{let{value:e,context:s}=o;if(typeof e=="object")return e.freq?e.freq:getFreq(e.note||e.n||e.value);if(typeof e=="number"&&s.type!=="frequency")e=fromMidi(o.value);else if(typeof e=="string"&&isNote$1(e))e=fromMidi(toMidi(o.value));else if(typeof e!="number")throw new Error("not a note or frequency:"+e);return e},rotate=(o,e)=>o.slice(e).concat(o.slice(0,e)),pipe=(...o)=>o.reduce((e,s)=>(...a)=>e(s(...a)),e=>e),compose=(...o)=>pipe(...o.reverse()),removeUndefineds=o=>o.filter(e=>e!=null),flatten$1=o=>[].concat(...o),id$1=o=>o,constant=(o,e)=>o,listRange=(o,e)=>Array.from({length:e-o+1},(s,a)=>a+o);function curry(o,e){const s=function a(...c){if(c.length>=o.length)return o.apply(this,c);{const h=function(...d){return a.apply(this,c.concat(d))};return e&&e(h,c),h}};return e&&e(s,[]),s}function unionWithObj(o,e,s){const a=Object.keys(o).filter(c=>Object.keys(e).includes(c));return Object.assign({},o,e,Object.fromEntries(a.map(c=>[c,s(o[c],e[c])])))}curry((o,e)=>o*e);curry((o,e)=>e.map(o));function drawLine(o,e=60){let s=0,a=fraction(0),c=[""],h="";for(;c[0].length$.hasOnset()).map($=>$.duration),_=gcd(...g),b=_.inverse();c=c.map($=>$+"|"),h+="|";for(let $=0;$nt.whole.begin.lte(j)&&nt.whole.end.gte(_e)),tt=et.length-c.length;tt>0&&(c=c.concat(Array(tt).fill(h))),c=c.map((nt,st)=>{const rt=et[st];if(rt){const at=rt.whole.begin.eq(j)?""+rt.value:"-";return nt+at}return nt+"."}),h+=".",a=a.add(_)}s++}return c.join(` +`)}class Pattern$3{constructor(e){Rt(this,"_Pattern",!0);this.query=e}queryArc(e,s){return this.query(new State(new TimeSpan(e,s)))}_splitQueries(){const e=this,s=a=>flatten$1(a.span.spanCycles.map(c=>e.query(a.setSpan(c))));return new Pattern$3(s)}withQuerySpan(e){return new Pattern$3(s=>this.query(s.withSpan(e)))}withQueryTime(e){return new Pattern$3(s=>this.query(s.withSpan(a=>a.withTime(e))))}withHapSpan(e){return new Pattern$3(s=>this.query(s).map(a=>a.withSpan(e)))}withHapTime(e){return this.withHapSpan(s=>s.withTime(e))}_withHaps(e){return new Pattern$3(s=>e(this.query(s)))}_withHap(e){return this._withHaps(s=>s.map(e))}_setContext(e){return this._withHap(s=>s.setContext(e))}_withContext(e){return this._withHap(s=>s.setContext(e(s.context)))}_stripContext(){return this._withHap(e=>e.setContext({}))}withLocation(e,s){const a={start:{line:e[0],column:e[1],offset:e[2]},end:{line:s[0],column:s[1],offset:s[2]}};return this._withContext(c=>{const h=(c.locations||[]).concat([a]);return{...c,locations:h}})}withMiniLocation(e,s){const a={start:{line:e[0],column:e[1],offset:e[2]},end:{line:s[0],column:s[1],offset:s[2]}};return this._withContext(c=>{let h=c.locations||[];return h=h.map(({start:d,end:g})=>{const _=d.line===1?a.start.column:0;return{start:{...d,line:d.line-1+(a.start.line-1)+1,column:d.column-1+_},end:{...g,line:g.line-1+(a.start.line-1)+1,column:g.column-1+_}}}),{...c,locations:h}})}withValue(e){return new Pattern$3(s=>this.query(s).map(a=>a.withValue(e)))}fmap(e){return this.withValue(e)}_filterHaps(e){return new Pattern$3(s=>this.query(s).filter(e))}_filterValues(e){return new Pattern$3(s=>this.query(s).filter(a=>e(a.value)))}_removeUndefineds(){return this._filterValues(e=>e!=null)}onsetsOnly(){return this._filterHaps(e=>e.hasOnset())}discreteOnly(){return this._filterHaps(e=>e.whole)}_appWhole(e,s){const a=this,c=function(h){const d=a.query(h),g=s.query(h),_=function(b,$){const j=b.part.intersection($.part);if(j!=null)return new Hap(e(b.whole,$.whole),j,b.value($.value),$.combineContext(b))};return flatten$1(d.map(b=>removeUndefineds(g.map($=>_(b,$)))))};return new Pattern$3(c)}appBoth(e){const s=function(a,c){if(!(a==null||c==null))return a.intersection_e(c)};return this._appWhole(s,e)}appLeft(e){const s=this,a=function(c){const h=[];for(const d of s.query(c)){const g=e.query(c.setSpan(d.wholeOrPart()));for(const _ of g){const b=d.whole,$=d.part.intersection(_.part);if($){const j=d.value(_.value),_e=_.combineContext(d),et=new Hap(b,$,j,_e);h.push(et)}}}return h};return new Pattern$3(a)}appRight(e){const s=this,a=function(c){const h=[];for(const d of e.query(c)){const g=s.query(c.setSpan(d.wholeOrPart()));for(const _ of g){const b=d.whole,$=_.part.intersection(d.part);if($){const j=_.value(d.value),_e=d.combineContext(_),et=new Hap(b,$,j,_e);h.push(et)}}}return h};return new Pattern$3(a)}firstCycle(e=!1){var s=this;return e||(s=s._stripContext()),s.query(new State(new TimeSpan(fraction(0),fraction(1))))}get _firstCycleValues(){return this.firstCycle().map(e=>e.value)}get _showFirstCycle(){return this.firstCycle().map(e=>`${e.value}: ${e.whole.begin.toFraction()} - ${e.whole.end.toFraction()}`)}_sortHapsByPart(){return this._withHaps(e=>e.sort((s,a)=>s.part.begin.sub(a.part.begin).or(s.part.end.sub(a.part.end)).or(s.whole.begin.sub(a.whole.begin).or(s.whole.end.sub(a.whole.end)))))}_opIn(e,s){return this.fmap(s).appLeft(reify$1(e))}_opOut(e,s){return this.fmap(s).appRight(reify$1(e))}_opMix(e,s){return this.fmap(s).appBoth(reify$1(e))}_opSqueeze(e,s){const a=reify$1(e);return this.fmap(c=>a.fmap(h=>s(c)(h)))._squeezeJoin()}_opSqueezeOut(e,s){const a=this;return reify$1(e).fmap(h=>a.fmap(d=>s(d)(h)))._squeezeJoin()}_opTrig(e,s){return reify$1(e).fmap(c=>this.fmap(h=>s(h)(c)))._trigJoin()}_opTrigzero(e,s){return reify$1(e).fmap(c=>this.fmap(h=>s(h)(c)))._TrigzeroJoin()}_asNumber(e=!1,s=!1){return this._withHap(a=>{const c=Number(a.value);if(!isNaN(c))return a.withValue(()=>c);const h={e:Math.E,pi:Math.PI}[a.value];if(typeof h<"u")return a.withValue(()=>h);if(isNote$1(a.value))return new Hap(a.whole,a.part,toMidi(a.value),{...a.context,type:"midi"});if(!e){if(s)return a;throw new Error('cannot parse as number: "'+a.value+'"')}})}round(){return this._asNumber().fmap(e=>Math.round(e))}floor(){return this._asNumber().fmap(e=>Math.floor(e))}ceil(){return this._asNumber().fmap(e=>Math.ceil(e))}_toBipolar(){return this.fmap(e=>e*2-1)}_fromBipolar(){return this.fmap(e=>(e+1)/2)}range(e,s){return this.mul(s-e).add(e)}rangex(e,s){return this.range(Math.log(e),Math.log(s)).fmap(Math.exp)}range2(e,s){return this._fromBipolar().range(e,s)}_bindWhole(e,s){const a=this,c=function(h){const d=function(_,b){return new Hap(e(_.whole,b.whole),b.part,b.value,Object.assign({},_.context,b.context,{locations:(_.context.locations||[]).concat(b.context.locations||[])}))},g=function(_){return s(_.value).query(h.setSpan(_.part)).map(b=>d(_,b))};return flatten$1(a.query(h).map(_=>g(_)))};return new Pattern$3(c)}bind(e){const s=function(a,c){if(!(a==null||c==null))return a.intersection_e(c)};return this._bindWhole(s,e)}join(){return this.bind(id$1)}outerBind(e){return this._bindWhole((s,a)=>s,e)}outerJoin(){return this.outerBind(id$1)}innerBind(e){return this._bindWhole((s,a)=>a,e)}innerJoin(){return this.innerBind(id$1)}_trigJoin(e=!1){const s=this;return new Pattern$3(a=>s.discreteOnly().query(a).map(c=>c.value.late(e?c.whole.begin:c.whole.begin.cyclePos()).query(a).map(h=>new Hap(h.whole?h.whole.intersection(c.whole):void 0,h.part.intersection(c.part),h.value).setContext(c.combineContext(h))).filter(h=>h.part)).flat())}_TrigzeroJoin(){return this._trigJoin(!0)}_squeezeJoin(){const e=this;function s(a){const c=e.discreteOnly().query(a);function h(g){const b=g.value._compressSpan(g.wholeOrPart().cycleArc()).query(a.setSpan(g.part));function $(j,_e){let et;if(_e.whole&&j.whole&&(et=_e.whole.intersection(j.whole),!et))return;const tt=_e.part.intersection(j.part);if(!tt)return;const nt=_e.combineContext(j);return new Hap(et,tt,_e.value,nt)}return b.map(j=>$(g,j))}return flatten$1(c.map(h)).filter(g=>g)}return new Pattern$3(s)}_squeezeBind(e){return this.fmap(e)._squeezeJoin()}_apply(e){return e(this)}layer(...e){return stack(...e.map(s=>s(this)))}_patternify(e){const s=this;return function(...c){return c=c.map(d=>isPattern$1(d)?d.fmap(g=>g.value||g):d),sequence(...c).fmap(d=>e.call(s,d)).innerJoin()}}_fastGap(e){const s=function(c){const h=c.begin.sam(),d=h.add(c.begin.sub(h).mul(e).min(1)),g=h.add(c.end.sub(h).mul(e).min(1));return new TimeSpan(d,g)},a=function(c){const h=c.begin.sam(),d=h.add(c.begin.sub(h).div(e).min(1)),g=h.add(c.end.sub(h).div(e).min(1));return new TimeSpan(d,g)};return this.withQuerySpan(s).withHapSpan(a)._splitQueries()}_compress(e,s){return e.gt(s)||e.gt(1)||s.gt(1)||e.lt(0)||s.lt(0)?silence:this._fastGap(fraction(1).div(s.sub(e)))._late(e)}_compressSpan(e){return this._compress(e.begin,e.end)}_fast(e){return this.withQueryTime(a=>a.mul(e)).withHapTime(a=>a.div(e))}_slow(e){return this._fast(fraction(1).div(e))}_inside(e,s){return s(this._slow(e))._fast(e)}_outside(e,s){return s(this._fast(e))._slow(e)}_ply(e){return this.fmap(s=>pure(s)._fast(e))._squeezeJoin()}_chop(e){const a=Array.from({length:e},(h,d)=>d).map(h=>({begin:h/e,end:(h+1)/e})),c=function(h){return sequence(a.map(d=>Object.assign({},h,d)))};return this._squeezeBind(c)}_striate(e){const a=Array.from({length:e},(h,d)=>d).map(h=>({begin:h/e,end:(h+1)/e})),c=slowcat(...a);return this.set(c)._fast(e)}_cpm(e){return this._fast(e/60)}_early(e){return e=fraction(e),this.withQueryTime(s=>s.add(e)).withHapTime(s=>s.sub(e))}_late(e){return e=fraction(e),this._early(fraction(0).sub(e))}_zoom(e,s){s=fraction(s),e=fraction(e);const a=s.sub(e);return this.withQuerySpan(c=>c.withCycle(h=>h.mul(a).add(e))).withHapSpan(c=>c.withCycle(h=>h.sub(e).div(a)))._splitQueries()}_zoomArc(e){return this.zoom(e.begin,e.end)}_linger(e){return e==0?silence:e<0?this._zoom(e.add(1),1)._slow(e):this._zoom(0,e)._slow(e)}_color(e){return this._withContext(s=>({...s,color:e}))}log(){return this._withHap(e=>{var s;return e.setContext({...e.context,logs:(((s=e.context)==null?void 0:s.logs)||[]).concat([e.show()])})})}drawLine(){return console.log(drawLine(this)),this}_segment(e){return this.struct(pure(!0)._fast(e))}invert(){return this.fmap(e=>!e)}inv(){return this.invert()}when(e,s){const a=e._filterValues(id$1),c=e._filterValues(g=>!g),h=a.fmap(g=>_=>_).appRight(s(this)),d=c.fmap(g=>_=>_).appRight(this);return stack(h,d)}off(e,s){return stack(this,s(this.late(e)))}every(e,s){const a=this,c=Array(e-1).fill(a);return c.unshift(s(a)),slowcatPrime(...c)}brak(){return this.when(slowcat(!1,!0),e=>fastcat(e,silence)._late(.25))}rev(){const e=this,s=function(a){const c=a.span,h=c.begin.sam(),d=c.begin.nextSam(),g=function(b){const $=b.withTime(_e=>h.add(d.sub(_e))),j=$.begin;return $.begin=$.end,$.end=j,$};return e.query(a.setSpan(g(c))).map(b=>b.withSpan(g))};return new Pattern$3(s)._splitQueries()}palindrome(){return this.every(2,rev)}juxBy(e,s){e/=2;const a=function(d,g,_){return g in d?d[g]:_},c=this.withValue(d=>Object.assign({},d,{pan:a(d,"pan",.5)-e})),h=this.withValue(d=>Object.assign({},d,{pan:a(d,"pan",.5)+e}));return stack(c,s(h))}_jux(e){return this.juxBy(1,e)}stack(...e){return stack(this,...e)}sequence(...e){return sequence(this,...e)}seq(...e){return sequence(this,...e)}cat(...e){return cat(this,...e)}fastcat(...e){return fastcat(this,...e)}slowcat(...e){return slowcat(this,...e)}superimpose(...e){return this.stack(...e.map(s=>s(this)))}stutWith(e,s,a){return stack(...listRange(0,e-1).map(c=>a(this.late(fraction(s).mul(c)),c)))}stut(e,s,a){return this.stutWith(e,a,(c,h)=>c.velocity(Math.pow(s,h)))}_echoWith(e,s,a){return stack(...listRange(0,e-1).map(c=>a(this.late(fraction(s).mul(c)),c)))}_echo(e,s,a){return this._echoWith(e,s,(c,h)=>c.velocity(Math.pow(a,h)))}iter(e,s=!1){return slowcat(...listRange(0,e-1).map(a=>s?this.late(a/e):this.early(a/e)))}iterBack(e){return this.iter(e,!0)}_chunk(e,s,a=!1){const c=Array(e-1).fill(!1);c.unshift(!0);const h=sequence(...c).iter(e,a);return this.when(h,s)}_chunkBack(e,s){return this._chunk(e,s,!0)}_bypass(e){return e=Boolean(parseInt(e)),e?silence:this}hush(){return silence}_duration(e){return this.withHapSpan(s=>new TimeSpan(s.begin,s.begin.add(e)))}_legato(e){return this.withHapSpan(s=>new TimeSpan(s.begin,s.begin.add(s.end.sub(s.begin).mul(e))))}_velocity(e){return this._withContext(s=>({...s,velocity:(s.velocity||1)*e}))}_loopAt(e,s=1){return this.speed(1/e*s).unit("c").slow(e)}onTrigger(e){return this._withHap(s=>s.setContext({...s.context,onTrigger:e}))}log(e=id$1){return this._withHap(s=>s.setContext({...s.context,onTrigger:(...a)=>{s.context.onTrigger&&s.context.onTrigger(...a),console.log(e(...a))}}))}logValues(e=id$1){return this.log((s,a)=>e(a.value))}}function _composeOp(o,e,s){function a(c){return c instanceof Object&&!(c instanceof Function)}return a(o)||a(e)?(a(o)||(o={value:o}),a(e)||(e={value:e}),unionWithObj(o,e,s)):s(o,e)}(function(){const o=a=>a._asNumber(),s={set:[(a,c)=>c],keep:[(a,c)=>a],keepif:[(a,c)=>c?a:void 0],add:[(a,c)=>a+c,a=>a._asNumber(!1,!0)],sub:[(a,c)=>a-c,o],mul:[(a,c)=>a*c,o],div:[(a,c)=>a/c,o],mod:[mod,o],pow:[Math.pow,o],_and:[(a,c)=>a&c,o],_or:[(a,c)=>a|c,o],_xor:[(a,c)=>a^c,o],_lshift:[(a,c)=>a<a>>c,o],lt:[(a,c)=>aa>c],lte:[(a,c)=>a<=c],gte:[(a,c)=>a>=c],eq:[(a,c)=>a==c],eqt:[(a,c)=>a===c],ne:[(a,c)=>a!=c],net:[(a,c)=>a!==c],and:[(a,c)=>a&&c],or:[(a,c)=>a||c],func:[(a,c)=>c(a)]};for(const[a,[c,h]]of Object.entries(s))for(const d of["In","Out","Mix","Squeeze","SqueezeOut","Trig","Trigzero"])Pattern$3.prototype[a+d]=function(...g){var _=this;g=sequence(g),h&&(_=h(_),g=h(g));var b=_["_op"+d](g,$=>j=>_composeOp($,j,c));return a==="keepif"&&(b=b._removeUndefineds()),b},d==="Squeeze"&&(Pattern$3.prototype[a+"SqueezeIn"]=Pattern$3.prototype[a+d]),d==="In"?Pattern$3.prototype[a]=Pattern$3.prototype[a+d]:a==="set"&&(Pattern$3.prototype[d.toLowerCase()]=Pattern$3.prototype[a+d]);Pattern$3.prototype.struct=Pattern$3.prototype.keepifOut,Pattern$3.prototype.structAll=Pattern$3.prototype.keepOut,Pattern$3.prototype.mask=Pattern$3.prototype.keepifIn,Pattern$3.prototype.maskAll=Pattern$3.prototype.keepIn,Pattern$3.prototype.reset=Pattern$3.prototype.keepifTrig,Pattern$3.prototype.resetAll=Pattern$3.prototype.keepTrig,Pattern$3.prototype.restart=Pattern$3.prototype.keepifTrigzero,Pattern$3.prototype.restartAll=Pattern$3.prototype.keepTrigzero})();Pattern$3.prototype.patternified=["apply","chop","color","cpm","duration","early","fast","jux","late","legato","linger","ply","segment","striate","slow","velocity"];Pattern$3.prototype.factories={pure,stack,slowcat,fastcat,cat,timeCat,sequence,seq:seq$2,polymeter,pm,polyrhythm,pr};const silence=new Pattern$3(o=>[]);function pure(o){function e(s){return s.span.spanCycles.map(a=>new Hap(fraction(a.begin).wholeCycle(),a,o))}return new Pattern$3(e)}function isPattern$1(o){const e=o instanceof Pattern$3||(o==null?void 0:o._Pattern);return!o instanceof Pattern$3&&console.warn(`Found Pattern that fails "instanceof Pattern" check. + This may happen if you are using multiple versions of @strudel.cycles/core. + Please check by running "npm ls @strudel.cycles/core".`),e}function reify$1(o){return isPattern$1(o)?o:pure(o)}function stack(...o){o=o.map(s=>Array.isArray(s)?sequence(...s):reify$1(s));const e=s=>flatten$1(o.map(a=>a.query(s)));return new Pattern$3(e)}function slowcat(...o){o=o.map(s=>Array.isArray(s)?sequence(...s):reify$1(s));const e=function(s){const a=s.span,c=mod(a.begin.sam(),o.length),h=o[c];if(!h)return[];const d=a.begin.floor().sub(a.begin.div(o.length).floor());return h.withHapTime(g=>g.add(d)).query(s.setSpan(a.withTime(g=>g.sub(d))))};return new Pattern$3(e)._splitQueries()}function slowcatPrime(...o){o=o.map(reify$1);const e=function(s){const a=Math.floor(s.span.begin)%o.length,c=o[a];return(c==null?void 0:c.query(s))||[]};return new Pattern$3(e)._splitQueries()}function fastcat(...o){return slowcat(...o)._fast(o.length)}function cat(...o){return slowcat(...o)}function timeCat(...o){const e=o.map(c=>c[0]).reduce((c,h)=>c.add(h),fraction(0));let s=fraction(0);const a=[];for(const[c,h]of o){const d=s.add(c);a.push(reify$1(h)._compress(s.div(e),d.div(e))),s=d}return stack(...a)}function sequence(...o){return fastcat(...o)}function seq$2(...o){return fastcat(...o)}function _sequenceCount(o){return Array.isArray(o)?o.length==0?[silence,0]:o.length==1?_sequenceCount(o[0]):[fastcat(...o.map(e=>_sequenceCount(e)[0])),o.length]:[reify$1(o),1]}function polymeterSteps(o,...e){const s=e.map(c=>_sequenceCount(c));if(s.length==0)return silence;o==0&&(o=s[0][1]);const a=[];for(const c of s)c[1]==0&&next,o==c[1]?a.push(c[0]):a.push(c[0]._fast(fraction(o).div(fraction(c[1]))));return stack(...a)}function polymeter(...o){return polymeterSteps(0,...o)}function pm(...o){polymeter(...o)}function polyrhythm(...o){const e=o.map(s=>sequence(s));return e.length==0?silence:stack(...e)}function pr(o){polyrhythm(o)}const add$1=curry((o,e)=>e.add(o)),chop=curry((o,e)=>e.chop(o)),chunk=curry((o,e)=>e.chunk(o)),chunkBack=curry((o,e)=>e.chunkBack(o)),div=curry((o,e)=>e.div(o)),early=curry((o,e)=>e.early(o)),echo=curry((o,e,s,a)=>a.echo(o,e,s)),every=curry((o,e,s)=>s.every(o,e)),fast=curry((o,e)=>e.fast(o)),inv=o=>o.inv(),invert=o=>o.invert(),iter=curry((o,e)=>e.iter(o)),iterBack=curry((o,e)=>e.iter(o)),jux=curry((o,e)=>e.jux(o)),juxBy=curry((o,e,s)=>s.juxBy(o,e)),late=curry((o,e)=>e.late(o)),linger=curry((o,e)=>e.linger(o)),mask=curry((o,e)=>e.mask(o)),mul=curry((o,e)=>e.mul(o)),off=curry((o,e,s)=>s.off(o,e)),ply=curry((o,e)=>e.ply(o)),range=curry((o,e,s)=>s.range(o,e)),range2=curry((o,e,s)=>s.range2(o,e)),rev=o=>o.rev(),slow=curry((o,e)=>e.slow(o)),struct=curry((o,e)=>e.struct(o)),sub=curry((o,e)=>e.sub(o)),superimpose=curry((o,e)=>e.superimpose(...o)),set=curry((o,e)=>e.set(o)),when=curry((o,e,s)=>s.when(o,e));Pattern$3.prototype.composable={fast,slow,early,late,superimpose};function makeComposable(o){return Object.entries(Pattern$3.prototype.composable).forEach(([e,s])=>{o[e]=(...a)=>{const c=compose(o,s(...a));return makeComposable(c)}}),o}const patternify2=o=>(e,s,a)=>e.fmap(c=>h=>o.call(a,c,h)).appLeft(s).innerJoin(),patternify3=o=>(e,s,a,c)=>e.fmap(h=>d=>g=>o.call(c,h,d,g)).appLeft(s).appLeft(a).innerJoin(),patternify4=o=>(e,s,a,c,h)=>e.fmap(d=>g=>_=>b=>o.call(h,d,g,_,b)).appLeft(s).appLeft(a).appLeft(c).innerJoin();Pattern$3.prototype.echo=function(...o){return o=o.map(reify$1),patternify3(Pattern$3.prototype._echo)(...o,this)};Pattern$3.prototype.echoWith=function(...o){return o=o.map(reify$1),patternify3(Pattern$3.prototype._echoWith)(...o,this)};Pattern$3.prototype.chunk=function(...o){return o=o.map(reify$1),patternify2(Pattern$3.prototype._chunk)(...o,this)};Pattern$3.prototype.chunkBack=function(...o){return o=o.map(reify$1),patternify2(Pattern$3.prototype._chunkBack)(...o,this)};Pattern$3.prototype.loopAt=function(...o){return o=o.map(reify$1),patternify2(Pattern$3.prototype._loopAt)(...o,this)};Pattern$3.prototype.zoom=function(...o){return o=o.map(reify$1),patternify2(Pattern$3.prototype._zoom)(...o,this)};Pattern$3.prototype.compress=function(...o){return o=o.map(reify$1),patternify2(Pattern$3.prototype._compress)(...o,this)};Pattern$3.prototype.outside=function(...o){return o=o.map(reify$1),patternify2(Pattern$3.prototype._outside)(...o,this)};Pattern$3.prototype.inside=function(...o){return o=o.map(reify$1),patternify2(Pattern$3.prototype._inside)(...o,this)};Pattern$3.prototype.bootstrap=function(){const o=Object.fromEntries(Object.entries(Pattern$3.prototype.composable).map(([e,s])=>(Pattern$3.prototype[e]&&(Pattern$3.prototype[e]=makeComposable(Pattern$3.prototype[e])),[e,curry(s,makeComposable)])));return this.patternified.forEach(e=>{Pattern$3.prototype[e]=function(...s){return this._patternify(Pattern$3.prototype["_"+e])(...s)}}),o};Pattern$3.prototype.define=(o,e,s={})=>{s.composable&&(Pattern$3.prototype.composable[o]=e),s.patternified&&(Pattern$3.prototype.patternified=Pattern$3.prototype.patternified.concat([o])),Pattern$3.prototype.bootstrap()};Pattern$3.prototype.define("hush",o=>o.hush(),{patternified:!1,composable:!0});Pattern$3.prototype.define("bypass",o=>o.bypass(on),{patternified:!0,composable:!0});const controls={},generic_params=[["s","s","sound"],["f","n","The note or sample number to choose for a synth or sampleset"],["f","note","The note or pitch to play a sound or synth with"],["f","accelerate","a pattern of numbers that speed up (or slow down) samples while they play."],["f","gain","a pattern of numbers that specify volume. Values less than 1 make the sound quieter. Values greater than 1 make the sound louder. For the linear equivalent, see @amp@."],["f","amp","like @gain@, but linear."],["f","attack","a pattern of numbers to specify the attack time (in seconds) of an envelope applied to each sample."],["f","decay",""],["f","sustain",""],["f","release","a pattern of numbers to specify the release time (in seconds) of an envelope applied to each sample."],["f","hold","a pattern of numbers to specify the hold time (in seconds) of an envelope applied to each sample. Only takes effect if `attack` and `release` are also specified."],["f","bandf","A pattern of numbers from 0 to 1. Sets the center frequency of the band-pass filter."],["f","bandq","a pattern of anumbers from 0 to 1. Sets the q-factor of the band-pass filter."],["f","begin","a pattern of numbers from 0 to 1. Skips the beginning of each sample, e.g. `0.25` to cut off the first quarter from each sample."],["f","end","the same as `begin`, but cuts the end off samples, shortening them; e.g. `0.75` to cut off the last quarter of each sample."],["f","loop","loops the sample (from `begin` to `end`) the specified number of times."],["f","legato","controls the amount of overlap between two adjacent sounds"],["f","crush","bit crushing, a pattern of numbers from 1 (for drastic reduction in bit-depth) to 16 (for barely no reduction)."],["f","coarse","fake-resampling, a pattern of numbers for lowering the sample rate, i.e. 1 for original 2 for half, 3 for a third and so on."],["i","channel","choose the channel the pattern is sent to in superdirt"],["i","cut","In the style of classic drum-machines, `cut` will stop a playing sample as soon as another samples with in same cutgroup is to be played. An example would be an open hi-hat followed by a closed one, essentially muting the open."],["f","cutoff","a pattern of numbers from 0 to 1. Applies the cutoff frequency of the low-pass filter."],["f","hcutoff","a pattern of numbers from 0 to 1. Applies the cutoff frequency of the high-pass filter. Also has alias @hpf@"],["f","hresonance","a pattern of numbers from 0 to 1. Applies the resonance of the high-pass filter. Has alias @hpq@"],["f","resonance","a pattern of numbers from 0 to 1. Specifies the resonance of the low-pass filter."],["f","djf","DJ filter, below 0.5 is low pass filter, above is high pass filter."],["f","delay","a pattern of numbers from 0 to 1. Sets the level of the delay signal."],["f","delayfeedback","a pattern of numbers from 0 to 1. Sets the amount of delay feedback."],["f","delaytime","a pattern of numbers from 0 to 1. Sets the length of the delay."],["f","lock","A pattern of numbers. Specifies whether delaytime is calculated relative to cps. When set to 1, delaytime is a direct multiple of a cycle."],["f","detune",""],["f","dry","when set to `1` will disable all reverb for this pattern. See `room` and `size` for more information about reverb."],["f","fadeTime","Used when using begin/end or chop/striate and friends, to change the fade out time of the 'grain' envelope."],["f","fadeInTime","As with fadeTime, but controls the fade in time of the grain envelope. Not used if the grain begins at position 0 in the sample."],["f","freq",""],["f","gate",""],["f","leslie",""],["f","lrate",""],["f","lsize",""],["f","degree",""],["f","mtranspose",""],["f","ctranspose",""],["f","harmonic",""],["f","stepsPerOctave",""],["f","octaveR",""],["f","nudge","Nudges events into the future by the specified number of seconds. Negative numbers work up to a point as well (due to internal latency)"],["i","octave",""],["f","offset",""],["i","orbit","a pattern of numbers. An `orbit` is a global parameter context for patterns. Patterns with the same orbit will share hardware output bus offset and global effects, e.g. reverb and delay. The maximum number of orbits is specified in the superdirt startup, numbers higher than maximum will wrap around."],["f","overgain",""],["f","overshape",""],["f","pan","a pattern of numbers between 0 and 1, from left to right (assuming stereo), once round a circle (assuming multichannel)"],["f","panspan","a pattern of numbers between -inf and inf, which controls how much multichannel output is fanned out (negative is backwards ordering)"],["f","pansplay","a pattern of numbers between 0.0 and 1.0, which controls the multichannel spread range (multichannel only)"],["f","panwidth","a pattern of numbers between 0.0 and inf, which controls how much each channel is distributed over neighbours (multichannel only)"],["f","panorient","a pattern of numbers between -1.0 and 1.0, which controls the relative position of the centre pan in a pair of adjacent speakers (multichannel only)"],["f","rate","used in SuperDirt softsynths as a control rate or 'speed'"],["f","slide",""],["f","semitone",""],["f","velocity",""],["f","voice",""],["f","room","a pattern of numbers from 0 to 1. Sets the level of reverb."],["f","size","a pattern of numbers from 0 to 1. Sets the perceptual size (reverb time) of the `room` to be used in reverb."],["f","shape","wave shaping distortion, a pattern of numbers from 0 for no distortion up to 1 for loads of distortion."],["f","speed","a pattern of numbers which changes the speed of sample playback, i.e. a cheap way of changing pitch. Negative values will play the sample backwards!"],["s","unit",'used in conjunction with `speed`, accepts values of "r" (rate, default behavior), "c" (cycles), or "s" (seconds). Using `unit "c"` means `speed` will be interpreted in units of cycles, e.g. `speed "1"` means samples will be stretched to fill a cycle. Using `unit "s"` means the playback speed will be adjusted so that the duration is the number of seconds specified by `speed`.'],["f","squiz",""],["f","stutterdepth",""],["f","stuttertime",""],["f","timescale",""],["f","timescalewin",""],["s","vowel","formant filter to make things sound like vowels, a pattern of either `a`, `e`, `i`, `o` or `u`. Use a rest (`~`) for no effect."],["f","waveloss",""],["f","dur",""],["f","expression",""],["f","sustainpedal",""],["f","tremolodepth","Tremolo Audio DSP effect | params are 'tremolorate' and 'tremolodepth'"],["f","tremolorate","Tremolo Audio DSP effect | params are 'tremolorate' and 'tremolodepth'"],["f","phaserdepth","Phaser Audio DSP effect | params are 'phaserrate' and 'phaserdepth'"],["f","phaserrate","Phaser Audio DSP effect | params are 'phaserrate' and 'phaserdepth'"],["f","fshift","frequency shifter"],["f","fshiftnote","frequency shifter"],["f","fshiftphase","frequency shifter"],["f","triode","tube distortion"],["f","krush","shape/bass enhancer"],["f","kcutoff",""],["f","octer","octaver effect"],["f","octersub","octaver effect"],["f","octersubsub","octaver effect"],["f","ring","ring modulation"],["f","ringf","ring modulation"],["f","ringdf","ring modulation"],["f","distort","noisy fuzzy distortion"],["f","freeze","Spectral freeze"],["f","xsdelay",""],["f","tsdelay",""],["f","real","Spectral conform"],["f","imag",""],["f","enhance","Spectral enhance"],["f","partials",""],["f","comb","Spectral comb"],["f","smear","Spectral smear"],["f","scram","Spectral scramble"],["f","binshift","Spectral binshift"],["f","hbrick","High pass sort of spectral filter"],["f","lbrick","Low pass sort of spectral filter"],["f","midichan",""],["f","control",""],["f","ccn",""],["f","ccv",""],["f","polyTouch",""],["f","midibend",""],["f","miditouch",""],["f","ctlNum",""],["f","frameRate",""],["f","frames",""],["f","hours",""],["s","midicmd",""],["f","minutes",""],["f","progNum",""],["f","seconds",""],["f","songPtr",""],["f","uid",""],["f","val",""],["f","cps",""],["f","clip",""]],_name=(o,...e)=>sequence(...e).withValue(s=>({[o]:s})),_setter=(o,e)=>function(...s){return s.length?this.set(o(...s)):this.fmap(a=>({[e]:a}))};generic_params.forEach(([o,e,s])=>{controls[e]=(...a)=>_name(e,...a),Pattern$3.prototype[e]=_setter(controls[e],e)});controls.createParam=o=>{const e=(...s)=>_name(o,...s);return Pattern$3.prototype[o]=_setter(e,o),(...s)=>_name(o,...s)};controls.createParams=(...o)=>o.reduce((e,s)=>Object.assign(e,{[s]:createParam(s)}),{});var dist$7={},tokenizer={},utils$1={},unicode$2={};Object.defineProperty(unicode$2,"__esModule",{value:!0});unicode$2.whitespaceArray=[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279];unicode$2.whitespaceBool=[!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!0,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1];unicode$2.idStartLargeRegex=/^[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]$/;unicode$2.idStartBool=[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!0,!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,!1,!1,!1,!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,!0,!0,!0,!1,!1,!1,!1,!1];unicode$2.idContinueLargeRegex=/^[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]$/;unicode$2.idContinueBool=[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!1,!1,!1,!1,!1,!1,!1,!0,!0,!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,!1,!1,!1,!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,!0,!0,!0,!1,!1,!1,!1,!1];Object.defineProperty(utils$1,"__esModule",{value:!0});utils$1.isStrictModeReservedWord=isStrictModeReservedWord;utils$1.isWhiteSpace=isWhiteSpace;utils$1.isLineTerminator=isLineTerminator;utils$1.isIdentifierStart=isIdentifierStart$1;utils$1.isIdentifierPart=isIdentifierPart$1;utils$1.isDecimalDigit=isDecimalDigit;utils$1.getHexValue=getHexValue;var _unicode$2=unicode$2,strictReservedWords=["null","true","false","implements","interface","package","private","protected","public","static","let","if","in","do","var","for","new","try","this","else","case","void","with","enum","while","break","catch","throw","const","yield","class","super","return","typeof","delete","switch","export","import","default","finally","extends","function","continue","debugger","instanceof"];function isStrictModeReservedWord(o){return strictReservedWords.indexOf(o)!==-1}function isWhiteSpace(o){return o<128?_unicode$2.whitespaceBool[o]:o===160||o>5759&&_unicode$2.whitespaceArray.indexOf(o)!==-1}function isLineTerminator(o){return o===10||o===13||o===8232||o===8233}function isIdentifierStart$1(o){return o<128?_unicode$2.idStartBool[o]:_unicode$2.idStartLargeRegex.test(String.fromCodePoint(o))}function isIdentifierPart$1(o){return o<128?_unicode$2.idContinueBool[o]:_unicode$2.idContinueLargeRegex.test(String.fromCodePoint(o))}function isDecimalDigit(o){return o>=48&&o<=57}function getHexValue(o){return o>="0"&&o<="9"?o.charCodeAt(0)-48:o>="a"&&o<="f"?o.charCodeAt(0)-87:o>="A"&&o<="F"?o.charCodeAt(0)-55:-1}var errors={};Object.defineProperty(errors,"__esModule",{value:!0});errors.ErrorMessages={UNEXPECTED_TOKEN:function(e){return"Unexpected token "+JSON.stringify(e)},UNEXPECTED_ILLEGAL_TOKEN:function(e){return"Unexpected "+JSON.stringify(e)},UNEXPECTED_ESCAPED_KEYWORD:"Unexpected escaped keyword",UNEXPECTED_NUMBER:"Unexpected number",UNEXPECTED_STRING:"Unexpected string",UNEXPECTED_IDENTIFIER:"Unexpected identifier",UNEXPECTED_RESERVED_WORD:"Unexpected reserved word",UNEXPECTED_TEMPLATE:"Unexpected template",UNEXPECTED_EOS:"Unexpected end of input",UNEXPECTED_LINE_TERMINATOR:"Unexpected line terminator",UNEXPECTED_COMMA_AFTER_REST:"Unexpected comma after rest",UNEXPECTED_REST_PARAMETERS_INITIALIZATION:"Rest parameter may not have a default initializer",NEWLINE_AFTER_THROW:"Illegal newline after throw",UNTERMINATED_REGEXP:"Invalid regular expression: missing /",INVALID_LAST_REST_PARAMETER:"Rest parameter must be last formal parameter",INVALID_REST_PARAMETERS_INITIALIZATION:"Rest parameter may not have a default initializer",INVALID_REGEXP_FLAGS:"Invalid regular expression flags",INVALID_REGEX:"Invalid regular expression",INVALID_LHS_IN_ASSIGNMENT:"Invalid left-hand side in assignment",INVALID_LHS_IN_BINDING:"Invalid left-hand side in binding",INVALID_LHS_IN_FOR_IN:"Invalid left-hand side in for-in",INVALID_LHS_IN_FOR_OF:"Invalid left-hand side in for-of",INVALID_LHS_IN_FOR_AWAIT:"Invalid left-hand side in for-await",INVALID_UPDATE_OPERAND:"Increment/decrement target must be an identifier or member expression",INVALID_EXPONENTIATION_LHS:"Unary expressions as the left operand of an exponentation expression must be disambiguated with parentheses",MULTIPLE_DEFAULTS_IN_SWITCH:"More than one default clause in switch statement",NO_CATCH_OR_FINALLY:"Missing catch or finally after try",ILLEGAL_RETURN:"Illegal return statement",ILLEGAL_ARROW_FUNCTION_PARAMS:"Illegal arrow function parameter list",INVALID_ASYNC_PARAMS:"Async function parameters must not contain await expressions",INVALID_VAR_INIT_FOR_IN:"Invalid variable declaration in for-in statement",INVALID_VAR_INIT_FOR_OF:"Invalid variable declaration in for-of statement",INVALID_VAR_INIT_FOR_AWAIT:"Invalid variable declaration in for-await statement",UNINITIALIZED_BINDINGPATTERN_IN_FOR_INIT:"Binding pattern appears without initializer in for statement init",ILLEGAL_PROPERTY:"Illegal property initializer",INVALID_ID_BINDING_STRICT_MODE:function(e){return"The identifier "+JSON.stringify(e)+" must not be in binding position in strict mode"},INVALID_ID_IN_LABEL_STRICT_MODE:function(e){return"The identifier "+JSON.stringify(e)+" must not be in label position in strict mode"},INVALID_ID_IN_EXPRESSION_STRICT_MODE:function(e){return"The identifier "+JSON.stringify(e)+" must not be in expression position in strict mode"},INVALID_CALL_TO_SUPER:'Calls to super must be in the "constructor" method of a class expression or class declaration that has a superclass',INVALID_DELETE_STRICT_MODE:"Identifier expressions must not be deleted in strict mode",DUPLICATE_BINDING:function(e){return"Duplicate binding "+JSON.stringify(e)},ILLEGAL_ID_IN_LEXICAL_DECLARATION:function(e){return"Lexical declarations must not have a binding named "+JSON.stringify(e)},UNITIALIZED_CONST:"Constant lexical declarations must have an initialiser",ILLEGAL_LABEL_IN_BODY:function(e){return"The body of a "+e+" statement must not be a labeled function declaration"},ILLEGEAL_LABEL_IN_IF:"The consequent of an if statement must not be a labeled function declaration",ILLEGAL_LABEL_IN_ELSE:"The alternate of an if statement must not be a labeled function declaration",ILLEGAL_CONTINUE_WITHOUT_ITERATION_WITH_ID:function(e){return"Continue statement must be nested within an iteration statement with label "+JSON.stringify(e)},ILLEGAL_CONTINUE_WITHOUT_ITERATION:"Continue statement must be nested within an iteration statement",ILLEGAL_BREAK_WITHOUT_ITERATION_OR_SWITCH:"Break statement must be nested within an iteration statement or a switch statement",ILLEGAL_WITH_STRICT_MODE:"Strict mode code must not include a with statement",ILLEGAL_ACCESS_SUPER_MEMBER:"Member access on super must be in a method",ILLEGAL_SUPER_CALL:'Calls to super must be in the "constructor" method of a class expression or class declaration that has a superclass',DUPLICATE_LABEL_DECLARATION:function(e){return"Label "+JSON.stringify(e)+" has already been declared"},ILLEGAL_BREAK_WITHIN_LABEL:function(e){return"Break statement must be nested within a statement with label "+JSON.stringify(e)},ILLEGAL_YIELD_EXPRESSIONS:function(e){return e+" parameters must not contain yield expressions"},ILLEGAL_YIELD_IDENTIFIER:'"yield" may not be used as an identifier in this context',ILLEGAL_AWAIT_IDENTIFIER:'"await" may not be used as an identifier in this context',DUPLICATE_CONSTRUCTOR:"Duplicate constructor method in class",ILLEGAL_CONSTRUCTORS:"Constructors cannot be async, generators, getters or setters",ILLEGAL_STATIC_CLASS_NAME:'Static class methods cannot be named "prototype"',NEW_TARGET_ERROR:"new.target must be within function (but not arrow expression) code",DUPLICATE_EXPORT:function(e){return"Duplicate export "+JSON.stringify(e)},UNDECLARED_BINDING:function(e){return"Exported binding "+JSON.stringify(e)+" is not declared"},DUPLICATE_PROPTO_PROP:"Duplicate __proto__ property in object literal not allowed",ILLEGAL_LABEL_FUNC_DECLARATION:"Labeled FunctionDeclarations are disallowed in strict mode",ILLEGAL_FUNC_DECL_IF:"FunctionDeclarations in IfStatements are disallowed in strict mode",ILLEGAL_USE_STRICT:'Functions with non-simple parameter lists may not contain a "use strict" directive',ILLEGAL_EXPORTED_NAME:"Names of variables used in an export specifier from the current module must be identifiers",NO_OCTALS_IN_TEMPLATES:"Template literals may not contain octal escape sequences",NO_AWAIT_IN_ASYNC_PARAMS:'Async arrow parameters may not contain "await"'};Object.defineProperty(tokenizer,"__esModule",{value:!0});tokenizer.JsError=tokenizer.TokenType=tokenizer.TokenClass=void 0;var _slicedToArray=function(){function o(e,s){var a=[],c=!0,h=!1,d=void 0;try{for(var g=e[Symbol.iterator](),_;!(c=(_=g.next()).done)&&(a.push(_.value),!(s&&a.length===s));c=!0);}catch(b){h=!0,d=b}finally{try{!c&&g.return&&g.return()}finally{if(h)throw d}}return a}return function(e,s){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return o(e,s);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),_createClass$e=function(){function o(e,s){for(var a=0;a"},Ident:{name:"Identifier",isIdentifierName:!0},Keyword:{name:"Keyword",isIdentifierName:!0},NumericLiteral:{name:"Numeric"},TemplateElement:{name:"Template"},Punctuator:{name:"Punctuator"},StringLiteral:{name:"String"},RegularExpression:{name:"RegularExpression"},Illegal:{name:"Illegal"}},TokenType=tokenizer.TokenType={EOS:{klass:TokenClass.Eof,name:"EOS"},LPAREN:{klass:TokenClass.Punctuator,name:"("},RPAREN:{klass:TokenClass.Punctuator,name:")"},LBRACK:{klass:TokenClass.Punctuator,name:"["},RBRACK:{klass:TokenClass.Punctuator,name:"]"},LBRACE:{klass:TokenClass.Punctuator,name:"{"},RBRACE:{klass:TokenClass.Punctuator,name:"}"},COLON:{klass:TokenClass.Punctuator,name:":"},SEMICOLON:{klass:TokenClass.Punctuator,name:";"},PERIOD:{klass:TokenClass.Punctuator,name:"."},ELLIPSIS:{klass:TokenClass.Punctuator,name:"..."},ARROW:{klass:TokenClass.Punctuator,name:"=>"},CONDITIONAL:{klass:TokenClass.Punctuator,name:"?"},INC:{klass:TokenClass.Punctuator,name:"++"},DEC:{klass:TokenClass.Punctuator,name:"--"},ASSIGN:{klass:TokenClass.Punctuator,name:"="},ASSIGN_BIT_OR:{klass:TokenClass.Punctuator,name:"|="},ASSIGN_BIT_XOR:{klass:TokenClass.Punctuator,name:"^="},ASSIGN_BIT_AND:{klass:TokenClass.Punctuator,name:"&="},ASSIGN_SHL:{klass:TokenClass.Punctuator,name:"<<="},ASSIGN_SHR:{klass:TokenClass.Punctuator,name:">>="},ASSIGN_SHR_UNSIGNED:{klass:TokenClass.Punctuator,name:">>>="},ASSIGN_ADD:{klass:TokenClass.Punctuator,name:"+="},ASSIGN_SUB:{klass:TokenClass.Punctuator,name:"-="},ASSIGN_MUL:{klass:TokenClass.Punctuator,name:"*="},ASSIGN_DIV:{klass:TokenClass.Punctuator,name:"/="},ASSIGN_MOD:{klass:TokenClass.Punctuator,name:"%="},ASSIGN_EXP:{klass:TokenClass.Punctuator,name:"**="},COMMA:{klass:TokenClass.Punctuator,name:","},OR:{klass:TokenClass.Punctuator,name:"||"},AND:{klass:TokenClass.Punctuator,name:"&&"},BIT_OR:{klass:TokenClass.Punctuator,name:"|"},BIT_XOR:{klass:TokenClass.Punctuator,name:"^"},BIT_AND:{klass:TokenClass.Punctuator,name:"&"},SHL:{klass:TokenClass.Punctuator,name:"<<"},SHR:{klass:TokenClass.Punctuator,name:">>"},SHR_UNSIGNED:{klass:TokenClass.Punctuator,name:">>>"},ADD:{klass:TokenClass.Punctuator,name:"+"},SUB:{klass:TokenClass.Punctuator,name:"-"},MUL:{klass:TokenClass.Punctuator,name:"*"},DIV:{klass:TokenClass.Punctuator,name:"/"},MOD:{klass:TokenClass.Punctuator,name:"%"},EXP:{klass:TokenClass.Punctuator,name:"**"},EQ:{klass:TokenClass.Punctuator,name:"=="},NE:{klass:TokenClass.Punctuator,name:"!="},EQ_STRICT:{klass:TokenClass.Punctuator,name:"==="},NE_STRICT:{klass:TokenClass.Punctuator,name:"!=="},LT:{klass:TokenClass.Punctuator,name:"<"},GT:{klass:TokenClass.Punctuator,name:">"},LTE:{klass:TokenClass.Punctuator,name:"<="},GTE:{klass:TokenClass.Punctuator,name:">="},INSTANCEOF:{klass:TokenClass.Keyword,name:"instanceof"},IN:{klass:TokenClass.Keyword,name:"in"},NOT:{klass:TokenClass.Punctuator,name:"!"},BIT_NOT:{klass:TokenClass.Punctuator,name:"~"},ASYNC:{klass:TokenClass.Keyword,name:"async"},AWAIT:{klass:TokenClass.Keyword,name:"await"},ENUM:{klass:TokenClass.Keyword,name:"enum"},DELETE:{klass:TokenClass.Keyword,name:"delete"},TYPEOF:{klass:TokenClass.Keyword,name:"typeof"},VOID:{klass:TokenClass.Keyword,name:"void"},BREAK:{klass:TokenClass.Keyword,name:"break"},CASE:{klass:TokenClass.Keyword,name:"case"},CATCH:{klass:TokenClass.Keyword,name:"catch"},CLASS:{klass:TokenClass.Keyword,name:"class"},CONTINUE:{klass:TokenClass.Keyword,name:"continue"},DEBUGGER:{klass:TokenClass.Keyword,name:"debugger"},DEFAULT:{klass:TokenClass.Keyword,name:"default"},DO:{klass:TokenClass.Keyword,name:"do"},ELSE:{klass:TokenClass.Keyword,name:"else"},EXPORT:{klass:TokenClass.Keyword,name:"export"},EXTENDS:{klass:TokenClass.Keyword,name:"extends"},FINALLY:{klass:TokenClass.Keyword,name:"finally"},FOR:{klass:TokenClass.Keyword,name:"for"},FUNCTION:{klass:TokenClass.Keyword,name:"function"},IF:{klass:TokenClass.Keyword,name:"if"},IMPORT:{klass:TokenClass.Keyword,name:"import"},LET:{klass:TokenClass.Keyword,name:"let"},NEW:{klass:TokenClass.Keyword,name:"new"},RETURN:{klass:TokenClass.Keyword,name:"return"},SUPER:{klass:TokenClass.Keyword,name:"super"},SWITCH:{klass:TokenClass.Keyword,name:"switch"},THIS:{klass:TokenClass.Keyword,name:"this"},THROW:{klass:TokenClass.Keyword,name:"throw"},TRY:{klass:TokenClass.Keyword,name:"try"},VAR:{klass:TokenClass.Keyword,name:"var"},WHILE:{klass:TokenClass.Keyword,name:"while"},WITH:{klass:TokenClass.Keyword,name:"with"},NULL:{klass:TokenClass.Keyword,name:"null"},TRUE:{klass:TokenClass.Keyword,name:"true"},FALSE:{klass:TokenClass.Keyword,name:"false"},YIELD:{klass:TokenClass.Keyword,name:"yield"},NUMBER:{klass:TokenClass.NumericLiteral,name:""},STRING:{klass:TokenClass.StringLiteral,name:""},REGEXP:{klass:TokenClass.RegularExpression,name:""},IDENTIFIER:{klass:TokenClass.Ident,name:""},CONST:{klass:TokenClass.Keyword,name:"const"},TEMPLATE:{klass:TokenClass.TemplateElement,name:""},ESCAPED_KEYWORD:{klass:TokenClass.Keyword,name:""},ILLEGAL:{klass:TokenClass.Illegal,name:""}},TT=TokenType,I=TT.ILLEGAL,F=!1,T=!0,ONE_CHAR_PUNCTUATOR=[I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,TT.NOT,I,I,I,TT.MOD,TT.BIT_AND,I,TT.LPAREN,TT.RPAREN,TT.MUL,TT.ADD,TT.COMMA,TT.SUB,TT.PERIOD,TT.DIV,I,I,I,I,I,I,I,I,I,I,TT.COLON,TT.SEMICOLON,TT.LT,TT.ASSIGN,TT.GT,TT.CONDITIONAL,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,TT.LBRACK,I,TT.RBRACK,TT.BIT_XOR,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,I,TT.LBRACE,TT.BIT_OR,TT.RBRACE,TT.BIT_NOT],PUNCTUATOR_START=[F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,T,F,F,F,T,T,F,T,T,T,T,T,T,F,T,F,F,F,F,F,F,F,F,F,F,T,T,T,T,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,T,F,T,T,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,F,T,T,T,T,F],JsError=tokenizer.JsError=function(o){_inherits$8(e,o);function e(s,a,c,h){_classCallCheck$i(this,e);var d=_possibleConstructorReturn$8(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,h));d.index=s;try{d.line=a,d.column=c}catch{}return d.parseErrorLine=a,d.parseErrorColumn=c,d.description=h,d.message="["+a+":"+c+"]: "+h,d}return e}(Error);function fromCodePoint$1(o){if(o<=65535)return String.fromCharCode(o);var e=String.fromCharCode(Math.floor((o-65536)/1024)+55296),s=String.fromCharCode((o-65536)%1024+56320);return e+s}function decodeUtf16(o,e){return(o-55296)*1024+(e-56320)+65536}var Tokenizer=function(){function o(e){_classCallCheck$i(this,o),this.source=e,this.index=0,this.line=0,this.lineStart=0,this.startIndex=0,this.startLine=0,this.startLineStart=0,this.lastIndex=0,this.lastLine=0,this.lastLineStart=0,this.hasLineTerminatorBeforeNext=!1,this.tokenIndex=0}return _createClass$e(o,[{key:"saveLexerState",value:function(){return{source:this.source,index:this.index,line:this.line,lineStart:this.lineStart,startIndex:this.startIndex,startLine:this.startLine,startLineStart:this.startLineStart,lastIndex:this.lastIndex,lastLine:this.lastLine,lastLineStart:this.lastLineStart,lookahead:this.lookahead,hasLineTerminatorBeforeNext:this.hasLineTerminatorBeforeNext,tokenIndex:this.tokenIndex}}},{key:"restoreLexerState",value:function(s){this.source=s.source,this.index=s.index,this.line=s.line,this.lineStart=s.lineStart,this.startIndex=s.startIndex,this.startLine=s.startLine,this.startLineStart=s.startLineStart,this.lastIndex=s.lastIndex,this.lastLine=s.lastLine,this.lastLineStart=s.lastLineStart,this.lookahead=s.lookahead,this.hasLineTerminatorBeforeNext=s.hasLineTerminatorBeforeNext,this.tokenIndex=s.tokenIndex}},{key:"createILLEGAL",value:function(){return this.startIndex=this.index,this.startLine=this.line,this.startLineStart=this.lineStart,this.index1?c-1:0),d=1;d10)return TokenType.IDENTIFIER;switch(s.length){case 2:switch(s.charAt(0)){case"i":switch(s.charAt(1)){case"f":return TokenType.IF;case"n":return TokenType.IN}break;case"d":if(s.charAt(1)==="o")return TokenType.DO;break}break;case 3:switch(s.charAt(0)){case"v":if(o.cse2(s,"a","r"))return TokenType.VAR;break;case"f":if(o.cse2(s,"o","r"))return TokenType.FOR;break;case"n":if(o.cse2(s,"e","w"))return TokenType.NEW;break;case"t":if(o.cse2(s,"r","y"))return TokenType.TRY;break;case"l":if(o.cse2(s,"e","t"))return TokenType.LET;break}break;case 4:switch(s.charAt(0)){case"t":if(o.cse3(s,"h","i","s"))return TokenType.THIS;if(o.cse3(s,"r","u","e"))return TokenType.TRUE;break;case"n":if(o.cse3(s,"u","l","l"))return TokenType.NULL;break;case"e":if(o.cse3(s,"l","s","e"))return TokenType.ELSE;if(o.cse3(s,"n","u","m"))return TokenType.ENUM;break;case"c":if(o.cse3(s,"a","s","e"))return TokenType.CASE;break;case"v":if(o.cse3(s,"o","i","d"))return TokenType.VOID;break;case"w":if(o.cse3(s,"i","t","h"))return TokenType.WITH;break}break;case 5:switch(s.charAt(0)){case"a":if(o.cse4(s,"s","y","n","c"))return TokenType.ASYNC;if(o.cse4(s,"w","a","i","t"))return TokenType.AWAIT;break;case"w":if(o.cse4(s,"h","i","l","e"))return TokenType.WHILE;break;case"b":if(o.cse4(s,"r","e","a","k"))return TokenType.BREAK;break;case"f":if(o.cse4(s,"a","l","s","e"))return TokenType.FALSE;break;case"c":if(o.cse4(s,"a","t","c","h"))return TokenType.CATCH;if(o.cse4(s,"o","n","s","t"))return TokenType.CONST;if(o.cse4(s,"l","a","s","s"))return TokenType.CLASS;break;case"t":if(o.cse4(s,"h","r","o","w"))return TokenType.THROW;break;case"y":if(o.cse4(s,"i","e","l","d"))return TokenType.YIELD;break;case"s":if(o.cse4(s,"u","p","e","r"))return TokenType.SUPER;break}break;case 6:switch(s.charAt(0)){case"r":if(o.cse5(s,"e","t","u","r","n"))return TokenType.RETURN;break;case"t":if(o.cse5(s,"y","p","e","o","f"))return TokenType.TYPEOF;break;case"d":if(o.cse5(s,"e","l","e","t","e"))return TokenType.DELETE;break;case"s":if(o.cse5(s,"w","i","t","c","h"))return TokenType.SWITCH;break;case"e":if(o.cse5(s,"x","p","o","r","t"))return TokenType.EXPORT;break;case"i":if(o.cse5(s,"m","p","o","r","t"))return TokenType.IMPORT;break}break;case 7:switch(s.charAt(0)){case"d":if(o.cse6(s,"e","f","a","u","l","t"))return TokenType.DEFAULT;break;case"f":if(o.cse6(s,"i","n","a","l","l","y"))return TokenType.FINALLY;break;case"e":if(o.cse6(s,"x","t","e","n","d","s"))return TokenType.EXTENDS;break}break;case 8:switch(s.charAt(0)){case"f":if(o.cse7(s,"u","n","c","t","i","o","n"))return TokenType.FUNCTION;break;case"c":if(o.cse7(s,"o","n","t","i","n","u","e"))return TokenType.CONTINUE;break;case"d":if(o.cse7(s,"e","b","u","g","g","e","r"))return TokenType.DEBUGGER;break}break;case 10:if(s==="instanceof")return TokenType.INSTANCEOF;break}return TokenType.IDENTIFIER}},{key:"skipSingleLineComment",value:function(s){for(this.index+=s;this.index=a)break;if(c=this.source.charCodeAt(this.index+1),c===47)this.skipSingleLineComment(2),s=!0;else if(c===42)s=this.skipMultiLineComment()||s;else break}else if(!this.moduleIsTheGoalSymbol&&s&&c===45){if(this.index+2>=a)break;if(this.source.charAt(this.index+1)==="-"&&this.source.charAt(this.index+2)===">")this.skipSingleLineComment(3);else break}else if(!this.moduleIsTheGoalSymbol&&c===60)if(this.source.slice(this.index+1,this.index+4)==="!--")this.skipSingleLineComment(4),s=!0;else break;else break}}},{key:"scanHexEscape2",value:function(){if(this.index+2>this.source.length)return-1;var s=(0,_utils$1.getHexValue)(this.source.charAt(this.index));if(s===-1)return-1;var a=(0,_utils$1.getHexValue)(this.source.charAt(this.index+1));return a===-1?-1:(this.index+=2,s<<4|a)}},{key:"scanUnicode",value:function(){if(this.source.charAt(this.index)==="{"){for(var s=this.index+1,a=0,c=void 0;s1114111)throw this.createILLEGAL();s++}if(c!=="}")throw this.createILLEGAL();if(s===this.index+1)throw++this.index,this.createILLEGAL();return this.index=s+1,a}if(this.index+4>this.source.length)return-1;var d=(0,_utils$1.getHexValue)(this.source.charAt(this.index));if(d===-1)return-1;var g=(0,_utils$1.getHexValue)(this.source.charAt(this.index+1));if(g===-1)return-1;var _=(0,_utils$1.getHexValue)(this.source.charAt(this.index+2));if(_===-1)return-1;var b=(0,_utils$1.getHexValue)(this.source.charAt(this.index+3));return b===-1?-1:(this.index+=4,d<<12|g<<8|_<<4|b)}},{key:"getEscapedIdentifier",value:function(){for(var s="",a=_utils$1.isIdentifierStart;this.index=this.source.length)throw this.createILLEGAL();if(this.source.charAt(this.index)!=="u")throw this.createILLEGAL();if(++this.index,h=this.scanUnicode(),h<0)throw this.createILLEGAL();c=fromCodePoint$1(h)}else if(h>=55296&&h<=56319){if(this.index>=this.source.length)throw this.createILLEGAL();var g=this.source.charCodeAt(this.index);if(++this.index,!(g>=56320&&g<=57343))throw this.createILLEGAL();h=decodeUtf16(h,g),c=fromCodePoint$1(h)}if(!a(h)){if(s.length<1)throw this.createILLEGAL();return this.index=d,s}a=_utils$1.isIdentifierPart,s+=c}return s}},{key:"getIdentifier",value:function(){for(var s=this.index,a=this.source.length,c=this.index,h=_utils$1.isIdentifierStart;c=55296&&g<=56319)return this.index=s,this.getEscapedIdentifier();if(!h(g))return this.index=c,this.source.slice(s,c);++c,h=_utils$1.isIdentifierPart}return this.index=c,this.source.slice(s,c)}},{key:"scanIdentifier",value:function(){var s=this.getLocation(),a=this.index,c=this.source.charAt(this.index)==="\\"?this.getEscapedIdentifier():this.getIdentifier(),h=this.getSlice(a,s);h.text=c;var d=this.index-a!==c.length,g=this.getKeyword(c);return d&&g!==TokenType.IDENTIFIER&&(g=TokenType.ESCAPED_KEYWORD),{type:g,value:c,slice:h,escaped:d}}},{key:"getLocation",value:function(){return{line:this.startLine+1,column:this.startIndex-this.startLineStart,offset:this.startIndex}}},{key:"getLastTokenEndLocation",value:function(){return{line:this.lastLine+1,column:this.lastIndex-this.lastLineStart,offset:this.lastIndex}}},{key:"getSlice",value:function(s,a){return{text:this.source.slice(s,this.index),start:s,startLocation:a,end:this.index}}},{key:"scanPunctuatorHelper",value:function(){var s=this.source.charAt(this.index);switch(s){case".":{var a=this.source.charAt(this.index+1);if(a!==".")return TokenType.PERIOD;var c=this.source.charAt(this.index+2);return c!=="."?TokenType.PERIOD:TokenType.ELLIPSIS}case"(":return TokenType.LPAREN;case")":case";":case",":return ONE_CHAR_PUNCTUATOR[s.charCodeAt(0)];case"{":return TokenType.LBRACE;case"}":case"[":case"]":case":":case"?":case"~":return ONE_CHAR_PUNCTUATOR[s.charCodeAt(0)];default:if(this.index+1":return TokenType.GTE;case"/":return TokenType.ASSIGN_DIV;case"%":return TokenType.ASSIGN_MOD;case"^":return TokenType.ASSIGN_BIT_XOR;case"&":return TokenType.ASSIGN_BIT_AND}}if(this.index+1"&&d===">")return this.index+3"&&d==="=")return TokenType.ASSIGN_SHR;if(s==="*"&&d==="=")return TokenType.ASSIGN_EXP}switch(s){case"*":return TokenType.EXP;case"+":return TokenType.INC;case"-":return TokenType.DEC;case"<":return TokenType.SHL;case">":return TokenType.SHR;case"&":return TokenType.AND;case"|":return TokenType.OR}}else if(s==="="&&h===">")return TokenType.ARROW}return ONE_CHAR_PUNCTUATOR[s.charCodeAt(0)]}},{key:"scanPunctuator",value:function(){var s=this.getLocation(),a=this.index,c=this.scanPunctuatorHelper();return this.index+=c.name.length,{type:c,value:c.name,slice:this.getSlice(a,s)}}},{key:"scanHexLiteral",value:function(s,a){for(var c=this.index;c="0"&&c<="7")this.index++;else{if((0,_utils$1.isIdentifierPart)(c.charCodeAt(0)))throw this.createILLEGAL();break}}if(this.index-s===2)throw this.createILLEGAL();return{type:TokenType.NUMBER,value:parseInt(this.getSlice(s,a).text.substr(2),8),slice:this.getSlice(s,a),octal:!1,noctal:!1}}},{key:"scanLegacyOctalLiteral",value:function(s,a){for(var c=!0;this.index="0"&&h<="7")this.index++;else if(h==="8"||h==="9")c=!1,this.index++;else{if((0,_utils$1.isIdentifierPart)(h.charCodeAt(0)))throw this.createILLEGAL();break}}var d=this.getSlice(s,a);return c?{type:TokenType.NUMBER,slice:d,value:parseInt(d.text.substr(1),8),octal:!0,noctal:!c}:(this.eatDecimalLiteralSuffix(),{type:TokenType.NUMBER,slice:d,value:+d.text,octal:!0,noctal:!c})}},{key:"scanNumericLiteral",value:function(){var s=this.source.charAt(this.index),a=this.getLocation(),c=this.index;if(s==="0")if(this.index++,this.index="0"&&s<="9")return this.scanLegacyOctalLiteral(c,a)}else{var h=this.getSlice(c,a);return{type:TokenType.NUMBER,value:+h.text,slice:h,octal:!1,noctal:!1}}else if(s!==".")for(s=this.source.charAt(this.index);s>="0"&&s<="9";){if(this.index++,this.index===this.source.length){var d=this.getSlice(c,a);return{type:TokenType.NUMBER,value:+d.text,slice:d,octal:!1,noctal:!1}}s=this.source.charAt(this.index)}if(this.eatDecimalLiteralSuffix(),this.index!==this.source.length&&(0,_utils$1.isIdentifierStart)(this.source.charCodeAt(this.index)))throw this.createILLEGAL();var g=this.getSlice(c,a);return{type:TokenType.NUMBER,value:+g.text,slice:g,octal:!1,noctal:!1}}},{key:"eatDecimalLiteralSuffix",value:function(){var s=this.source.charAt(this.index);if(s==="."){if(this.index++,this.index===this.source.length)return;for(s=this.source.charAt(this.index);s>="0"&&s<="9";){if(this.index++,this.index===this.source.length)return;s=this.source.charAt(this.index)}}if(s==="e"||s==="E"){if(this.index++,this.index===this.source.length)throw this.createILLEGAL();if(s=this.source.charAt(this.index),s==="+"||s==="-"){if(this.index++,this.index===this.source.length)throw this.createILLEGAL();s=this.source.charAt(this.index)}if(s>="0"&&s<="9")for(;s>="0"&&s<="9"&&(this.index++,this.index!==this.source.length);)s=this.source.charAt(this.index);else throw this.createILLEGAL()}}},{key:"scanStringEscape",value:function(s,a){if(this.index++,this.index===this.source.length)throw this.createILLEGAL();var c=this.source.charAt(this.index);if((0,_utils$1.isLineTerminator)(c.charCodeAt(0)))this.index++,c==="\r"&&this.source.charAt(this.index)===` +`&&this.index++,this.lineStart=this.index,this.line++;else switch(c){case"n":s+=` +`,this.index++;break;case"r":s+="\r",this.index++;break;case"t":s+=" ",this.index++;break;case"u":case"x":{var h=void 0;if(this.index++,this.index>=this.source.length)throw this.createILLEGAL();if(h=c==="u"?this.scanUnicode():this.scanHexEscape2(),h<0)throw this.createILLEGAL();s+=fromCodePoint$1(h);break}case"b":s+="\b",this.index++;break;case"f":s+="\f",this.index++;break;case"v":s+="\v",this.index++;break;default:if(c>="0"&&c<="7"){var d=this.index,g=1;c>="0"&&c<="3"&&(g=0);for(var _=0;g<3&&c>="0"&&c<="7";){if(this.index++,(g>0||c!=="0")&&(a=this.source.slice(d,this.index)),_*=8,_+=c-"0",g++,this.index===this.source.length)throw this.createILLEGAL();c=this.source.charAt(this.index)}_===0&&g===1&&(c==="8"||c==="9")&&(a=this.source.slice(d,this.index+1)),s+=String.fromCharCode(_)}else{if(c==="8"||c==="9")throw this.createILLEGAL();s+=c,this.index++}}return[s,a]}},{key:"scanStringLiteral",value:function(){var s="",a=this.source.charAt(this.index),c=this.getLocation(),h=this.index;this.index++;for(var d=null;this.index=this.source.length)return{type:TokenType.EOS,slice:this.getSlice(this.index,s)};var a=this.source.charCodeAt(this.index);if(a<128){if(PUNCTUATOR_START[a])return this.scanPunctuator();if((0,_utils$1.isIdentifierStart)(a)||a===92)return this.scanIdentifier();if(a===46)return this.index+1=48&&a<=57)return this.scanNumericLiteral();throw this.createILLEGAL()}else{if((0,_utils$1.isIdentifierStart)(a)||a>=55296&&a<=56319)return this.scanIdentifier();throw this.createILLEGAL()}}},{key:"eof",value:function(){return this.lookahead.type===TokenType.EOS}},{key:"lex",value:function(){var s=this.lookahead;return this.lookahead=this.advance(),this.tokenIndex++,s}}],[{key:"cse2",value:function(s,a,c){return s.charAt(1)===a&&s.charAt(2)===c}},{key:"cse3",value:function(s,a,c,h){return s.charAt(1)===a&&s.charAt(2)===c&&s.charAt(3)===h}},{key:"cse4",value:function(s,a,c,h,d){return s.charAt(1)===a&&s.charAt(2)===c&&s.charAt(3)===h&&s.charAt(4)===d}},{key:"cse5",value:function(s,a,c,h,d,g){return s.charAt(1)===a&&s.charAt(2)===c&&s.charAt(3)===h&&s.charAt(4)===d&&s.charAt(5)===g}},{key:"cse6",value:function(s,a,c,h,d,g,_){return s.charAt(1)===a&&s.charAt(2)===c&&s.charAt(3)===h&&s.charAt(4)===d&&s.charAt(5)===g&&s.charAt(6)===_}},{key:"cse7",value:function(s,a,c,h,d,g,_,b){return s.charAt(1)===a&&s.charAt(2)===c&&s.charAt(3)===h&&s.charAt(4)===d&&s.charAt(5)===g&&s.charAt(6)===_&&s.charAt(7)===b}}]),o}();tokenizer.default=Tokenizer;var parser$1={},dist$6={},mappings=new Map([["General_Category",new Map([["C","Other"],["Cc","Control"],["cntrl","Control"],["Cf","Format"],["Cn","Unassigned"],["Co","Private_Use"],["Cs","Surrogate"],["L","Letter"],["LC","Cased_Letter"],["Ll","Lowercase_Letter"],["Lm","Modifier_Letter"],["Lo","Other_Letter"],["Lt","Titlecase_Letter"],["Lu","Uppercase_Letter"],["M","Mark"],["Combining_Mark","Mark"],["Mc","Spacing_Mark"],["Me","Enclosing_Mark"],["Mn","Nonspacing_Mark"],["N","Number"],["Nd","Decimal_Number"],["digit","Decimal_Number"],["Nl","Letter_Number"],["No","Other_Number"],["P","Punctuation"],["punct","Punctuation"],["Pc","Connector_Punctuation"],["Pd","Dash_Punctuation"],["Pe","Close_Punctuation"],["Pf","Final_Punctuation"],["Pi","Initial_Punctuation"],["Po","Other_Punctuation"],["Ps","Open_Punctuation"],["S","Symbol"],["Sc","Currency_Symbol"],["Sk","Modifier_Symbol"],["Sm","Math_Symbol"],["So","Other_Symbol"],["Z","Separator"],["Zl","Line_Separator"],["Zp","Paragraph_Separator"],["Zs","Space_Separator"],["Other","Other"],["Control","Control"],["Format","Format"],["Unassigned","Unassigned"],["Private_Use","Private_Use"],["Surrogate","Surrogate"],["Letter","Letter"],["Cased_Letter","Cased_Letter"],["Lowercase_Letter","Lowercase_Letter"],["Modifier_Letter","Modifier_Letter"],["Other_Letter","Other_Letter"],["Titlecase_Letter","Titlecase_Letter"],["Uppercase_Letter","Uppercase_Letter"],["Mark","Mark"],["Spacing_Mark","Spacing_Mark"],["Enclosing_Mark","Enclosing_Mark"],["Nonspacing_Mark","Nonspacing_Mark"],["Number","Number"],["Decimal_Number","Decimal_Number"],["Letter_Number","Letter_Number"],["Other_Number","Other_Number"],["Punctuation","Punctuation"],["Connector_Punctuation","Connector_Punctuation"],["Dash_Punctuation","Dash_Punctuation"],["Close_Punctuation","Close_Punctuation"],["Final_Punctuation","Final_Punctuation"],["Initial_Punctuation","Initial_Punctuation"],["Other_Punctuation","Other_Punctuation"],["Open_Punctuation","Open_Punctuation"],["Symbol","Symbol"],["Currency_Symbol","Currency_Symbol"],["Modifier_Symbol","Modifier_Symbol"],["Math_Symbol","Math_Symbol"],["Other_Symbol","Other_Symbol"],["Separator","Separator"],["Line_Separator","Line_Separator"],["Paragraph_Separator","Paragraph_Separator"],["Space_Separator","Space_Separator"]])],["Script",new Map([["Adlm","Adlam"],["Aghb","Caucasian_Albanian"],["Ahom","Ahom"],["Arab","Arabic"],["Armi","Imperial_Aramaic"],["Armn","Armenian"],["Avst","Avestan"],["Bali","Balinese"],["Bamu","Bamum"],["Bass","Bassa_Vah"],["Batk","Batak"],["Beng","Bengali"],["Bhks","Bhaiksuki"],["Bopo","Bopomofo"],["Brah","Brahmi"],["Brai","Braille"],["Bugi","Buginese"],["Buhd","Buhid"],["Cakm","Chakma"],["Cans","Canadian_Aboriginal"],["Cari","Carian"],["Cham","Cham"],["Cher","Cherokee"],["Copt","Coptic"],["Qaac","Coptic"],["Cprt","Cypriot"],["Cyrl","Cyrillic"],["Deva","Devanagari"],["Dogr","Dogra"],["Dsrt","Deseret"],["Dupl","Duployan"],["Egyp","Egyptian_Hieroglyphs"],["Elba","Elbasan"],["Ethi","Ethiopic"],["Geor","Georgian"],["Glag","Glagolitic"],["Gong","Gunjala_Gondi"],["Gonm","Masaram_Gondi"],["Goth","Gothic"],["Gran","Grantha"],["Grek","Greek"],["Gujr","Gujarati"],["Guru","Gurmukhi"],["Hang","Hangul"],["Hani","Han"],["Hano","Hanunoo"],["Hatr","Hatran"],["Hebr","Hebrew"],["Hira","Hiragana"],["Hluw","Anatolian_Hieroglyphs"],["Hmng","Pahawh_Hmong"],["Hrkt","Katakana_Or_Hiragana"],["Hung","Old_Hungarian"],["Ital","Old_Italic"],["Java","Javanese"],["Kali","Kayah_Li"],["Kana","Katakana"],["Khar","Kharoshthi"],["Khmr","Khmer"],["Khoj","Khojki"],["Knda","Kannada"],["Kthi","Kaithi"],["Lana","Tai_Tham"],["Laoo","Lao"],["Latn","Latin"],["Lepc","Lepcha"],["Limb","Limbu"],["Lina","Linear_A"],["Linb","Linear_B"],["Lisu","Lisu"],["Lyci","Lycian"],["Lydi","Lydian"],["Mahj","Mahajani"],["Maka","Makasar"],["Mand","Mandaic"],["Mani","Manichaean"],["Marc","Marchen"],["Medf","Medefaidrin"],["Mend","Mende_Kikakui"],["Merc","Meroitic_Cursive"],["Mero","Meroitic_Hieroglyphs"],["Mlym","Malayalam"],["Modi","Modi"],["Mong","Mongolian"],["Mroo","Mro"],["Mtei","Meetei_Mayek"],["Mult","Multani"],["Mymr","Myanmar"],["Narb","Old_North_Arabian"],["Nbat","Nabataean"],["Newa","Newa"],["Nkoo","Nko"],["Nshu","Nushu"],["Ogam","Ogham"],["Olck","Ol_Chiki"],["Orkh","Old_Turkic"],["Orya","Oriya"],["Osge","Osage"],["Osma","Osmanya"],["Palm","Palmyrene"],["Pauc","Pau_Cin_Hau"],["Perm","Old_Permic"],["Phag","Phags_Pa"],["Phli","Inscriptional_Pahlavi"],["Phlp","Psalter_Pahlavi"],["Phnx","Phoenician"],["Plrd","Miao"],["Prti","Inscriptional_Parthian"],["Rjng","Rejang"],["Rohg","Hanifi_Rohingya"],["Runr","Runic"],["Samr","Samaritan"],["Sarb","Old_South_Arabian"],["Saur","Saurashtra"],["Sgnw","SignWriting"],["Shaw","Shavian"],["Shrd","Sharada"],["Sidd","Siddham"],["Sind","Khudawadi"],["Sinh","Sinhala"],["Sogd","Sogdian"],["Sogo","Old_Sogdian"],["Sora","Sora_Sompeng"],["Soyo","Soyombo"],["Sund","Sundanese"],["Sylo","Syloti_Nagri"],["Syrc","Syriac"],["Tagb","Tagbanwa"],["Takr","Takri"],["Tale","Tai_Le"],["Talu","New_Tai_Lue"],["Taml","Tamil"],["Tang","Tangut"],["Tavt","Tai_Viet"],["Telu","Telugu"],["Tfng","Tifinagh"],["Tglg","Tagalog"],["Thaa","Thaana"],["Thai","Thai"],["Tibt","Tibetan"],["Tirh","Tirhuta"],["Ugar","Ugaritic"],["Vaii","Vai"],["Wara","Warang_Citi"],["Xpeo","Old_Persian"],["Xsux","Cuneiform"],["Yiii","Yi"],["Zanb","Zanabazar_Square"],["Zinh","Inherited"],["Qaai","Inherited"],["Zyyy","Common"],["Zzzz","Unknown"],["Adlam","Adlam"],["Caucasian_Albanian","Caucasian_Albanian"],["Arabic","Arabic"],["Imperial_Aramaic","Imperial_Aramaic"],["Armenian","Armenian"],["Avestan","Avestan"],["Balinese","Balinese"],["Bamum","Bamum"],["Bassa_Vah","Bassa_Vah"],["Batak","Batak"],["Bengali","Bengali"],["Bhaiksuki","Bhaiksuki"],["Bopomofo","Bopomofo"],["Brahmi","Brahmi"],["Braille","Braille"],["Buginese","Buginese"],["Buhid","Buhid"],["Chakma","Chakma"],["Canadian_Aboriginal","Canadian_Aboriginal"],["Carian","Carian"],["Cherokee","Cherokee"],["Coptic","Coptic"],["Cypriot","Cypriot"],["Cyrillic","Cyrillic"],["Devanagari","Devanagari"],["Dogra","Dogra"],["Deseret","Deseret"],["Duployan","Duployan"],["Egyptian_Hieroglyphs","Egyptian_Hieroglyphs"],["Elbasan","Elbasan"],["Ethiopic","Ethiopic"],["Georgian","Georgian"],["Glagolitic","Glagolitic"],["Gunjala_Gondi","Gunjala_Gondi"],["Masaram_Gondi","Masaram_Gondi"],["Gothic","Gothic"],["Grantha","Grantha"],["Greek","Greek"],["Gujarati","Gujarati"],["Gurmukhi","Gurmukhi"],["Hangul","Hangul"],["Han","Han"],["Hanunoo","Hanunoo"],["Hatran","Hatran"],["Hebrew","Hebrew"],["Hiragana","Hiragana"],["Anatolian_Hieroglyphs","Anatolian_Hieroglyphs"],["Pahawh_Hmong","Pahawh_Hmong"],["Katakana_Or_Hiragana","Katakana_Or_Hiragana"],["Old_Hungarian","Old_Hungarian"],["Old_Italic","Old_Italic"],["Javanese","Javanese"],["Kayah_Li","Kayah_Li"],["Katakana","Katakana"],["Kharoshthi","Kharoshthi"],["Khmer","Khmer"],["Khojki","Khojki"],["Kannada","Kannada"],["Kaithi","Kaithi"],["Tai_Tham","Tai_Tham"],["Lao","Lao"],["Latin","Latin"],["Lepcha","Lepcha"],["Limbu","Limbu"],["Linear_A","Linear_A"],["Linear_B","Linear_B"],["Lycian","Lycian"],["Lydian","Lydian"],["Mahajani","Mahajani"],["Makasar","Makasar"],["Mandaic","Mandaic"],["Manichaean","Manichaean"],["Marchen","Marchen"],["Medefaidrin","Medefaidrin"],["Mende_Kikakui","Mende_Kikakui"],["Meroitic_Cursive","Meroitic_Cursive"],["Meroitic_Hieroglyphs","Meroitic_Hieroglyphs"],["Malayalam","Malayalam"],["Mongolian","Mongolian"],["Mro","Mro"],["Meetei_Mayek","Meetei_Mayek"],["Multani","Multani"],["Myanmar","Myanmar"],["Old_North_Arabian","Old_North_Arabian"],["Nabataean","Nabataean"],["Nko","Nko"],["Nushu","Nushu"],["Ogham","Ogham"],["Ol_Chiki","Ol_Chiki"],["Old_Turkic","Old_Turkic"],["Oriya","Oriya"],["Osage","Osage"],["Osmanya","Osmanya"],["Palmyrene","Palmyrene"],["Pau_Cin_Hau","Pau_Cin_Hau"],["Old_Permic","Old_Permic"],["Phags_Pa","Phags_Pa"],["Inscriptional_Pahlavi","Inscriptional_Pahlavi"],["Psalter_Pahlavi","Psalter_Pahlavi"],["Phoenician","Phoenician"],["Miao","Miao"],["Inscriptional_Parthian","Inscriptional_Parthian"],["Rejang","Rejang"],["Hanifi_Rohingya","Hanifi_Rohingya"],["Runic","Runic"],["Samaritan","Samaritan"],["Old_South_Arabian","Old_South_Arabian"],["Saurashtra","Saurashtra"],["SignWriting","SignWriting"],["Shavian","Shavian"],["Sharada","Sharada"],["Siddham","Siddham"],["Khudawadi","Khudawadi"],["Sinhala","Sinhala"],["Sogdian","Sogdian"],["Old_Sogdian","Old_Sogdian"],["Sora_Sompeng","Sora_Sompeng"],["Soyombo","Soyombo"],["Sundanese","Sundanese"],["Syloti_Nagri","Syloti_Nagri"],["Syriac","Syriac"],["Tagbanwa","Tagbanwa"],["Takri","Takri"],["Tai_Le","Tai_Le"],["New_Tai_Lue","New_Tai_Lue"],["Tamil","Tamil"],["Tangut","Tangut"],["Tai_Viet","Tai_Viet"],["Telugu","Telugu"],["Tifinagh","Tifinagh"],["Tagalog","Tagalog"],["Thaana","Thaana"],["Tibetan","Tibetan"],["Tirhuta","Tirhuta"],["Ugaritic","Ugaritic"],["Vai","Vai"],["Warang_Citi","Warang_Citi"],["Old_Persian","Old_Persian"],["Cuneiform","Cuneiform"],["Yi","Yi"],["Zanabazar_Square","Zanabazar_Square"],["Inherited","Inherited"],["Common","Common"],["Unknown","Unknown"]])],["Script_Extensions",new Map([["Adlm","Adlam"],["Aghb","Caucasian_Albanian"],["Ahom","Ahom"],["Arab","Arabic"],["Armi","Imperial_Aramaic"],["Armn","Armenian"],["Avst","Avestan"],["Bali","Balinese"],["Bamu","Bamum"],["Bass","Bassa_Vah"],["Batk","Batak"],["Beng","Bengali"],["Bhks","Bhaiksuki"],["Bopo","Bopomofo"],["Brah","Brahmi"],["Brai","Braille"],["Bugi","Buginese"],["Buhd","Buhid"],["Cakm","Chakma"],["Cans","Canadian_Aboriginal"],["Cari","Carian"],["Cham","Cham"],["Cher","Cherokee"],["Copt","Coptic"],["Qaac","Coptic"],["Cprt","Cypriot"],["Cyrl","Cyrillic"],["Deva","Devanagari"],["Dogr","Dogra"],["Dsrt","Deseret"],["Dupl","Duployan"],["Egyp","Egyptian_Hieroglyphs"],["Elba","Elbasan"],["Ethi","Ethiopic"],["Geor","Georgian"],["Glag","Glagolitic"],["Gong","Gunjala_Gondi"],["Gonm","Masaram_Gondi"],["Goth","Gothic"],["Gran","Grantha"],["Grek","Greek"],["Gujr","Gujarati"],["Guru","Gurmukhi"],["Hang","Hangul"],["Hani","Han"],["Hano","Hanunoo"],["Hatr","Hatran"],["Hebr","Hebrew"],["Hira","Hiragana"],["Hluw","Anatolian_Hieroglyphs"],["Hmng","Pahawh_Hmong"],["Hrkt","Katakana_Or_Hiragana"],["Hung","Old_Hungarian"],["Ital","Old_Italic"],["Java","Javanese"],["Kali","Kayah_Li"],["Kana","Katakana"],["Khar","Kharoshthi"],["Khmr","Khmer"],["Khoj","Khojki"],["Knda","Kannada"],["Kthi","Kaithi"],["Lana","Tai_Tham"],["Laoo","Lao"],["Latn","Latin"],["Lepc","Lepcha"],["Limb","Limbu"],["Lina","Linear_A"],["Linb","Linear_B"],["Lisu","Lisu"],["Lyci","Lycian"],["Lydi","Lydian"],["Mahj","Mahajani"],["Maka","Makasar"],["Mand","Mandaic"],["Mani","Manichaean"],["Marc","Marchen"],["Medf","Medefaidrin"],["Mend","Mende_Kikakui"],["Merc","Meroitic_Cursive"],["Mero","Meroitic_Hieroglyphs"],["Mlym","Malayalam"],["Modi","Modi"],["Mong","Mongolian"],["Mroo","Mro"],["Mtei","Meetei_Mayek"],["Mult","Multani"],["Mymr","Myanmar"],["Narb","Old_North_Arabian"],["Nbat","Nabataean"],["Newa","Newa"],["Nkoo","Nko"],["Nshu","Nushu"],["Ogam","Ogham"],["Olck","Ol_Chiki"],["Orkh","Old_Turkic"],["Orya","Oriya"],["Osge","Osage"],["Osma","Osmanya"],["Palm","Palmyrene"],["Pauc","Pau_Cin_Hau"],["Perm","Old_Permic"],["Phag","Phags_Pa"],["Phli","Inscriptional_Pahlavi"],["Phlp","Psalter_Pahlavi"],["Phnx","Phoenician"],["Plrd","Miao"],["Prti","Inscriptional_Parthian"],["Rjng","Rejang"],["Rohg","Hanifi_Rohingya"],["Runr","Runic"],["Samr","Samaritan"],["Sarb","Old_South_Arabian"],["Saur","Saurashtra"],["Sgnw","SignWriting"],["Shaw","Shavian"],["Shrd","Sharada"],["Sidd","Siddham"],["Sind","Khudawadi"],["Sinh","Sinhala"],["Sogd","Sogdian"],["Sogo","Old_Sogdian"],["Sora","Sora_Sompeng"],["Soyo","Soyombo"],["Sund","Sundanese"],["Sylo","Syloti_Nagri"],["Syrc","Syriac"],["Tagb","Tagbanwa"],["Takr","Takri"],["Tale","Tai_Le"],["Talu","New_Tai_Lue"],["Taml","Tamil"],["Tang","Tangut"],["Tavt","Tai_Viet"],["Telu","Telugu"],["Tfng","Tifinagh"],["Tglg","Tagalog"],["Thaa","Thaana"],["Thai","Thai"],["Tibt","Tibetan"],["Tirh","Tirhuta"],["Ugar","Ugaritic"],["Vaii","Vai"],["Wara","Warang_Citi"],["Xpeo","Old_Persian"],["Xsux","Cuneiform"],["Yiii","Yi"],["Zanb","Zanabazar_Square"],["Zinh","Inherited"],["Qaai","Inherited"],["Zyyy","Common"],["Zzzz","Unknown"],["Adlam","Adlam"],["Caucasian_Albanian","Caucasian_Albanian"],["Arabic","Arabic"],["Imperial_Aramaic","Imperial_Aramaic"],["Armenian","Armenian"],["Avestan","Avestan"],["Balinese","Balinese"],["Bamum","Bamum"],["Bassa_Vah","Bassa_Vah"],["Batak","Batak"],["Bengali","Bengali"],["Bhaiksuki","Bhaiksuki"],["Bopomofo","Bopomofo"],["Brahmi","Brahmi"],["Braille","Braille"],["Buginese","Buginese"],["Buhid","Buhid"],["Chakma","Chakma"],["Canadian_Aboriginal","Canadian_Aboriginal"],["Carian","Carian"],["Cherokee","Cherokee"],["Coptic","Coptic"],["Cypriot","Cypriot"],["Cyrillic","Cyrillic"],["Devanagari","Devanagari"],["Dogra","Dogra"],["Deseret","Deseret"],["Duployan","Duployan"],["Egyptian_Hieroglyphs","Egyptian_Hieroglyphs"],["Elbasan","Elbasan"],["Ethiopic","Ethiopic"],["Georgian","Georgian"],["Glagolitic","Glagolitic"],["Gunjala_Gondi","Gunjala_Gondi"],["Masaram_Gondi","Masaram_Gondi"],["Gothic","Gothic"],["Grantha","Grantha"],["Greek","Greek"],["Gujarati","Gujarati"],["Gurmukhi","Gurmukhi"],["Hangul","Hangul"],["Han","Han"],["Hanunoo","Hanunoo"],["Hatran","Hatran"],["Hebrew","Hebrew"],["Hiragana","Hiragana"],["Anatolian_Hieroglyphs","Anatolian_Hieroglyphs"],["Pahawh_Hmong","Pahawh_Hmong"],["Katakana_Or_Hiragana","Katakana_Or_Hiragana"],["Old_Hungarian","Old_Hungarian"],["Old_Italic","Old_Italic"],["Javanese","Javanese"],["Kayah_Li","Kayah_Li"],["Katakana","Katakana"],["Kharoshthi","Kharoshthi"],["Khmer","Khmer"],["Khojki","Khojki"],["Kannada","Kannada"],["Kaithi","Kaithi"],["Tai_Tham","Tai_Tham"],["Lao","Lao"],["Latin","Latin"],["Lepcha","Lepcha"],["Limbu","Limbu"],["Linear_A","Linear_A"],["Linear_B","Linear_B"],["Lycian","Lycian"],["Lydian","Lydian"],["Mahajani","Mahajani"],["Makasar","Makasar"],["Mandaic","Mandaic"],["Manichaean","Manichaean"],["Marchen","Marchen"],["Medefaidrin","Medefaidrin"],["Mende_Kikakui","Mende_Kikakui"],["Meroitic_Cursive","Meroitic_Cursive"],["Meroitic_Hieroglyphs","Meroitic_Hieroglyphs"],["Malayalam","Malayalam"],["Mongolian","Mongolian"],["Mro","Mro"],["Meetei_Mayek","Meetei_Mayek"],["Multani","Multani"],["Myanmar","Myanmar"],["Old_North_Arabian","Old_North_Arabian"],["Nabataean","Nabataean"],["Nko","Nko"],["Nushu","Nushu"],["Ogham","Ogham"],["Ol_Chiki","Ol_Chiki"],["Old_Turkic","Old_Turkic"],["Oriya","Oriya"],["Osage","Osage"],["Osmanya","Osmanya"],["Palmyrene","Palmyrene"],["Pau_Cin_Hau","Pau_Cin_Hau"],["Old_Permic","Old_Permic"],["Phags_Pa","Phags_Pa"],["Inscriptional_Pahlavi","Inscriptional_Pahlavi"],["Psalter_Pahlavi","Psalter_Pahlavi"],["Phoenician","Phoenician"],["Miao","Miao"],["Inscriptional_Parthian","Inscriptional_Parthian"],["Rejang","Rejang"],["Hanifi_Rohingya","Hanifi_Rohingya"],["Runic","Runic"],["Samaritan","Samaritan"],["Old_South_Arabian","Old_South_Arabian"],["Saurashtra","Saurashtra"],["SignWriting","SignWriting"],["Shavian","Shavian"],["Sharada","Sharada"],["Siddham","Siddham"],["Khudawadi","Khudawadi"],["Sinhala","Sinhala"],["Sogdian","Sogdian"],["Old_Sogdian","Old_Sogdian"],["Sora_Sompeng","Sora_Sompeng"],["Soyombo","Soyombo"],["Sundanese","Sundanese"],["Syloti_Nagri","Syloti_Nagri"],["Syriac","Syriac"],["Tagbanwa","Tagbanwa"],["Takri","Takri"],["Tai_Le","Tai_Le"],["New_Tai_Lue","New_Tai_Lue"],["Tamil","Tamil"],["Tangut","Tangut"],["Tai_Viet","Tai_Viet"],["Telugu","Telugu"],["Tifinagh","Tifinagh"],["Tagalog","Tagalog"],["Thaana","Thaana"],["Tibetan","Tibetan"],["Tirhuta","Tirhuta"],["Ugaritic","Ugaritic"],["Vai","Vai"],["Warang_Citi","Warang_Citi"],["Old_Persian","Old_Persian"],["Cuneiform","Cuneiform"],["Yi","Yi"],["Zanabazar_Square","Zanabazar_Square"],["Inherited","Inherited"],["Common","Common"],["Unknown","Unknown"]])]]);const propertyToValueAliases=mappings,matchPropertyValue=function(o,e){const s=propertyToValueAliases.get(o);if(!s)throw new Error(`Unknown property \`${o}\`.`);const a=s.get(e);if(a)return a;throw new Error(`Unknown value \`${e}\` for property \`${o}\`.`)};var unicodeMatchPropertyValueEcmascript=matchPropertyValue,unicodeCanonicalPropertyNamesEcmascript=new Set(["General_Category","Script","Script_Extensions","Alphabetic","Any","ASCII","ASCII_Hex_Digit","Assigned","Bidi_Control","Bidi_Mirrored","Case_Ignorable","Cased","Changes_When_Casefolded","Changes_When_Casemapped","Changes_When_Lowercased","Changes_When_NFKC_Casefolded","Changes_When_Titlecased","Changes_When_Uppercased","Dash","Default_Ignorable_Code_Point","Deprecated","Diacritic","Emoji","Emoji_Component","Emoji_Modifier","Emoji_Modifier_Base","Emoji_Presentation","Extended_Pictographic","Extender","Grapheme_Base","Grapheme_Extend","Hex_Digit","ID_Continue","ID_Start","Ideographic","IDS_Binary_Operator","IDS_Trinary_Operator","Join_Control","Logical_Order_Exception","Lowercase","Math","Noncharacter_Code_Point","Pattern_Syntax","Pattern_White_Space","Quotation_Mark","Radical","Regional_Indicator","Sentence_Terminal","Soft_Dotted","Terminal_Punctuation","Unified_Ideograph","Uppercase","Variation_Selector","White_Space","XID_Continue","XID_Start"]),unicodePropertyAliasesEcmascript=new Map([["scx","Script_Extensions"],["sc","Script"],["gc","General_Category"],["AHex","ASCII_Hex_Digit"],["Alpha","Alphabetic"],["Bidi_C","Bidi_Control"],["Bidi_M","Bidi_Mirrored"],["Cased","Cased"],["CI","Case_Ignorable"],["CWCF","Changes_When_Casefolded"],["CWCM","Changes_When_Casemapped"],["CWKCF","Changes_When_NFKC_Casefolded"],["CWL","Changes_When_Lowercased"],["CWT","Changes_When_Titlecased"],["CWU","Changes_When_Uppercased"],["Dash","Dash"],["Dep","Deprecated"],["DI","Default_Ignorable_Code_Point"],["Dia","Diacritic"],["Ext","Extender"],["Gr_Base","Grapheme_Base"],["Gr_Ext","Grapheme_Extend"],["Hex","Hex_Digit"],["IDC","ID_Continue"],["Ideo","Ideographic"],["IDS","ID_Start"],["IDSB","IDS_Binary_Operator"],["IDST","IDS_Trinary_Operator"],["Join_C","Join_Control"],["LOE","Logical_Order_Exception"],["Lower","Lowercase"],["Math","Math"],["NChar","Noncharacter_Code_Point"],["Pat_Syn","Pattern_Syntax"],["Pat_WS","Pattern_White_Space"],["QMark","Quotation_Mark"],["Radical","Radical"],["RI","Regional_Indicator"],["SD","Soft_Dotted"],["STerm","Sentence_Terminal"],["Term","Terminal_Punctuation"],["UIdeo","Unified_Ideograph"],["Upper","Uppercase"],["VS","Variation_Selector"],["WSpace","White_Space"],["space","White_Space"],["XIDC","XID_Continue"],["XIDS","XID_Start"]]);const canonicalProperties=unicodeCanonicalPropertyNamesEcmascript,propertyAliases=unicodePropertyAliasesEcmascript,matchProperty=function(o){if(canonicalProperties.has(o))return o;if(propertyAliases.has(o))return propertyAliases.get(o);throw new Error(`Unknown property: ${o}`)};var unicodeMatchPropertyEcmascript=matchProperty,unicode$1={};Object.defineProperty(unicode$1,"__esModule",{value:!0});unicode$1.whitespaceArray=[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279];unicode$1.whitespaceBool=[!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!0,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1];unicode$1.idStartLargeRegex=/^[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]$/;unicode$1.idStartBool=[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!0,!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,!1,!1,!1,!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,!0,!0,!0,!1,!1,!1,!1,!1];unicode$1.idContinueLargeRegex=/^[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]$/;unicode$1.idContinueBool=[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!1,!1,!1,!1,!1,!1,!1,!0,!0,!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,!1,!1,!1,!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,!0,!0,!0,!1,!1,!1,!1,!1];Object.defineProperty(dist$6,"__esModule",{value:!0});var _createClass$d=function(){function o(e,s){for(var a=0;a=this.pattern.length}},{key:"backreference",value:function(s){s>this.largestBackreference&&(this.largestBackreference=s)}},{key:"nextCodePoint",value:function(){return this.empty()?null:this.unicode?String.fromCodePoint(this.pattern.codePointAt(this.index)):this.pattern.charAt(this.index)}},{key:"skipCodePoint",value:function(){this.index+=this.nextCodePoint().length}},{key:"eat",value:function(s){return this.index+s.length>this.pattern.length||this.pattern.slice(this.index,this.index+s.length)!==s?!1:(this.index+=s.length,!0)}},{key:"eatIdentifierCodePoint",value:function(){var s=void 0,a=this.index,c=void 0;if(this.match("\\u")){if(this.skipCodePoint(),s=acceptUnicodeEscape(this),!s.matched)return this.index=a,null;s=s.value,c=String.fromCodePoint(s)}else{if(c=this.nextCodePoint(),c==null)return this.index=a,null;this.index+=c.length,s=c.codePointAt(0)}return{character:c,characterValue:s}}},{key:"eatIdentifierStart",value:function(){var s=this.index,a=this.eatIdentifierCodePoint();return a===null?(this.index=s,null):a.character==="_"||a.character==="$"||isIdentifierStart(a.characterValue)?a.character:(this.index=s,null)}},{key:"eatIdentifierPart",value:function(){var s=this.index,a=this.eatIdentifierCodePoint();return a===null?(this.index=s,null):a.character==="\u200C"||a.character==="\u200D"||a.character==="$"||isIdentifierPart(a.characterValue)?a.character:(this.index=s,null)}},{key:"eatAny",value:function(){for(var s=arguments.length,a=Array(s),c=0;c1&&arguments[1]!==void 0?arguments[1]:{},s=e.unicode,a=s===void 0?!1:s,c=new PatternAcceptorState(o,a),h=acceptDisjunction(c);if(h.matched){if(c.unicode&&c.largestBackreference>c.capturingGroups)return!1;if(c.groupingNames.length>0||c.unicode){var d=!0,g=!1,_=void 0;try{for(var b=c.backreferenceNames[Symbol.iterator](),$;!(d=($=b.next()).done);d=!0){var j=$.value;if(c.groupingNames.indexOf(j)===-1)return!1}}catch(_e){g=!0,_=_e}finally{try{!d&&b.return&&b.return()}finally{if(g)throw _}}}}return h.matched};var backtrackOnFailure=function(e){return function(s){var a=s.index,c=s.largestBackreference,h=s.capturingGroups,d=e(s);return d.matched||(s.index=a,s.largestBackreference=c,s.capturingGroups=h),d}},acceptUnicodeEscape=backtrackOnFailure(function(o){if(!o.eat("u"))return{matched:!1};if(o.unicode&&o.eat("{")){for(var e=[];!o.eat("}");){var s=o.eatAny.apply(o,_toConsumableArray$6(hexDigits));if(s===null)return{matched:!1};e.push(s)}var a=parseInt(e.join(""),16);return a>1114111?{matched:!1}:{matched:!0,value:a}}var c=[0,0,0,0].map(function(){return o.eatAny.apply(o,_toConsumableArray$6(hexDigits))});if(c.some(function(g){return g===null}))return{matched:!1};var h=parseInt(c.join(""),16);if(o.unicode&&h>=55296&&h<=56319){var d=backtrackOnFailure(function(g){if(!g.eat("\\u"))return{matched:!1};var _=[0,0,0,0].map(function(){return g.eatAny.apply(g,_toConsumableArray$6(hexDigits))});if(_.some(function($){return $===null}))return{matched:!1};var b=parseInt(_.join(""),16);return b<56320||b>=57344?{matched:!1}:{matched:!0,value:65536+((h&1023)<<10)+(b&1023)}})(o);if(d.matched)return d}return{matched:!0,value:h}}),acceptDisjunction=function(e,s){do{if(s!==void 0&&e.eat(s))return{matched:!0};if(e.match("|"))continue;if(!acceptAlternative(e,s).matched)return{matched:!1}}while(e.eat("|"));return{matched:s===void 0||!!e.eat(s)}},acceptAlternative=function(e,s){for(;!e.match("|")&&!e.empty()&&(s===void 0||!e.match(s));)if(!acceptTerm(e).matched)return{matched:!1};return{matched:!0}},anyOf=function(){for(var e=arguments.length,s=Array(e),a=0;aparseInt(d))return{matched:!1}}return c.eat("}")?(c.eat("?"),{matched:!0}):{matched:!1}})(s);return a.matched?a:{matched:!s.unicode}}else s.eatAny("*","+","?")&&s.eat("?");return{matched:!0}})},acceptCharacterExcept=function(e){return function(s){var a=s.nextCodePoint();return a===null||e.indexOf(a)!==-1?{matched:!1}:(s.skipCodePoint(),{matched:!0})}},acceptPatternCharacter=acceptCharacterExcept(syntaxCharacters),acceptExtendedPatternCharacter=acceptCharacterExcept(extendedSyntaxCharacters),acceptInvalidBracedQuantifier=function(e){return backtrackOnFailure(function(s){return{matched:!!(s.eat("{")&&acceptDecimal(s).matched&&(!s.eat(",")||s.match("}")||acceptDecimal(s).matched)&&s.eat("}"))}})(e)},acceptAtom=function(e){if(e.unicode)return anyOf(acceptPatternCharacter,function(a){return{matched:!!a.eat(".")}},backtrackOnFailure(function(a){return a.eat("\\")?acceptAtomEscape(a):{matched:!1}}),acceptCharacterClass,acceptLabeledGroup(function(a){return a.eat("?:")}),acceptGrouping)(e);var s=anyOf(function(a){return{matched:!!a.eat(".")}},backtrackOnFailure(function(a){return a.eat("\\")?acceptAtomEscape(a):{matched:!1}}),backtrackOnFailure(function(a){return{matched:a.eat("\\")&&a.match("c")}}),acceptCharacterClass,acceptLabeledGroup(function(a){return a.eat("?:")}),acceptGrouping)(e);return!s.matched&&acceptInvalidBracedQuantifier(e).matched?{matched:!1}:s.matched?s:acceptExtendedPatternCharacter(e)},acceptGrouping=backtrackOnFailure(function(o){if(!o.eat("("))return{matched:!1};var e=backtrackOnFailure(function(s){return o.eat("?")?acceptGroupName(s):{matched:!1}})(o);if(!acceptDisjunction(o,")").matched)return{matched:!1};if(e.matched){if(o.groupingNames.indexOf(e.data)!==-1)return{matched:!1};o.groupingNames.push(e.data)}return o.capturingGroups++,{matched:!0}}),acceptDecimalEscape=backtrackOnFailure(function(o){var e=o.eatAny.apply(o,_toConsumableArray$6(decimalDigits));return e===null?{matched:!1}:e==="0"?{matched:!0}:(o.backreference(parseInt(e+(o.eatNaturalNumber()||""))),{matched:!0})}),acceptCharacterClassEscape=function(e){return e.eatAny("d","D","s","S","w","W")?{matched:!0}:e.unicode?backtrackOnFailure(function(s){return!s.eat("p{")&&!s.eat("P{")?{matched:!1}:acceptUnicodePropertyValueExpression(s).matched?{matched:!!s.eat("}")}:{matched:!1}})(e):{matched:!1}},acceptUnicodePropertyName=function(e){for(var s=[],a=void 0;a=e.eatAny.apply(e,_toConsumableArray$6(controlCharacters).concat(["_"]));)s.push(a);return{matched:s.length>0,data:s.join("")}},acceptUnicodePropertyValue=function(e){for(var s=[],a=void 0;a=e.eatAny.apply(e,_toConsumableArray$6(controlCharacters).concat(_toConsumableArray$6(decimalDigits),["_"]));)s.push(a);return{matched:s.length>0,data:s.join("")}},illegalLoneUnicodePropertyNames=["General_Category","Script","Script_Extensions","scx","sc","gc"],generalCategoryValues=_mappings2.default.get("General_Category"),acceptLoneUnicodePropertyNameOrValue=function(e){var s=acceptUnicodePropertyValue(e);return!s.matched||illegalLoneUnicodePropertyNames.includes(s.data)?{matched:!1}:{matched:catchIsFalse(function(){return(0,_unicodeMatchPropertyEcmascript2.default)(s.data)})||generalCategoryValues.get(s.data)!=null}},acceptUnicodePropertyValueExpression=function(e){return anyOf(backtrackOnFailure(function(s){var a=acceptUnicodePropertyName(s);if(!a.matched||!s.eat("="))return{matched:!1};var c=acceptUnicodePropertyValue(s);return c.matched?{matched:catchIsFalse(function(){return(0,_unicodeMatchPropertyValueEcmascript2.default)(_unicodePropertyAliasesEcmascript2.default.get(a.data)||a.data,c.data)})}:{matched:!1}}),backtrackOnFailure(acceptLoneUnicodePropertyNameOrValue))(e)},acceptCharacterEscape=anyOf(function(o){var e=o.eatAny.apply(o,_toConsumableArray$6(controlEscapeCharacters));return e===null?{matched:!1}:{matched:!0,value:controlEscapeCharacterValues[e]}},backtrackOnFailure(function(o){if(!o.eat("c"))return{matched:!1};var e=o.eatAny.apply(o,_toConsumableArray$6(controlCharacters));return e===null?{matched:!1}:{matched:!0,value:e.charCodeAt(0)%32}}),backtrackOnFailure(function(o){return!o.eat("0")||o.eatAny.apply(o,_toConsumableArray$6(decimalDigits))?{matched:!1}:{matched:!0,value:0}}),backtrackOnFailure(function(o){if(!o.eat("x"))return{matched:!1};var e=[0,0].map(function(){return o.eatAny.apply(o,_toConsumableArray$6(hexDigits))});return e.some(function(s){return s===null})?{matched:!1}:{matched:!0,value:parseInt(e.join(""),16)}}),acceptUnicodeEscape,backtrackOnFailure(function(o){if(o.unicode)return{matched:!1};var e=o.eatAny.apply(o,_toConsumableArray$6(octalDigits));if(e===null)return{matched:!1};var s=parseInt(e,8);if(octalDigits.indexOf(o.nextCodePoint())===-1)return{matched:!0,value:s};var a=o.eatAny.apply(o,_toConsumableArray$6(octalDigits)),c=parseInt(a,8);if(s<4){if(octalDigits.indexOf(o.nextCodePoint())===-1)return{matched:!0,value:s<<3|c};var h=o.eatAny.apply(o,_toConsumableArray$6(octalDigits)),d=parseInt(h,8);return{matched:!0,value:s<<6|c<<3|d}}return{matched:!0,value:s<<3|c}}),backtrackOnFailure(function(o){if(!o.unicode)return{matched:!1};var e=o.eatAny.apply(o,_toConsumableArray$6(syntaxCharacters));return e===null?{matched:!1}:{matched:!0,value:e.charCodeAt(0)}}),function(o){return!o.unicode||!o.eat("/")?{matched:!1}:{matched:!0,value:"/".charCodeAt(0)}},backtrackOnFailure(function(o){if(o.unicode)return{matched:!1};var e=o.nextCodePoint();return e!==null&&e!=="c"&&e!=="k"?(o.skipCodePoint(),{matched:!0,value:e.codePointAt(0)}):{matched:!1}})),acceptGroupNameBackreference=backtrackOnFailure(function(o){if(!o.eat("k"))return{matched:!1};var e=acceptGroupName(o);return e.matched?(o.backreferenceNames.push(e.data),{matched:!0}):(o.backreferenceNames.push(INVALID_NAMED_BACKREFERENCE_SENTINEL),{matched:!0})}),acceptGroupName=backtrackOnFailure(function(o){if(!o.eat("<"))return{matched:!1};var e=[],s=o.eatIdentifierStart();if(!s)return{matched:!1};e.push(s);for(var a=void 0;a=o.eatIdentifierPart();)e.push(a);return o.eat(">")?{matched:e.length>0,data:e.join("")}:{matched:!1}}),acceptAtomEscape=anyOf(acceptDecimalEscape,acceptCharacterClassEscape,acceptCharacterEscape,acceptGroupNameBackreference),acceptCharacterClass=backtrackOnFailure(function(o){if(!o.eat("["))return{matched:!1};o.eat("^");var e=anyOf(function(_){return{matched:!!_.eat("b"),value:8}},function(_){return{matched:_.unicode&&!!_.eat("-"),value:"-".charCodeAt(0)}},backtrackOnFailure(function(_){if(_.unicode||!_.eat("c"))return{matched:!1};var b=_.eatAny.apply(_,_toConsumableArray$6(decimalDigits).concat(["_"]));return b===null?{matched:!1}:{matched:!0,value:b.charCodeAt(0)%32}}),acceptCharacterClassEscape,acceptCharacterEscape,function(_){return{matched:!_.unicode&&!!_.eat("k"),value:107}}),s=function(b){var $=b.nextCodePoint();if($==="]"||$==="-"||$===null)return{matched:!1};if($!=="\\")return b.skipCodePoint(),{matched:!0,value:$.codePointAt(0)};b.eat("\\");var j=e(b);return!j.matched&&b.nextCodePoint()==="c"&&!b.unicode?{matched:!0,value:"\\".charCodeAt(0)}:j},a=function(b){return b.eat("-")?{matched:!0,value:"-".charCodeAt(0)}:s(b)},c=function(b,$){var j=function(tt){return tt.value===void 0&&tt.matched};if(b.eat("-")){if(b.match("]"))return{matched:!0};var _e=a(b);return _e.matched?b.unicode&&(j($)||j(_e))?{matched:!1}:!(!b.unicode&&(j($)||j(_e)))&&$.value>_e.value?{matched:!1}:b.match("]")?{matched:!0}:h(b):{matched:!1}}return b.match("]")?{matched:!0}:d(b)},h=function(b){var $=a(b);return $.matched?c(b,$):{matched:!1}},d=function(b){var $=s(b);return $.matched?c(b,$):{matched:!1}};if(o.eat("]"))return{matched:!0};var g=h(o);return g.matched&&o.eat("]"),g}),dist$5={};Object.defineProperty(dist$5,"__esModule",{value:!0});function _classCallCheck$g(o,e){if(!(o instanceof e))throw new TypeError("Cannot call a class as a function")}dist$5.ArrayAssignmentTarget=function o(e){var s=e.elements,a=e.rest;_classCallCheck$g(this,o),this.type="ArrayAssignmentTarget",this.elements=s,this.rest=a};dist$5.ArrayBinding=function o(e){var s=e.elements,a=e.rest;_classCallCheck$g(this,o),this.type="ArrayBinding",this.elements=s,this.rest=a};dist$5.ArrayExpression=function o(e){var s=e.elements;_classCallCheck$g(this,o),this.type="ArrayExpression",this.elements=s};dist$5.ArrowExpression=function o(e){var s=e.isAsync,a=e.params,c=e.body;_classCallCheck$g(this,o),this.type="ArrowExpression",this.isAsync=s,this.params=a,this.body=c};dist$5.AssignmentExpression=function o(e){var s=e.binding,a=e.expression;_classCallCheck$g(this,o),this.type="AssignmentExpression",this.binding=s,this.expression=a};dist$5.AssignmentTargetIdentifier=function o(e){var s=e.name;_classCallCheck$g(this,o),this.type="AssignmentTargetIdentifier",this.name=s};dist$5.AssignmentTargetPropertyIdentifier=function o(e){var s=e.binding,a=e.init;_classCallCheck$g(this,o),this.type="AssignmentTargetPropertyIdentifier",this.binding=s,this.init=a};dist$5.AssignmentTargetPropertyProperty=function o(e){var s=e.name,a=e.binding;_classCallCheck$g(this,o),this.type="AssignmentTargetPropertyProperty",this.name=s,this.binding=a};dist$5.AssignmentTargetWithDefault=function o(e){var s=e.binding,a=e.init;_classCallCheck$g(this,o),this.type="AssignmentTargetWithDefault",this.binding=s,this.init=a};dist$5.AwaitExpression=function o(e){var s=e.expression;_classCallCheck$g(this,o),this.type="AwaitExpression",this.expression=s};dist$5.BinaryExpression=function o(e){var s=e.left,a=e.operator,c=e.right;_classCallCheck$g(this,o),this.type="BinaryExpression",this.left=s,this.operator=a,this.right=c};dist$5.BindingIdentifier=function o(e){var s=e.name;_classCallCheck$g(this,o),this.type="BindingIdentifier",this.name=s};dist$5.BindingPropertyIdentifier=function o(e){var s=e.binding,a=e.init;_classCallCheck$g(this,o),this.type="BindingPropertyIdentifier",this.binding=s,this.init=a};dist$5.BindingPropertyProperty=function o(e){var s=e.name,a=e.binding;_classCallCheck$g(this,o),this.type="BindingPropertyProperty",this.name=s,this.binding=a};dist$5.BindingWithDefault=function o(e){var s=e.binding,a=e.init;_classCallCheck$g(this,o),this.type="BindingWithDefault",this.binding=s,this.init=a};dist$5.Block=function o(e){var s=e.statements;_classCallCheck$g(this,o),this.type="Block",this.statements=s};dist$5.BlockStatement=function o(e){var s=e.block;_classCallCheck$g(this,o),this.type="BlockStatement",this.block=s};dist$5.BreakStatement=function o(e){var s=e.label;_classCallCheck$g(this,o),this.type="BreakStatement",this.label=s};dist$5.CallExpression=function o(e){var s=e.callee,a=e.arguments;_classCallCheck$g(this,o),this.type="CallExpression",this.callee=s,this.arguments=a};dist$5.CatchClause=function o(e){var s=e.binding,a=e.body;_classCallCheck$g(this,o),this.type="CatchClause",this.binding=s,this.body=a};dist$5.ClassDeclaration=function o(e){var s=e.name,a=e.super,c=e.elements;_classCallCheck$g(this,o),this.type="ClassDeclaration",this.name=s,this.super=a,this.elements=c};dist$5.ClassElement=function o(e){var s=e.isStatic,a=e.method;_classCallCheck$g(this,o),this.type="ClassElement",this.isStatic=s,this.method=a};dist$5.ClassExpression=function o(e){var s=e.name,a=e.super,c=e.elements;_classCallCheck$g(this,o),this.type="ClassExpression",this.name=s,this.super=a,this.elements=c};dist$5.CompoundAssignmentExpression=function o(e){var s=e.binding,a=e.operator,c=e.expression;_classCallCheck$g(this,o),this.type="CompoundAssignmentExpression",this.binding=s,this.operator=a,this.expression=c};dist$5.ComputedMemberAssignmentTarget=function o(e){var s=e.object,a=e.expression;_classCallCheck$g(this,o),this.type="ComputedMemberAssignmentTarget",this.object=s,this.expression=a};dist$5.ComputedMemberExpression=function o(e){var s=e.object,a=e.expression;_classCallCheck$g(this,o),this.type="ComputedMemberExpression",this.object=s,this.expression=a};dist$5.ComputedPropertyName=function o(e){var s=e.expression;_classCallCheck$g(this,o),this.type="ComputedPropertyName",this.expression=s};dist$5.ConditionalExpression=function o(e){var s=e.test,a=e.consequent,c=e.alternate;_classCallCheck$g(this,o),this.type="ConditionalExpression",this.test=s,this.consequent=a,this.alternate=c};dist$5.ContinueStatement=function o(e){var s=e.label;_classCallCheck$g(this,o),this.type="ContinueStatement",this.label=s};dist$5.DataProperty=function o(e){var s=e.name,a=e.expression;_classCallCheck$g(this,o),this.type="DataProperty",this.name=s,this.expression=a};dist$5.DebuggerStatement=function o(){_classCallCheck$g(this,o),this.type="DebuggerStatement"};dist$5.Directive=function o(e){var s=e.rawValue;_classCallCheck$g(this,o),this.type="Directive",this.rawValue=s};dist$5.DoWhileStatement=function o(e){var s=e.body,a=e.test;_classCallCheck$g(this,o),this.type="DoWhileStatement",this.body=s,this.test=a};dist$5.EmptyStatement=function o(){_classCallCheck$g(this,o),this.type="EmptyStatement"};dist$5.Export=function o(e){var s=e.declaration;_classCallCheck$g(this,o),this.type="Export",this.declaration=s};dist$5.ExportAllFrom=function o(e){var s=e.moduleSpecifier;_classCallCheck$g(this,o),this.type="ExportAllFrom",this.moduleSpecifier=s};dist$5.ExportDefault=function o(e){var s=e.body;_classCallCheck$g(this,o),this.type="ExportDefault",this.body=s};dist$5.ExportFrom=function o(e){var s=e.namedExports,a=e.moduleSpecifier;_classCallCheck$g(this,o),this.type="ExportFrom",this.namedExports=s,this.moduleSpecifier=a};dist$5.ExportFromSpecifier=function o(e){var s=e.name,a=e.exportedName;_classCallCheck$g(this,o),this.type="ExportFromSpecifier",this.name=s,this.exportedName=a};dist$5.ExportLocalSpecifier=function o(e){var s=e.name,a=e.exportedName;_classCallCheck$g(this,o),this.type="ExportLocalSpecifier",this.name=s,this.exportedName=a};dist$5.ExportLocals=function o(e){var s=e.namedExports;_classCallCheck$g(this,o),this.type="ExportLocals",this.namedExports=s};dist$5.ExpressionStatement=function o(e){var s=e.expression;_classCallCheck$g(this,o),this.type="ExpressionStatement",this.expression=s};dist$5.ForAwaitStatement=function o(e){var s=e.left,a=e.right,c=e.body;_classCallCheck$g(this,o),this.type="ForAwaitStatement",this.left=s,this.right=a,this.body=c};dist$5.ForInStatement=function o(e){var s=e.left,a=e.right,c=e.body;_classCallCheck$g(this,o),this.type="ForInStatement",this.left=s,this.right=a,this.body=c};dist$5.ForOfStatement=function o(e){var s=e.left,a=e.right,c=e.body;_classCallCheck$g(this,o),this.type="ForOfStatement",this.left=s,this.right=a,this.body=c};dist$5.ForStatement=function o(e){var s=e.init,a=e.test,c=e.update,h=e.body;_classCallCheck$g(this,o),this.type="ForStatement",this.init=s,this.test=a,this.update=c,this.body=h};dist$5.FormalParameters=function o(e){var s=e.items,a=e.rest;_classCallCheck$g(this,o),this.type="FormalParameters",this.items=s,this.rest=a};dist$5.FunctionBody=function o(e){var s=e.directives,a=e.statements;_classCallCheck$g(this,o),this.type="FunctionBody",this.directives=s,this.statements=a};dist$5.FunctionDeclaration=function o(e){var s=e.isAsync,a=e.isGenerator,c=e.name,h=e.params,d=e.body;_classCallCheck$g(this,o),this.type="FunctionDeclaration",this.isAsync=s,this.isGenerator=a,this.name=c,this.params=h,this.body=d};dist$5.FunctionExpression=function o(e){var s=e.isAsync,a=e.isGenerator,c=e.name,h=e.params,d=e.body;_classCallCheck$g(this,o),this.type="FunctionExpression",this.isAsync=s,this.isGenerator=a,this.name=c,this.params=h,this.body=d};dist$5.Getter=function o(e){var s=e.name,a=e.body;_classCallCheck$g(this,o),this.type="Getter",this.name=s,this.body=a};dist$5.IdentifierExpression=function o(e){var s=e.name;_classCallCheck$g(this,o),this.type="IdentifierExpression",this.name=s};dist$5.IfStatement=function o(e){var s=e.test,a=e.consequent,c=e.alternate;_classCallCheck$g(this,o),this.type="IfStatement",this.test=s,this.consequent=a,this.alternate=c};dist$5.Import=function o(e){var s=e.defaultBinding,a=e.namedImports,c=e.moduleSpecifier;_classCallCheck$g(this,o),this.type="Import",this.defaultBinding=s,this.namedImports=a,this.moduleSpecifier=c};dist$5.ImportNamespace=function o(e){var s=e.defaultBinding,a=e.namespaceBinding,c=e.moduleSpecifier;_classCallCheck$g(this,o),this.type="ImportNamespace",this.defaultBinding=s,this.namespaceBinding=a,this.moduleSpecifier=c};dist$5.ImportSpecifier=function o(e){var s=e.name,a=e.binding;_classCallCheck$g(this,o),this.type="ImportSpecifier",this.name=s,this.binding=a};dist$5.LabeledStatement=function o(e){var s=e.label,a=e.body;_classCallCheck$g(this,o),this.type="LabeledStatement",this.label=s,this.body=a};dist$5.LiteralBooleanExpression=function o(e){var s=e.value;_classCallCheck$g(this,o),this.type="LiteralBooleanExpression",this.value=s};dist$5.LiteralInfinityExpression=function o(){_classCallCheck$g(this,o),this.type="LiteralInfinityExpression"};dist$5.LiteralNullExpression=function o(){_classCallCheck$g(this,o),this.type="LiteralNullExpression"};dist$5.LiteralNumericExpression=function o(e){var s=e.value;_classCallCheck$g(this,o),this.type="LiteralNumericExpression",this.value=s};dist$5.LiteralRegExpExpression=function o(e){var s=e.pattern,a=e.global,c=e.ignoreCase,h=e.multiLine,d=e.dotAll,g=e.unicode,_=e.sticky;_classCallCheck$g(this,o),this.type="LiteralRegExpExpression",this.pattern=s,this.global=a,this.ignoreCase=c,this.multiLine=h,this.dotAll=d,this.unicode=g,this.sticky=_};dist$5.LiteralStringExpression=function o(e){var s=e.value;_classCallCheck$g(this,o),this.type="LiteralStringExpression",this.value=s};dist$5.Method=function o(e){var s=e.isAsync,a=e.isGenerator,c=e.name,h=e.params,d=e.body;_classCallCheck$g(this,o),this.type="Method",this.isAsync=s,this.isGenerator=a,this.name=c,this.params=h,this.body=d};dist$5.Module=function o(e){var s=e.directives,a=e.items;_classCallCheck$g(this,o),this.type="Module",this.directives=s,this.items=a};dist$5.NewExpression=function o(e){var s=e.callee,a=e.arguments;_classCallCheck$g(this,o),this.type="NewExpression",this.callee=s,this.arguments=a};dist$5.NewTargetExpression=function o(){_classCallCheck$g(this,o),this.type="NewTargetExpression"};dist$5.ObjectAssignmentTarget=function o(e){var s=e.properties,a=e.rest;_classCallCheck$g(this,o),this.type="ObjectAssignmentTarget",this.properties=s,this.rest=a};dist$5.ObjectBinding=function o(e){var s=e.properties,a=e.rest;_classCallCheck$g(this,o),this.type="ObjectBinding",this.properties=s,this.rest=a};dist$5.ObjectExpression=function o(e){var s=e.properties;_classCallCheck$g(this,o),this.type="ObjectExpression",this.properties=s};dist$5.ReturnStatement=function o(e){var s=e.expression;_classCallCheck$g(this,o),this.type="ReturnStatement",this.expression=s};dist$5.Script=function o(e){var s=e.directives,a=e.statements;_classCallCheck$g(this,o),this.type="Script",this.directives=s,this.statements=a};dist$5.Setter=function o(e){var s=e.name,a=e.param,c=e.body;_classCallCheck$g(this,o),this.type="Setter",this.name=s,this.param=a,this.body=c};dist$5.ShorthandProperty=function o(e){var s=e.name;_classCallCheck$g(this,o),this.type="ShorthandProperty",this.name=s};dist$5.SpreadElement=function o(e){var s=e.expression;_classCallCheck$g(this,o),this.type="SpreadElement",this.expression=s};dist$5.SpreadProperty=function o(e){var s=e.expression;_classCallCheck$g(this,o),this.type="SpreadProperty",this.expression=s};dist$5.StaticMemberAssignmentTarget=function o(e){var s=e.object,a=e.property;_classCallCheck$g(this,o),this.type="StaticMemberAssignmentTarget",this.object=s,this.property=a};dist$5.StaticMemberExpression=function o(e){var s=e.object,a=e.property;_classCallCheck$g(this,o),this.type="StaticMemberExpression",this.object=s,this.property=a};dist$5.StaticPropertyName=function o(e){var s=e.value;_classCallCheck$g(this,o),this.type="StaticPropertyName",this.value=s};dist$5.Super=function o(){_classCallCheck$g(this,o),this.type="Super"};dist$5.SwitchCase=function o(e){var s=e.test,a=e.consequent;_classCallCheck$g(this,o),this.type="SwitchCase",this.test=s,this.consequent=a};dist$5.SwitchDefault=function o(e){var s=e.consequent;_classCallCheck$g(this,o),this.type="SwitchDefault",this.consequent=s};dist$5.SwitchStatement=function o(e){var s=e.discriminant,a=e.cases;_classCallCheck$g(this,o),this.type="SwitchStatement",this.discriminant=s,this.cases=a};dist$5.SwitchStatementWithDefault=function o(e){var s=e.discriminant,a=e.preDefaultCases,c=e.defaultCase,h=e.postDefaultCases;_classCallCheck$g(this,o),this.type="SwitchStatementWithDefault",this.discriminant=s,this.preDefaultCases=a,this.defaultCase=c,this.postDefaultCases=h};dist$5.TemplateElement=function o(e){var s=e.rawValue;_classCallCheck$g(this,o),this.type="TemplateElement",this.rawValue=s};dist$5.TemplateExpression=function o(e){var s=e.tag,a=e.elements;_classCallCheck$g(this,o),this.type="TemplateExpression",this.tag=s,this.elements=a};dist$5.ThisExpression=function o(){_classCallCheck$g(this,o),this.type="ThisExpression"};dist$5.ThrowStatement=function o(e){var s=e.expression;_classCallCheck$g(this,o),this.type="ThrowStatement",this.expression=s};dist$5.TryCatchStatement=function o(e){var s=e.body,a=e.catchClause;_classCallCheck$g(this,o),this.type="TryCatchStatement",this.body=s,this.catchClause=a};dist$5.TryFinallyStatement=function o(e){var s=e.body,a=e.catchClause,c=e.finalizer;_classCallCheck$g(this,o),this.type="TryFinallyStatement",this.body=s,this.catchClause=a,this.finalizer=c};dist$5.UnaryExpression=function o(e){var s=e.operator,a=e.operand;_classCallCheck$g(this,o),this.type="UnaryExpression",this.operator=s,this.operand=a};dist$5.UpdateExpression=function o(e){var s=e.isPrefix,a=e.operator,c=e.operand;_classCallCheck$g(this,o),this.type="UpdateExpression",this.isPrefix=s,this.operator=a,this.operand=c};dist$5.VariableDeclaration=function o(e){var s=e.kind,a=e.declarators;_classCallCheck$g(this,o),this.type="VariableDeclaration",this.kind=s,this.declarators=a};dist$5.VariableDeclarationStatement=function o(e){var s=e.declaration;_classCallCheck$g(this,o),this.type="VariableDeclarationStatement",this.declaration=s};dist$5.VariableDeclarator=function o(e){var s=e.binding,a=e.init;_classCallCheck$g(this,o),this.type="VariableDeclarator",this.binding=s,this.init=a};dist$5.WhileStatement=function o(e){var s=e.test,a=e.body;_classCallCheck$g(this,o),this.type="WhileStatement",this.test=s,this.body=a};dist$5.WithStatement=function o(e){var s=e.object,a=e.body;_classCallCheck$g(this,o),this.type="WithStatement",this.object=s,this.body=a};dist$5.YieldExpression=function o(e){var s=e.expression;_classCallCheck$g(this,o),this.type="YieldExpression",this.expression=s};dist$5.YieldGeneratorExpression=function o(e){var s=e.expression;_classCallCheck$g(this,o),this.type="YieldGeneratorExpression",this.expression=s};Object.defineProperty(parser$1,"__esModule",{value:!0});parser$1.GenericParser=void 0;var _createClass$c=function(){function o(e,s){for(var a=0;a":Precedence$1.Relational,"<=":Precedence$1.Relational,">=":Precedence$1.Relational,in:Precedence$1.Relational,instanceof:Precedence$1.Relational,"<<":Precedence$1.BitwiseSHIFT,">>":Precedence$1.BitwiseSHIFT,">>>":Precedence$1.BitwiseSHIFT,"+":Precedence$1.Additive,"-":Precedence$1.Additive,"*":Precedence$1.Multiplicative,"%":Precedence$1.Multiplicative,"/":Precedence$1.Multiplicative};function isValidSimpleAssignmentTarget(o){if(o==null)return!1;switch(o.type){case"IdentifierExpression":case"ComputedMemberExpression":case"StaticMemberExpression":return!0}return!1}function isPrefixOperator(o){switch(o.type){case _tokenizer.TokenType.INC:case _tokenizer.TokenType.DEC:case _tokenizer.TokenType.ADD:case _tokenizer.TokenType.SUB:case _tokenizer.TokenType.BIT_NOT:case _tokenizer.TokenType.NOT:case _tokenizer.TokenType.DELETE:case _tokenizer.TokenType.VOID:case _tokenizer.TokenType.TYPEOF:return!0}return!1}function isUpdateOperator(o){return o.type===_tokenizer.TokenType.INC||o.type===_tokenizer.TokenType.DEC}parser$1.GenericParser=function(o){_inherits$7(e,o);function e(s){_classCallCheck$f(this,e);var a=_possibleConstructorReturn$7(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,s));return a.allowIn=!0,a.inFunctionBody=!1,a.inParameter=!1,a.allowYieldExpression=!1,a.allowAwaitExpression=!1,a.firstAwaitLocation=null,a.module=!1,a.moduleIsTheGoalSymbol=!1,a.strict=!1,a.isBindingElement=!0,a.isAssignmentTarget=!0,a.firstExprError=null,a}return _createClass$c(e,[{key:"match",value:function(a){return this.lookahead.type===a}},{key:"matchIdentifier",value:function(){switch(this.lookahead.type){case _tokenizer.TokenType.IDENTIFIER:case _tokenizer.TokenType.LET:case _tokenizer.TokenType.YIELD:case _tokenizer.TokenType.ASYNC:return!0;case _tokenizer.TokenType.AWAIT:return this.moduleIsTheGoalSymbol?!1:(this.firstAwaitLocation===null&&(this.firstAwaitLocation=this.getLocation()),!0);case _tokenizer.TokenType.ESCAPED_KEYWORD:return this.lookahead.value==="await"&&!this.moduleIsTheGoalSymbol?(this.firstAwaitLocation===null&&(this.firstAwaitLocation=this.getLocation()),!0):this.lookahead.value==="let"||this.lookahead.value==="yield"||this.lookahead.value==="async"}return!1}},{key:"eat",value:function(a){return this.lookahead.type===a?this.lex():null}},{key:"expect",value:function(a){if(this.lookahead.type===a)return this.lex();throw this.createUnexpected(this.lookahead)}},{key:"matchContextualKeyword",value:function(a){return this.lookahead.type===_tokenizer.TokenType.IDENTIFIER&&!this.lookahead.escaped&&this.lookahead.value===a}},{key:"expectContextualKeyword",value:function(a){if(this.lookahead.type===_tokenizer.TokenType.IDENTIFIER&&!this.lookahead.escaped&&this.lookahead.value===a)return this.lex();throw this.createUnexpected(this.lookahead)}},{key:"eatContextualKeyword",value:function(a){return this.lookahead.type===_tokenizer.TokenType.IDENTIFIER&&!this.lookahead.escaped&&this.lookahead.value===a?this.lex():null}},{key:"consumeSemicolon",value:function(){if(!this.eat(_tokenizer.TokenType.SEMICOLON)&&!this.hasLineTerminatorBeforeNext&&!this.eof()&&!this.match(_tokenizer.TokenType.RBRACE))throw this.createUnexpected(this.lookahead)}},{key:"startNode",value:function(a){return a}},{key:"copyNode",value:function(a,c){return c}},{key:"finishNode",value:function(a){return a}},{key:"parseModule",value:function(){this.moduleIsTheGoalSymbol=this.module=this.strict=!0,this.lookahead=this.advance();var a=this.startNode(),c=this.parseBody(),h=c.directives,d=c.statements;if(!this.match(_tokenizer.TokenType.EOS))throw this.createUnexpected(this.lookahead);return this.finishNode(new AST.Module({directives:h,items:d}),a)}},{key:"parseScript",value:function(){this.lookahead=this.advance();var a=this.startNode(),c=this.parseBody(),h=c.directives,d=c.statements;if(!this.match(_tokenizer.TokenType.EOS))throw this.createUnexpected(this.lookahead);return this.finishNode(new AST.Script({directives:h,statements:d}),a)}},{key:"parseFunctionBody",value:function(){var a=this.inFunctionBody,c=this.module,h=this.strict;this.inFunctionBody=!0,this.module=!1;var d=this.startNode();this.expect(_tokenizer.TokenType.LBRACE);var g=new AST.FunctionBody(this.parseBody());return this.expect(_tokenizer.TokenType.RBRACE),g=this.finishNode(g,d),this.inFunctionBody=a,this.module=c,this.strict=h,g}},{key:"parseBody",value:function(){for(var a=[],c=[],h=!0,d=null;!(this.eof()||this.match(_tokenizer.TokenType.RBRACE));){var g=this.lookahead,_=g.slice.text,b=g.type===_tokenizer.TokenType.STRING,$=this.module,j=this.getLocation(),_e=this.startNode(),et=$?this.parseModuleItem():this.parseStatementListItem();if(h)if(b&&et.type==="ExpressionStatement"&&et.expression.type==="LiteralStringExpression"){!d&&g.octal&&(d=this.createErrorWithLocation(j,"Unexpected legacy octal escape sequence: \\"+g.octal));var tt=_.slice(1,-1);tt==="use strict"&&(this.strict=!0),a.push(this.finishNode(new AST.Directive({rawValue:tt}),_e))}else{if(h=!1,d&&this.strict)throw d;c.push(et)}else c.push(et)}if(d&&this.strict)throw d;return{directives:a,statements:c}}},{key:"parseImportSpecifier",value:function(){var a=this.startNode(),c=void 0;if(this.matchIdentifier()){if(c=this.parseIdentifier(),!this.eatContextualKeyword("as"))return this.finishNode(new AST.ImportSpecifier({name:null,binding:this.finishNode(new AST.BindingIdentifier({name:c}),a)}),a)}else this.lookahead.type.klass.isIdentifierName&&(c=this.parseIdentifierName(),this.expectContextualKeyword("as"));return this.finishNode(new AST.ImportSpecifier({name:c,binding:this.parseBindingIdentifier()}),a)}},{key:"parseNameSpaceBinding",value:function(){return this.expect(_tokenizer.TokenType.MUL),this.expectContextualKeyword("as"),this.parseBindingIdentifier()}},{key:"parseNamedImports",value:function(){var a=[];for(this.expect(_tokenizer.TokenType.LBRACE);!this.eat(_tokenizer.TokenType.RBRACE);)if(a.push(this.parseImportSpecifier()),!this.eat(_tokenizer.TokenType.COMMA)){this.expect(_tokenizer.TokenType.RBRACE);break}return a}},{key:"parseFromClause",value:function(){this.expectContextualKeyword("from");var a=this.expect(_tokenizer.TokenType.STRING).str;return a}},{key:"parseImportDeclaration",value:function(){var a=this.startNode(),c=null,h=void 0;if(this.expect(_tokenizer.TokenType.IMPORT),this.match(_tokenizer.TokenType.STRING))return h=this.lex().str,this.consumeSemicolon(),this.finishNode(new AST.Import({defaultBinding:null,namedImports:[],moduleSpecifier:h}),a);if(this.matchIdentifier()&&(c=this.parseBindingIdentifier(),!this.eat(_tokenizer.TokenType.COMMA))){var d=new AST.Import({defaultBinding:c,namedImports:[],moduleSpecifier:this.parseFromClause()});return this.consumeSemicolon(),this.finishNode(d,a)}if(this.match(_tokenizer.TokenType.MUL)){var g=new AST.ImportNamespace({defaultBinding:c,namespaceBinding:this.parseNameSpaceBinding(),moduleSpecifier:this.parseFromClause()});return this.consumeSemicolon(),this.finishNode(g,a)}else if(this.match(_tokenizer.TokenType.LBRACE)){var _=new AST.Import({defaultBinding:c,namedImports:this.parseNamedImports(),moduleSpecifier:this.parseFromClause()});return this.consumeSemicolon(),this.finishNode(_,a)}throw this.createUnexpected(this.lookahead)}},{key:"parseExportSpecifier",value:function(){var a=this.startNode(),c=this.finishNode({type:EXPORT_UNKNOWN_SPECIFIER,isIdentifier:this.matchIdentifier(),value:this.parseIdentifierName()},a);if(this.eatContextualKeyword("as")){var h=this.parseIdentifierName();return this.finishNode({name:c,exportedName:h},a)}return this.finishNode({name:c,exportedName:null},a)}},{key:"parseExportClause",value:function(){this.expect(_tokenizer.TokenType.LBRACE);for(var a=[];!this.eat(_tokenizer.TokenType.RBRACE);)if(a.push(this.parseExportSpecifier()),!this.eat(_tokenizer.TokenType.COMMA)){this.expect(_tokenizer.TokenType.RBRACE);break}return a}},{key:"parseExportDeclaration",value:function(){var a=this,c=this.startNode(),h=void 0;switch(this.expect(_tokenizer.TokenType.EXPORT),this.lookahead.type){case _tokenizer.TokenType.MUL:this.lex(),h=new AST.ExportAllFrom({moduleSpecifier:this.parseFromClause()}),this.consumeSemicolon();break;case _tokenizer.TokenType.LBRACE:{var d=this.parseExportClause(),g=null;this.matchContextualKeyword("from")?(g=this.parseFromClause(),h=new AST.ExportFrom({namedExports:d.map(function(j){return a.copyNode(j,new AST.ExportFromSpecifier({name:j.name.value,exportedName:j.exportedName}))}),moduleSpecifier:g})):(d.forEach(function(j){var _e=j.name;if(!_e.isIdentifier)throw a.createError(_errors$1.ErrorMessages.ILLEGAL_EXPORTED_NAME)}),h=new AST.ExportLocals({namedExports:d.map(function(j){return a.copyNode(j,new AST.ExportLocalSpecifier({name:a.copyNode(j.name,new AST.IdentifierExpression({name:j.name.value})),exportedName:j.exportedName}))})})),this.consumeSemicolon();break}case _tokenizer.TokenType.CLASS:h=new AST.Export({declaration:this.parseClass({isExpr:!1,inDefault:!1})});break;case _tokenizer.TokenType.FUNCTION:h=new AST.Export({declaration:this.parseFunction({isExpr:!1,inDefault:!1,allowGenerator:!0,isAsync:!1})});break;case _tokenizer.TokenType.ASYNC:{var _=this.startNode();this.lex(),h=new AST.Export({declaration:this.parseFunction({isExpr:!1,inDefault:!1,allowGenerator:!0,isAsync:!0,startState:_})});break}case _tokenizer.TokenType.DEFAULT:switch(this.lex(),this.lookahead.type){case _tokenizer.TokenType.FUNCTION:h=new AST.ExportDefault({body:this.parseFunction({isExpr:!1,inDefault:!0,allowGenerator:!0,isAsync:!1})});break;case _tokenizer.TokenType.CLASS:h=new AST.ExportDefault({body:this.parseClass({isExpr:!1,inDefault:!0})});break;case _tokenizer.TokenType.ASYNC:{var b=this.startNode(),$=this.saveLexerState();if(this.lex(),!this.hasLineTerminatorBeforeNext&&this.match(_tokenizer.TokenType.FUNCTION)){h=new AST.ExportDefault({body:this.parseFunction({isExpr:!1,inDefault:!0,allowGenerator:!1,isAsync:!0,startState:b})});break}this.restoreLexerState($)}default:h=new AST.ExportDefault({body:this.parseAssignmentExpression()}),this.consumeSemicolon();break}break;case _tokenizer.TokenType.VAR:case _tokenizer.TokenType.LET:case _tokenizer.TokenType.CONST:h=new AST.Export({declaration:this.parseVariableDeclaration(!0)}),this.consumeSemicolon();break;default:throw this.createUnexpected(this.lookahead)}return this.finishNode(h,c)}},{key:"parseModuleItem",value:function(){switch(this.lookahead.type){case _tokenizer.TokenType.IMPORT:return this.parseImportDeclaration();case _tokenizer.TokenType.EXPORT:return this.parseExportDeclaration();default:return this.parseStatementListItem()}}},{key:"lookaheadLexicalDeclaration",value:function(){if(this.match(_tokenizer.TokenType.LET)||this.match(_tokenizer.TokenType.CONST)){var a=this.saveLexerState();if(this.lex(),this.matchIdentifier()||this.match(_tokenizer.TokenType.LBRACE)||this.match(_tokenizer.TokenType.LBRACK))return this.restoreLexerState(a),!0;this.restoreLexerState(a)}return!1}},{key:"parseStatementListItem",value:function(){if(this.eof())throw this.createUnexpected(this.lookahead);switch(this.lookahead.type){case _tokenizer.TokenType.FUNCTION:return this.parseFunction({isExpr:!1,inDefault:!1,allowGenerator:!0,isAsync:!1});case _tokenizer.TokenType.CLASS:return this.parseClass({isExpr:!1,inDefault:!1});case _tokenizer.TokenType.ASYNC:{var a=this.getLocation(),c=this.saveLexerState();return this.lex(),!this.hasLineTerminatorBeforeNext&&this.match(_tokenizer.TokenType.FUNCTION)?this.parseFunction({isExpr:!1,inDefault:!1,allowGenerator:!0,isAsync:!0,startState:a}):(this.restoreLexerState(c),this.parseStatement())}default:if(this.lookaheadLexicalDeclaration()){var h=this.startNode();return this.finishNode(this.parseVariableDeclarationStatement(),h)}return this.parseStatement()}}},{key:"parseStatement",value:function(){var a=this.startNode(),c=this.isolateCoverGrammar(this.parseStatementHelper);return this.finishNode(c,a)}},{key:"parseStatementHelper",value:function(){if(this.eof())throw this.createUnexpected(this.lookahead);switch(this.lookahead.type){case _tokenizer.TokenType.SEMICOLON:return this.parseEmptyStatement();case _tokenizer.TokenType.LBRACE:return this.parseBlockStatement();case _tokenizer.TokenType.LPAREN:return this.parseExpressionStatement();case _tokenizer.TokenType.BREAK:return this.parseBreakStatement();case _tokenizer.TokenType.CONTINUE:return this.parseContinueStatement();case _tokenizer.TokenType.DEBUGGER:return this.parseDebuggerStatement();case _tokenizer.TokenType.DO:return this.parseDoWhileStatement();case _tokenizer.TokenType.FOR:return this.parseForStatement();case _tokenizer.TokenType.IF:return this.parseIfStatement();case _tokenizer.TokenType.RETURN:return this.parseReturnStatement();case _tokenizer.TokenType.SWITCH:return this.parseSwitchStatement();case _tokenizer.TokenType.THROW:return this.parseThrowStatement();case _tokenizer.TokenType.TRY:return this.parseTryStatement();case _tokenizer.TokenType.VAR:return this.parseVariableDeclarationStatement();case _tokenizer.TokenType.WHILE:return this.parseWhileStatement();case _tokenizer.TokenType.WITH:return this.parseWithStatement();case _tokenizer.TokenType.FUNCTION:case _tokenizer.TokenType.CLASS:throw this.createUnexpected(this.lookahead);default:{var a=this.saveLexerState();if(this.eat(_tokenizer.TokenType.LET)){if(this.match(_tokenizer.TokenType.LBRACK))throw this.restoreLexerState(a),this.createUnexpected(this.lookahead);this.restoreLexerState(a)}else if(this.eat(_tokenizer.TokenType.ASYNC)){if(!this.hasLineTerminatorBeforeNext&&this.match(_tokenizer.TokenType.FUNCTION))throw this.createUnexpected(this.lookahead);this.restoreLexerState(a)}var c=this.parseExpression();if(c.type==="IdentifierExpression"&&this.eat(_tokenizer.TokenType.COLON)){var h=this.match(_tokenizer.TokenType.FUNCTION)?this.parseFunction({isExpr:!1,inDefault:!1,allowGenerator:!1,isAsync:!1}):this.parseStatement();return new AST.LabeledStatement({label:c.name,body:h})}return this.consumeSemicolon(),new AST.ExpressionStatement({expression:c})}}}},{key:"parseEmptyStatement",value:function(){return this.lex(),new AST.EmptyStatement}},{key:"parseBlockStatement",value:function(){return new AST.BlockStatement({block:this.parseBlock()})}},{key:"parseExpressionStatement",value:function(){var a=this.parseExpression();return this.consumeSemicolon(),new AST.ExpressionStatement({expression:a})}},{key:"parseBreakStatement",value:function(){if(this.lex(),this.eat(_tokenizer.TokenType.SEMICOLON)||this.hasLineTerminatorBeforeNext)return new AST.BreakStatement({label:null});var a=null;return this.matchIdentifier()&&(a=this.parseIdentifier()),this.consumeSemicolon(),new AST.BreakStatement({label:a})}},{key:"parseContinueStatement",value:function(){if(this.lex(),this.eat(_tokenizer.TokenType.SEMICOLON)||this.hasLineTerminatorBeforeNext)return new AST.ContinueStatement({label:null});var a=null;return this.matchIdentifier()&&(a=this.parseIdentifier()),this.consumeSemicolon(),new AST.ContinueStatement({label:a})}},{key:"parseDebuggerStatement",value:function(){return this.lex(),this.consumeSemicolon(),new AST.DebuggerStatement}},{key:"parseDoWhileStatement",value:function(){this.lex();var a=this.parseStatement();this.expect(_tokenizer.TokenType.WHILE),this.expect(_tokenizer.TokenType.LPAREN);var c=this.parseExpression();return this.expect(_tokenizer.TokenType.RPAREN),this.eat(_tokenizer.TokenType.SEMICOLON),new AST.DoWhileStatement({body:a,test:c})}},{key:"parseForStatement",value:function(){this.lex();var a=this.allowAwaitExpression&&this.eat(_tokenizer.TokenType.AWAIT);this.expect(_tokenizer.TokenType.LPAREN);var c=null,h=null;if(a&&this.match(_tokenizer.TokenType.SEMICOLON))throw this.createUnexpected(this.lookahead);if(this.eat(_tokenizer.TokenType.SEMICOLON))return this.match(_tokenizer.TokenType.SEMICOLON)||(c=this.parseExpression()),this.expect(_tokenizer.TokenType.SEMICOLON),this.match(_tokenizer.TokenType.RPAREN)||(h=this.parseExpression()),new AST.ForStatement({init:null,test:c,update:h,body:this.getIteratorStatementEpilogue()});var d=this.match(_tokenizer.TokenType.LET),g=this.lookaheadLexicalDeclaration(),_=this.startNode();if(this.match(_tokenizer.TokenType.VAR)||g){var b=this.allowIn;this.allowIn=!1;var $=this.parseVariableDeclaration(!1);if(this.allowIn=b,$.declarators.length===1&&(this.match(_tokenizer.TokenType.IN)||this.matchContextualKeyword("of"))){var j=void 0,_e=$.declarators[0];if(this.match(_tokenizer.TokenType.IN)){if(a)throw this.createUnexpected(this.lookahead);if(_e.init!==null&&(this.strict||$.kind!=="var"||_e.binding.type!=="BindingIdentifier"))throw this.createError(_errors$1.ErrorMessages.INVALID_VAR_INIT_FOR_IN);j=AST.ForInStatement,this.lex(),h=this.parseExpression()}else{if(_e.init!==null)throw this.createError(a?_errors$1.ErrorMessages.INVALID_VAR_INIT_FOR_AWAIT:_errors$1.ErrorMessages.INVALID_VAR_INIT_FOR_OF);a?j=AST.ForAwaitStatement:j=AST.ForOfStatement,this.lex(),h=this.parseAssignmentExpression()}var et=this.getIteratorStatementEpilogue();return new j({left:$,right:h,body:et})}else if(a)throw this.createUnexpected(this.lookahead);if(this.expect(_tokenizer.TokenType.SEMICOLON),$.declarators.some(function(it){return it.binding.type!=="BindingIdentifier"&&it.init===null}))throw this.createError(_errors$1.ErrorMessages.UNINITIALIZED_BINDINGPATTERN_IN_FOR_INIT);return this.match(_tokenizer.TokenType.SEMICOLON)||(c=this.parseExpression()),this.expect(_tokenizer.TokenType.SEMICOLON),this.match(_tokenizer.TokenType.RPAREN)||(h=this.parseExpression()),new AST.ForStatement({init:$,test:c,update:h,body:this.getIteratorStatementEpilogue()})}var tt=this.allowIn;this.allowIn=!1;var nt=this.inheritCoverGrammar(this.parseAssignmentExpressionOrTarget);if(this.allowIn=tt,this.isAssignmentTarget&&nt.type!=="AssignmentExpression"&&(this.match(_tokenizer.TokenType.IN)||this.matchContextualKeyword("of"))){if((nt.type==="ObjectAssignmentTarget"||nt.type==="ArrayAssignmentTarget")&&(this.firstExprError=null),d&&this.matchContextualKeyword("of"))throw this.createError(a?_errors$1.ErrorMessages.INVALID_LHS_IN_FOR_AWAIT:_errors$1.ErrorMessages.INVALID_LHS_IN_FOR_OF);var st=void 0;if(this.match(_tokenizer.TokenType.IN)){if(a)throw this.createUnexpected(this.lookahead);st=AST.ForInStatement,this.lex(),h=this.parseExpression()}else a?st=AST.ForAwaitStatement:st=AST.ForOfStatement,this.lex(),h=this.parseAssignmentExpression();return new st({left:this.transformDestructuring(nt),right:h,body:this.getIteratorStatementEpilogue()})}else if(a)throw this.createError(_errors$1.ErrorMessages.INVALID_LHS_IN_FOR_AWAIT);if(this.firstExprError)throw this.firstExprError;for(;this.eat(_tokenizer.TokenType.COMMA);){var rt=this.parseAssignmentExpression();nt=this.finishNode(new AST.BinaryExpression({left:nt,operator:",",right:rt}),_)}if(this.match(_tokenizer.TokenType.IN))throw this.createError(_errors$1.ErrorMessages.INVALID_LHS_IN_FOR_IN);if(this.matchContextualKeyword("of"))throw this.createError(_errors$1.ErrorMessages.INVALID_LHS_IN_FOR_OF);return this.expect(_tokenizer.TokenType.SEMICOLON),this.match(_tokenizer.TokenType.SEMICOLON)||(c=this.parseExpression()),this.expect(_tokenizer.TokenType.SEMICOLON),this.match(_tokenizer.TokenType.RPAREN)||(h=this.parseExpression()),new AST.ForStatement({init:nt,test:c,update:h,body:this.getIteratorStatementEpilogue()})}},{key:"getIteratorStatementEpilogue",value:function(){this.expect(_tokenizer.TokenType.RPAREN);var a=this.parseStatement();return a}},{key:"parseIfStatementChild",value:function(){return this.match(_tokenizer.TokenType.FUNCTION)?this.parseFunction({isExpr:!1,inDefault:!1,allowGenerator:!1,isAsync:!1}):this.parseStatement()}},{key:"parseIfStatement",value:function(){this.lex(),this.expect(_tokenizer.TokenType.LPAREN);var a=this.parseExpression();this.expect(_tokenizer.TokenType.RPAREN);var c=this.parseIfStatementChild(),h=null;return this.eat(_tokenizer.TokenType.ELSE)&&(h=this.parseIfStatementChild()),new AST.IfStatement({test:a,consequent:c,alternate:h})}},{key:"parseReturnStatement",value:function(){if(!this.inFunctionBody)throw this.createError(_errors$1.ErrorMessages.ILLEGAL_RETURN);if(this.lex(),this.eat(_tokenizer.TokenType.SEMICOLON)||this.hasLineTerminatorBeforeNext)return new AST.ReturnStatement({expression:null});var a=null;return!this.match(_tokenizer.TokenType.RBRACE)&&!this.eof()&&(a=this.parseExpression()),this.consumeSemicolon(),new AST.ReturnStatement({expression:a})}},{key:"parseSwitchStatement",value:function(){this.lex(),this.expect(_tokenizer.TokenType.LPAREN);var a=this.parseExpression();if(this.expect(_tokenizer.TokenType.RPAREN),this.expect(_tokenizer.TokenType.LBRACE),this.eat(_tokenizer.TokenType.RBRACE))return new AST.SwitchStatement({discriminant:a,cases:[]});var c=this.parseSwitchCases();if(this.match(_tokenizer.TokenType.DEFAULT)){var h=this.parseSwitchDefault(),d=this.parseSwitchCases();if(this.match(_tokenizer.TokenType.DEFAULT))throw this.createError(_errors$1.ErrorMessages.MULTIPLE_DEFAULTS_IN_SWITCH);return this.expect(_tokenizer.TokenType.RBRACE),new AST.SwitchStatementWithDefault({discriminant:a,preDefaultCases:c,defaultCase:h,postDefaultCases:d})}return this.expect(_tokenizer.TokenType.RBRACE),new AST.SwitchStatement({discriminant:a,cases:c})}},{key:"parseSwitchCases",value:function(){for(var a=[];!(this.eof()||this.match(_tokenizer.TokenType.RBRACE)||this.match(_tokenizer.TokenType.DEFAULT));)a.push(this.parseSwitchCase());return a}},{key:"parseSwitchCase",value:function(){var a=this.startNode();return this.expect(_tokenizer.TokenType.CASE),this.finishNode(new AST.SwitchCase({test:this.parseExpression(),consequent:this.parseSwitchCaseBody()}),a)}},{key:"parseSwitchDefault",value:function(){var a=this.startNode();return this.expect(_tokenizer.TokenType.DEFAULT),this.finishNode(new AST.SwitchDefault({consequent:this.parseSwitchCaseBody()}),a)}},{key:"parseSwitchCaseBody",value:function(){return this.expect(_tokenizer.TokenType.COLON),this.parseStatementListInSwitchCaseBody()}},{key:"parseStatementListInSwitchCaseBody",value:function(){for(var a=[];!(this.eof()||this.match(_tokenizer.TokenType.RBRACE)||this.match(_tokenizer.TokenType.DEFAULT)||this.match(_tokenizer.TokenType.CASE));)a.push(this.parseStatementListItem());return a}},{key:"parseThrowStatement",value:function(){var a=this.lex();if(this.hasLineTerminatorBeforeNext)throw this.createErrorWithLocation(a,_errors$1.ErrorMessages.NEWLINE_AFTER_THROW);var c=this.parseExpression();return this.consumeSemicolon(),new AST.ThrowStatement({expression:c})}},{key:"parseTryStatement",value:function(){this.lex();var a=this.parseBlock();if(this.match(_tokenizer.TokenType.CATCH)){var c=this.parseCatchClause();if(this.eat(_tokenizer.TokenType.FINALLY)){var h=this.parseBlock();return new AST.TryFinallyStatement({body:a,catchClause:c,finalizer:h})}return new AST.TryCatchStatement({body:a,catchClause:c})}if(this.eat(_tokenizer.TokenType.FINALLY)){var d=this.parseBlock();return new AST.TryFinallyStatement({body:a,catchClause:null,finalizer:d})}throw this.createError(_errors$1.ErrorMessages.NO_CATCH_OR_FINALLY)}},{key:"parseVariableDeclarationStatement",value:function(){var a=this.parseVariableDeclaration(!0);return this.consumeSemicolon(),new AST.VariableDeclarationStatement({declaration:a})}},{key:"parseWhileStatement",value:function(){this.lex(),this.expect(_tokenizer.TokenType.LPAREN);var a=this.parseExpression(),c=this.getIteratorStatementEpilogue();return new AST.WhileStatement({test:a,body:c})}},{key:"parseWithStatement",value:function(){this.lex(),this.expect(_tokenizer.TokenType.LPAREN);var a=this.parseExpression();this.expect(_tokenizer.TokenType.RPAREN);var c=this.parseStatement();return new AST.WithStatement({object:a,body:c})}},{key:"parseCatchClause",value:function(){var a=this.startNode();if(this.lex(),this.expect(_tokenizer.TokenType.LPAREN),this.match(_tokenizer.TokenType.RPAREN)||this.match(_tokenizer.TokenType.LPAREN))throw this.createUnexpected(this.lookahead);var c=this.parseBindingTarget();this.expect(_tokenizer.TokenType.RPAREN);var h=this.parseBlock();return this.finishNode(new AST.CatchClause({binding:c,body:h}),a)}},{key:"parseBlock",value:function(){var a=this.startNode();this.expect(_tokenizer.TokenType.LBRACE);for(var c=[];!this.match(_tokenizer.TokenType.RBRACE);)c.push(this.parseStatementListItem());return this.expect(_tokenizer.TokenType.RBRACE),this.finishNode(new AST.Block({statements:c}),a)}},{key:"parseVariableDeclaration",value:function(a){var c=this.startNode(),h=this.lex(),d=h.type===_tokenizer.TokenType.VAR?"var":h.type===_tokenizer.TokenType.CONST?"const":"let",g=this.parseVariableDeclaratorList(a);return this.finishNode(new AST.VariableDeclaration({kind:d,declarators:g}),c)}},{key:"parseVariableDeclaratorList",value:function(a){var c=[];do c.push(this.parseVariableDeclarator(a));while(this.eat(_tokenizer.TokenType.COMMA));return c}},{key:"parseVariableDeclarator",value:function(a){var c=this.startNode();if(this.match(_tokenizer.TokenType.LPAREN))throw this.createUnexpected(this.lookahead);var h=this.allowIn;this.allowIn=!0;var d=this.parseBindingTarget();this.allowIn=h,a&&d.type!=="BindingIdentifier"&&!this.match(_tokenizer.TokenType.ASSIGN)&&this.expect(_tokenizer.TokenType.ASSIGN);var g=null;return this.eat(_tokenizer.TokenType.ASSIGN)&&(g=this.parseAssignmentExpression()),this.finishNode(new AST.VariableDeclarator({binding:d,init:g}),c)}},{key:"isolateCoverGrammar",value:function(a){var c=this.isBindingElement,h=this.isAssignmentTarget,d=this.firstExprError,g=void 0;if(this.isBindingElement=this.isAssignmentTarget=!0,this.firstExprError=null,g=a.call(this),this.firstExprError!==null)throw this.firstExprError;return this.isBindingElement=c,this.isAssignmentTarget=h,this.firstExprError=d,g}},{key:"inheritCoverGrammar",value:function(a){var c=this.isBindingElement,h=this.isAssignmentTarget,d=this.firstExprError,g=void 0;return this.isBindingElement=this.isAssignmentTarget=!0,this.firstExprError=null,g=a.call(this),this.isBindingElement=this.isBindingElement&&c,this.isAssignmentTarget=this.isAssignmentTarget&&h,this.firstExprError=d||this.firstExprError,g}},{key:"parseExpression",value:function(){var a=this.startNode(),c=this.parseAssignmentExpression();if(this.match(_tokenizer.TokenType.COMMA))for(;!this.eof()&&this.match(_tokenizer.TokenType.COMMA);){this.lex();var h=this.parseAssignmentExpression();c=this.finishNode(new AST.BinaryExpression({left:c,operator:",",right:h}),a)}return c}},{key:"finishArrowParams",value:function(a){var c=a.params,h=c===void 0?null:c,d=a.rest,g=d===void 0?null:d;if(a.type!==ARROW_EXPRESSION_PARAMS)if(a.type==="IdentifierExpression")h=[this.targetToBinding(this.transformDestructuring(a))];else throw this.createUnexpected(this.lookahead);return this.copyNode(a,new AST.FormalParameters({items:h,rest:g}))}},{key:"parseArrowExpressionTail",value:function(a,c,h){this.expect(_tokenizer.TokenType.ARROW);var d=this.allowYieldExpression,g=this.allowAwaitExpression,_=this.firstAwaitLocation;this.allowYieldExpression=!1,this.allowAwaitExpression=c,this.firstAwaitLocation=null;var b=void 0;if(this.match(_tokenizer.TokenType.LBRACE)){var $=this.allowIn;this.allowIn=!0,b=this.parseFunctionBody(),this.allowIn=$}else b=this.parseAssignmentExpression();return this.allowYieldExpression=d,this.allowAwaitExpression=g,this.firstAwaitLocation=_,this.finishNode(new AST.ArrowExpression({isAsync:c,params:a,body:b}),h)}},{key:"parseAssignmentExpression",value:function(){return this.isolateCoverGrammar(this.parseAssignmentExpressionOrTarget)}},{key:"parseAssignmentExpressionOrTarget",value:function(){var a=this.startNode();if(this.allowYieldExpression&&this.match(_tokenizer.TokenType.YIELD))return this.isBindingElement=this.isAssignmentTarget=!1,this.parseYieldExpression();var c=this.parseConditionalExpression();if(!this.hasLineTerminatorBeforeNext&&this.match(_tokenizer.TokenType.ARROW)){this.isBindingElement=this.isAssignmentTarget=!1,this.firstExprError=null;var h=c.type===ARROW_EXPRESSION_PARAMS&&c.isAsync;return this.parseArrowExpressionTail(this.finishArrowParams(c),h,a)}var d=!1,g=this.lookahead;switch(g.type){case _tokenizer.TokenType.ASSIGN_BIT_OR:case _tokenizer.TokenType.ASSIGN_BIT_XOR:case _tokenizer.TokenType.ASSIGN_BIT_AND:case _tokenizer.TokenType.ASSIGN_SHL:case _tokenizer.TokenType.ASSIGN_SHR:case _tokenizer.TokenType.ASSIGN_SHR_UNSIGNED:case _tokenizer.TokenType.ASSIGN_ADD:case _tokenizer.TokenType.ASSIGN_SUB:case _tokenizer.TokenType.ASSIGN_MUL:case _tokenizer.TokenType.ASSIGN_DIV:case _tokenizer.TokenType.ASSIGN_MOD:case _tokenizer.TokenType.ASSIGN_EXP:d=!0;break}if(d){if(!this.isAssignmentTarget||!isValidSimpleAssignmentTarget(c))throw this.createError(_errors$1.ErrorMessages.INVALID_LHS_IN_ASSIGNMENT);c=this.transformDestructuring(c)}else if(g.type===_tokenizer.TokenType.ASSIGN){if(!this.isAssignmentTarget)throw this.createError(_errors$1.ErrorMessages.INVALID_LHS_IN_ASSIGNMENT);c=this.transformDestructuring(c)}else return c;this.lex();var _=this.parseAssignmentExpression();this.firstExprError=null;var b=void 0;return g.type===_tokenizer.TokenType.ASSIGN?b=new AST.AssignmentExpression({binding:c,expression:_}):(b=new AST.CompoundAssignmentExpression({binding:c,operator:g.type.name,expression:_}),this.isBindingElement=this.isAssignmentTarget=!1),this.finishNode(b,a)}},{key:"targetToBinding",value:function(a){var c=this;if(a===null)return null;switch(a.type){case"AssignmentTargetIdentifier":return this.copyNode(a,new AST.BindingIdentifier({name:a.name}));case"ArrayAssignmentTarget":return this.copyNode(a,new AST.ArrayBinding({elements:a.elements.map(function(h){return c.targetToBinding(h)}),rest:this.targetToBinding(a.rest)}));case"ObjectAssignmentTarget":return this.copyNode(a,new AST.ObjectBinding({properties:a.properties.map(function(h){return c.targetToBinding(h)}),rest:this.targetToBinding(a.rest)}));case"AssignmentTargetPropertyIdentifier":return this.copyNode(a,new AST.BindingPropertyIdentifier({binding:this.targetToBinding(a.binding),init:a.init}));case"AssignmentTargetPropertyProperty":return this.copyNode(a,new AST.BindingPropertyProperty({name:a.name,binding:this.targetToBinding(a.binding)}));case"AssignmentTargetWithDefault":return this.copyNode(a,new AST.BindingWithDefault({binding:this.targetToBinding(a.binding),init:a.init}))}throw new Error("Not reached")}},{key:"transformDestructuring",value:function(a){var c=this;switch(a.type){case"DataProperty":return this.copyNode(a,new AST.AssignmentTargetPropertyProperty({name:a.name,binding:this.transformDestructuringWithDefault(a.expression)}));case"ShorthandProperty":return this.copyNode(a,new AST.AssignmentTargetPropertyIdentifier({binding:this.copyNode(a,new AST.AssignmentTargetIdentifier({name:a.name.name})),init:null}));case"ObjectExpression":{var h=a.properties.length>0?a.properties[a.properties.length-1]:void 0;return h!=null&&h.type==="SpreadProperty"?this.copyNode(a,new AST.ObjectAssignmentTarget({properties:a.properties.slice(0,-1).map(function(g){return g&&c.transformDestructuringWithDefault(g)}),rest:this.transformDestructuring(h.expression)})):this.copyNode(a,new AST.ObjectAssignmentTarget({properties:a.properties.map(function(g){return g&&c.transformDestructuringWithDefault(g)}),rest:null}))}case"ArrayExpression":{var d=a.elements[a.elements.length-1];return d!=null&&d.type==="SpreadElement"?this.copyNode(a,new AST.ArrayAssignmentTarget({elements:a.elements.slice(0,-1).map(function(g){return g&&c.transformDestructuringWithDefault(g)}),rest:this.copyNode(d.expression,this.transformDestructuring(d.expression))})):this.copyNode(a,new AST.ArrayAssignmentTarget({elements:a.elements.map(function(g){return g&&c.transformDestructuringWithDefault(g)}),rest:null}))}case"IdentifierExpression":return this.copyNode(a,new AST.AssignmentTargetIdentifier({name:a.name}));case"StaticPropertyName":return this.copyNode(a,new AST.AssignmentTargetIdentifier({name:a.value}));case"ComputedMemberExpression":return this.copyNode(a,new AST.ComputedMemberAssignmentTarget({object:a.object,expression:a.expression}));case"StaticMemberExpression":return this.copyNode(a,new AST.StaticMemberAssignmentTarget({object:a.object,property:a.property}));case"ArrayAssignmentTarget":case"ObjectAssignmentTarget":case"ComputedMemberAssignmentTarget":case"StaticMemberAssignmentTarget":case"AssignmentTargetIdentifier":case"AssignmentTargetPropertyIdentifier":case"AssignmentTargetPropertyProperty":case"AssignmentTargetWithDefault":return a}throw new Error("Not reached")}},{key:"transformDestructuringWithDefault",value:function(a){switch(a.type){case"AssignmentExpression":return this.copyNode(a,new AST.AssignmentTargetWithDefault({binding:this.transformDestructuring(a.binding),init:a.expression}))}return this.transformDestructuring(a)}},{key:"lookaheadAssignmentExpression",value:function(){if(this.matchIdentifier())return!0;switch(this.lookahead.type){case _tokenizer.TokenType.ADD:case _tokenizer.TokenType.ASSIGN_DIV:case _tokenizer.TokenType.BIT_NOT:case _tokenizer.TokenType.CLASS:case _tokenizer.TokenType.DEC:case _tokenizer.TokenType.DELETE:case _tokenizer.TokenType.DIV:case _tokenizer.TokenType.FALSE:case _tokenizer.TokenType.FUNCTION:case _tokenizer.TokenType.INC:case _tokenizer.TokenType.LBRACE:case _tokenizer.TokenType.LBRACK:case _tokenizer.TokenType.LPAREN:case _tokenizer.TokenType.NEW:case _tokenizer.TokenType.NOT:case _tokenizer.TokenType.NULL:case _tokenizer.TokenType.NUMBER:case _tokenizer.TokenType.STRING:case _tokenizer.TokenType.SUB:case _tokenizer.TokenType.SUPER:case _tokenizer.TokenType.THIS:case _tokenizer.TokenType.TRUE:case _tokenizer.TokenType.TYPEOF:case _tokenizer.TokenType.VOID:case _tokenizer.TokenType.TEMPLATE:return!0}return!1}},{key:"parseYieldExpression",value:function(){var a=this.startNode();if(this.lex(),this.hasLineTerminatorBeforeNext)return this.finishNode(new AST.YieldExpression({expression:null}),a);var c=!!this.eat(_tokenizer.TokenType.MUL),h=null;(c||this.lookaheadAssignmentExpression())&&(h=this.parseAssignmentExpression());var d=c?AST.YieldGeneratorExpression:AST.YieldExpression;return this.finishNode(new d({expression:h}),a)}},{key:"parseConditionalExpression",value:function(){var a=this.startNode(),c=this.parseBinaryExpression();if(this.firstExprError)return c;if(this.eat(_tokenizer.TokenType.CONDITIONAL)){this.isBindingElement=this.isAssignmentTarget=!1;var h=this.allowIn;this.allowIn=!0;var d=this.isolateCoverGrammar(this.parseAssignmentExpression);this.allowIn=h,this.expect(_tokenizer.TokenType.COLON);var g=this.isolateCoverGrammar(this.parseAssignmentExpression);return this.finishNode(new AST.ConditionalExpression({test:c,consequent:d,alternate:g}),a)}return c}},{key:"isBinaryOperator",value:function(a){switch(a){case _tokenizer.TokenType.OR:case _tokenizer.TokenType.AND:case _tokenizer.TokenType.BIT_OR:case _tokenizer.TokenType.BIT_XOR:case _tokenizer.TokenType.BIT_AND:case _tokenizer.TokenType.EQ:case _tokenizer.TokenType.NE:case _tokenizer.TokenType.EQ_STRICT:case _tokenizer.TokenType.NE_STRICT:case _tokenizer.TokenType.LT:case _tokenizer.TokenType.GT:case _tokenizer.TokenType.LTE:case _tokenizer.TokenType.GTE:case _tokenizer.TokenType.INSTANCEOF:case _tokenizer.TokenType.SHL:case _tokenizer.TokenType.SHR:case _tokenizer.TokenType.SHR_UNSIGNED:case _tokenizer.TokenType.ADD:case _tokenizer.TokenType.SUB:case _tokenizer.TokenType.MUL:case _tokenizer.TokenType.DIV:case _tokenizer.TokenType.MOD:return!0;case _tokenizer.TokenType.IN:return this.allowIn;default:return!1}}},{key:"parseBinaryExpression",value:function(){var a=this,c=this.startNode(),h=this.parseExponentiationExpression();if(this.firstExprError)return h;var d=this.lookahead.type;if(!this.isBinaryOperator(d))return h;this.isBindingElement=this.isAssignmentTarget=!1,this.lex();var g=[];g.push({startState:c,left:h,operator:d,precedence:BinaryPrecedence$1[d.name]}),c=this.startNode();var _=this.isolateCoverGrammar(this.parseExponentiationExpression);for(d=this.lookahead.type;this.isBinaryOperator(d);){for(var b=BinaryPrecedence$1[d.name];g.length&&b<=g[g.length-1].precedence;){var $=g[g.length-1],j=$.operator;h=$.left,g.pop(),c=$.startState,_=this.finishNode(new AST.BinaryExpression({left:h,operator:j.name,right:_}),c)}this.lex(),g.push({startState:c,left:_,operator:d,precedence:b}),c=this.startNode(),_=this.isolateCoverGrammar(this.parseExponentiationExpression),d=this.lookahead.type}return g.reduceRight(function(_e,et){return a.finishNode(new AST.BinaryExpression({left:et.left,operator:et.operator.name,right:_e}),et.startState)},_)}},{key:"parseExponentiationExpression",value:function(){var a=this.startNode(),c=this.lookahead.type===_tokenizer.TokenType.LPAREN,h=this.parseUnaryExpression();if(this.lookahead.type!==_tokenizer.TokenType.EXP)return h;if(h.type==="UnaryExpression"&&!c)throw this.createError(_errors$1.ErrorMessages.INVALID_EXPONENTIATION_LHS);this.lex(),this.isBindingElement=this.isAssignmentTarget=!1;var d=this.isolateCoverGrammar(this.parseExponentiationExpression);return this.finishNode(new AST.BinaryExpression({left:h,operator:"**",right:d}),a)}},{key:"parseUnaryExpression",value:function(){if(this.lookahead.type.klass!==_tokenizer.TokenClass.Punctuator&&this.lookahead.type.klass!==_tokenizer.TokenClass.Keyword)return this.parseUpdateExpression();var a=this.startNode();if(this.allowAwaitExpression&&this.eat(_tokenizer.TokenType.AWAIT)){this.isBindingElement=this.isAssignmentTarget=!1;var c=this.isolateCoverGrammar(this.parseUnaryExpression);return this.finishNode(new AST.AwaitExpression({expression:c}),a)}var h=this.lookahead;if(!isPrefixOperator(h))return this.parseUpdateExpression();this.lex(),this.isBindingElement=this.isAssignmentTarget=!1;var d=void 0;if(isUpdateOperator(h)){var g=this.getLocation(),_=this.isolateCoverGrammar(this.parseUnaryExpression);if(!isValidSimpleAssignmentTarget(_))throw this.createErrorWithLocation(g,_errors$1.ErrorMessages.INVALID_UPDATE_OPERAND);_=this.transformDestructuring(_),d=new AST.UpdateExpression({isPrefix:!0,operator:h.value,operand:_})}else{var b=this.isolateCoverGrammar(this.parseUnaryExpression);d=new AST.UnaryExpression({operator:h.value,operand:b})}return this.finishNode(d,a)}},{key:"parseUpdateExpression",value:function(){var a=this.getLocation(),c=this.startNode(),h=this.parseLeftHandSideExpression({allowCall:!0});if(this.firstExprError||this.hasLineTerminatorBeforeNext)return h;var d=this.lookahead;if(!isUpdateOperator(d))return h;if(this.lex(),this.isBindingElement=this.isAssignmentTarget=!1,!isValidSimpleAssignmentTarget(h))throw this.createErrorWithLocation(a,_errors$1.ErrorMessages.INVALID_UPDATE_OPERAND);return h=this.transformDestructuring(h),this.finishNode(new AST.UpdateExpression({isPrefix:!1,operator:d.value,operand:h}),c)}},{key:"parseLeftHandSideExpression",value:function(a){var c=this,h=a.allowCall,d=this.startNode(),g=this.allowIn;this.allowIn=!0;var _=void 0,b=this.lookahead;if(this.eat(_tokenizer.TokenType.SUPER))if(this.isBindingElement=!1,this.isAssignmentTarget=!1,_=this.finishNode(new AST.Super,d),this.match(_tokenizer.TokenType.LPAREN))if(h)_=this.finishNode(new AST.CallExpression({callee:_,arguments:this.parseArgumentList().args}),d);else throw this.createUnexpected(b);else if(this.match(_tokenizer.TokenType.LBRACK))_=this.finishNode(new AST.ComputedMemberExpression({object:_,expression:this.parseComputedMember()}),d),this.isAssignmentTarget=!0;else if(this.match(_tokenizer.TokenType.PERIOD))_=this.finishNode(new AST.StaticMemberExpression({object:_,property:this.parseStaticMember()}),d),this.isAssignmentTarget=!0;else throw this.createUnexpected(b);else if(this.match(_tokenizer.TokenType.NEW))this.isBindingElement=this.isAssignmentTarget=!1,_=this.parseNewExpression();else if(this.match(_tokenizer.TokenType.ASYNC)){if(_=this.parsePrimaryExpression(),_.type==="IdentifierExpression"&&h&&!this.hasLineTerminatorBeforeNext){if(this.matchIdentifier()){var $=this.startNode(),j=this.allowAwaitExpression;this.allowAwaitExpression=!0;var _e=this.parseBindingIdentifier();return this.allowAwaitExpression=j,this.ensureArrow(),this.finishNode({type:ARROW_EXPRESSION_PARAMS,params:[_e],rest:null,isAsync:!0},$)}if(this.match(_tokenizer.TokenType.LPAREN)){var et=this.startNode(),tt=this.firstAwaitLocation;this.firstAwaitLocation=null;var nt=this.parseArgumentList(),st=nt.args,rt=nt.locationFollowingFirstSpread;if(this.isBindingElement&&!this.hasLineTerminatorBeforeNext&&this.match(_tokenizer.TokenType.ARROW)){if(rt!==null)throw this.createErrorWithLocation(rt,_errors$1.ErrorMessages.UNEXPECTED_TOKEN(","));if(this.firstAwaitLocation!==null)throw this.createErrorWithLocation(this.firstAwaitLocation,_errors$1.ErrorMessages.NO_AWAIT_IN_ASYNC_PARAMS);var it=null;if(st.length>0&&st[st.length-1].type==="SpreadElement"){if(it=this.targetToBinding(this.transformDestructuringWithDefault(st[st.length-1].expression)),it.init!=null)throw this.createError(_errors$1.ErrorMessages.UNEXPECTED_REST_PARAMETERS_INITIALIZATION);st=st.slice(0,-1)}var at=st.map(function(ot){return c.targetToBinding(c.transformDestructuringWithDefault(ot))});return this.finishNode({type:ARROW_EXPRESSION_PARAMS,params:at,rest:it,isAsync:!0},et)}this.firstAwaitLocation=tt||this.firstAwaitLocation,this.isBindingElement=this.isAssignmentTarget=!1,_=this.finishNode(new AST.CallExpression({callee:_,arguments:st}),d)}}}else if(_=this.parsePrimaryExpression(),this.firstExprError)return _;for(;;)if(h&&this.match(_tokenizer.TokenType.LPAREN))this.isBindingElement=this.isAssignmentTarget=!1,_=this.finishNode(new AST.CallExpression({callee:_,arguments:this.parseArgumentList().args}),d);else if(this.match(_tokenizer.TokenType.LBRACK))this.isBindingElement=!1,this.isAssignmentTarget=!0,_=this.finishNode(new AST.ComputedMemberExpression({object:_,expression:this.parseComputedMember()}),d);else if(this.match(_tokenizer.TokenType.PERIOD))this.isBindingElement=!1,this.isAssignmentTarget=!0,_=this.finishNode(new AST.StaticMemberExpression({object:_,property:this.parseStaticMember()}),d);else if(this.match(_tokenizer.TokenType.TEMPLATE))this.isBindingElement=this.isAssignmentTarget=!1,_=this.finishNode(new AST.TemplateExpression({tag:_,elements:this.parseTemplateElements()}),d);else break;return this.allowIn=g,_}},{key:"parseTemplateElements",value:function(){var a=this.startNode(),c=this.lookahead;if(c.tail)return this.lex(),[this.finishNode(new AST.TemplateElement({rawValue:c.slice.text.slice(1,-1)}),a)];for(var h=[this.finishNode(new AST.TemplateElement({rawValue:this.lex().slice.text.slice(1,-2)}),a)];;){if(h.push(this.parseExpression()),!this.match(_tokenizer.TokenType.RBRACE))throw this.createILLEGAL();if(this.index=this.startIndex,this.line=this.startLine,this.lineStart=this.startLineStart,this.lookahead=this.scanTemplateElement(),a=this.startNode(),c=this.lex(),c.tail)return h.push(this.finishNode(new AST.TemplateElement({rawValue:c.slice.text.slice(1,-1)}),a)),h;h.push(this.finishNode(new AST.TemplateElement({rawValue:c.slice.text.slice(1,-2)}),a))}}},{key:"parseStaticMember",value:function(){if(this.lex(),this.lookahead.type.klass.isIdentifierName)return this.lex().value;throw this.createUnexpected(this.lookahead)}},{key:"parseComputedMember",value:function(){this.lex();var a=this.parseExpression();return this.expect(_tokenizer.TokenType.RBRACK),a}},{key:"parseNewExpression",value:function(){var a=this,c=this.startNode();if(this.lex(),this.eat(_tokenizer.TokenType.PERIOD))return this.expectContextualKeyword("target"),this.finishNode(new AST.NewTargetExpression,c);var h=this.isolateCoverGrammar(function(){return a.parseLeftHandSideExpression({allowCall:!1})});return this.finishNode(new AST.NewExpression({callee:h,arguments:this.match(_tokenizer.TokenType.LPAREN)?this.parseArgumentList().args:[]}),c)}},{key:"parseRegexFlags",value:function(a){for(var c=!1,h=!1,d=!1,g=!1,_=!1,b=!1,$=0;$1?e-1:0),a=1;a1&&c.slice(1).forEach(function(h){a.addError(s(h))})}),this}},{key:"enforceConflictingLexicallyDeclaredNames",value:function(s,a){var c=this;return this.lexicallyDeclaredNames.forEachEntry(function(h,d){s.has(d)&&h.forEach(function(g){c.addError(a(g))})}),this}},{key:"observeFunctionDeclaration",value:function(){return this.observeVarBoundary(),addEach(this.functionDeclarationNames,this.boundNames),this.boundNames=new _multimap2.default,this}},{key:"functionDeclarationNamesAreLexical",value:function(){return addEach(this.lexicallyDeclaredNames,this.functionDeclarationNames),this.functionDeclarationNames=new _multimap2.default,this}},{key:"observeVarDeclaration",value:function(){return addEach(this.varDeclaredNames,this.boundNames),this.boundNames=new _multimap2.default,this}},{key:"recordForOfVars",value:function(){var s=this;return this.varDeclaredNames.forEach(function(a){s.forOfVarDeclaredNames.push(a)}),this}},{key:"observeVarBoundary",value:function(){return this.lexicallyDeclaredNames=new _multimap2.default,this.functionDeclarationNames=new _multimap2.default,this.varDeclaredNames=new _multimap2.default,this.forOfVarDeclaredNames=[],this}},{key:"exportName",value:function(s,a){return this.exportedNames.set(s,a),this}},{key:"exportDeclaredNames",value:function(){return addEach(this.exportedNames,this.lexicallyDeclaredNames,this.varDeclaredNames),addEach(this.exportedBindings,this.lexicallyDeclaredNames,this.varDeclaredNames),this}},{key:"exportBinding",value:function(s,a){return this.exportedBindings.set(s,a),this}},{key:"clearExportedBindings",value:function(){return this.exportedBindings=new _multimap2.default,this}},{key:"observeYieldExpression",value:function(s){return this.yieldExpressions.push(s),this}},{key:"clearYieldExpressions",value:function(){return this.yieldExpressions=[],this}},{key:"observeAwaitExpression",value:function(s){return this.awaitExpressions.push(s),this}},{key:"clearAwaitExpressions",value:function(){return this.awaitExpressions=[],this}},{key:"addError",value:function(s){return this.errors.push(s),this}},{key:"addStrictError",value:function(s){return this.strictErrors.push(s),this}},{key:"enforceStrictErrors",value:function(){return[].push.apply(this.errors,this.strictErrors),this.strictErrors=[],this}},{key:"concat",value:function(s){return this===identity?s:s===identity?this:([].push.apply(this.errors,s.errors),[].push.apply(this.strictErrors,s.strictErrors),[].push.apply(this.usedLabelNames,s.usedLabelNames),[].push.apply(this.freeBreakStatements,s.freeBreakStatements),[].push.apply(this.freeContinueStatements,s.freeContinueStatements),[].push.apply(this.freeLabeledBreakStatements,s.freeLabeledBreakStatements),[].push.apply(this.freeLabeledContinueStatements,s.freeLabeledContinueStatements),[].push.apply(this.newTargetExpressions,s.newTargetExpressions),addEach(this.boundNames,s.boundNames),addEach(this.lexicallyDeclaredNames,s.lexicallyDeclaredNames),addEach(this.functionDeclarationNames,s.functionDeclarationNames),addEach(this.varDeclaredNames,s.varDeclaredNames),[].push.apply(this.forOfVarDeclaredNames,s.forOfVarDeclaredNames),addEach(this.exportedNames,s.exportedNames),addEach(this.exportedBindings,s.exportedBindings),[].push.apply(this.superCallExpressions,s.superCallExpressions),[].push.apply(this.superCallExpressionsInConstructorMethod,s.superCallExpressionsInConstructorMethod),[].push.apply(this.superPropertyExpressions,s.superPropertyExpressions),[].push.apply(this.yieldExpressions,s.yieldExpressions),[].push.apply(this.awaitExpressions,s.awaitExpressions),this)}}],[{key:"empty",value:function(){return identity}}]),o}();identity=new EarlyErrorState;Object.getOwnPropertyNames(EarlyErrorState.prototype).forEach(function(o){o!=="constructor"&&Object.defineProperty(identity,o,{value:function(){return EarlyErrorState.prototype[o].apply(new EarlyErrorState,arguments)},enumerable:!1,writable:!0,configurable:!0})});earlyErrorState.EarlyError=function(o){_inherits$4(e,o);function e(s,a){_classCallCheck$7(this,e);var c=_possibleConstructorReturn$4(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,a));return c.node=s,c.message=a,c}return e}(Error);Object.defineProperty(earlyErrors,"__esModule",{value:!0});earlyErrors.EarlyErrorChecker=void 0;var _createClass$5=function(){function o(e,s){for(var a=0;a1&&s.slice(1).forEach(function(a){e=e.addError(new _earlyErrorState.EarlyError(a,"Duplicate constructor method in class"))}),e}var SUPERCALL_ERROR=function(e){return new _earlyErrorState.EarlyError(e,_errors.ErrorMessages.ILLEGAL_SUPER_CALL)},SUPERPROPERTY_ERROR=function(e){return new _earlyErrorState.EarlyError(e,"Member access on super must be in a method")},DUPLICATE_BINDING=function(e){return new _earlyErrorState.EarlyError(e,"Duplicate binding "+JSON.stringify(e.name))},FREE_CONTINUE=function(e){return new _earlyErrorState.EarlyError(e,"Continue statement must be nested within an iteration statement")},UNBOUND_CONTINUE=function(e){return new _earlyErrorState.EarlyError(e,"Continue statement must be nested within an iteration statement with label "+JSON.stringify(e.label))},FREE_BREAK=function(e){return new _earlyErrorState.EarlyError(e,"Break statement must be nested within an iteration statement or a switch statement")},UNBOUND_BREAK=function(e){return new _earlyErrorState.EarlyError(e,"Break statement must be nested within a statement with label "+JSON.stringify(e.label))};earlyErrors.EarlyErrorChecker=function(o){_inherits$3(e,o);function e(){return _classCallCheck$6(this,e),_possibleConstructorReturn$3(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,_earlyErrorState.EarlyErrorState))}return _createClass$5(e,[{key:"reduceAssignmentExpression",value:function(){return _get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceAssignmentExpression",this).apply(this,arguments).clearBoundNames()}},{key:"reduceAssignmentTargetIdentifier",value:function(a){var c=this.identity;return(a.name==="eval"||a.name==="arguments"||(0,_utils.isStrictModeReservedWord)(a.name))&&(c=c.addStrictError(new _earlyErrorState.EarlyError(a,"The identifier "+JSON.stringify(a.name)+" must not be in binding position in strict mode"))),c}},{key:"reduceArrowExpression",value:function(a,c){var h=c.params,d=c.body,g=a.params.rest==null&&a.params.items.every(function(b){return b.type==="BindingIdentifier"});h=h.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),a.body.type==="FunctionBody"&&(d=d.enforceConflictingLexicallyDeclaredNames(h.lexicallyDeclaredNames,DUPLICATE_BINDING),isStrictFunctionBody(a.body)&&(h=h.enforceStrictErrors(),d=d.enforceStrictErrors())),h.yieldExpressions.forEach(function(b){h=h.addError(new _earlyErrorState.EarlyError(b,"Arrow parameters must not contain yield expressions"))}),h.awaitExpressions.forEach(function(b){h=h.addError(new _earlyErrorState.EarlyError(b,"Arrow parameters must not contain await expressions"))});var _=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceArrowExpression",this).call(this,a,{params:h,body:d});return!g&&a.body.type==="FunctionBody"&&isStrictFunctionBody(a.body)&&(_=_.addError(new _earlyErrorState.EarlyError(a,'Functions with non-simple parameter lists may not contain a "use strict" directive'))),_=_.clearYieldExpressions(),_=_.clearAwaitExpressions(),_=_.observeVarBoundary(),_}},{key:"reduceAwaitExpression",value:function(a,c){var h=c.expression;return h.observeAwaitExpression(a)}},{key:"reduceBindingIdentifier",value:function(a){var c=this.identity;return(a.name==="eval"||a.name==="arguments"||(0,_utils.isStrictModeReservedWord)(a.name))&&(c=c.addStrictError(new _earlyErrorState.EarlyError(a,"The identifier "+JSON.stringify(a.name)+" must not be in binding position in strict mode"))),c=c.bindName(a.name,a),c}},{key:"reduceBlock",value:function(){var a=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceBlock",this).apply(this,arguments);return a=a.functionDeclarationNamesAreLexical(),a=a.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),a=a.enforceConflictingLexicallyDeclaredNames(a.varDeclaredNames,DUPLICATE_BINDING),a=a.observeLexicalBoundary(),a}},{key:"reduceBreakStatement",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceBreakStatement",this).apply(this,arguments);return c=a.label==null?c.addFreeBreakStatement(a):c.addFreeLabeledBreakStatement(a),c}},{key:"reduceCallExpression",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceCallExpression",this).apply(this,arguments);return a.callee.type==="Super"&&(c=c.observeSuperCallExpression(a)),c}},{key:"reduceCatchClause",value:function(a,c){var h=c.binding,d=c.body;h=h.observeLexicalDeclaration(),h=h.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),h=h.enforceConflictingLexicallyDeclaredNames(d.previousLexicallyDeclaredNames,DUPLICATE_BINDING),h.lexicallyDeclaredNames.forEachEntry(function(_,b){d.varDeclaredNames.has(b)&&d.varDeclaredNames.get(b).forEach(function($){d.forOfVarDeclaredNames.indexOf($)>=0&&(h=h.addError(DUPLICATE_BINDING($)))})});var g=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceCatchClause",this).call(this,a,{binding:h,body:d});return g=g.observeLexicalBoundary(),g}},{key:"reduceClassDeclaration",value:function(a,c){var h=c.name,d=c.super,g=c.elements,_=h.enforceStrictErrors(),b=this.append.apply(this,_toConsumableArray$3(g));return b=b.enforceStrictErrors(),a.super!=null&&(d=d.enforceStrictErrors(),_=this.append(_,d),b=b.clearSuperCallExpressionsInConstructorMethod()),_=this.append(_,b),_=enforceDuplicateConstructorMethods(a,_),_=_.observeLexicalDeclaration(),_}},{key:"reduceClassElement",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceClassElement",this).apply(this,arguments);return!a.isStatic&&isSpecialMethod(a.method)&&(c=c.addError(new _earlyErrorState.EarlyError(a,_errors.ErrorMessages.ILLEGAL_CONSTRUCTORS))),a.isStatic&&a.method.name.type==="StaticPropertyName"&&a.method.name.value==="prototype"&&(c=c.addError(new _earlyErrorState.EarlyError(a,'Static class methods cannot be named "prototype"'))),c}},{key:"reduceClassExpression",value:function(a,c){var h=c.name,d=c.super,g=c.elements,_=a.name==null?this.identity:h.enforceStrictErrors(),b=this.append.apply(this,_toConsumableArray$3(g));return b=b.enforceStrictErrors(),a.super!=null&&(d=d.enforceStrictErrors(),_=this.append(_,d),b=b.clearSuperCallExpressionsInConstructorMethod()),_=this.append(_,b),_=enforceDuplicateConstructorMethods(a,_),_=_.clearBoundNames(),_}},{key:"reduceCompoundAssignmentExpression",value:function(){return _get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceCompoundAssignmentExpression",this).apply(this,arguments).clearBoundNames()}},{key:"reduceComputedMemberExpression",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceComputedMemberExpression",this).apply(this,arguments);return a.object.type==="Super"&&(c=c.observeSuperPropertyExpression(a)),c}},{key:"reduceContinueStatement",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceContinueStatement",this).apply(this,arguments);return c=a.label==null?c.addFreeContinueStatement(a):c.addFreeLabeledContinueStatement(a),c}},{key:"reduceDoWhileStatement",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceDoWhileStatement",this).apply(this,arguments);return isLabelledFunction(a.body)&&(c=c.addError(new _earlyErrorState.EarlyError(a.body,"The body of a do-while statement must not be a labeled function declaration"))),c=c.clearFreeContinueStatements(),c=c.clearFreeBreakStatements(),c}},{key:"reduceExport",value:function(){var a=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceExport",this).apply(this,arguments);return a=a.functionDeclarationNamesAreLexical(),a=a.exportDeclaredNames(),a}},{key:"reduceExportFrom",value:function(){var a=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceExportFrom",this).apply(this,arguments);return a=a.clearExportedBindings(),a}},{key:"reduceExportFromSpecifier",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceExportFromSpecifier",this).apply(this,arguments);return c=c.exportName(a.exportedName||a.name,a),c=c.exportBinding(a.name,a),c}},{key:"reduceExportLocalSpecifier",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceExportLocalSpecifier",this).apply(this,arguments);return c=c.exportName(a.exportedName||a.name.name,a),c=c.exportBinding(a.name.name,a),c}},{key:"reduceExportDefault",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceExportDefault",this).apply(this,arguments);return c=c.functionDeclarationNamesAreLexical(),c=c.exportName("default",a),c}},{key:"reduceFormalParameters",value:function(){var a=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceFormalParameters",this).apply(this,arguments);return a=a.observeLexicalDeclaration(),a}},{key:"reduceForStatement",value:function(a,c){var h=c.init,d=c.test,g=c.update,_=c.body;h!=null&&(h=h.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),h=h.enforceConflictingLexicallyDeclaredNames(_.varDeclaredNames,DUPLICATE_BINDING));var b=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceForStatement",this).call(this,a,{init:h,test:d,update:g,body:_});return a.init!=null&&a.init.type==="VariableDeclaration"&&a.init.kind==="const"&&a.init.declarators.forEach(function($){$.init==null&&(b=b.addError(new _earlyErrorState.EarlyError($,"Constant lexical declarations must have an initialiser")))}),isLabelledFunction(a.body)&&(b=b.addError(new _earlyErrorState.EarlyError(a.body,"The body of a for statement must not be a labeled function declaration"))),b=b.clearFreeContinueStatements(),b=b.clearFreeBreakStatements(),b=b.observeLexicalBoundary(),b}},{key:"reduceForInStatement",value:function(a,c){var h=c.left,d=c.right,g=c.body;h=h.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),h=h.enforceConflictingLexicallyDeclaredNames(g.varDeclaredNames,DUPLICATE_BINDING);var _=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceForInStatement",this).call(this,a,{left:h,right:d,body:g});return isLabelledFunction(a.body)&&(_=_.addError(new _earlyErrorState.EarlyError(a.body,"The body of a for-in statement must not be a labeled function declaration"))),_=_.clearFreeContinueStatements(),_=_.clearFreeBreakStatements(),_=_.observeLexicalBoundary(),_}},{key:"reduceForOfStatement",value:function(a,c){var h=c.left,d=c.right,g=c.body;h=h.recordForOfVars(),h=h.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),h=h.enforceConflictingLexicallyDeclaredNames(g.varDeclaredNames,DUPLICATE_BINDING);var _=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceForOfStatement",this).call(this,a,{left:h,right:d,body:g});return isLabelledFunction(a.body)&&(_=_.addError(new _earlyErrorState.EarlyError(a.body,"The body of a for-of statement must not be a labeled function declaration"))),_=_.clearFreeContinueStatements(),_=_.clearFreeBreakStatements(),_=_.observeLexicalBoundary(),_}},{key:"reduceForAwaitStatement",value:function(a,c){var h=c.left,d=c.right,g=c.body;h=h.recordForOfVars(),h=h.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),h=h.enforceConflictingLexicallyDeclaredNames(g.varDeclaredNames,DUPLICATE_BINDING);var _=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceForOfStatement",this).call(this,a,{left:h,right:d,body:g});return isLabelledFunction(a.body)&&(_=_.addError(new _earlyErrorState.EarlyError(a.body,"The body of a for-await statement must not be a labeled function declaration"))),_=_.clearFreeContinueStatements(),_=_.clearFreeBreakStatements(),_=_.observeLexicalBoundary(),_}},{key:"reduceFunctionBody",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceFunctionBody",this).apply(this,arguments);return c=c.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),c=c.enforceConflictingLexicallyDeclaredNames(c.varDeclaredNames,DUPLICATE_BINDING),c=c.enforceFreeContinueStatementErrors(FREE_CONTINUE),c=c.enforceFreeLabeledContinueStatementErrors(UNBOUND_CONTINUE),c=c.enforceFreeBreakStatementErrors(FREE_BREAK),c=c.enforceFreeLabeledBreakStatementErrors(UNBOUND_BREAK),c=c.clearUsedLabelNames(),c=c.clearYieldExpressions(),c=c.clearAwaitExpressions(),isStrictFunctionBody(a)&&(c=c.enforceStrictErrors()),c}},{key:"reduceFunctionDeclaration",value:function(a,c){var h=c.name,d=c.params,g=c.body,_=a.params.rest==null&&a.params.items.every(function(j){return j.type==="BindingIdentifier"}),b=!_||a.isGenerator?"addError":"addStrictError";d.lexicallyDeclaredNames.forEachEntry(function(j){j.length>1&&j.slice(1).forEach(function(_e){d=d[b](DUPLICATE_BINDING(_e))})}),g=g.enforceConflictingLexicallyDeclaredNames(d.lexicallyDeclaredNames,DUPLICATE_BINDING),g=g.enforceSuperCallExpressions(SUPERCALL_ERROR),g=g.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR),d=d.enforceSuperCallExpressions(SUPERCALL_ERROR),d=d.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR),a.isGenerator&&d.yieldExpressions.forEach(function(j){d=d.addError(new _earlyErrorState.EarlyError(j,"Generator parameters must not contain yield expressions"))}),a.isAsync&&d.awaitExpressions.forEach(function(j){d=d.addError(new _earlyErrorState.EarlyError(j,"Async function parameters must not contain await expressions"))}),d=d.clearNewTargetExpressions(),g=g.clearNewTargetExpressions(),isStrictFunctionBody(a.body)&&(d=d.enforceStrictErrors(),g=g.enforceStrictErrors());var $=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceFunctionDeclaration",this).call(this,a,{name:h,params:d,body:g});return!_&&isStrictFunctionBody(a.body)&&($=$.addError(new _earlyErrorState.EarlyError(a,'Functions with non-simple parameter lists may not contain a "use strict" directive'))),$=$.clearYieldExpressions(),$=$.clearAwaitExpressions(),$=$.observeFunctionDeclaration(),$}},{key:"reduceFunctionExpression",value:function(a,c){var h=c.name,d=c.params,g=c.body,_=a.params.rest==null&&a.params.items.every(function(j){return j.type==="BindingIdentifier"}),b=!_||a.isGenerator?"addError":"addStrictError";d.lexicallyDeclaredNames.forEachEntry(function(j,_e){j.length>1&&j.slice(1).forEach(function(et){d=d[b](new _earlyErrorState.EarlyError(et,"Duplicate binding "+JSON.stringify(_e)))})}),g=g.enforceConflictingLexicallyDeclaredNames(d.lexicallyDeclaredNames,DUPLICATE_BINDING),g=g.enforceSuperCallExpressions(SUPERCALL_ERROR),g=g.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR),d=d.enforceSuperCallExpressions(SUPERCALL_ERROR),d=d.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR),a.isGenerator&&d.yieldExpressions.forEach(function(j){d=d.addError(new _earlyErrorState.EarlyError(j,"Generator parameters must not contain yield expressions"))}),a.isAsync&&d.awaitExpressions.forEach(function(j){d=d.addError(new _earlyErrorState.EarlyError(j,"Async function parameters must not contain await expressions"))}),d=d.clearNewTargetExpressions(),g=g.clearNewTargetExpressions(),isStrictFunctionBody(a.body)&&(d=d.enforceStrictErrors(),g=g.enforceStrictErrors());var $=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceFunctionExpression",this).call(this,a,{name:h,params:d,body:g});return!_&&isStrictFunctionBody(a.body)&&($=$.addError(new _earlyErrorState.EarlyError(a,'Functions with non-simple parameter lists may not contain a "use strict" directive'))),$=$.clearBoundNames(),$=$.clearYieldExpressions(),$=$.clearAwaitExpressions(),$=$.observeVarBoundary(),$}},{key:"reduceGetter",value:function(a,c){var h=c.name,d=c.body;d=d.enforceSuperCallExpressions(SUPERCALL_ERROR),d=d.clearSuperPropertyExpressions(),d=d.clearNewTargetExpressions(),isStrictFunctionBody(a.body)&&(d=d.enforceStrictErrors());var g=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceGetter",this).call(this,a,{name:h,body:d});return g=g.observeVarBoundary(),g}},{key:"reduceIdentifierExpression",value:function(a){var c=this.identity;return(0,_utils.isStrictModeReservedWord)(a.name)&&(c=c.addStrictError(new _earlyErrorState.EarlyError(a,"The identifier "+JSON.stringify(a.name)+" must not be in expression position in strict mode"))),c}},{key:"reduceIfStatement",value:function(a,c){var h=c.test,d=c.consequent,g=c.alternate;return isLabelledFunction(a.consequent)&&(d=d.addError(new _earlyErrorState.EarlyError(a.consequent,"The consequent of an if statement must not be a labeled function declaration"))),a.alternate!=null&&isLabelledFunction(a.alternate)&&(g=g.addError(new _earlyErrorState.EarlyError(a.alternate,"The alternate of an if statement must not be a labeled function declaration"))),a.consequent.type==="FunctionDeclaration"&&(d=d.addStrictError(new _earlyErrorState.EarlyError(a.consequent,"FunctionDeclarations in IfStatements are disallowed in strict mode")),d=d.observeLexicalBoundary()),a.alternate!=null&&a.alternate.type==="FunctionDeclaration"&&(g=g.addStrictError(new _earlyErrorState.EarlyError(a.alternate,"FunctionDeclarations in IfStatements are disallowed in strict mode")),g=g.observeLexicalBoundary()),_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceIfStatement",this).call(this,a,{test:h,consequent:d,alternate:g})}},{key:"reduceImport",value:function(){var a=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceImport",this).apply(this,arguments);return a=a.observeLexicalDeclaration(),a}},{key:"reduceImportNamespace",value:function(){var a=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceImportNamespace",this).apply(this,arguments);return a=a.observeLexicalDeclaration(),a}},{key:"reduceLabeledStatement",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceLabeledStatement",this).apply(this,arguments);return(a.label==="yield"||(0,_utils.isStrictModeReservedWord)(a.label))&&(c=c.addStrictError(new _earlyErrorState.EarlyError(a,"The identifier "+JSON.stringify(a.label)+" must not be in label position in strict mode"))),c.usedLabelNames.indexOf(a.label)>=0&&(c=c.addError(new _earlyErrorState.EarlyError(a,"Label "+JSON.stringify(a.label)+" has already been declared"))),a.body.type==="FunctionDeclaration"&&(c=c.addStrictError(new _earlyErrorState.EarlyError(a,"Labeled FunctionDeclarations are disallowed in strict mode"))),c=isIterationStatement(a.body)?c.observeIterationLabel(a.label):c.observeNonIterationLabel(a.label),c}},{key:"reduceLiteralRegExpExpression",value:function(){var a=this.identity;return a}},{key:"reduceMethod",value:function(a,c){var h=c.name,d=c.params,g=c.body,_=a.params.rest==null&&a.params.items.every(function($){return $.type==="BindingIdentifier"});d=d.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),g=g.enforceConflictingLexicallyDeclaredNames(d.lexicallyDeclaredNames,DUPLICATE_BINDING),a.name.type==="StaticPropertyName"&&a.name.value==="constructor"?(g=g.observeConstructorMethod(),d=d.observeConstructorMethod()):(g=g.enforceSuperCallExpressions(SUPERCALL_ERROR),d=d.enforceSuperCallExpressions(SUPERCALL_ERROR)),a.isGenerator&&d.yieldExpressions.forEach(function($){d=d.addError(new _earlyErrorState.EarlyError($,"Generator parameters must not contain yield expressions"))}),a.isAsync&&d.awaitExpressions.forEach(function($){d=d.addError(new _earlyErrorState.EarlyError($,"Async function parameters must not contain await expressions"))}),g=g.clearSuperPropertyExpressions(),d=d.clearSuperPropertyExpressions(),d=d.clearNewTargetExpressions(),g=g.clearNewTargetExpressions(),isStrictFunctionBody(a.body)&&(d=d.enforceStrictErrors(),g=g.enforceStrictErrors());var b=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceMethod",this).call(this,a,{name:h,params:d,body:g});return!_&&isStrictFunctionBody(a.body)&&(b=b.addError(new _earlyErrorState.EarlyError(a,'Functions with non-simple parameter lists may not contain a "use strict" directive'))),b=b.clearYieldExpressions(),b=b.clearAwaitExpressions(),b=b.observeVarBoundary(),b}},{key:"reduceModule",value:function(){var a=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceModule",this).apply(this,arguments);return a=a.functionDeclarationNamesAreLexical(),a=a.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),a=a.enforceConflictingLexicallyDeclaredNames(a.varDeclaredNames,DUPLICATE_BINDING),a.exportedNames.forEachEntry(function(c,h){c.length>1&&c.slice(1).forEach(function(d){a=a.addError(new _earlyErrorState.EarlyError(d,"Duplicate export "+JSON.stringify(h)))})}),a.exportedBindings.forEachEntry(function(c,h){!a.lexicallyDeclaredNames.has(h)&&!a.varDeclaredNames.has(h)&&c.forEach(function(d){a=a.addError(new _earlyErrorState.EarlyError(d,"Exported binding "+JSON.stringify(h)+" is not declared"))})}),a.newTargetExpressions.forEach(function(c){a=a.addError(new _earlyErrorState.EarlyError(c,"new.target must be within function (but not arrow expression) code"))}),a=a.enforceFreeContinueStatementErrors(FREE_CONTINUE),a=a.enforceFreeLabeledContinueStatementErrors(UNBOUND_CONTINUE),a=a.enforceFreeBreakStatementErrors(FREE_BREAK),a=a.enforceFreeLabeledBreakStatementErrors(UNBOUND_BREAK),a=a.enforceSuperCallExpressions(SUPERCALL_ERROR),a=a.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR),a=a.enforceStrictErrors(),a}},{key:"reduceNewTargetExpression",value:function(a){return this.identity.observeNewTargetExpression(a)}},{key:"reduceObjectExpression",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceObjectExpression",this).apply(this,arguments);c=c.enforceSuperCallExpressionsInConstructorMethod(SUPERCALL_ERROR);var h=a.properties.filter(function(d){return d.type==="DataProperty"&&d.name.type==="StaticPropertyName"&&d.name.value==="__proto__"});return h.slice(1).forEach(function(d){c=c.addError(new _earlyErrorState.EarlyError(d,"Duplicate __proto__ property in object literal not allowed"))}),c}},{key:"reduceUpdateExpression",value:function(){var a=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceUpdateExpression",this).apply(this,arguments);return a=a.clearBoundNames(),a}},{key:"reduceUnaryExpression",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceUnaryExpression",this).apply(this,arguments);return a.operator==="delete"&&a.operand.type==="IdentifierExpression"&&(c=c.addStrictError(new _earlyErrorState.EarlyError(a,"Identifier expressions must not be deleted in strict mode"))),c}},{key:"reduceScript",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceScript",this).apply(this,arguments);return c=c.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),c=c.enforceConflictingLexicallyDeclaredNames(c.varDeclaredNames,DUPLICATE_BINDING),c.newTargetExpressions.forEach(function(h){c=c.addError(new _earlyErrorState.EarlyError(h,"new.target must be within function (but not arrow expression) code"))}),c=c.enforceFreeContinueStatementErrors(FREE_CONTINUE),c=c.enforceFreeLabeledContinueStatementErrors(UNBOUND_CONTINUE),c=c.enforceFreeBreakStatementErrors(FREE_BREAK),c=c.enforceFreeLabeledBreakStatementErrors(UNBOUND_BREAK),c=c.enforceSuperCallExpressions(SUPERCALL_ERROR),c=c.enforceSuperPropertyExpressions(SUPERPROPERTY_ERROR),isStrictFunctionBody(a)&&(c=c.enforceStrictErrors()),c}},{key:"reduceSetter",value:function(a,c){var h=c.name,d=c.param,g=c.body,_=a.param.type==="BindingIdentifier";d=d.observeLexicalDeclaration(),d=d.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),g=g.enforceConflictingLexicallyDeclaredNames(d.lexicallyDeclaredNames,DUPLICATE_BINDING),d=d.enforceSuperCallExpressions(SUPERCALL_ERROR),g=g.enforceSuperCallExpressions(SUPERCALL_ERROR),d=d.clearSuperPropertyExpressions(),g=g.clearSuperPropertyExpressions(),d=d.clearNewTargetExpressions(),g=g.clearNewTargetExpressions(),isStrictFunctionBody(a.body)&&(d=d.enforceStrictErrors(),g=g.enforceStrictErrors());var b=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceSetter",this).call(this,a,{name:h,param:d,body:g});return!_&&isStrictFunctionBody(a.body)&&(b=b.addError(new _earlyErrorState.EarlyError(a,'Functions with non-simple parameter lists may not contain a "use strict" directive'))),b=b.observeVarBoundary(),b}},{key:"reduceStaticMemberExpression",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceStaticMemberExpression",this).apply(this,arguments);return a.object.type==="Super"&&(c=c.observeSuperPropertyExpression(a)),c}},{key:"reduceSwitchStatement",value:function(a,c){var h=c.discriminant,d=c.cases,g=this.append.apply(this,_toConsumableArray$3(d));g=g.functionDeclarationNamesAreLexical(),g=g.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),g=g.enforceConflictingLexicallyDeclaredNames(g.varDeclaredNames,DUPLICATE_BINDING),g=g.observeLexicalBoundary();var _=this.append(h,g);return _=_.clearFreeBreakStatements(),_}},{key:"reduceSwitchStatementWithDefault",value:function(a,c){var h=c.discriminant,d=c.preDefaultCases,g=c.defaultCase,_=c.postDefaultCases,b=this.append.apply(this,[g].concat(_toConsumableArray$3(d),_toConsumableArray$3(_)));b=b.functionDeclarationNamesAreLexical(),b=b.enforceDuplicateLexicallyDeclaredNames(DUPLICATE_BINDING),b=b.enforceConflictingLexicallyDeclaredNames(b.varDeclaredNames,DUPLICATE_BINDING),b=b.observeLexicalBoundary();var $=this.append(h,b);return $=$.clearFreeBreakStatements(),$}},{key:"reduceVariableDeclaration",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceVariableDeclaration",this).apply(this,arguments);switch(a.kind){case"const":case"let":{c=c.observeLexicalDeclaration(),c.lexicallyDeclaredNames.has("let")&&c.lexicallyDeclaredNames.get("let").forEach(function(h){c=c.addError(new _earlyErrorState.EarlyError(h,'Lexical declarations must not have a binding named "let"'))});break}case"var":c=c.observeVarDeclaration();break}return c}},{key:"reduceVariableDeclarationStatement",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceVariableDeclarationStatement",this).apply(this,arguments);return a.declaration.kind==="const"&&a.declaration.declarators.forEach(function(h){h.init==null&&(c=c.addError(new _earlyErrorState.EarlyError(h,"Constant lexical declarations must have an initialiser")))}),c}},{key:"reduceWhileStatement",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceWhileStatement",this).apply(this,arguments);return isLabelledFunction(a.body)&&(c=c.addError(new _earlyErrorState.EarlyError(a.body,"The body of a while statement must not be a labeled function declaration"))),c=c.clearFreeContinueStatements().clearFreeBreakStatements(),c}},{key:"reduceWithStatement",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceWithStatement",this).apply(this,arguments);return isLabelledFunction(a.body)&&(c=c.addError(new _earlyErrorState.EarlyError(a.body,"The body of a with statement must not be a labeled function declaration"))),c=c.addStrictError(new _earlyErrorState.EarlyError(a,"Strict mode code must not include a with statement")),c}},{key:"reduceYieldExpression",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceYieldExpression",this).apply(this,arguments);return c=c.observeYieldExpression(a),c}},{key:"reduceYieldGeneratorExpression",value:function(a){var c=_get$1(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"reduceYieldGeneratorExpression",this).apply(this,arguments);return c=c.observeYieldExpression(a),c}}],[{key:"check",value:function(a){return(0,_shiftReducer2.default)(new e,a).errors}}]),e}(_shiftReducer$1.MonoidalReducer);(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.TokenType=o.TokenClass=o.Tokenizer=o.ParserWithLocation=o.GenericParser=o.EarlyErrorChecker=o.parseScriptWithLocation=o.parseModuleWithLocation=o.parseScript=o.parseModule=void 0;var e=function(){function nt(st,rt){for(var it=0;it1&&arguments[1]!==void 0?arguments[1]:{},at=it.earlyErrors,ot=at===void 0?!0:at,ut=new c.GenericParser(rt),ct=ut[nt]();if(ot){var ht=h.EarlyErrorChecker.check(ct);if(ht.length>0)throw new a.JsError(0,1,0,ht[0].message)}return ct}}function et(nt){return function(rt){var it=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},at=it.earlyErrors,ot=at===void 0?!0:at,ut=new j(rt),ct=ut[nt]();if(ot){var ht=h.EarlyErrorChecker.check(ct);if(ht.length>0){var lt=ht[0],pt=lt.node,ft=lt.message,gt=ut.locations.get(pt).start,yt=gt.offset,mt=gt.line,Et=gt.column;throw new a.JsError(yt,mt,Et,ft)}}return{tree:ct,locations:ut.locations,comments:ut.comments}}}o.parseModule=_e("parseModule");var tt=o.parseScript=_e("parseScript");o.parseModuleWithLocation=et("parseModule"),o.parseScriptWithLocation=et("parseScript"),o.default=tt,o.EarlyErrorChecker=h.EarlyErrorChecker,o.GenericParser=c.GenericParser,o.ParserWithLocation=j})(dist$7);var dist$2={};Object.defineProperty(dist$2,"__esModule",{value:!0});var _default=dist$2.default=function(){var o={},e={typeName:"Boolean"},s={typeName:"Number"},a={typeName:"String"};function c(Ut){return{typeName:"Maybe",argument:Ut}}function h(Ut){return{typeName:"List",argument:Ut}}function d(Ut){return{typeName:"Const",argument:Ut}}function g(){return{typeName:"Union",arguments:[].slice.call(arguments,0)}}var _={typeName:"Enum",values:["ArrayAssignmentTarget","ArrayBinding","ArrayExpression","ArrowExpression","AssignmentExpression","AssignmentTargetIdentifier","AssignmentTargetPropertyIdentifier","AssignmentTargetPropertyProperty","AssignmentTargetWithDefault","AwaitExpression","BinaryExpression","BindingIdentifier","BindingPropertyIdentifier","BindingPropertyProperty","BindingWithDefault","Block","BlockStatement","BreakStatement","CallExpression","CatchClause","ClassDeclaration","ClassElement","ClassExpression","CompoundAssignmentExpression","ComputedMemberAssignmentTarget","ComputedMemberExpression","ComputedPropertyName","ConditionalExpression","ContinueStatement","DataProperty","DebuggerStatement","Directive","DoWhileStatement","EmptyStatement","Export","ExportAllFrom","ExportDefault","ExportFrom","ExportFromSpecifier","ExportLocalSpecifier","ExportLocals","ExpressionStatement","ForAwaitStatement","ForInStatement","ForOfStatement","ForStatement","FormalParameters","FunctionBody","FunctionDeclaration","FunctionExpression","Getter","IdentifierExpression","IfStatement","Import","ImportNamespace","ImportSpecifier","LabeledStatement","LiteralBooleanExpression","LiteralInfinityExpression","LiteralNullExpression","LiteralNumericExpression","LiteralRegExpExpression","LiteralStringExpression","Method","Module","NewExpression","NewTargetExpression","ObjectAssignmentTarget","ObjectBinding","ObjectExpression","ReturnStatement","Script","Setter","ShorthandProperty","SpreadElement","SpreadProperty","StaticMemberAssignmentTarget","StaticMemberExpression","StaticPropertyName","Super","SwitchCase","SwitchDefault","SwitchStatement","SwitchStatementWithDefault","TemplateElement","TemplateExpression","ThisExpression","ThrowStatement","TryCatchStatement","TryFinallyStatement","UnaryExpression","UpdateExpression","VariableDeclaration","VariableDeclarationStatement","VariableDeclarator","WhileStatement","WithStatement","YieldExpression","YieldGeneratorExpression"]},b={typeName:"Enum",values:["==","!=","===","!==","<","<=",">",">=","in","instanceof","<<",">>",">>>","+","-","*","/","%","**",",","||","&&","|","^","&"]},$={typeName:"Enum",values:["+=","-=","*=","/=","%=","**=","<<=",">>=",">>>=","|=","^=","&="]},j={typeName:"Enum",values:["+","-","!","~","typeof","void","delete"]},_e={typeName:"Enum",values:["++","--"]},et={typeName:"Enum",values:["var","let","const"]},tt=o.ArrayAssignmentTarget={},nt=o.ArrayBinding={},st=o.ArrayExpression={},rt=o.ArrowExpression={},it=o.AssignmentExpression={},at=o.AssignmentTargetIdentifier={},ot=o.AssignmentTargetPropertyIdentifier={},ut=o.AssignmentTargetPropertyProperty={},ct=o.AssignmentTargetWithDefault={},ht=o.AwaitExpression={},lt=o.BinaryExpression={},pt=o.BindingIdentifier={},ft=o.BindingPropertyIdentifier={},gt=o.BindingPropertyProperty={},yt=o.BindingWithDefault={},mt=o.Block={},Et=o.BlockStatement={},Ot=o.BreakStatement={},St=o.CallExpression={},At=o.CatchClause={},dt=o.ClassDeclaration={},Dt=o.ClassElement={},Ct=o.ClassExpression={},xt=o.CompoundAssignmentExpression={},Tt=o.ComputedMemberAssignmentTarget={},kt=o.ComputedMemberExpression={},_t=o.ComputedPropertyName={},Bt=o.ConditionalExpression={},Ft=o.ContinueStatement={},Lt=o.DataProperty={},tr=o.DebuggerStatement={},Wt=o.Directive={},rr=o.DoWhileStatement={},nr=o.EmptyStatement={},ir=o.Export={},sr=o.ExportAllFrom={},ar=o.ExportDefault={},or=o.ExportFrom={},Xt=o.ExportFromSpecifier={},Ht=o.ExportLocalSpecifier={},ur=o.ExportLocals={},lr=o.ExpressionStatement={},cr=o.ForAwaitStatement={},hr=o.ForInStatement={},fr=o.ForOfStatement={},dr=o.ForStatement={},Qt=o.FormalParameters={},It=o.FunctionBody={},zt=o.FunctionDeclaration={},Zt=o.FunctionExpression={},mr=o.Getter={},Gt=o.IdentifierExpression={},gr=o.IfStatement={},yr=o.Import={},Er=o.ImportNamespace={},Yt=o.ImportSpecifier={},Dr=o.LabeledStatement={},Or=o.LiteralBooleanExpression={},Cr=o.LiteralInfinityExpression={},Sr=o.LiteralNullExpression={},Ar=o.LiteralNumericExpression={},vr=o.LiteralRegExpExpression={},xr=o.LiteralStringExpression={},Tr=o.Method={},kr=o.Module={},_r=o.NewExpression={},br=o.NewTargetExpression={},Pt=o.ObjectAssignmentTarget={},wt=o.ObjectBinding={},Fr=o.ObjectExpression={},Br=o.ReturnStatement={},wr=o.Script={},Pr=o.Setter={},$r=o.ShorthandProperty={},Vt=o.SpreadElement={},Rr=o.SpreadProperty={},Ir=o.StaticMemberAssignmentTarget={},Nr=o.StaticMemberExpression={},Lr=o.StaticPropertyName={},Mt=o.Super={},qt=o.SwitchCase={},Kt=o.SwitchDefault={},Mr=o.SwitchStatement={},Qr=o.SwitchStatementWithDefault={},Jt=o.TemplateElement={},jr=o.TemplateExpression={},Wr=o.ThisExpression={},zr=o.ThrowStatement={},Gr=o.TryCatchStatement={},Vr=o.TryFinallyStatement={},qr=o.UnaryExpression={},Ur=o.UpdateExpression={},Nt=o.VariableDeclaration={},Xr=o.VariableDeclarationStatement={},er=o.VariableDeclarator={},Hr=o.WhileStatement={},Zr=o.WithStatement={},Yr=o.YieldExpression={},Kr=o.YieldGeneratorExpression={},an=g(kt,Nr),Jr=g(ot,ut);g(dt,Ct);var en=g(ir,sr,ar,or,ur),jt=g(_t,Lr);g(zt,Zt);var tn=g(yr,Er),un=g(rr,cr,hr,fr,dr,Hr),$t=g(Tt,Ir),rn=g(ft,gt),nn=g(mr,Tr,Pr),ln=g(kr,wr),cn=g(at,pt,Gt),hn=g(Lt,nn),vt=g(st,rt,it,ht,lt,St,Ct,xt,Bt,Zt,Gt,Or,Cr,Sr,Ar,vr,xr,an,_r,br,Fr,jr,Wr,qr,Ur,Yr,Kr),bt=g(Et,Ot,dt,Ft,tr,nr,lr,zt,gr,un,Dr,Br,Mr,Qr,zr,Gr,Vr,Xr,Zr),sn=g(hn,$r,Rr);return g(tt,nt,Jr,ct,rn,yt,mt,At,Dt,Wt,en,Xt,Ht,vt,Qt,It,tn,Yt,$t,Pt,wt,sn,ln,jt,Vt,bt,Mt,qt,Kt,Jt,Nt,er,cn),tt.typeName="ArrayAssignmentTarget",tt.fields=[{name:"type",type:d(_),value:"ArrayAssignmentTarget"},{name:"elements",type:h(c(g(ct,g(g(tt,Pt),g(at,$t)))))},{name:"rest",type:c(g(g(tt,Pt),g(at,$t)))}],nt.typeName="ArrayBinding",nt.fields=[{name:"type",type:d(_),value:"ArrayBinding"},{name:"elements",type:h(c(g(yt,g(pt,g(nt,wt)))))},{name:"rest",type:c(g(pt,g(nt,wt)))}],st.typeName="ArrayExpression",st.fields=[{name:"type",type:d(_),value:"ArrayExpression"},{name:"elements",type:h(c(g(vt,Vt)))}],rt.typeName="ArrowExpression",rt.fields=[{name:"type",type:d(_),value:"ArrowExpression"},{name:"isAsync",type:e},{name:"params",type:Qt},{name:"body",type:g(vt,It)}],it.typeName="AssignmentExpression",it.fields=[{name:"type",type:d(_),value:"AssignmentExpression"},{name:"binding",type:g(g(tt,Pt),g(at,$t))},{name:"expression",type:vt}],at.typeName="AssignmentTargetIdentifier",at.fields=[{name:"type",type:d(_),value:"AssignmentTargetIdentifier"},{name:"name",type:a}],ot.typeName="AssignmentTargetPropertyIdentifier",ot.fields=[{name:"type",type:d(_),value:"AssignmentTargetPropertyIdentifier"},{name:"binding",type:at},{name:"init",type:c(vt)}],ut.typeName="AssignmentTargetPropertyProperty",ut.fields=[{name:"type",type:d(_),value:"AssignmentTargetPropertyProperty"},{name:"name",type:jt},{name:"binding",type:g(ct,g(g(tt,Pt),g(at,$t)))}],ct.typeName="AssignmentTargetWithDefault",ct.fields=[{name:"type",type:d(_),value:"AssignmentTargetWithDefault"},{name:"binding",type:g(g(tt,Pt),g(at,$t))},{name:"init",type:vt}],ht.typeName="AwaitExpression",ht.fields=[{name:"type",type:d(_),value:"AwaitExpression"},{name:"expression",type:vt}],lt.typeName="BinaryExpression",lt.fields=[{name:"type",type:d(_),value:"BinaryExpression"},{name:"left",type:vt},{name:"operator",type:b},{name:"right",type:vt}],pt.typeName="BindingIdentifier",pt.fields=[{name:"type",type:d(_),value:"BindingIdentifier"},{name:"name",type:a}],ft.typeName="BindingPropertyIdentifier",ft.fields=[{name:"type",type:d(_),value:"BindingPropertyIdentifier"},{name:"binding",type:pt},{name:"init",type:c(vt)}],gt.typeName="BindingPropertyProperty",gt.fields=[{name:"type",type:d(_),value:"BindingPropertyProperty"},{name:"name",type:jt},{name:"binding",type:g(yt,g(pt,g(nt,wt)))}],yt.typeName="BindingWithDefault",yt.fields=[{name:"type",type:d(_),value:"BindingWithDefault"},{name:"binding",type:g(pt,g(nt,wt))},{name:"init",type:vt}],mt.typeName="Block",mt.fields=[{name:"type",type:d(_),value:"Block"},{name:"statements",type:h(bt)}],Et.typeName="BlockStatement",Et.fields=[{name:"type",type:d(_),value:"BlockStatement"},{name:"block",type:mt}],Ot.typeName="BreakStatement",Ot.fields=[{name:"type",type:d(_),value:"BreakStatement"},{name:"label",type:c(a)}],St.typeName="CallExpression",St.fields=[{name:"type",type:d(_),value:"CallExpression"},{name:"callee",type:g(vt,Mt)},{name:"arguments",type:h(g(vt,Vt))}],At.typeName="CatchClause",At.fields=[{name:"type",type:d(_),value:"CatchClause"},{name:"binding",type:g(pt,g(nt,wt))},{name:"body",type:mt}],dt.typeName="ClassDeclaration",dt.fields=[{name:"type",type:d(_),value:"ClassDeclaration"},{name:"name",type:pt},{name:"super",type:c(vt)},{name:"elements",type:h(Dt)}],Dt.typeName="ClassElement",Dt.fields=[{name:"type",type:d(_),value:"ClassElement"},{name:"isStatic",type:e},{name:"method",type:nn}],Ct.typeName="ClassExpression",Ct.fields=[{name:"type",type:d(_),value:"ClassExpression"},{name:"name",type:c(pt)},{name:"super",type:c(vt)},{name:"elements",type:h(Dt)}],xt.typeName="CompoundAssignmentExpression",xt.fields=[{name:"type",type:d(_),value:"CompoundAssignmentExpression"},{name:"binding",type:g(at,$t)},{name:"operator",type:$},{name:"expression",type:vt}],Tt.typeName="ComputedMemberAssignmentTarget",Tt.fields=[{name:"type",type:d(_),value:"ComputedMemberAssignmentTarget"},{name:"object",type:g(vt,Mt)},{name:"expression",type:vt}],kt.typeName="ComputedMemberExpression",kt.fields=[{name:"type",type:d(_),value:"ComputedMemberExpression"},{name:"object",type:g(vt,Mt)},{name:"expression",type:vt}],_t.typeName="ComputedPropertyName",_t.fields=[{name:"type",type:d(_),value:"ComputedPropertyName"},{name:"expression",type:vt}],Bt.typeName="ConditionalExpression",Bt.fields=[{name:"type",type:d(_),value:"ConditionalExpression"},{name:"test",type:vt},{name:"consequent",type:vt},{name:"alternate",type:vt}],Ft.typeName="ContinueStatement",Ft.fields=[{name:"type",type:d(_),value:"ContinueStatement"},{name:"label",type:c(a)}],Lt.typeName="DataProperty",Lt.fields=[{name:"type",type:d(_),value:"DataProperty"},{name:"name",type:jt},{name:"expression",type:vt}],tr.typeName="DebuggerStatement",tr.fields=[{name:"type",type:d(_),value:"DebuggerStatement"}],Wt.typeName="Directive",Wt.fields=[{name:"type",type:d(_),value:"Directive"},{name:"rawValue",type:a}],rr.typeName="DoWhileStatement",rr.fields=[{name:"type",type:d(_),value:"DoWhileStatement"},{name:"body",type:bt},{name:"test",type:vt}],nr.typeName="EmptyStatement",nr.fields=[{name:"type",type:d(_),value:"EmptyStatement"}],ir.typeName="Export",ir.fields=[{name:"type",type:d(_),value:"Export"},{name:"declaration",type:g(dt,zt,Nt)}],sr.typeName="ExportAllFrom",sr.fields=[{name:"type",type:d(_),value:"ExportAllFrom"},{name:"moduleSpecifier",type:a}],ar.typeName="ExportDefault",ar.fields=[{name:"type",type:d(_),value:"ExportDefault"},{name:"body",type:g(dt,vt,zt)}],or.typeName="ExportFrom",or.fields=[{name:"type",type:d(_),value:"ExportFrom"},{name:"namedExports",type:h(Xt)},{name:"moduleSpecifier",type:a}],Xt.typeName="ExportFromSpecifier",Xt.fields=[{name:"type",type:d(_),value:"ExportFromSpecifier"},{name:"name",type:a},{name:"exportedName",type:c(a)}],Ht.typeName="ExportLocalSpecifier",Ht.fields=[{name:"type",type:d(_),value:"ExportLocalSpecifier"},{name:"name",type:Gt},{name:"exportedName",type:c(a)}],ur.typeName="ExportLocals",ur.fields=[{name:"type",type:d(_),value:"ExportLocals"},{name:"namedExports",type:h(Ht)}],lr.typeName="ExpressionStatement",lr.fields=[{name:"type",type:d(_),value:"ExpressionStatement"},{name:"expression",type:vt}],cr.typeName="ForAwaitStatement",cr.fields=[{name:"type",type:d(_),value:"ForAwaitStatement"},{name:"left",type:g(g(g(tt,Pt),g(at,$t)),Nt)},{name:"right",type:vt},{name:"body",type:bt}],hr.typeName="ForInStatement",hr.fields=[{name:"type",type:d(_),value:"ForInStatement"},{name:"left",type:g(g(g(tt,Pt),g(at,$t)),Nt)},{name:"right",type:vt},{name:"body",type:bt}],fr.typeName="ForOfStatement",fr.fields=[{name:"type",type:d(_),value:"ForOfStatement"},{name:"left",type:g(g(g(tt,Pt),g(at,$t)),Nt)},{name:"right",type:vt},{name:"body",type:bt}],dr.typeName="ForStatement",dr.fields=[{name:"type",type:d(_),value:"ForStatement"},{name:"init",type:c(g(vt,Nt))},{name:"test",type:c(vt)},{name:"update",type:c(vt)},{name:"body",type:bt}],Qt.typeName="FormalParameters",Qt.fields=[{name:"type",type:d(_),value:"FormalParameters"},{name:"items",type:h(g(yt,g(pt,g(nt,wt))))},{name:"rest",type:c(g(pt,g(nt,wt)))}],It.typeName="FunctionBody",It.fields=[{name:"type",type:d(_),value:"FunctionBody"},{name:"directives",type:h(Wt)},{name:"statements",type:h(bt)}],zt.typeName="FunctionDeclaration",zt.fields=[{name:"type",type:d(_),value:"FunctionDeclaration"},{name:"isAsync",type:e},{name:"isGenerator",type:e},{name:"name",type:pt},{name:"params",type:Qt},{name:"body",type:It}],Zt.typeName="FunctionExpression",Zt.fields=[{name:"type",type:d(_),value:"FunctionExpression"},{name:"isAsync",type:e},{name:"isGenerator",type:e},{name:"name",type:c(pt)},{name:"params",type:Qt},{name:"body",type:It}],mr.typeName="Getter",mr.fields=[{name:"type",type:d(_),value:"Getter"},{name:"name",type:jt},{name:"body",type:It}],Gt.typeName="IdentifierExpression",Gt.fields=[{name:"type",type:d(_),value:"IdentifierExpression"},{name:"name",type:a}],gr.typeName="IfStatement",gr.fields=[{name:"type",type:d(_),value:"IfStatement"},{name:"test",type:vt},{name:"consequent",type:bt},{name:"alternate",type:c(bt)}],yr.typeName="Import",yr.fields=[{name:"type",type:d(_),value:"Import"},{name:"defaultBinding",type:c(pt)},{name:"namedImports",type:h(Yt)},{name:"moduleSpecifier",type:a}],Er.typeName="ImportNamespace",Er.fields=[{name:"type",type:d(_),value:"ImportNamespace"},{name:"defaultBinding",type:c(pt)},{name:"namespaceBinding",type:pt},{name:"moduleSpecifier",type:a}],Yt.typeName="ImportSpecifier",Yt.fields=[{name:"type",type:d(_),value:"ImportSpecifier"},{name:"name",type:c(a)},{name:"binding",type:pt}],Dr.typeName="LabeledStatement",Dr.fields=[{name:"type",type:d(_),value:"LabeledStatement"},{name:"label",type:a},{name:"body",type:bt}],Or.typeName="LiteralBooleanExpression",Or.fields=[{name:"type",type:d(_),value:"LiteralBooleanExpression"},{name:"value",type:e}],Cr.typeName="LiteralInfinityExpression",Cr.fields=[{name:"type",type:d(_),value:"LiteralInfinityExpression"}],Sr.typeName="LiteralNullExpression",Sr.fields=[{name:"type",type:d(_),value:"LiteralNullExpression"}],Ar.typeName="LiteralNumericExpression",Ar.fields=[{name:"type",type:d(_),value:"LiteralNumericExpression"},{name:"value",type:s}],vr.typeName="LiteralRegExpExpression",vr.fields=[{name:"type",type:d(_),value:"LiteralRegExpExpression"},{name:"pattern",type:a},{name:"global",type:e},{name:"ignoreCase",type:e},{name:"multiLine",type:e},{name:"dotAll",type:e},{name:"unicode",type:e},{name:"sticky",type:e}],xr.typeName="LiteralStringExpression",xr.fields=[{name:"type",type:d(_),value:"LiteralStringExpression"},{name:"value",type:a}],Tr.typeName="Method",Tr.fields=[{name:"type",type:d(_),value:"Method"},{name:"isAsync",type:e},{name:"isGenerator",type:e},{name:"name",type:jt},{name:"params",type:Qt},{name:"body",type:It}],kr.typeName="Module",kr.fields=[{name:"type",type:d(_),value:"Module"},{name:"directives",type:h(Wt)},{name:"items",type:h(g(en,tn,bt))}],_r.typeName="NewExpression",_r.fields=[{name:"type",type:d(_),value:"NewExpression"},{name:"callee",type:vt},{name:"arguments",type:h(g(vt,Vt))}],br.typeName="NewTargetExpression",br.fields=[{name:"type",type:d(_),value:"NewTargetExpression"}],Pt.typeName="ObjectAssignmentTarget",Pt.fields=[{name:"type",type:d(_),value:"ObjectAssignmentTarget"},{name:"properties",type:h(Jr)},{name:"rest",type:c(g(g(tt,Pt),g(at,$t)))}],wt.typeName="ObjectBinding",wt.fields=[{name:"type",type:d(_),value:"ObjectBinding"},{name:"properties",type:h(rn)},{name:"rest",type:c(g(pt,g(nt,wt)))}],Fr.typeName="ObjectExpression",Fr.fields=[{name:"type",type:d(_),value:"ObjectExpression"},{name:"properties",type:h(sn)}],Br.typeName="ReturnStatement",Br.fields=[{name:"type",type:d(_),value:"ReturnStatement"},{name:"expression",type:c(vt)}],wr.typeName="Script",wr.fields=[{name:"type",type:d(_),value:"Script"},{name:"directives",type:h(Wt)},{name:"statements",type:h(bt)}],Pr.typeName="Setter",Pr.fields=[{name:"type",type:d(_),value:"Setter"},{name:"name",type:jt},{name:"param",type:g(yt,g(pt,g(nt,wt)))},{name:"body",type:It}],$r.typeName="ShorthandProperty",$r.fields=[{name:"type",type:d(_),value:"ShorthandProperty"},{name:"name",type:Gt}],Vt.typeName="SpreadElement",Vt.fields=[{name:"type",type:d(_),value:"SpreadElement"},{name:"expression",type:vt}],Rr.typeName="SpreadProperty",Rr.fields=[{name:"type",type:d(_),value:"SpreadProperty"},{name:"expression",type:vt}],Ir.typeName="StaticMemberAssignmentTarget",Ir.fields=[{name:"type",type:d(_),value:"StaticMemberAssignmentTarget"},{name:"object",type:g(vt,Mt)},{name:"property",type:a}],Nr.typeName="StaticMemberExpression",Nr.fields=[{name:"type",type:d(_),value:"StaticMemberExpression"},{name:"object",type:g(vt,Mt)},{name:"property",type:a}],Lr.typeName="StaticPropertyName",Lr.fields=[{name:"type",type:d(_),value:"StaticPropertyName"},{name:"value",type:a}],Mt.typeName="Super",Mt.fields=[{name:"type",type:d(_),value:"Super"}],qt.typeName="SwitchCase",qt.fields=[{name:"type",type:d(_),value:"SwitchCase"},{name:"test",type:vt},{name:"consequent",type:h(bt)}],Kt.typeName="SwitchDefault",Kt.fields=[{name:"type",type:d(_),value:"SwitchDefault"},{name:"consequent",type:h(bt)}],Mr.typeName="SwitchStatement",Mr.fields=[{name:"type",type:d(_),value:"SwitchStatement"},{name:"discriminant",type:vt},{name:"cases",type:h(qt)}],Qr.typeName="SwitchStatementWithDefault",Qr.fields=[{name:"type",type:d(_),value:"SwitchStatementWithDefault"},{name:"discriminant",type:vt},{name:"preDefaultCases",type:h(qt)},{name:"defaultCase",type:Kt},{name:"postDefaultCases",type:h(qt)}],Jt.typeName="TemplateElement",Jt.fields=[{name:"type",type:d(_),value:"TemplateElement"},{name:"rawValue",type:a}],jr.typeName="TemplateExpression",jr.fields=[{name:"type",type:d(_),value:"TemplateExpression"},{name:"tag",type:c(vt)},{name:"elements",type:h(g(vt,Jt))}],Wr.typeName="ThisExpression",Wr.fields=[{name:"type",type:d(_),value:"ThisExpression"}],zr.typeName="ThrowStatement",zr.fields=[{name:"type",type:d(_),value:"ThrowStatement"},{name:"expression",type:vt}],Gr.typeName="TryCatchStatement",Gr.fields=[{name:"type",type:d(_),value:"TryCatchStatement"},{name:"body",type:mt},{name:"catchClause",type:At}],Vr.typeName="TryFinallyStatement",Vr.fields=[{name:"type",type:d(_),value:"TryFinallyStatement"},{name:"body",type:mt},{name:"catchClause",type:c(At)},{name:"finalizer",type:mt}],qr.typeName="UnaryExpression",qr.fields=[{name:"type",type:d(_),value:"UnaryExpression"},{name:"operator",type:j},{name:"operand",type:vt}],Ur.typeName="UpdateExpression",Ur.fields=[{name:"type",type:d(_),value:"UpdateExpression"},{name:"isPrefix",type:e},{name:"operator",type:_e},{name:"operand",type:g(at,$t)}],Nt.typeName="VariableDeclaration",Nt.fields=[{name:"type",type:d(_),value:"VariableDeclaration"},{name:"kind",type:et},{name:"declarators",type:h(er)}],Xr.typeName="VariableDeclarationStatement",Xr.fields=[{name:"type",type:d(_),value:"VariableDeclarationStatement"},{name:"declaration",type:Nt}],er.typeName="VariableDeclarator",er.fields=[{name:"type",type:d(_),value:"VariableDeclarator"},{name:"binding",type:g(pt,g(nt,wt))},{name:"init",type:c(vt)}],Hr.typeName="WhileStatement",Hr.fields=[{name:"type",type:d(_),value:"WhileStatement"},{name:"test",type:vt},{name:"body",type:bt}],Zr.typeName="WithStatement",Zr.fields=[{name:"type",type:d(_),value:"WithStatement"},{name:"object",type:vt},{name:"body",type:bt}],Yr.typeName="YieldExpression",Yr.fields=[{name:"type",type:d(_),value:"YieldExpression"},{name:"expression",type:c(vt)}],Kr.typeName="YieldGeneratorExpression",Kr.fields=[{name:"type",type:d(_),value:"YieldGeneratorExpression"},{name:"expression",type:vt}],o}(),estraverse$1={};(function(o){(function e(s){var a,c,h,d,g,_;function b(ut){var ct={},ht,lt;for(ht in ut)ut.hasOwnProperty(ht)&&(lt=ut[ht],typeof lt=="object"&<!==null?ct[ht]=b(lt):ct[ht]=lt);return ct}function $(ut,ct){var ht,lt,pt,ft;for(lt=ut.length,pt=0;lt;)ht=lt>>>1,ft=pt+ht,ct(ut[ft])?lt=ht:(pt=ft+1,lt-=ht+1);return pt}a={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",AwaitExpression:"AwaitExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ChainExpression:"ChainExpression",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ComprehensionBlock:"ComprehensionBlock",ComprehensionExpression:"ComprehensionExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DebuggerStatement:"DebuggerStatement",DirectiveStatement:"DirectiveStatement",DoWhileStatement:"DoWhileStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForInStatement:"ForInStatement",ForOfStatement:"ForOfStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",GeneratorExpression:"GeneratorExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportExpression:"ImportExpression",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",ModuleSpecifier:"ModuleSpecifier",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",PrivateIdentifier:"PrivateIdentifier",Program:"Program",Property:"Property",PropertyDefinition:"PropertyDefinition",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchStatement:"SwitchStatement",SwitchCase:"SwitchCase",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"},h={AssignmentExpression:["left","right"],AssignmentPattern:["left","right"],ArrayExpression:["elements"],ArrayPattern:["elements"],ArrowFunctionExpression:["params","body"],AwaitExpression:["argument"],BlockStatement:["body"],BinaryExpression:["left","right"],BreakStatement:["label"],CallExpression:["callee","arguments"],CatchClause:["param","body"],ChainExpression:["expression"],ClassBody:["body"],ClassDeclaration:["id","superClass","body"],ClassExpression:["id","superClass","body"],ComprehensionBlock:["left","right"],ComprehensionExpression:["blocks","filter","body"],ConditionalExpression:["test","consequent","alternate"],ContinueStatement:["label"],DebuggerStatement:[],DirectiveStatement:[],DoWhileStatement:["body","test"],EmptyStatement:[],ExportAllDeclaration:["source"],ExportDefaultDeclaration:["declaration"],ExportNamedDeclaration:["declaration","specifiers","source"],ExportSpecifier:["exported","local"],ExpressionStatement:["expression"],ForStatement:["init","test","update","body"],ForInStatement:["left","right","body"],ForOfStatement:["left","right","body"],FunctionDeclaration:["id","params","body"],FunctionExpression:["id","params","body"],GeneratorExpression:["blocks","filter","body"],Identifier:[],IfStatement:["test","consequent","alternate"],ImportExpression:["source"],ImportDeclaration:["specifiers","source"],ImportDefaultSpecifier:["local"],ImportNamespaceSpecifier:["local"],ImportSpecifier:["imported","local"],Literal:[],LabeledStatement:["label","body"],LogicalExpression:["left","right"],MemberExpression:["object","property"],MetaProperty:["meta","property"],MethodDefinition:["key","value"],ModuleSpecifier:[],NewExpression:["callee","arguments"],ObjectExpression:["properties"],ObjectPattern:["properties"],PrivateIdentifier:[],Program:["body"],Property:["key","value"],PropertyDefinition:["key","value"],RestElement:["argument"],ReturnStatement:["argument"],SequenceExpression:["expressions"],SpreadElement:["argument"],Super:[],SwitchStatement:["discriminant","cases"],SwitchCase:["test","consequent"],TaggedTemplateExpression:["tag","quasi"],TemplateElement:[],TemplateLiteral:["quasis","expressions"],ThisExpression:[],ThrowStatement:["argument"],TryStatement:["block","handler","finalizer"],UnaryExpression:["argument"],UpdateExpression:["argument"],VariableDeclaration:["declarations"],VariableDeclarator:["id","init"],WhileStatement:["test","body"],WithStatement:["object","body"],YieldExpression:["argument"]},d={},g={},_={},c={Break:d,Skip:g,Remove:_};function j(ut,ct){this.parent=ut,this.key=ct}j.prototype.replace=function(ct){this.parent[this.key]=ct},j.prototype.remove=function(){return Array.isArray(this.parent)?(this.parent.splice(this.key,1),!0):(this.replace(null),!1)};function _e(ut,ct,ht,lt){this.node=ut,this.path=ct,this.wrap=ht,this.ref=lt}function et(){}et.prototype.path=function(){var ct,ht,lt,pt,ft,gt;function yt(mt,Et){if(Array.isArray(Et))for(lt=0,pt=Et.length;lt=0;--ht)if(ut[ht].node===ct)return!0;return!1}et.prototype.traverse=function(ct,ht){var lt,pt,ft,gt,yt,mt,Et,Ot,St,At,dt,Dt;for(this.__initialize(ct,ht),Dt={},lt=this.__worklist,pt=this.__leavelist,lt.push(new _e(ct,null,null,null)),pt.push(new _e(null,null,null,null));lt.length;){if(ft=lt.pop(),ft===Dt){if(ft=pt.pop(),mt=this.__execute(ht.leave,ft),this.__state===d||mt===d)return;continue}if(ft.node){if(mt=this.__execute(ht.enter,ft),this.__state===d||mt===d)return;if(lt.push(Dt),pt.push(ft),this.__state===g||mt===g)continue;if(gt=ft.node,yt=gt.type||ft.wrap,At=this.__keys[yt],!At)if(this.__fallback)At=this.__fallback(gt);else throw new Error("Unknown node type "+yt+".");for(Ot=At.length;(Ot-=1)>=0;)if(Et=At[Ot],dt=gt[Et],!!dt){if(Array.isArray(dt)){for(St=dt.length;(St-=1)>=0;)if(!!dt[St]&&!st(pt,dt[St])){if(nt(yt,At[Ot]))ft=new _e(dt[St],[Et,St],"Property",null);else if(tt(dt[St]))ft=new _e(dt[St],[Et,St],null,null);else continue;lt.push(ft)}}else if(tt(dt)){if(st(pt,dt))continue;lt.push(new _e(dt,Et,null,null))}}}}},et.prototype.replace=function(ct,ht){var lt,pt,ft,gt,yt,mt,Et,Ot,St,At,dt,Dt,Ct;function xt(Tt){var kt,_t,Bt,Ft;if(Tt.ref.remove()){for(_t=Tt.ref.key,Ft=Tt.ref.parent,kt=lt.length;kt--;)if(Bt=lt[kt],Bt.ref&&Bt.ref.parent===Ft){if(Bt.ref.key<_t)break;--Bt.ref.key}}}for(this.__initialize(ct,ht),dt={},lt=this.__worklist,pt=this.__leavelist,Dt={root:ct},mt=new _e(ct,null,null,new j(Dt,"root")),lt.push(mt),pt.push(mt);lt.length;){if(mt=lt.pop(),mt===dt){if(mt=pt.pop(),yt=this.__execute(ht.leave,mt),yt!==void 0&&yt!==d&&yt!==g&&yt!==_&&mt.ref.replace(yt),(this.__state===_||yt===_)&&xt(mt),this.__state===d||yt===d)return Dt.root;continue}if(yt=this.__execute(ht.enter,mt),yt!==void 0&&yt!==d&&yt!==g&&yt!==_&&(mt.ref.replace(yt),mt.node=yt),(this.__state===_||yt===_)&&(xt(mt),mt.node=null),this.__state===d||yt===d)return Dt.root;if(ft=mt.node,!!ft&&(lt.push(dt),pt.push(mt),!(this.__state===g||yt===g))){if(gt=ft.type||mt.wrap,St=this.__keys[gt],!St)if(this.__fallback)St=this.__fallback(ft);else throw new Error("Unknown node type "+gt+".");for(Et=St.length;(Et-=1)>=0;)if(Ct=St[Et],At=ft[Ct],!!At)if(Array.isArray(At)){for(Ot=At.length;(Ot-=1)>=0;)if(!!At[Ot]){if(nt(gt,St[Et]))mt=new _e(At[Ot],[Ct,Ot],"Property",new j(At,Ot));else if(tt(At[Ot]))mt=new _e(At[Ot],[Ct,Ot],null,new j(At,Ot));else continue;lt.push(mt)}}else tt(At)&<.push(new _e(At,Ct,null,new j(ft,Ct)))}}return Dt.root};function rt(ut,ct){var ht=new et;return ht.traverse(ut,ct)}function it(ut,ct){var ht=new et;return ht.replace(ut,ct)}function at(ut,ct){var ht;return ht=$(ct,function(pt){return pt.range[0]>ut.range[0]}),ut.extendedRange=[ut.range[0],ut.range[1]],ht!==ct.length&&(ut.extendedRange[1]=ct[ht].range[0]),ht-=1,ht>=0&&(ut.extendedRange[0]=ct[ht].range[1]),ut}function ot(ut,ct,ht){var lt=[],pt,ft,gt,yt;if(!ut.range)throw new Error("attachComments needs range information");if(!ht.length){if(ct.length){for(gt=0,ft=ct.length;gtmt.range[0]));)Et.extendedRange[1]===mt.range[0]?(mt.leadingComments||(mt.leadingComments=[]),mt.leadingComments.push(Et),lt.splice(yt,1)):yt+=1;if(yt===lt.length)return c.Break;if(lt[yt].extendedRange[0]>mt.range[1])return c.Skip}}),yt=0,rt(ut,{leave:function(mt){for(var Et;ytmt.range[1])return c.Skip}}),ut}return s.Syntax=a,s.traverse=rt,s.replace=it,s.attachComments=ot,s.VisitorKeys=h,s.VisitorOption=c,s.Controller=et,s.cloneEnvironment=function(){return e({})},s})(o)})(estraverse$1);const Spec=_default.default||_default,estraverse=estraverse$1.cloneEnvironment();Object.keys(estraverse.Syntax).filter(o=>o!=="Property").forEach(o=>{delete estraverse.Syntax[o],delete estraverse.VisitorKeys[o]});Object.assign(estraverse.Syntax,Object.keys(Spec).reduce((o,e)=>(o[e]=e,o),{}));Object.assign(estraverse.VisitorKeys,Object.keys(Spec).reduce((o,e)=>(o[e]=Spec[e].fields.map(s=>s.name),o),{}));var dist$1={},StaticMemberExpression_1,ReturnStatement_1,LiteralStringExpression_1,LiteralNumericExpression_1,IdentifierExpression_1,CallExpression_1,ArrayExpression_1;Object.defineProperty(dist$1,"__esModule",{value:!0});function _classCallCheck$5(o,e){if(!(o instanceof e))throw new TypeError("Cannot call a class as a function")}dist$1.ArrayAssignmentTarget=function o(e){var s=e.elements,a=e.rest;_classCallCheck$5(this,o),this.type="ArrayAssignmentTarget",this.elements=s,this.rest=a};dist$1.ArrayBinding=function o(e){var s=e.elements,a=e.rest;_classCallCheck$5(this,o),this.type="ArrayBinding",this.elements=s,this.rest=a};ArrayExpression_1=dist$1.ArrayExpression=function o(e){var s=e.elements;_classCallCheck$5(this,o),this.type="ArrayExpression",this.elements=s};dist$1.ArrowExpression=function o(e){var s=e.isAsync,a=e.params,c=e.body;_classCallCheck$5(this,o),this.type="ArrowExpression",this.isAsync=s,this.params=a,this.body=c};dist$1.AssignmentExpression=function o(e){var s=e.binding,a=e.expression;_classCallCheck$5(this,o),this.type="AssignmentExpression",this.binding=s,this.expression=a};dist$1.AssignmentTargetIdentifier=function o(e){var s=e.name;_classCallCheck$5(this,o),this.type="AssignmentTargetIdentifier",this.name=s};dist$1.AssignmentTargetPropertyIdentifier=function o(e){var s=e.binding,a=e.init;_classCallCheck$5(this,o),this.type="AssignmentTargetPropertyIdentifier",this.binding=s,this.init=a};dist$1.AssignmentTargetPropertyProperty=function o(e){var s=e.name,a=e.binding;_classCallCheck$5(this,o),this.type="AssignmentTargetPropertyProperty",this.name=s,this.binding=a};dist$1.AssignmentTargetWithDefault=function o(e){var s=e.binding,a=e.init;_classCallCheck$5(this,o),this.type="AssignmentTargetWithDefault",this.binding=s,this.init=a};dist$1.AwaitExpression=function o(e){var s=e.expression;_classCallCheck$5(this,o),this.type="AwaitExpression",this.expression=s};dist$1.BinaryExpression=function o(e){var s=e.left,a=e.operator,c=e.right;_classCallCheck$5(this,o),this.type="BinaryExpression",this.left=s,this.operator=a,this.right=c};dist$1.BindingIdentifier=function o(e){var s=e.name;_classCallCheck$5(this,o),this.type="BindingIdentifier",this.name=s};dist$1.BindingPropertyIdentifier=function o(e){var s=e.binding,a=e.init;_classCallCheck$5(this,o),this.type="BindingPropertyIdentifier",this.binding=s,this.init=a};dist$1.BindingPropertyProperty=function o(e){var s=e.name,a=e.binding;_classCallCheck$5(this,o),this.type="BindingPropertyProperty",this.name=s,this.binding=a};dist$1.BindingWithDefault=function o(e){var s=e.binding,a=e.init;_classCallCheck$5(this,o),this.type="BindingWithDefault",this.binding=s,this.init=a};dist$1.Block=function o(e){var s=e.statements;_classCallCheck$5(this,o),this.type="Block",this.statements=s};dist$1.BlockStatement=function o(e){var s=e.block;_classCallCheck$5(this,o),this.type="BlockStatement",this.block=s};dist$1.BreakStatement=function o(e){var s=e.label;_classCallCheck$5(this,o),this.type="BreakStatement",this.label=s};CallExpression_1=dist$1.CallExpression=function o(e){var s=e.callee,a=e.arguments;_classCallCheck$5(this,o),this.type="CallExpression",this.callee=s,this.arguments=a};dist$1.CatchClause=function o(e){var s=e.binding,a=e.body;_classCallCheck$5(this,o),this.type="CatchClause",this.binding=s,this.body=a};dist$1.ClassDeclaration=function o(e){var s=e.name,a=e.super,c=e.elements;_classCallCheck$5(this,o),this.type="ClassDeclaration",this.name=s,this.super=a,this.elements=c};dist$1.ClassElement=function o(e){var s=e.isStatic,a=e.method;_classCallCheck$5(this,o),this.type="ClassElement",this.isStatic=s,this.method=a};dist$1.ClassExpression=function o(e){var s=e.name,a=e.super,c=e.elements;_classCallCheck$5(this,o),this.type="ClassExpression",this.name=s,this.super=a,this.elements=c};dist$1.CompoundAssignmentExpression=function o(e){var s=e.binding,a=e.operator,c=e.expression;_classCallCheck$5(this,o),this.type="CompoundAssignmentExpression",this.binding=s,this.operator=a,this.expression=c};dist$1.ComputedMemberAssignmentTarget=function o(e){var s=e.object,a=e.expression;_classCallCheck$5(this,o),this.type="ComputedMemberAssignmentTarget",this.object=s,this.expression=a};dist$1.ComputedMemberExpression=function o(e){var s=e.object,a=e.expression;_classCallCheck$5(this,o),this.type="ComputedMemberExpression",this.object=s,this.expression=a};dist$1.ComputedPropertyName=function o(e){var s=e.expression;_classCallCheck$5(this,o),this.type="ComputedPropertyName",this.expression=s};dist$1.ConditionalExpression=function o(e){var s=e.test,a=e.consequent,c=e.alternate;_classCallCheck$5(this,o),this.type="ConditionalExpression",this.test=s,this.consequent=a,this.alternate=c};dist$1.ContinueStatement=function o(e){var s=e.label;_classCallCheck$5(this,o),this.type="ContinueStatement",this.label=s};dist$1.DataProperty=function o(e){var s=e.name,a=e.expression;_classCallCheck$5(this,o),this.type="DataProperty",this.name=s,this.expression=a};dist$1.DebuggerStatement=function o(){_classCallCheck$5(this,o),this.type="DebuggerStatement"};dist$1.Directive=function o(e){var s=e.rawValue;_classCallCheck$5(this,o),this.type="Directive",this.rawValue=s};dist$1.DoWhileStatement=function o(e){var s=e.body,a=e.test;_classCallCheck$5(this,o),this.type="DoWhileStatement",this.body=s,this.test=a};dist$1.EmptyStatement=function o(){_classCallCheck$5(this,o),this.type="EmptyStatement"};dist$1.Export=function o(e){var s=e.declaration;_classCallCheck$5(this,o),this.type="Export",this.declaration=s};dist$1.ExportAllFrom=function o(e){var s=e.moduleSpecifier;_classCallCheck$5(this,o),this.type="ExportAllFrom",this.moduleSpecifier=s};dist$1.ExportDefault=function o(e){var s=e.body;_classCallCheck$5(this,o),this.type="ExportDefault",this.body=s};dist$1.ExportFrom=function o(e){var s=e.namedExports,a=e.moduleSpecifier;_classCallCheck$5(this,o),this.type="ExportFrom",this.namedExports=s,this.moduleSpecifier=a};dist$1.ExportFromSpecifier=function o(e){var s=e.name,a=e.exportedName;_classCallCheck$5(this,o),this.type="ExportFromSpecifier",this.name=s,this.exportedName=a};dist$1.ExportLocalSpecifier=function o(e){var s=e.name,a=e.exportedName;_classCallCheck$5(this,o),this.type="ExportLocalSpecifier",this.name=s,this.exportedName=a};dist$1.ExportLocals=function o(e){var s=e.namedExports;_classCallCheck$5(this,o),this.type="ExportLocals",this.namedExports=s};dist$1.ExpressionStatement=function o(e){var s=e.expression;_classCallCheck$5(this,o),this.type="ExpressionStatement",this.expression=s};dist$1.ForAwaitStatement=function o(e){var s=e.left,a=e.right,c=e.body;_classCallCheck$5(this,o),this.type="ForAwaitStatement",this.left=s,this.right=a,this.body=c};dist$1.ForInStatement=function o(e){var s=e.left,a=e.right,c=e.body;_classCallCheck$5(this,o),this.type="ForInStatement",this.left=s,this.right=a,this.body=c};dist$1.ForOfStatement=function o(e){var s=e.left,a=e.right,c=e.body;_classCallCheck$5(this,o),this.type="ForOfStatement",this.left=s,this.right=a,this.body=c};dist$1.ForStatement=function o(e){var s=e.init,a=e.test,c=e.update,h=e.body;_classCallCheck$5(this,o),this.type="ForStatement",this.init=s,this.test=a,this.update=c,this.body=h};dist$1.FormalParameters=function o(e){var s=e.items,a=e.rest;_classCallCheck$5(this,o),this.type="FormalParameters",this.items=s,this.rest=a};dist$1.FunctionBody=function o(e){var s=e.directives,a=e.statements;_classCallCheck$5(this,o),this.type="FunctionBody",this.directives=s,this.statements=a};dist$1.FunctionDeclaration=function o(e){var s=e.isAsync,a=e.isGenerator,c=e.name,h=e.params,d=e.body;_classCallCheck$5(this,o),this.type="FunctionDeclaration",this.isAsync=s,this.isGenerator=a,this.name=c,this.params=h,this.body=d};dist$1.FunctionExpression=function o(e){var s=e.isAsync,a=e.isGenerator,c=e.name,h=e.params,d=e.body;_classCallCheck$5(this,o),this.type="FunctionExpression",this.isAsync=s,this.isGenerator=a,this.name=c,this.params=h,this.body=d};dist$1.Getter=function o(e){var s=e.name,a=e.body;_classCallCheck$5(this,o),this.type="Getter",this.name=s,this.body=a};IdentifierExpression_1=dist$1.IdentifierExpression=function o(e){var s=e.name;_classCallCheck$5(this,o),this.type="IdentifierExpression",this.name=s};dist$1.IfStatement=function o(e){var s=e.test,a=e.consequent,c=e.alternate;_classCallCheck$5(this,o),this.type="IfStatement",this.test=s,this.consequent=a,this.alternate=c};dist$1.Import=function o(e){var s=e.defaultBinding,a=e.namedImports,c=e.moduleSpecifier;_classCallCheck$5(this,o),this.type="Import",this.defaultBinding=s,this.namedImports=a,this.moduleSpecifier=c};dist$1.ImportNamespace=function o(e){var s=e.defaultBinding,a=e.namespaceBinding,c=e.moduleSpecifier;_classCallCheck$5(this,o),this.type="ImportNamespace",this.defaultBinding=s,this.namespaceBinding=a,this.moduleSpecifier=c};dist$1.ImportSpecifier=function o(e){var s=e.name,a=e.binding;_classCallCheck$5(this,o),this.type="ImportSpecifier",this.name=s,this.binding=a};dist$1.LabeledStatement=function o(e){var s=e.label,a=e.body;_classCallCheck$5(this,o),this.type="LabeledStatement",this.label=s,this.body=a};dist$1.LiteralBooleanExpression=function o(e){var s=e.value;_classCallCheck$5(this,o),this.type="LiteralBooleanExpression",this.value=s};dist$1.LiteralInfinityExpression=function o(){_classCallCheck$5(this,o),this.type="LiteralInfinityExpression"};dist$1.LiteralNullExpression=function o(){_classCallCheck$5(this,o),this.type="LiteralNullExpression"};LiteralNumericExpression_1=dist$1.LiteralNumericExpression=function o(e){var s=e.value;_classCallCheck$5(this,o),this.type="LiteralNumericExpression",this.value=s};dist$1.LiteralRegExpExpression=function o(e){var s=e.pattern,a=e.global,c=e.ignoreCase,h=e.multiLine,d=e.dotAll,g=e.unicode,_=e.sticky;_classCallCheck$5(this,o),this.type="LiteralRegExpExpression",this.pattern=s,this.global=a,this.ignoreCase=c,this.multiLine=h,this.dotAll=d,this.unicode=g,this.sticky=_};LiteralStringExpression_1=dist$1.LiteralStringExpression=function o(e){var s=e.value;_classCallCheck$5(this,o),this.type="LiteralStringExpression",this.value=s};dist$1.Method=function o(e){var s=e.isAsync,a=e.isGenerator,c=e.name,h=e.params,d=e.body;_classCallCheck$5(this,o),this.type="Method",this.isAsync=s,this.isGenerator=a,this.name=c,this.params=h,this.body=d};dist$1.Module=function o(e){var s=e.directives,a=e.items;_classCallCheck$5(this,o),this.type="Module",this.directives=s,this.items=a};dist$1.NewExpression=function o(e){var s=e.callee,a=e.arguments;_classCallCheck$5(this,o),this.type="NewExpression",this.callee=s,this.arguments=a};dist$1.NewTargetExpression=function o(){_classCallCheck$5(this,o),this.type="NewTargetExpression"};dist$1.ObjectAssignmentTarget=function o(e){var s=e.properties,a=e.rest;_classCallCheck$5(this,o),this.type="ObjectAssignmentTarget",this.properties=s,this.rest=a};dist$1.ObjectBinding=function o(e){var s=e.properties,a=e.rest;_classCallCheck$5(this,o),this.type="ObjectBinding",this.properties=s,this.rest=a};dist$1.ObjectExpression=function o(e){var s=e.properties;_classCallCheck$5(this,o),this.type="ObjectExpression",this.properties=s};ReturnStatement_1=dist$1.ReturnStatement=function o(e){var s=e.expression;_classCallCheck$5(this,o),this.type="ReturnStatement",this.expression=s};dist$1.Script=function o(e){var s=e.directives,a=e.statements;_classCallCheck$5(this,o),this.type="Script",this.directives=s,this.statements=a};dist$1.Setter=function o(e){var s=e.name,a=e.param,c=e.body;_classCallCheck$5(this,o),this.type="Setter",this.name=s,this.param=a,this.body=c};dist$1.ShorthandProperty=function o(e){var s=e.name;_classCallCheck$5(this,o),this.type="ShorthandProperty",this.name=s};dist$1.SpreadElement=function o(e){var s=e.expression;_classCallCheck$5(this,o),this.type="SpreadElement",this.expression=s};dist$1.SpreadProperty=function o(e){var s=e.expression;_classCallCheck$5(this,o),this.type="SpreadProperty",this.expression=s};dist$1.StaticMemberAssignmentTarget=function o(e){var s=e.object,a=e.property;_classCallCheck$5(this,o),this.type="StaticMemberAssignmentTarget",this.object=s,this.property=a};StaticMemberExpression_1=dist$1.StaticMemberExpression=function o(e){var s=e.object,a=e.property;_classCallCheck$5(this,o),this.type="StaticMemberExpression",this.object=s,this.property=a};dist$1.StaticPropertyName=function o(e){var s=e.value;_classCallCheck$5(this,o),this.type="StaticPropertyName",this.value=s};dist$1.Super=function o(){_classCallCheck$5(this,o),this.type="Super"};dist$1.SwitchCase=function o(e){var s=e.test,a=e.consequent;_classCallCheck$5(this,o),this.type="SwitchCase",this.test=s,this.consequent=a};dist$1.SwitchDefault=function o(e){var s=e.consequent;_classCallCheck$5(this,o),this.type="SwitchDefault",this.consequent=s};dist$1.SwitchStatement=function o(e){var s=e.discriminant,a=e.cases;_classCallCheck$5(this,o),this.type="SwitchStatement",this.discriminant=s,this.cases=a};dist$1.SwitchStatementWithDefault=function o(e){var s=e.discriminant,a=e.preDefaultCases,c=e.defaultCase,h=e.postDefaultCases;_classCallCheck$5(this,o),this.type="SwitchStatementWithDefault",this.discriminant=s,this.preDefaultCases=a,this.defaultCase=c,this.postDefaultCases=h};dist$1.TemplateElement=function o(e){var s=e.rawValue;_classCallCheck$5(this,o),this.type="TemplateElement",this.rawValue=s};dist$1.TemplateExpression=function o(e){var s=e.tag,a=e.elements;_classCallCheck$5(this,o),this.type="TemplateExpression",this.tag=s,this.elements=a};dist$1.ThisExpression=function o(){_classCallCheck$5(this,o),this.type="ThisExpression"};dist$1.ThrowStatement=function o(e){var s=e.expression;_classCallCheck$5(this,o),this.type="ThrowStatement",this.expression=s};dist$1.TryCatchStatement=function o(e){var s=e.body,a=e.catchClause;_classCallCheck$5(this,o),this.type="TryCatchStatement",this.body=s,this.catchClause=a};dist$1.TryFinallyStatement=function o(e){var s=e.body,a=e.catchClause,c=e.finalizer;_classCallCheck$5(this,o),this.type="TryFinallyStatement",this.body=s,this.catchClause=a,this.finalizer=c};dist$1.UnaryExpression=function o(e){var s=e.operator,a=e.operand;_classCallCheck$5(this,o),this.type="UnaryExpression",this.operator=s,this.operand=a};dist$1.UpdateExpression=function o(e){var s=e.isPrefix,a=e.operator,c=e.operand;_classCallCheck$5(this,o),this.type="UpdateExpression",this.isPrefix=s,this.operator=a,this.operand=c};dist$1.VariableDeclaration=function o(e){var s=e.kind,a=e.declarators;_classCallCheck$5(this,o),this.type="VariableDeclaration",this.kind=s,this.declarators=a};dist$1.VariableDeclarationStatement=function o(e){var s=e.declaration;_classCallCheck$5(this,o),this.type="VariableDeclarationStatement",this.declaration=s};dist$1.VariableDeclarator=function o(e){var s=e.binding,a=e.init;_classCallCheck$5(this,o),this.type="VariableDeclarator",this.binding=s,this.init=a};dist$1.WhileStatement=function o(e){var s=e.test,a=e.body;_classCallCheck$5(this,o),this.type="WhileStatement",this.test=s,this.body=a};dist$1.WithStatement=function o(e){var s=e.object,a=e.body;_classCallCheck$5(this,o),this.type="WithStatement",this.object=s,this.body=a};dist$1.YieldExpression=function o(e){var s=e.expression;_classCallCheck$5(this,o),this.type="YieldExpression",this.expression=s};dist$1.YieldGeneratorExpression=function o(e){var s=e.expression;_classCallCheck$5(this,o),this.type="YieldGeneratorExpression",this.expression=s};var dist={},minimalCodegen={};/* +object-assign +(c) Sindre Sorhus +@license MIT +*/var getOwnPropertySymbols=Object.getOwnPropertySymbols,hasOwnProperty=Object.prototype.hasOwnProperty,propIsEnumerable=Object.prototype.propertyIsEnumerable;function toObject(o){if(o==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(o)}function shouldUseNative(){try{if(!Object.assign)return!1;var o=new String("abc");if(o[5]="de",Object.getOwnPropertyNames(o)[0]==="5")return!1;for(var e={},s=0;s<10;s++)e["_"+String.fromCharCode(s)]=s;var a=Object.getOwnPropertyNames(e).map(function(h){return e[h]});if(a.join("")!=="0123456789")return!1;var c={};return"abcdefghijklmnopqrst".split("").forEach(function(h){c[h]=h}),Object.keys(Object.assign({},c)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}var objectAssign=shouldUseNative()?Object.assign:function(o,e){for(var s,a=toObject(o),c,h=1;h=48&&st<=55}s=[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279];function b(st){return st===32||st===9||st===11||st===12||st===160||st>=5760&&s.indexOf(st)>=0}function $(st){return st===10||st===13||st===8232||st===8233}function j(st){if(st<=65535)return String.fromCharCode(st);var rt=String.fromCharCode(Math.floor((st-65536)/1024)+55296),it=String.fromCharCode((st-65536)%1024+56320);return rt+it}for(a=new Array(128),h=0;h<128;++h)a[h]=h>=97&&h<=122||h>=65&&h<=90||h===36||h===95;for(c=new Array(128),h=0;h<128;++h)c[h]=h>=97&&h<=122||h>=65&&h<=90||h>=48&&h<=57||h===36||h===95;function _e(st){return st<128?a[st]:e.NonAsciiIdentifierStart.test(j(st))}function et(st){return st<128?c[st]:e.NonAsciiIdentifierPart.test(j(st))}function tt(st){return st<128?a[st]:o.NonAsciiIdentifierStart.test(j(st))}function nt(st){return st<128?c[st]:o.NonAsciiIdentifierPart.test(j(st))}code$1.exports={isDecimalDigit:d,isHexDigit:g,isOctalDigit:_,isWhiteSpace:b,isLineTerminator:$,isIdentifierStartES5:_e,isIdentifierPartES5:et,isIdentifierStartES6:tt,isIdentifierPartES6:nt}})();var keyword$1={exports:{}};(function(){var o=code$1.exports;function e(_e){switch(_e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"let":return!0;default:return!1}}function s(_e,et){return!et&&_e==="yield"?!1:a(_e,et)}function a(_e,et){if(et&&e(_e))return!0;switch(_e.length){case 2:return _e==="if"||_e==="in"||_e==="do";case 3:return _e==="var"||_e==="for"||_e==="new"||_e==="try";case 4:return _e==="this"||_e==="else"||_e==="case"||_e==="void"||_e==="with"||_e==="enum";case 5:return _e==="while"||_e==="break"||_e==="catch"||_e==="throw"||_e==="const"||_e==="yield"||_e==="class"||_e==="super";case 6:return _e==="return"||_e==="typeof"||_e==="delete"||_e==="switch"||_e==="export"||_e==="import";case 7:return _e==="default"||_e==="finally"||_e==="extends";case 8:return _e==="function"||_e==="continue"||_e==="debugger";case 10:return _e==="instanceof";default:return!1}}function c(_e,et){return _e==="null"||_e==="true"||_e==="false"||s(_e,et)}function h(_e,et){return _e==="null"||_e==="true"||_e==="false"||a(_e,et)}function d(_e){return _e==="eval"||_e==="arguments"}function g(_e){var et,tt,nt;if(_e.length===0||(nt=_e.charCodeAt(0),!o.isIdentifierStartES5(nt)))return!1;for(et=1,tt=_e.length;et=tt||(st=_e.charCodeAt(et),!(56320<=st&&st<=57343)))return!1;nt=_(nt,st)}if(!rt(nt))return!1;rt=o.isIdentifierPartES6}return!0}function $(_e,et){return g(_e)&&!c(_e,et)}function j(_e,et){return b(_e)&&!h(_e,et)}keyword$1.exports={isKeywordES5:s,isKeywordES6:a,isReservedWordES5:c,isReservedWordES6:h,isRestrictedWord:d,isIdentifierNameES5:g,isIdentifierNameES6:b,isIdentifierES5:$,isIdentifierES6:j}})();(function(){utils.ast=ast.exports,utils.code=code$1.exports,utils.keyword=keyword$1.exports})();var coderep={};Object.defineProperty(coderep,"__esModule",{value:!0});var _createClass$4=function(){function o(e,s){for(var a=0;a":Precedence.Relational,"<=":Precedence.Relational,">=":Precedence.Relational,in:Precedence.Relational,instanceof:Precedence.Relational,"<<":Precedence.BitwiseSHIFT,">>":Precedence.BitwiseSHIFT,">>>":Precedence.BitwiseSHIFT,"+":Precedence.Additive,"-":Precedence.Additive,"*":Precedence.Multiplicative,"%":Precedence.Multiplicative,"/":Precedence.Multiplicative,"**":Precedence.Exponential};function getPrecedence(o){switch(o.type){case"ArrayExpression":case"FunctionExpression":case"ClassExpression":case"IdentifierExpression":case"AssignmentTargetIdentifier":case"NewTargetExpression":case"Super":case"LiteralBooleanExpression":case"LiteralNullExpression":case"LiteralNumericExpression":case"LiteralInfinityExpression":case"LiteralRegExpExpression":case"LiteralStringExpression":case"ObjectExpression":case"ThisExpression":case"SpreadElement":case"FunctionBody":return Precedence.Primary;case"ArrowExpression":case"AssignmentExpression":case"CompoundAssignmentExpression":case"YieldExpression":case"YieldGeneratorExpression":return Precedence.Assignment;case"ConditionalExpression":return Precedence.Conditional;case"ComputedMemberExpression":case"StaticMemberExpression":case"ComputedMemberAssignmentTarget":case"StaticMemberAssignmentTarget":switch(o.object.type){case"CallExpression":case"ComputedMemberExpression":case"StaticMemberExpression":case"TemplateExpression":return getPrecedence(o.object);default:return Precedence.Member}case"TemplateExpression":if(o.tag==null)return Precedence.Member;switch(o.tag.type){case"CallExpression":case"ComputedMemberExpression":case"StaticMemberExpression":case"TemplateExpression":return getPrecedence(o.tag);default:return Precedence.Member}case"BinaryExpression":return BinaryPrecedence[o.operator];case"CallExpression":return Precedence.Call;case"NewExpression":return o.arguments.length===0?Precedence.New:Precedence.Member;case"UpdateExpression":return o.isPrefix?Precedence.Prefix:Precedence.Postfix;case"AwaitExpression":case"UnaryExpression":return Precedence.Prefix;default:throw new Error("unreachable: "+o.type)}}function escapeStringLiteral(o){for(var e="",s=0,a=0,c=0,h=o.length;cs?"'":'"';e+=g;for(var _=0;_1&&arguments[1]!==void 0?arguments[1]:!1;_classCallCheck$4(this,e);var c=_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return c.token=s,c.isRegExp=a,c}return _createClass$4(e,[{key:"emit",value:function(a){a.put(this.token,this.isRegExp)}}]),e}(CodeRep);coderep.RawToken=function(o){_inherits$2(e,o);function e(s){_classCallCheck$4(this,e);var a=_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return a.token=s,a}return _createClass$4(e,[{key:"emit",value:function(a){a.putRaw(this.token)}}]),e}(CodeRep);coderep.NumberCodeRep=function(o){_inherits$2(e,o);function e(s){_classCallCheck$4(this,e);var a=_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return a.number=s,a}return _createClass$4(e,[{key:"emit",value:function(a){a.putNumber(this.number)}}]),e}(CodeRep);coderep.Paren=function(o){_inherits$2(e,o);function e(s){_classCallCheck$4(this,e);var a=_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return a.expr=s,a}return _createClass$4(e,[{key:"emit",value:function(a){a.put("("),this.expr.emit(a,!1),a.put(")")}},{key:"forEach",value:function(a){a(this),this.expr.forEach(a)}}]),e}(CodeRep);coderep.Bracket=function(o){_inherits$2(e,o);function e(s){_classCallCheck$4(this,e);var a=_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return a.expr=s,a}return _createClass$4(e,[{key:"emit",value:function(a){a.put("["),this.expr.emit(a,!1),a.put("]")}},{key:"forEach",value:function(a){a(this),this.expr.forEach(a)}}]),e}(CodeRep);coderep.Brace=function(o){_inherits$2(e,o);function e(s){_classCallCheck$4(this,e);var a=_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return a.expr=s,a}return _createClass$4(e,[{key:"emit",value:function(a){a.put("{"),this.expr.emit(a,!1),a.put("}")}},{key:"forEach",value:function(a){a(this),this.expr.forEach(a)}}]),e}(CodeRep);coderep.NoIn=function(o){_inherits$2(e,o);function e(s){_classCallCheck$4(this,e);var a=_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return a.expr=s,a}return _createClass$4(e,[{key:"emit",value:function(a){this.expr.emit(a,!0)}},{key:"forEach",value:function(a){a(this),this.expr.forEach(a)}}]),e}(CodeRep);coderep.ContainsIn=function(o){_inherits$2(e,o);function e(s){_classCallCheck$4(this,e);var a=_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return a.expr=s,a}return _createClass$4(e,[{key:"emit",value:function(a,c){c?(a.put("("),this.expr.emit(a,!1),a.put(")")):this.expr.emit(a,!1)}},{key:"forEach",value:function(a){a(this),this.expr.forEach(a)}}]),e}(CodeRep);coderep.Seq=function(o){_inherits$2(e,o);function e(s){_classCallCheck$4(this,e);var a=_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return a.children=s,a}return _createClass$4(e,[{key:"emit",value:function(a,c){this.children.forEach(function(h){return h.emit(a,c)})}},{key:"forEach",value:function(a){a(this),this.children.forEach(function(c){return c.forEach(a)})}}]),e}(CodeRep);coderep.Semi=function(o){_inherits$2(e,o);function e(){return _classCallCheck$4(this,e),_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,";"))}return e}(Token);coderep.CommaSep=function(o){_inherits$2(e,o);function e(s){_classCallCheck$4(this,e);var a=_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return a.children=s,a}return _createClass$4(e,[{key:"emit",value:function(a,c){var h=!0;this.children.forEach(function(d){h?h=!1:a.put(","),d.emit(a,c)})}},{key:"forEach",value:function(a){a(this),this.children.forEach(function(c){return c.forEach(a)})}}]),e}(CodeRep);coderep.SemiOp=function(o){_inherits$2(e,o);function e(){return _classCallCheck$4(this,e),_possibleConstructorReturn$2(this,(e.__proto__||Object.getPrototypeOf(e)).call(this))}return _createClass$4(e,[{key:"emit",value:function(a){a.putOptionalSemi()}}]),e}(CodeRep);Object.defineProperty(minimalCodegen,"__esModule",{value:!0});var _createClass$3=function(){function o(e,s){for(var a=0;a1&&arguments[1]!==void 0?arguments[1]:!1;return new _coderep$1.Token(o,e)}function paren(o){return new _coderep$1.Paren(o)}function brace(o){return new _coderep$1.Brace(o)}function bracket$1(o){return new _coderep$1.Bracket(o)}function noIn$1(o){return new _coderep$1.NoIn(o)}function markContainsIn$1(o){return o.containsIn?new _coderep$1.ContainsIn(o):o}function seq$1(){for(var o=arguments.length,e=Array(o),s=0;s0&&c[c.length-1]==null&&(h=seq$1(h,t$1(","))),bracket$1(h)}},{key:"reduceAwaitExpression",value:function(s,a){var c=a.expression;return seq$1(t$1("await"),p$1(s.expression,(0,_coderep$1.getPrecedence)(s),c))}},{key:"reduceSpreadElement",value:function(s,a){var c=a.expression;return seq$1(t$1("..."),p$1(s.expression,_coderep$1.Precedence.Assignment,c))}},{key:"reduceSpreadProperty",value:function(s,a){var c=a.expression;return seq$1(t$1("..."),getAssignmentExpr(c))}},{key:"reduceAssignmentExpression",value:function(s,a){var c=a.binding,h=a.expression,d=c,g=h,_=h.containsIn,b=c.startsWithCurly,$=c.startsWithLetSquareBracket,j=c.startsWithFunctionOrClass;return(0,_coderep$1.getPrecedence)(s.expression)<(0,_coderep$1.getPrecedence)(s)&&(g=paren(g),_=!1),(0,_objectAssign2$1.default)(seq$1(d,t$1("="),g),{containsIn:_,startsWithCurly:b,startsWithLetSquareBracket:$,startsWithFunctionOrClass:j})}},{key:"reduceAssignmentTargetIdentifier",value:function(s){var a=t$1(s.name);return s.name==="let"&&(a.startsWithLet=!0),a}},{key:"reduceAssignmentTargetWithDefault",value:function(s,a){var c=a.binding,h=a.init;return seq$1(c,t$1("="),p$1(s.init,_coderep$1.Precedence.Assignment,h))}},{key:"reduceCompoundAssignmentExpression",value:function(s,a){var c=a.binding,h=a.expression,d=c,g=h,_=h.containsIn,b=c.startsWithCurly,$=c.startsWithLetSquareBracket,j=c.startsWithFunctionOrClass;return(0,_coderep$1.getPrecedence)(s.expression)<(0,_coderep$1.getPrecedence)(s)&&(g=paren(g),_=!1),(0,_objectAssign2$1.default)(seq$1(d,t$1(s.operator),g),{containsIn:_,startsWithCurly:b,startsWithLetSquareBracket:$,startsWithFunctionOrClass:j})}},{key:"reduceBinaryExpression",value:function(s,a){var c=a.left,h=a.right,d=c,g=c.startsWithCurly,_=c.startsWithLetSquareBracket,b=c.startsWithFunctionOrClass,$=c.containsIn,j=s.operator==="**";((0,_coderep$1.getPrecedence)(s.left)<(0,_coderep$1.getPrecedence)(s)||j&&((0,_coderep$1.getPrecedence)(s.left)===(0,_coderep$1.getPrecedence)(s)||s.left.type==="UnaryExpression"))&&(d=paren(d),g=!1,_=!1,b=!1,$=!1);var _e=h,et=h.containsIn;return((0,_coderep$1.getPrecedence)(s.right)<(0,_coderep$1.getPrecedence)(s)||!j&&(0,_coderep$1.getPrecedence)(s.right)===(0,_coderep$1.getPrecedence)(s))&&(_e=paren(_e),et=!1),(0,_objectAssign2$1.default)(seq$1(d,t$1(s.operator),_e),{containsIn:$||et||s.operator==="in",containsGroup:s.operator===",",startsWithCurly:g,startsWithLetSquareBracket:_,startsWithFunctionOrClass:b})}},{key:"reduceBindingWithDefault",value:function(s,a){var c=a.binding,h=a.init;return seq$1(c,t$1("="),p$1(s.init,_coderep$1.Precedence.Assignment,h))}},{key:"reduceBindingIdentifier",value:function(s){var a=t$1(s.name);return s.name==="let"&&(a.startsWithLet=!0),a}},{key:"reduceArrayAssignmentTarget",value:function(s,a){var c=a.elements,h=a.rest,d=void 0;return c.length===0?d=h==null?empty$2():seq$1(t$1("..."),h):(c=c.concat(h==null?[]:[seq$1(t$1("..."),h)]),d=commaSep(c.map(getAssignmentExpr)),c.length>0&&c[c.length-1]==null&&(d=seq$1(d,t$1(",")))),bracket$1(d)}},{key:"reduceArrayBinding",value:function(s,a){var c=a.elements,h=a.rest,d=void 0;return c.length===0?d=h==null?empty$2():seq$1(t$1("..."),h):(c=c.concat(h==null?[]:[seq$1(t$1("..."),h)]),d=commaSep(c.map(getAssignmentExpr)),c.length>0&&c[c.length-1]==null&&(d=seq$1(d,t$1(",")))),bracket$1(d)}},{key:"reduceObjectAssignmentTarget",value:function(s,a){var c=a.properties,h=a.rest,d=commaSep(c);c.length===0?d=h==null?empty$2():seq$1(t$1("..."),h):d=h==null?d:seq$1(d,t$1(","),t$1("..."),h);var g=brace(d);return g.startsWithCurly=!0,g}},{key:"reduceObjectBinding",value:function(s,a){var c=a.properties,h=a.rest,d=commaSep(c);c.length===0?d=h==null?empty$2():seq$1(t$1("..."),h):d=h==null?d:seq$1(d,t$1(","),t$1("..."),h);var g=brace(d);return g.startsWithCurly=!0,g}},{key:"reduceAssignmentTargetPropertyIdentifier",value:function(s,a){var c=a.binding,h=a.init;return s.init==null?c:seq$1(c,t$1("="),p$1(s.init,_coderep$1.Precedence.Assignment,h))}},{key:"reduceAssignmentTargetPropertyProperty",value:function(s,a){var c=a.name,h=a.binding;return seq$1(c,t$1(":"),h)}},{key:"reduceBindingPropertyIdentifier",value:function(s,a){var c=a.binding,h=a.init;return s.init==null?c:seq$1(c,t$1("="),p$1(s.init,_coderep$1.Precedence.Assignment,h))}},{key:"reduceBindingPropertyProperty",value:function(s,a){var c=a.name,h=a.binding;return seq$1(c,t$1(":"),h)}},{key:"reduceBlock",value:function(s,a){var c=a.statements;return brace(seq$1.apply(void 0,_toConsumableArray$2(c)))}},{key:"reduceBlockStatement",value:function(s,a){var c=a.block;return c}},{key:"reduceBreakStatement",value:function(s){return seq$1(t$1("break"),s.label?t$1(s.label):empty$2(),semiOp())}},{key:"reduceCallExpression",value:function(s,a){var c=a.callee,h=a.arguments,d=h.map(function(g,_){return p$1(s.arguments[_],_coderep$1.Precedence.Assignment,g)});return(0,_objectAssign2$1.default)(seq$1(p$1(s.callee,(0,_coderep$1.getPrecedence)(s),c),paren(commaSep(d))),{startsWithCurly:c.startsWithCurly,startsWithLet:c.startsWithLet,startsWithLetSquareBracket:c.startsWithLetSquareBracket,startsWithFunctionOrClass:c.startsWithFunctionOrClass})}},{key:"reduceCatchClause",value:function(s,a){var c=a.binding,h=a.body;return seq$1(t$1("catch"),paren(c),h)}},{key:"reduceClassDeclaration",value:function(s,a){var c=a.name,h=a.super,d=a.elements,g=seq$1(t$1("class"),s.name.name==="*default*"?empty$2():c);return h!=null&&(g=seq$1(g,t$1("extends"),p$1(s.super,_coderep$1.Precedence.New,h))),g=seq$1.apply(void 0,[g,t$1("{")].concat(_toConsumableArray$2(d),[t$1("}")])),g}},{key:"reduceClassExpression",value:function(s,a){var c=a.name,h=a.super,d=a.elements,g=t$1("class");return c!=null&&(g=seq$1(g,c)),h!=null&&(g=seq$1(g,t$1("extends"),p$1(s.super,_coderep$1.Precedence.New,h))),g=seq$1.apply(void 0,[g,t$1("{")].concat(_toConsumableArray$2(d),[t$1("}")])),g.startsWithFunctionOrClass=!0,g}},{key:"reduceClassElement",value:function(s,a){var c=a.method;return s.isStatic?seq$1(t$1("static"),c):c}},{key:"reduceComputedMemberAssignmentTarget",value:function(s,a){var c=a.object,h=a.expression,d=c.startsWithLetSquareBracket||s.object.type==="IdentifierExpression"&&s.object.name==="let";return(0,_objectAssign2$1.default)(seq$1(p$1(s.object,(0,_coderep$1.getPrecedence)(s),c),bracket$1(h)),{startsWithLet:c.startsWithLet,startsWithLetSquareBracket:d,startsWithCurly:c.startsWithCurly,startsWithFunctionOrClass:c.startsWithFunctionOrClass})}},{key:"reduceComputedMemberExpression",value:function(s,a){var c=a.object,h=a.expression,d=c.startsWithLetSquareBracket||s.object.type==="IdentifierExpression"&&s.object.name==="let";return(0,_objectAssign2$1.default)(seq$1(p$1(s.object,(0,_coderep$1.getPrecedence)(s),c),bracket$1(h)),{startsWithLet:c.startsWithLet,startsWithLetSquareBracket:d,startsWithCurly:c.startsWithCurly,startsWithFunctionOrClass:c.startsWithFunctionOrClass})}},{key:"reduceComputedPropertyName",value:function(s,a){var c=a.expression;return bracket$1(p$1(s.expression,_coderep$1.Precedence.Assignment,c))}},{key:"reduceConditionalExpression",value:function(s,a){var c=a.test,h=a.consequent,d=a.alternate,g=c.containsIn||d.containsIn,_=c.startsWithCurly,b=c.startsWithLetSquareBracket,$=c.startsWithFunctionOrClass;return(0,_objectAssign2$1.default)(seq$1(p$1(s.test,_coderep$1.Precedence.LogicalOR,c),t$1("?"),p$1(s.consequent,_coderep$1.Precedence.Assignment,h),t$1(":"),p$1(s.alternate,_coderep$1.Precedence.Assignment,d)),{containsIn:g,startsWithCurly:_,startsWithLetSquareBracket:b,startsWithFunctionOrClass:$})}},{key:"reduceContinueStatement",value:function(s){return seq$1(t$1("continue"),s.label?t$1(s.label):empty$2(),semiOp())}},{key:"reduceDataProperty",value:function(s,a){var c=a.name,h=a.expression;return seq$1(c,t$1(":"),getAssignmentExpr(h))}},{key:"reduceDebuggerStatement",value:function(){return seq$1(t$1("debugger"),semiOp())}},{key:"reduceDoWhileStatement",value:function(s,a){var c=a.body,h=a.test;return seq$1(t$1("do"),c,t$1("while"),paren(h),semiOp())}},{key:"reduceEmptyStatement",value:function(){return semi()}},{key:"reduceExpressionStatement",value:function(s,a){var c=a.expression,h=c.startsWithCurly||c.startsWithLetSquareBracket||c.startsWithFunctionOrClass;return seq$1(h?paren(c):c,semiOp())}},{key:"reduceForInStatement",value:function(s,a){var c=a.left,h=a.right,d=a.body;return c=s.left.type==="VariableDeclaration"?noIn$1(markContainsIn$1(c)):c,(0,_objectAssign2$1.default)(seq$1(t$1("for"),paren(seq$1(c.startsWithLet?paren(c):c,t$1("in"),h)),d),{endsWithMissingElse:d.endsWithMissingElse})}},{key:"reduceForOfStatement",value:function(s,a){var c=a.left,h=a.right,d=a.body;return c=s.left.type==="VariableDeclaration"?noIn$1(markContainsIn$1(c)):c,(0,_objectAssign2$1.default)(seq$1(t$1("for"),paren(seq$1(c.startsWithLet?paren(c):c,t$1("of"),p$1(s.right,_coderep$1.Precedence.Assignment,h))),d),{endsWithMissingElse:d.endsWithMissingElse})}},{key:"reduceForStatement",value:function(s,a){var c=a.init,h=a.test,d=a.update,g=a.body;return c&&(c.startsWithLetSquareBracket&&(c=paren(c)),c=noIn$1(markContainsIn$1(c))),(0,_objectAssign2$1.default)(seq$1(t$1("for"),paren(seq$1(c||empty$2(),semi(),h||empty$2(),semi(),d||empty$2())),g),{endsWithMissingElse:g.endsWithMissingElse})}},{key:"reduceForAwaitStatement",value:function(s,a){var c=a.left,h=a.right,d=a.body;return c=s.left.type==="VariableDeclaration"?noIn$1(markContainsIn$1(c)):c,(0,_objectAssign2$1.default)(seq$1(t$1("for"),t$1("await"),paren(seq$1(c.startsWithLet?paren(c):c,t$1("of"),p$1(s.right,_coderep$1.Precedence.Assignment,h))),d),{endsWithMissingElse:d.endsWithMissingElse})}},{key:"reduceFunctionBody",value:function(s,a){var c=a.directives,h=a.statements;return h.length&&(h[0]=this.parenToAvoidBeingDirective(s.statements[0],h[0])),brace(seq$1.apply(void 0,_toConsumableArray$2(c).concat(_toConsumableArray$2(h))))}},{key:"reduceFunctionDeclaration",value:function(s,a){var c=a.name,h=a.params,d=a.body;return seq$1(s.isAsync?t$1("async"):empty$2(),t$1("function"),s.isGenerator?t$1("*"):empty$2(),s.name.name==="*default*"?empty$2():c,h,d)}},{key:"reduceFunctionExpression",value:function(s,a){var c=a.name,h=a.params,d=a.body,g=seq$1(s.isAsync?t$1("async"):empty$2(),t$1("function"),s.isGenerator?t$1("*"):empty$2(),c||empty$2(),h,d);return g.startsWithFunctionOrClass=!0,g}},{key:"reduceFormalParameters",value:function(s,a){var c=a.items,h=a.rest;return paren(commaSep(c.concat(h==null?[]:[seq$1(t$1("..."),h)])))}},{key:"reduceArrowExpression",value:function(s,a){var c=a.params,h=a.body;c=this.regenerateArrowParams(s.params,c);var d=!1;return s.body.type!=="FunctionBody"&&(h.startsWithCurly?h=paren(h):h.containsIn&&(d=!0)),(0,_objectAssign2$1.default)(seq$1(s.isAsync?t$1("async"):empty$2(),c,t$1("=>"),p$1(s.body,_coderep$1.Precedence.Assignment,h)),{containsIn:d})}},{key:"reduceGetter",value:function(s,a){var c=a.name,h=a.body;return seq$1(t$1("get"),c,paren(empty$2()),h)}},{key:"reduceIdentifierExpression",value:function(s){var a=t$1(s.name);return s.name==="let"&&(a.startsWithLet=!0),a}},{key:"reduceIfStatement",value:function(s,a){var c=a.test,h=a.consequent,d=a.alternate;return d&&h.endsWithMissingElse&&(h=brace(h)),(0,_objectAssign2$1.default)(seq$1(t$1("if"),paren(c),h,d?seq$1(t$1("else"),d):empty$2()),{endsWithMissingElse:d?d.endsWithMissingElse:!0})}},{key:"reduceImport",value:function(s,a){var c=a.defaultBinding,h=a.namedImports,d=[];return c!=null&&d.push(c),h.length>0&&d.push(brace(commaSep(h))),d.length===0?seq$1(t$1("import"),t$1((0,_coderep$1.escapeStringLiteral)(s.moduleSpecifier)),semiOp()):seq$1(t$1("import"),commaSep(d),t$1("from"),t$1((0,_coderep$1.escapeStringLiteral)(s.moduleSpecifier)),semiOp())}},{key:"reduceImportNamespace",value:function(s,a){var c=a.defaultBinding,h=a.namespaceBinding;return seq$1(t$1("import"),c==null?empty$2():seq$1(c,t$1(",")),t$1("*"),t$1("as"),h,t$1("from"),t$1((0,_coderep$1.escapeStringLiteral)(s.moduleSpecifier)),semiOp())}},{key:"reduceImportSpecifier",value:function(s,a){var c=a.binding;return s.name==null?c:seq$1(t$1(s.name),t$1("as"),c)}},{key:"reduceExportAllFrom",value:function(s){return seq$1(t$1("export"),t$1("*"),t$1("from"),t$1((0,_coderep$1.escapeStringLiteral)(s.moduleSpecifier)),semiOp())}},{key:"reduceExportFrom",value:function(s,a){var c=a.namedExports;return seq$1(t$1("export"),brace(commaSep(c)),t$1("from"),t$1((0,_coderep$1.escapeStringLiteral)(s.moduleSpecifier)),semiOp())}},{key:"reduceExportLocals",value:function(s,a){var c=a.namedExports;return seq$1(t$1("export"),brace(commaSep(c)),semiOp())}},{key:"reduceExport",value:function(s,a){var c=a.declaration;switch(s.declaration.type){case"FunctionDeclaration":case"ClassDeclaration":break;default:c=seq$1(c,semiOp())}return seq$1(t$1("export"),c)}},{key:"reduceExportDefault",value:function(s,a){var c=a.body;switch(c=c.startsWithFunctionOrClass?paren(c):c,s.body.type){case"FunctionDeclaration":case"ClassDeclaration":return seq$1(t$1("export default"),c);default:return seq$1(t$1("export default"),p$1(s.body,_coderep$1.Precedence.Assignment,c),semiOp())}}},{key:"reduceExportFromSpecifier",value:function(s){return s.exportedName==null?t$1(s.name):seq$1(t$1(s.name),t$1("as"),t$1(s.exportedName))}},{key:"reduceExportLocalSpecifier",value:function(s,a){var c=a.name;return s.exportedName==null?c:seq$1(c,t$1("as"),t$1(s.exportedName))}},{key:"reduceLabeledStatement",value:function(s,a){var c=a.body;return(0,_objectAssign2$1.default)(seq$1(t$1(s.label+":"),c),{endsWithMissingElse:c.endsWithMissingElse})}},{key:"reduceLiteralBooleanExpression",value:function(s){return t$1(s.value.toString())}},{key:"reduceLiteralNullExpression",value:function(){return t$1("null")}},{key:"reduceLiteralInfinityExpression",value:function(){return t$1("2e308")}},{key:"reduceLiteralNumericExpression",value:function(s){return new _coderep$1.NumberCodeRep(s.value)}},{key:"reduceLiteralRegExpExpression",value:function(s){return t$1("/"+s.pattern+"/"+(s.global?"g":"")+(s.ignoreCase?"i":"")+(s.multiLine?"m":"")+(s.dotAll?"s":"")+(s.unicode?"u":"")+(s.sticky?"y":""),!0)}},{key:"reduceLiteralStringExpression",value:function(s){return t$1((0,_coderep$1.escapeStringLiteral)(s.value))}},{key:"reduceMethod",value:function(s,a){var c=a.name,h=a.params,d=a.body;return seq$1(s.isAsync?t$1("async"):empty$2(),s.isGenerator?t$1("*"):empty$2(),c,h,d)}},{key:"reduceModule",value:function(s,a){var c=a.directives,h=a.items;return h.length&&(h[0]=this.parenToAvoidBeingDirective(s.items[0],h[0])),seq$1.apply(void 0,_toConsumableArray$2(c).concat(_toConsumableArray$2(h)))}},{key:"reduceNewExpression",value:function(s,a){var c=a.callee,h=a.arguments,d=h.map(function(_,b){return p$1(s.arguments[b],_coderep$1.Precedence.Assignment,_)}),g=(0,_coderep$1.getPrecedence)(s.callee)===_coderep$1.Precedence.Call?paren(c):p$1(s.callee,(0,_coderep$1.getPrecedence)(s),c);return seq$1(t$1("new"),g,h.length===0?empty$2():paren(commaSep(d)))}},{key:"reduceNewTargetExpression",value:function(){return t$1("new.target")}},{key:"reduceObjectExpression",value:function(s,a){var c=a.properties,h=brace(commaSep(c));return h.startsWithCurly=!0,h}},{key:"reduceUpdateExpression",value:function(s,a){var c=a.operand;return s.isPrefix?this.reduceUnaryExpression.apply(this,arguments):(0,_objectAssign2$1.default)(seq$1(p$1(s.operand,_coderep$1.Precedence.New,c),t$1(s.operator)),{startsWithCurly:c.startsWithCurly,startsWithLetSquareBracket:c.startsWithLetSquareBracket,startsWithFunctionOrClass:c.startsWithFunctionOrClass})}},{key:"reduceUnaryExpression",value:function(s,a){var c=a.operand;return seq$1(t$1(s.operator),p$1(s.operand,(0,_coderep$1.getPrecedence)(s),c))}},{key:"reduceReturnStatement",value:function(s,a){var c=a.expression;return seq$1(t$1("return"),c||empty$2(),semiOp())}},{key:"reduceScript",value:function(s,a){var c=a.directives,h=a.statements;return h.length&&(h[0]=this.parenToAvoidBeingDirective(s.statements[0],h[0])),seq$1.apply(void 0,_toConsumableArray$2(c).concat(_toConsumableArray$2(h)))}},{key:"reduceSetter",value:function(s,a){var c=a.name,h=a.param,d=a.body;return seq$1(t$1("set"),c,paren(h),d)}},{key:"reduceShorthandProperty",value:function(s,a){var c=a.name;return c}},{key:"reduceStaticMemberAssignmentTarget",value:function(s,a){var c=a.object,h=seq$1(p$1(s.object,(0,_coderep$1.getPrecedence)(s),c),t$1("."),t$1(s.property));return h.startsWithLet=c.startsWithLet,h.startsWithCurly=c.startsWithCurly,h.startsWithLetSquareBracket=c.startsWithLetSquareBracket,h.startsWithFunctionOrClass=c.startsWithFunctionOrClass,h}},{key:"reduceStaticMemberExpression",value:function(s,a){var c=a.object,h=seq$1(p$1(s.object,(0,_coderep$1.getPrecedence)(s),c),t$1("."),t$1(s.property));return h.startsWithLet=c.startsWithLet,h.startsWithCurly=c.startsWithCurly,h.startsWithLetSquareBracket=c.startsWithLetSquareBracket,h.startsWithFunctionOrClass=c.startsWithFunctionOrClass,h}},{key:"reduceStaticPropertyName",value:function(s){if(_esutils$1.keyword.isIdentifierNameES6(s.value))return t$1(s.value);var a=parseFloat(s.value);return a>=0&&a.toString()===s.value?new _coderep$1.NumberCodeRep(a):t$1((0,_coderep$1.escapeStringLiteral)(s.value))}},{key:"reduceSuper",value:function(){return t$1("super")}},{key:"reduceSwitchCase",value:function(s,a){var c=a.test,h=a.consequent;return seq$1(t$1("case"),c,t$1(":"),seq$1.apply(void 0,_toConsumableArray$2(h)))}},{key:"reduceSwitchDefault",value:function(s,a){var c=a.consequent;return seq$1(t$1("default:"),seq$1.apply(void 0,_toConsumableArray$2(c)))}},{key:"reduceSwitchStatement",value:function(s,a){var c=a.discriminant,h=a.cases;return seq$1(t$1("switch"),paren(c),brace(seq$1.apply(void 0,_toConsumableArray$2(h))))}},{key:"reduceSwitchStatementWithDefault",value:function(s,a){var c=a.discriminant,h=a.preDefaultCases,d=a.defaultCase,g=a.postDefaultCases;return seq$1(t$1("switch"),paren(c),brace(seq$1.apply(void 0,_toConsumableArray$2(h).concat([d],_toConsumableArray$2(g)))))}},{key:"reduceTemplateExpression",value:function(s,a){var c=a.tag,h=a.elements,d=s.tag==null?empty$2():p$1(s.tag,(0,_coderep$1.getPrecedence)(s),c);d=seq$1(d,t$1("`"));for(var g=0,_=s.elements.length;g<_;++g)s.elements[g].type==="TemplateElement"?d=seq$1(d,g>0?t$1("}"):empty$2(),h[g],g<_-1?t$1("${"):empty$2()):d=seq$1(d,h[g]);return d=seq$1(d,t$1("`")),s.tag!=null&&(d.startsWithCurly=c.startsWithCurly,d.startsWithLet=c.startsWithLet,d.startsWithLetSquareBracket=c.startsWithLetSquareBracket,d.startsWithFunctionOrClass=c.startsWithFunctionOrClass),d}},{key:"reduceTemplateElement",value:function(s){return new _coderep$1.RawToken(s.rawValue)}},{key:"reduceThisExpression",value:function(){return t$1("this")}},{key:"reduceThrowStatement",value:function(s,a){var c=a.expression;return seq$1(t$1("throw"),c,semiOp())}},{key:"reduceTryCatchStatement",value:function(s,a){var c=a.body,h=a.catchClause;return seq$1(t$1("try"),c,h)}},{key:"reduceTryFinallyStatement",value:function(s,a){var c=a.body,h=a.catchClause,d=a.finalizer;return seq$1(t$1("try"),c,h||empty$2(),t$1("finally"),d)}},{key:"reduceYieldExpression",value:function(s,a){var c=a.expression;return s.expression==null?t$1("yield"):(0,_objectAssign2$1.default)(seq$1(t$1("yield"),p$1(s.expression,(0,_coderep$1.getPrecedence)(s),c)),{containsIn:c.containsIn})}},{key:"reduceYieldGeneratorExpression",value:function(s,a){var c=a.expression;return(0,_objectAssign2$1.default)(seq$1(t$1("yield"),t$1("*"),p$1(s.expression,(0,_coderep$1.getPrecedence)(s),c)),{containsIn:c.containsIn})}},{key:"reduceDirective",value:function(s){var a=s.rawValue.match(/(^|[^\\])(\\\\)*"/)?"'":'"';return seq$1(t$1(a+s.rawValue+a),semiOp())}},{key:"reduceVariableDeclaration",value:function(s,a){var c=a.declarators;return seq$1(t$1(s.kind),commaSep(c))}},{key:"reduceVariableDeclarationStatement",value:function(s,a){var c=a.declaration;return seq$1(c,semiOp())}},{key:"reduceVariableDeclarator",value:function(s,a){var c=a.binding,h=a.init,d=h&&h.containsIn&&!h.containsGroup;return h&&(h.containsGroup?h=paren(h):h=markContainsIn$1(h)),(0,_objectAssign2$1.default)(h==null?c:seq$1(c,t$1("="),h),{containsIn:d})}},{key:"reduceWhileStatement",value:function(s,a){var c=a.test,h=a.body;return(0,_objectAssign2$1.default)(seq$1(t$1("while"),paren(c),h),{endsWithMissingElse:h.endsWithMissingElse})}},{key:"reduceWithStatement",value:function(s,a){var c=a.object,h=a.body;return(0,_objectAssign2$1.default)(seq$1(t$1("with"),paren(c),h),{endsWithMissingElse:h.endsWithMissingElse})}}]),o}();minimalCodegen.default=MinimalCodeGen;var formattedCodegen={};Object.defineProperty(formattedCodegen,"__esModule",{value:!0});formattedCodegen.FormattedCodeGen=formattedCodegen.ExtensibleCodeGen=formattedCodegen.Sep=void 0;var _createClass$2=function(){function o(e,s){for(var a=0;a1&&arguments[1]!==void 0?arguments[1]:!1;return new _coderep.Token(s,a)}},{key:"p",value:function(s,a,c){return(0,_coderep.getPrecedence)(s)0&&h[h.length-1]==null&&(d=seq(d,this.sep(Sep.ARRAY_BEFORE_COMMA),this.t(","),this.sep(Sep.ARRAY_AFTER_COMMA))),this.bracket(d,Sep.ARRAY_INITIAL,Sep.ARRAY_FINAL)}},{key:"reduceAwaitExpression",value:function(s,a){var c=a.expression;return seq(this.t("await"),this.sep(Sep.AWAIT),this.p(s.expression,(0,_coderep.getPrecedence)(s),c))}},{key:"reduceSpreadElement",value:function(s,a){var c=a.expression;return seq(this.t("..."),this.sep(Sep.SPREAD),this.p(s.expression,_coderep.Precedence.Assignment,c))}},{key:"reduceSpreadProperty",value:function(s,a){var c=a.expression;return seq(this.t("..."),this.sep(Sep.SPREAD),this.getAssignmentExpr(c))}},{key:"reduceAssignmentExpression",value:function(s,a){var c=a.binding,h=a.expression,d=c,g=h,_=h.containsIn,b=c.startsWithCurly,$=c.startsWithLetSquareBracket,j=c.startsWithFunctionOrClass;return(0,_coderep.getPrecedence)(s.expression)<(0,_coderep.getPrecedence)(s)&&(g=this.paren(g,Sep.EXPRESSION_PAREN_BEFORE,Sep.EXPRESSION_PAREN_AFTER),_=!1),(0,_objectAssign2.default)(seq(d,this.sep(Sep.BEFORE_ASSIGN_OP("=")),this.t("="),this.sep(Sep.AFTER_ASSIGN_OP("=")),g),{containsIn:_,startsWithCurly:b,startsWithLetSquareBracket:$,startsWithFunctionOrClass:j})}},{key:"reduceAssignmentTargetIdentifier",value:function(s){var a=this.t(s.name);return s.name==="let"&&(a.startsWithLet=!0),a}},{key:"reduceAssignmentTargetWithDefault",value:function(s,a){var c=a.binding,h=a.init;return seq(c,this.sep(Sep.BEFORE_DEFAULT_EQUALS),this.t("="),this.sep(Sep.AFTER_DEFAULT_EQUALS),this.p(s.init,_coderep.Precedence.Assignment,h))}},{key:"reduceCompoundAssignmentExpression",value:function(s,a){var c=a.binding,h=a.expression,d=c,g=h,_=h.containsIn,b=c.startsWithCurly,$=c.startsWithLetSquareBracket,j=c.startsWithFunctionOrClass;return(0,_coderep.getPrecedence)(s.expression)<(0,_coderep.getPrecedence)(s)&&(g=this.paren(g,Sep.EXPRESSION_PAREN_BEFORE,Sep.EXPRESSION_PAREN_AFTER),_=!1),(0,_objectAssign2.default)(seq(d,this.sep(Sep.BEFORE_ASSIGN_OP(s.operator)),this.t(s.operator),this.sep(Sep.AFTER_ASSIGN_OP(s.operator)),g),{containsIn:_,startsWithCurly:b,startsWithLetSquareBracket:$,startsWithFunctionOrClass:j})}},{key:"reduceBinaryExpression",value:function(s,a){var c=a.left,h=a.right,d=c,g=c.startsWithCurly,_=c.startsWithLetSquareBracket,b=c.startsWithFunctionOrClass,$=c.containsIn,j=s.operator==="**";((0,_coderep.getPrecedence)(s.left)<(0,_coderep.getPrecedence)(s)||j&&((0,_coderep.getPrecedence)(s.left)===(0,_coderep.getPrecedence)(s)||s.left.type==="UnaryExpression"))&&(d=this.paren(d,Sep.EXPRESSION_PAREN_BEFORE,Sep.EXPRESSION_PAREN_AFTER),g=!1,_=!1,b=!1,$=!1);var _e=h,et=h.containsIn;return((0,_coderep.getPrecedence)(s.right)<(0,_coderep.getPrecedence)(s)||!j&&(0,_coderep.getPrecedence)(s.right)===(0,_coderep.getPrecedence)(s))&&(_e=this.paren(_e,Sep.EXPRESSION_PAREN_BEFORE,Sep.EXPRESSION_PAREN_AFTER),et=!1),(0,_objectAssign2.default)(seq(d,this.sep(Sep.BEFORE_BINOP(s.operator)),this.t(s.operator),this.sep(Sep.AFTER_BINOP(s.operator)),_e),{containsIn:$||et||s.operator==="in",containsGroup:s.operator===",",startsWithCurly:g,startsWithLetSquareBracket:_,startsWithFunctionOrClass:b})}},{key:"reduceBindingWithDefault",value:function(s,a){var c=a.binding,h=a.init;return seq(c,this.sep(Sep.BEFORE_DEFAULT_EQUALS),this.t("="),this.sep(Sep.AFTER_DEFAULT_EQUALS),this.p(s.init,_coderep.Precedence.Assignment,h))}},{key:"reduceBindingIdentifier",value:function(s){var a=this.t(s.name);return s.name==="let"&&(a.startsWithLet=!0),a}},{key:"reduceArrayAssignmentTarget",value:function(s,a){var c=this,h=a.elements,d=a.rest,g=void 0;return h.length===0?g=d==null?empty$1():seq(this.t("..."),this.sep(Sep.REST),d):(h=h.concat(d==null?[]:[seq(this.t("..."),this.sep(Sep.REST),d)]),g=this.commaSep(h.map(function(_){return c.getAssignmentExpr(_)}),Sep.ARRAY_BEFORE_COMMA,Sep.ARRAY_AFTER_COMMA),h.length>0&&h[h.length-1]==null&&(g=seq(g,this.sep(Sep.ARRAY_BEFORE_COMMA),this.t(","),this.sep(Sep.ARRAY_AFTER_COMMA)))),this.bracket(g,Sep.ARRAY_INITIAL,Sep.ARRAY_FINAL,Sep.ARRAY_EMPTY)}},{key:"reduceArrayBinding",value:function(s,a){var c=this,h=a.elements,d=a.rest,g=void 0;return h.length===0?g=d==null?empty$1():seq(this.t("..."),this.sep(Sep.REST),d):(h=h.concat(d==null?[]:[seq(this.t("..."),this.sep(Sep.REST),d)]),g=this.commaSep(h.map(function(_){return c.getAssignmentExpr(_)}),Sep.ARRAY_BEFORE_COMMA,Sep.ARRAY_AFTER_COMMA),h.length>0&&h[h.length-1]==null&&(g=seq(g,this.sep(Sep.ARRAY_BEFORE_COMMA),this.t(","),this.sep(Sep.ARRAY_AFTER_COMMA)))),this.bracket(g,Sep.ARRAY_INITIAL,Sep.ARRAY_FINAL,Sep.ARRAY_EMPTY)}},{key:"reduceObjectAssignmentTarget",value:function(s,a){var c=a.properties,h=a.rest,d=void 0;c.length===0?d=h==null?empty$1():seq(this.t("..."),this.sep(Sep.REST),h):(d=this.commaSep(c,Sep.OBJECT_BEFORE_COMMA,Sep.OBJECT_AFTER_COMMA),d=h==null?d:this.commaSep([d,seq(this.t("..."),this.sep(Sep.REST),h)],Sep.OBJECT_BEFORE_COMMA,Sep.OBJECT_AFTER_COMMA));var g=this.brace(d,s,Sep.OBJECT_BRACE_INITIAL,Sep.OBJECT_BRACE_FINAL,Sep.OBJECT_EMPTY);return g.startsWithCurly=!0,g}},{key:"reduceObjectBinding",value:function(s,a){var c=a.properties,h=a.rest,d=void 0;c.length===0?d=h==null?empty$1():seq(this.t("..."),this.sep(Sep.REST),h):(d=this.commaSep(c,Sep.OBJECT_BEFORE_COMMA,Sep.OBJECT_AFTER_COMMA),d=h==null?d:this.commaSep([d,seq(this.t("..."),this.sep(Sep.REST),h)],Sep.OBJECT_BEFORE_COMMA,Sep.OBJECT_AFTER_COMMA));var g=this.brace(d,s,Sep.OBJECT_BRACE_INITIAL,Sep.OBJECT_BRACE_FINAL,Sep.OBJECT_EMPTY);return g.startsWithCurly=!0,g}},{key:"reduceAssignmentTargetPropertyIdentifier",value:function(s,a){var c=a.binding,h=a.init;return s.init==null?c:seq(c,this.sep(Sep.BEFORE_DEFAULT_EQUALS),this.t("="),this.sep(Sep.AFTER_DEFAULT_EQUALS),this.p(s.init,_coderep.Precedence.Assignment,h))}},{key:"reduceAssignmentTargetPropertyProperty",value:function(s,a){var c=a.name,h=a.binding;return seq(c,this.sep(Sep.BEFORE_PROP),this.t(":"),this.sep(Sep.AFTER_PROP),h)}},{key:"reduceBindingPropertyIdentifier",value:function(s,a){var c=a.binding,h=a.init;return s.init==null?c:seq(c,this.sep(Sep.BEFORE_DEFAULT_EQUALS),this.t("="),this.sep(Sep.AFTER_DEFAULT_EQUALS),this.p(s.init,_coderep.Precedence.Assignment,h))}},{key:"reduceBindingPropertyProperty",value:function(s,a){var c=a.name,h=a.binding;return seq(c,this.sep(Sep.BEFORE_PROP),this.t(":"),this.sep(Sep.AFTER_PROP),h)}},{key:"reduceBlock",value:function(s,a){var c=a.statements;return this.brace(seq.apply(void 0,_toConsumableArray$1(c)),s,Sep.BLOCK_BRACE_INITIAL,Sep.BLOCK_BRACE_FINAL,Sep.BLOCK_EMPTY)}},{key:"reduceBlockStatement",value:function(s,a){var c=a.block;return seq(c,this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceBreakStatement",value:function(s){return seq(this.t("break"),s.label?seq(this.sep(Sep.BEFORE_JUMP_LABEL),this.t(s.label)):empty$1(),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceCallExpression",value:function(s,a){var c=this,h=a.callee,d=a.arguments,g=d.map(function(_,b){return c.p(s.arguments[b],_coderep.Precedence.Assignment,_)});return(0,_objectAssign2.default)(seq(this.p(s.callee,(0,_coderep.getPrecedence)(s),h),this.sep(Sep.CALL),this.paren(this.commaSep(g,Sep.ARGS_BEFORE_COMMA,Sep.ARGS_AFTER_COMMA),Sep.CALL_PAREN_BEFORE,Sep.CALL_PAREN_AFTER,Sep.CALL_PAREN_EMPTY)),{startsWithCurly:h.startsWithCurly,startsWithLet:h.startsWithLet,startsWithLetSquareBracket:h.startsWithLetSquareBracket,startsWithFunctionOrClass:h.startsWithFunctionOrClass})}},{key:"reduceCatchClause",value:function(s,a){var c=a.binding,h=a.body;return seq(this.t("catch"),this.sep(Sep.BEFORE_CATCH_BINDING),this.paren(c,Sep.CATCH_PAREN_BEFORE,Sep.CATCH_PAREN_AFTER),this.sep(Sep.AFTER_CATCH_BINDING),h)}},{key:"reduceClassDeclaration",value:function(s,a){var c=a.name,h=a.super,d=a.elements,g=seq(this.t("class"),s.name.name==="*default*"?empty$1():seq(this.sep(Sep.BEFORE_CLASS_NAME),c));return h!=null&&(g=seq(g,this.sep(Sep.BEFORE_EXTENDS),this.t("extends"),this.sep(Sep.AFTER_EXTENDS),this.p(s.super,_coderep.Precedence.New,h))),g=seq(g,this.sep(Sep.BEFORE_CLASS_DECLARATION_ELEMENTS),this.brace(seq.apply(void 0,_toConsumableArray$1(d)),s,Sep.CLASS_BRACE_INITIAL,Sep.CLASS_BRACE_FINAL,Sep.CLASS_EMPTY),this.sep(Sep.AFTER_STATEMENT(s))),g}},{key:"reduceClassExpression",value:function(s,a){var c=a.name,h=a.super,d=a.elements,g=this.t("class");return c!=null&&(g=seq(g,this.sep(Sep.BEFORE_CLASS_NAME),c)),h!=null&&(g=seq(g,this.sep(Sep.BEFORE_EXTENDS),this.t("extends"),this.sep(Sep.AFTER_EXTENDS),this.p(s.super,_coderep.Precedence.New,h))),g=seq(g,this.sep(Sep.BEFORE_CLASS_EXPRESSION_ELEMENTS),this.brace(seq.apply(void 0,_toConsumableArray$1(d)),s,Sep.CLASS_EXPRESSION_BRACE_INITIAL,Sep.CLASS_EXPRESSION_BRACE_FINAL,Sep.CLASS_EXPRESSION_BRACE_EMPTY)),g.startsWithFunctionOrClass=!0,g}},{key:"reduceClassElement",value:function(s,a){var c=a.method;return c=seq(this.sep(Sep.BEFORE_CLASS_ELEMENT),c,this.sep(Sep.AFTER_CLASS_ELEMENT)),s.isStatic?seq(this.t("static"),this.sep(Sep.AFTER_STATIC),c):c}},{key:"reduceComputedMemberAssignmentTarget",value:function(s,a){var c=a.object,h=a.expression,d=c.startsWithLetSquareBracket||s.object.type==="IdentifierExpression"&&s.object.name==="let";return(0,_objectAssign2.default)(seq(this.p(s.object,(0,_coderep.getPrecedence)(s),c),this.sep(Sep.COMPUTED_MEMBER_ASSIGNMENT_TARGET),this.bracket(h,Sep.COMPUTED_MEMBER_ASSIGNMENT_TARGET_BRACKET_INTIAL,Sep.COMPUTED_MEMBER_ASSIGNMENT_TARGET_BRACKET_FINAL)),{startsWithLet:c.startsWithLet,startsWithLetSquareBracket:d,startsWithCurly:c.startsWithCurly,startsWithFunctionOrClass:c.startsWithFunctionOrClass})}},{key:"reduceComputedMemberExpression",value:function(s,a){var c=a.object,h=a.expression,d=c.startsWithLetSquareBracket||s.object.type==="IdentifierExpression"&&s.object.name==="let";return(0,_objectAssign2.default)(seq(this.p(s.object,(0,_coderep.getPrecedence)(s),c),this.sep(Sep.COMPUTED_MEMBER_EXPRESSION),this.bracket(h,Sep.COMPUTED_MEMBER_BRACKET_INTIAL,Sep.COMPUTED_MEMBER_BRACKET_FINAL)),{startsWithLet:c.startsWithLet,startsWithLetSquareBracket:d,startsWithCurly:c.startsWithCurly,startsWithFunctionOrClass:c.startsWithFunctionOrClass})}},{key:"reduceComputedPropertyName",value:function(s,a){var c=a.expression;return this.bracket(this.p(s.expression,_coderep.Precedence.Assignment,c),Sep.COMPUTED_PROPERTY_BRACKET_INTIAL,Sep.COMPUTED_PROPERTY_BRACKET_FINAL)}},{key:"reduceConditionalExpression",value:function(s,a){var c=a.test,h=a.consequent,d=a.alternate,g=c.containsIn||d.containsIn,_=c.startsWithCurly,b=c.startsWithLetSquareBracket,$=c.startsWithFunctionOrClass;return(0,_objectAssign2.default)(seq(this.p(s.test,_coderep.Precedence.LogicalOR,c),this.sep(Sep.BEFORE_TERNARY_QUESTION),this.t("?"),this.sep(Sep.AFTER_TERNARY_QUESTION),this.p(s.consequent,_coderep.Precedence.Assignment,h),this.sep(Sep.BEFORE_TERNARY_COLON),this.t(":"),this.sep(Sep.AFTER_TERNARY_COLON),this.p(s.alternate,_coderep.Precedence.Assignment,d)),{containsIn:g,startsWithCurly:_,startsWithLetSquareBracket:b,startsWithFunctionOrClass:$})}},{key:"reduceContinueStatement",value:function(s){return seq(this.t("continue"),s.label?seq(this.sep(Sep.BEFORE_JUMP_LABEL),this.t(s.label)):empty$1(),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceDataProperty",value:function(s,a){var c=a.name,h=a.expression;return seq(c,this.sep(Sep.BEFORE_PROP),this.t(":"),this.sep(Sep.AFTER_PROP),this.getAssignmentExpr(h))}},{key:"reduceDebuggerStatement",value:function(s){return seq(this.t("debugger"),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceDoWhileStatement",value:function(s,a){var c=a.body,h=a.test;return seq(this.t("do"),this.sep(Sep.AFTER_DO),c,this.sep(Sep.BEFORE_DOWHILE_WHILE),this.t("while"),this.sep(Sep.AFTER_DOWHILE_WHILE),this.paren(h,Sep.DO_WHILE_TEST_PAREN_BEFORE,Sep.DO_WHILE_TEST_PAREN_AFTER),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceEmptyStatement",value:function(s){return seq(this.t(";"),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceExpressionStatement",value:function(s,a){var c=a.expression,h=c.startsWithCurly||c.startsWithLetSquareBracket||c.startsWithFunctionOrClass;return seq(h?this.paren(c,Sep.EXPRESSION_STATEMENT_PAREN_BEFORE,Sep.EXPRESSION_STATEMENT_PAREN_AFTER):c,this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceForInStatement",value:function(s,a){var c=a.left,h=a.right,d=a.body;return c=s.left.type==="VariableDeclaration"?noIn(markContainsIn(c)):c,(0,_objectAssign2.default)(seq(this.t("for"),this.sep(Sep.AFTER_FORIN_FOR),this.paren(seq(c.startsWithLet?this.paren(c,Sep.FOR_IN_LET_PAREN_BEFORE,Sep.FOR_IN_LET_PAREN_AFTER):c,this.sep(Sep.BEFORE_FORIN_IN),this.t("in"),this.sep(Sep.AFTER_FORIN_FOR),h),Sep.FOR_IN_PAREN_BEFORE,Sep.FOR_IN_PAREN_AFTER),this.sep(Sep.BEFORE_FORIN_BODY),d,this.sep(Sep.AFTER_STATEMENT(s))),{endsWithMissingElse:d.endsWithMissingElse})}},{key:"reduceForOfStatement",value:function(s,a){var c=a.left,h=a.right,d=a.body;return c=s.left.type==="VariableDeclaration"?noIn(markContainsIn(c)):c,(0,_objectAssign2.default)(seq(this.t("for"),this.sep(Sep.AFTER_FOROF_FOR),this.paren(seq(c.startsWithLet?this.paren(c,Sep.FOR_OF_LET_PAREN_BEFORE,Sep.FOR_OF_LET_PAREN_AFTER):c,this.sep(Sep.BEFORE_FOROF_OF),this.t("of"),this.sep(Sep.AFTER_FOROF_FOR),this.p(s.right,_coderep.Precedence.Assignment,h)),Sep.FOR_OF_PAREN_BEFORE,Sep.FOR_OF_PAREN_AFTER),this.sep(Sep.BEFORE_FOROF_BODY),d,this.sep(Sep.AFTER_STATEMENT(s))),{endsWithMissingElse:d.endsWithMissingElse})}},{key:"reduceForStatement",value:function(s,a){var c=a.init,h=a.test,d=a.update,g=a.body;return c&&(c.startsWithLetSquareBracket&&(c=this.paren(c,Sep.FOR_LET_PAREN_BEFORE,Sep.FOR_LET_PAREN_AFTER)),c=noIn(markContainsIn(c))),(0,_objectAssign2.default)(seq(this.t("for"),this.sep(Sep.AFTER_FOR_FOR),this.paren(seq(c?seq(this.sep(Sep.BEFORE_FOR_INIT),c,this.sep(Sep.AFTER_FOR_INIT)):this.sep(Sep.EMPTY_FOR_INIT),this.t(";"),h?seq(this.sep(Sep.BEFORE_FOR_TEST),h,this.sep(Sep.AFTER_FOR_TEST)):this.sep(Sep.EMPTY_FOR_TEST),this.t(";"),d?seq(this.sep(Sep.BEFORE_FOR_UPDATE),d,this.sep(Sep.AFTER_FOR_UPDATE)):this.sep(Sep.EMPTY_FOR_UPDATE))),this.sep(Sep.BEFORE_FOR_BODY),g,this.sep(Sep.AFTER_STATEMENT(s))),{endsWithMissingElse:g.endsWithMissingElse})}},{key:"reduceForAwaitStatement",value:function(s,a){var c=a.left,h=a.right,d=a.body;return c=s.left.type==="VariableDeclaration"?noIn(markContainsIn(c)):c,(0,_objectAssign2.default)(seq(this.t("for"),this.sep(Sep.AFTER_FOROF_FOR),this.t("await"),this.sep(Sep.AFTER_FORAWAIT_AWAIT),this.paren(seq(c.startsWithLet?this.paren(c,Sep.FOR_OF_LET_PAREN_BEFORE,Sep.FOR_OF_LET_PAREN_AFTER):c,this.sep(Sep.BEFORE_FOROF_OF),this.t("of"),this.sep(Sep.AFTER_FOROF_FOR),this.p(s.right,_coderep.Precedence.Assignment,h)),Sep.FOR_OF_PAREN_BEFORE,Sep.FOR_OF_PAREN_AFTER),this.sep(Sep.BEFORE_FOROF_BODY),d,this.sep(Sep.AFTER_STATEMENT(s))),{endsWithMissingElse:d.endsWithMissingElse})}},{key:"reduceFunctionBody",value:function(s,a){var c=a.directives,h=a.statements;return h.length&&(h[0]=this.parenToAvoidBeingDirective(s.statements[0],h[0])),seq.apply(void 0,_toConsumableArray$1(c).concat([c.length?this.sep(Sep.AFTER_FUNCTION_DIRECTIVES):empty$1()],_toConsumableArray$1(h)))}},{key:"reduceFunctionDeclaration",value:function(s,a){var c=a.name,h=a.params,d=a.body;return seq(s.isAsync?this.t("async"):empty$1(),this.t("function"),s.isGenerator?seq(this.sep(Sep.BEFORE_GENERATOR_STAR),this.t("*"),this.sep(Sep.AFTER_GENERATOR_STAR)):empty$1(),this.sep(Sep.BEFORE_FUNCTION_NAME(s)),s.name.name==="*default*"?empty$1():c,this.sep(Sep.BEFORE_FUNCTION_PARAMS),this.paren(h,Sep.PARAMETERS_PAREN_BEFORE,Sep.PARAMETERS_PAREN_AFTER,Sep.PARAMETERS_PAREN_EMPTY),this.sep(Sep.BEFORE_FUNCTION_DECLARATION_BODY),this.brace(d,s,Sep.FUNCTION_BRACE_INITIAL,Sep.FUNCTION_BRACE_FINAL,Sep.FUNCTION_EMPTY),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceFunctionExpression",value:function(s,a){var c=a.name,h=a.params,d=a.body,g=seq(s.isAsync?this.t("async"):empty$1(),this.t("function"),s.isGenerator?seq(this.sep(Sep.BEFORE_GENERATOR_STAR),this.t("*"),this.sep(Sep.AFTER_GENERATOR_STAR)):empty$1(),this.sep(Sep.BEFORE_FUNCTION_NAME(s)),c||empty$1(),this.sep(Sep.BEFORE_FUNCTION_PARAMS),this.paren(h,Sep.PARAMETERS_PAREN_BEFORE,Sep.PARAMETERS_PAREN_AFTER,Sep.PARAMETERS_PAREN_EMPTY),this.sep(Sep.BEFORE_FUNCTION_EXPRESSION_BODY),this.brace(d,s,Sep.FUNCTION_EXPRESSION_BRACE_INITIAL,Sep.FUNCTION_EXPRESSION_BRACE_FINAL,Sep.FUNCTION_EXPRESSION_EMPTY));return g.startsWithFunctionOrClass=!0,g}},{key:"reduceFormalParameters",value:function(s,a){var c=a.items,h=a.rest;return this.commaSep(c.concat(h==null?[]:[seq(this.t("..."),this.sep(Sep.REST),h)]),Sep.PARAMETER_BEFORE_COMMA,Sep.PARAMETER_AFTER_COMMA)}},{key:"reduceArrowExpression",value:function(s,a){var c=a.params,h=a.body;(s.params.rest!=null||s.params.items.length!==1||s.params.items[0].type!=="BindingIdentifier")&&(c=this.paren(c,Sep.ARROW_PARAMETERS_PAREN_BEFORE,Sep.ARROW_PARAMETERS_PAREN_AFTER,Sep.ARROW_PARAMETERS_PAREN_EMPTY));var d=!1;return s.body.type==="FunctionBody"?h=this.brace(h,s,Sep.ARROW_BRACE_INITIAL,Sep.ARROW_BRACE_FINAL,Sep.ARROW_BRACE_EMPTY):h.startsWithCurly?h=this.paren(h,Sep.ARROW_BODY_PAREN_BEFORE,Sep.ARROW_BODY_PAREN_AFTER):h.containsIn&&(d=!0),(0,_objectAssign2.default)(seq(s.isAsync?seq(this.t("async"),this.sep(Sep.BEFORE_ARROW_ASYNC_PARAMS)):empty$1(),c,this.sep(Sep.BEFORE_ARROW),this.t("=>"),this.sep(Sep.AFTER_ARROW),this.p(s.body,_coderep.Precedence.Assignment,h)),{containsIn:d})}},{key:"reduceGetter",value:function(s,a){var c=a.name,h=a.body;return seq(this.t("get"),this.sep(Sep.AFTER_GET),c,this.sep(Sep.BEFORE_GET_PARAMS),this.paren(empty$1(),null,null,Sep.GETTER_PARAMS),this.sep(Sep.BEFORE_GET_BODY),this.brace(h,s,Sep.GET_BRACE_INTIAL,Sep.GET_BRACE_FINAL,Sep.GET_BRACE_EMPTY))}},{key:"reduceIdentifierExpression",value:function(s){var a=this.t(s.name);return s.name==="let"&&(a.startsWithLet=!0),a}},{key:"reduceIfStatement",value:function(s,a){var c=a.test,h=a.consequent,d=a.alternate;return d&&h.endsWithMissingElse&&(h=this.brace(h,s,Sep.MISSING_ELSE_INTIIAL,Sep.MISSING_ELSE_FINAL,Sep.MISSING_ELSE_EMPTY)),(0,_objectAssign2.default)(seq(this.t("if"),this.sep(Sep.AFTER_IF),this.paren(c,Sep.IF_PAREN_BEFORE,Sep.IF_PAREN_AFTER),this.sep(Sep.AFTER_IF_TEST),h,d?seq(this.sep(Sep.BEFORE_ELSE),this.t("else"),this.sep(Sep.AFTER_ELSE),d):empty$1(),this.sep(Sep.AFTER_STATEMENT(s))),{endsWithMissingElse:d?d.endsWithMissingElse:!0})}},{key:"reduceImport",value:function(s,a){var c=a.defaultBinding,h=a.namedImports,d=[];return c!=null&&d.push(c),h.length>0&&d.push(this.brace(this.commaSep(h,Sep.NAMED_IMPORT_BEFORE_COMMA,Sep.NAMED_IMPORT_AFTER_COMMA),s,Sep.IMPORT_BRACE_INTIAL,Sep.IMPORT_BRACE_FINAL,Sep.IMPORT_BRACE_EMPTY)),d.length===0?seq(this.t("import"),this.sep(Sep.BEFORE_IMPORT_MODULE),this.t((0,_coderep.escapeStringLiteral)(s.moduleSpecifier)),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s))):seq(this.t("import"),this.sep(Sep.BEFORE_IMPORT_BINDINGS),this.commaSep(d,Sep.IMPORT_BEFORE_COMMA,Sep.IMPORT_AFTER_COMMA),this.sep(Sep.AFTER_IMPORT_BINDINGS),this.t("from"),this.sep(Sep.AFTER_FROM),this.t((0,_coderep.escapeStringLiteral)(s.moduleSpecifier)),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceImportNamespace",value:function(s,a){var c=a.defaultBinding,h=a.namespaceBinding;return seq(this.t("import"),this.sep(Sep.BEFORE_IMPORT_NAMESPACE),c==null?empty$1():seq(c,this.sep(Sep.IMPORT_BEFORE_COMMA),this.t(","),this.sep(Sep.IMPORT_AFTER_COMMA)),this.sep(Sep.BEFORE_IMPORT_STAR),this.t("*"),this.sep(Sep.AFTER_IMPORT_STAR),this.t("as"),this.sep(Sep.AFTER_IMPORT_AS),h,this.sep(Sep.AFTER_NAMESPACE_BINDING),this.t("from"),this.sep(Sep.AFTER_FROM),this.t((0,_coderep.escapeStringLiteral)(s.moduleSpecifier)),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceImportSpecifier",value:function(s,a){var c=a.binding;return s.name==null?c:seq(this.t(s.name),this.sep(Sep.BEFORE_IMPORT_AS),this.t("as"),this.sep(Sep.AFTER_IMPORT_AS),c)}},{key:"reduceExportAllFrom",value:function(s){return seq(this.t("export"),this.sep(Sep.BEFORE_EXPORT_STAR),this.t("*"),this.sep(Sep.AFTER_EXPORT_STAR),this.t("from"),this.sep(Sep.AFTER_FROM),this.t((0,_coderep.escapeStringLiteral)(s.moduleSpecifier)),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceExportFrom",value:function(s,a){var c=a.namedExports;return seq(this.t("export"),this.sep(Sep.BEFORE_EXPORT_BINDINGS),this.brace(this.commaSep(c,Sep.EXPORTS_BEFORE_COMMA,Sep.EXPORTS_AFTER_COMMA),s,Sep.EXPORT_BRACE_INITIAL,Sep.EXPORT_BRACE_FINAL,Sep.EXPORT_BRACE_EMPTY),this.sep(Sep.AFTER_EXPORT_FROM_BINDINGS),this.t("from"),this.sep(Sep.AFTER_FROM),this.t((0,_coderep.escapeStringLiteral)(s.moduleSpecifier)),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceExportLocals",value:function(s,a){var c=a.namedExports;return seq(this.t("export"),this.sep(Sep.BEFORE_EXPORT_BINDINGS),this.brace(this.commaSep(c,Sep.EXPORTS_BEFORE_COMMA,Sep.EXPORTS_AFTER_COMMA),s,Sep.EXPORT_BRACE_INITIAL,Sep.EXPORT_BRACE_FINAL,Sep.EXPORT_BRACE_EMPTY),this.sep(Sep.AFTER_EXPORT_LOCAL_BINDINGS),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceExport",value:function(s,a){var c=a.declaration;switch(s.declaration.type){case"FunctionDeclaration":case"ClassDeclaration":break;default:c=seq(c,this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}return seq(this.t("export"),this.sep(Sep.AFTER_EXPORT),c)}},{key:"reduceExportDefault",value:function(s,a){var c=a.body;switch(c=c.startsWithFunctionOrClass?this.paren(c,Sep.EXPORT_PAREN_BEFORE,Sep.EXPORT_PAREN_AFTER):c,s.body.type){case"FunctionDeclaration":case"ClassDeclaration":return seq(this.t("export"),this.sep(Sep.EXPORT_DEFAULT),this.t("default"),this.sep(Sep.AFTER_EXPORT_DEFAULT),c);default:return seq(this.t("export"),this.sep(Sep.EXPORT_DEFAULT),this.t("default"),this.sep(Sep.AFTER_EXPORT_DEFAULT),this.p(s.body,_coderep.Precedence.Assignment,c),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}}},{key:"reduceExportFromSpecifier",value:function(s){return s.exportedName==null?this.t(s.name):seq(this.t(s.name),this.sep(Sep.BEFORE_EXPORT_AS),this.t("as"),this.sep(Sep.AFTER_EXPORT_AS),this.t(s.exportedName))}},{key:"reduceExportLocalSpecifier",value:function(s,a){var c=a.name;return s.exportedName==null?c:seq(c,this.sep(Sep.BEFORE_EXPORT_AS),this.t("as"),this.sep(Sep.AFTER_EXPORT_AS),this.t(s.exportedName))}},{key:"reduceLabeledStatement",value:function(s,a){var c=a.body;return(0,_objectAssign2.default)(seq(this.t(s.label),this.sep(Sep.BEFORE_LABEL_COLON),this.t(":"),this.sep(Sep.AFTER_LABEL_COLON),c),{endsWithMissingElse:c.endsWithMissingElse})}},{key:"reduceLiteralBooleanExpression",value:function(s){return this.t(s.value.toString())}},{key:"reduceLiteralNullExpression",value:function(){return this.t("null")}},{key:"reduceLiteralInfinityExpression",value:function(){return this.t("2e308")}},{key:"reduceLiteralNumericExpression",value:function(s){return new _coderep.NumberCodeRep(s.value)}},{key:"reduceLiteralRegExpExpression",value:function(s){return this.t("/"+s.pattern+"/"+(s.global?"g":"")+(s.ignoreCase?"i":"")+(s.multiLine?"m":"")+(s.dotAll?"s":"")+(s.unicode?"u":"")+(s.sticky?"y":""),!0)}},{key:"reduceLiteralStringExpression",value:function(s){return this.t((0,_coderep.escapeStringLiteral)(s.value))}},{key:"reduceMethod",value:function(s,a){var c=a.name,h=a.params,d=a.body;return seq(s.isAsync?seq(this.t("async"),this.sep(Sep.AFTER_METHOD_ASYNC)):empty$1(),s.isGenerator?seq(this.t("*"),this.sep(Sep.AFTER_METHOD_GENERATOR_STAR)):empty$1(),c,this.sep(Sep.AFTER_METHOD_NAME),this.paren(h,Sep.PARAMETERS_PAREN_BEFORE,Sep.PARAMETERS_PAREN_AFTER,Sep.PARAMETERS_PAREN_EMPTY),this.sep(Sep.BEFORE_METHOD_BODY),this.brace(d,s,Sep.METHOD_BRACE_INTIAL,Sep.METHOD_BRACE_FINAL,Sep.METHOD_BRACE_EMPTY))}},{key:"reduceModule",value:function(s,a){var c=a.directives,h=a.items;return h.length&&(h[0]=this.parenToAvoidBeingDirective(s.items[0],h[0])),seq.apply(void 0,_toConsumableArray$1(c).concat([c.length?this.sep(Sep.AFTER_MODULE_DIRECTIVES):empty$1()],_toConsumableArray$1(h)))}},{key:"reduceNewExpression",value:function(s,a){var c=this,h=a.callee,d=a.arguments,g=d.map(function(b,$){return c.p(s.arguments[$],_coderep.Precedence.Assignment,b)}),_=(0,_coderep.getPrecedence)(s.callee)===_coderep.Precedence.Call?this.paren(h,Sep.NEW_CALLEE_PAREN_BEFORE,Sep.NEW_CALLEE_PAREN_AFTER):this.p(s.callee,(0,_coderep.getPrecedence)(s),h);return seq(this.t("new"),this.sep(Sep.AFTER_NEW),_,d.length===0?this.sep(Sep.EMPTY_NEW_CALL):seq(this.sep(Sep.BEFORE_NEW_ARGS),this.paren(this.commaSep(g,Sep.ARGS_BEFORE_COMMA,Sep.ARGS_AFTER_COMMA),Sep.NEW_PAREN_BEFORE,Sep.NEW_PAREN_AFTER,Sep.NEW_PAREN_EMPTY)))}},{key:"reduceNewTargetExpression",value:function(){return seq(this.t("new"),this.sep(Sep.NEW_TARGET_BEFORE_DOT),this.t("."),this.sep(Sep.NEW_TARGET_AFTER_DOT),this.t("target"))}},{key:"reduceObjectExpression",value:function(s,a){var c=a.properties,h=this.brace(this.commaSep(c,Sep.OBJECT_BEFORE_COMMA,Sep.OBJECT_AFTER_COMMA),s,Sep.OBJECT_BRACE_INITIAL,Sep.OBJECT_BRACE_FINAL,Sep.OBJECT_EMPTY);return h.startsWithCurly=!0,h}},{key:"reduceUpdateExpression",value:function(s,a){var c=a.operand;return s.isPrefix?this.reduceUnaryExpression.apply(this,arguments):(0,_objectAssign2.default)(seq(this.p(s.operand,_coderep.Precedence.New,c),this.sep(Sep.BEFORE_POSTFIX(s.operator)),this.t(s.operator)),{startsWithCurly:c.startsWithCurly,startsWithLetSquareBracket:c.startsWithLetSquareBracket,startsWithFunctionOrClass:c.startsWithFunctionOrClass})}},{key:"reduceUnaryExpression",value:function(s,a){var c=a.operand;return seq(this.t(s.operator),this.sep(Sep.UNARY(s.operator)),this.p(s.operand,(0,_coderep.getPrecedence)(s),c))}},{key:"reduceReturnStatement",value:function(s,a){var c=a.expression;return seq(this.t("return"),c?seq(this.sep(Sep.RETURN),c):empty$1(),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceScript",value:function(s,a){var c=a.directives,h=a.statements;return h.length&&(h[0]=this.parenToAvoidBeingDirective(s.statements[0],h[0])),seq.apply(void 0,_toConsumableArray$1(c).concat([c.length?this.sep(Sep.AFTER_SCRIPT_DIRECTIVES):empty$1()],_toConsumableArray$1(h)))}},{key:"reduceSetter",value:function(s,a){var c=a.name,h=a.param,d=a.body;return seq(this.t("set"),this.sep(Sep.AFTER_SET),c,this.sep(Sep.BEFORE_SET_PARAMS),this.paren(h,Sep.SETTER_PARAM_BEFORE,Sep.SETTER_PARAM_AFTER),this.sep(Sep.BEFORE_SET_BODY),this.brace(d,s,Sep.SET_BRACE_INTIIAL,Sep.SET_BRACE_FINAL,Sep.SET_BRACE_EMPTY))}},{key:"reduceShorthandProperty",value:function(s,a){var c=a.name;return c}},{key:"reduceStaticMemberAssignmentTarget",value:function(s,a){var c=a.object,h=seq(this.p(s.object,(0,_coderep.getPrecedence)(s),c),this.sep(Sep.BEFORE_STATIC_MEMBER_ASSIGNMENT_TARGET_DOT),this.t("."),this.sep(Sep.AFTER_STATIC_MEMBER_ASSIGNMENT_TARGET_DOT),this.t(s.property));return h.startsWithLet=c.startsWithLet,h.startsWithCurly=c.startsWithCurly,h.startsWithLetSquareBracket=c.startsWithLetSquareBracket,h.startsWithFunctionOrClass=c.startsWithFunctionOrClass,h}},{key:"reduceStaticMemberExpression",value:function(s,a){var c=a.object,h=seq(this.p(s.object,(0,_coderep.getPrecedence)(s),c),this.sep(Sep.BEFORE_STATIC_MEMBER_DOT),this.t("."),this.sep(Sep.AFTER_STATIC_MEMBER_DOT),this.t(s.property));return h.startsWithLet=c.startsWithLet,h.startsWithCurly=c.startsWithCurly,h.startsWithLetSquareBracket=c.startsWithLetSquareBracket,h.startsWithFunctionOrClass=c.startsWithFunctionOrClass,h}},{key:"reduceStaticPropertyName",value:function(s){if(_esutils.keyword.isIdentifierNameES6(s.value))return this.t(s.value);var a=parseFloat(s.value);return a>=0&&a.toString()===s.value?new _coderep.NumberCodeRep(a):this.t((0,_coderep.escapeStringLiteral)(s.value))}},{key:"reduceSuper",value:function(){return this.t("super")}},{key:"reduceSwitchCase",value:function(s,a){var c=a.test,h=a.consequent;return seq(this.t("case"),this.sep(Sep.BEFORE_CASE_TEST),c,this.sep(Sep.AFTER_CASE_TEST),this.t(":"),this.sep(Sep.BEFORE_CASE_BODY),seq.apply(void 0,_toConsumableArray$1(h)),this.sep(Sep.AFTER_CASE_BODY))}},{key:"reduceSwitchDefault",value:function(s,a){var c=a.consequent;return seq(this.t("default"),this.sep(Sep.DEFAULT),this.t(":"),this.sep(Sep.BEFORE_CASE_BODY),seq.apply(void 0,_toConsumableArray$1(c)),this.sep(Sep.AFTER_DEFAULT_BODY))}},{key:"reduceSwitchStatement",value:function(s,a){var c=a.discriminant,h=a.cases;return seq(this.t("switch"),this.sep(Sep.BEFORE_SWITCH_DISCRIM),this.paren(c,Sep.SWITCH_DISCRIM_PAREN_BEFORE,Sep.SWITCH_DISCRIM_PAREN_AFTER),this.sep(Sep.BEFORE_SWITCH_BODY),this.brace(seq.apply(void 0,_toConsumableArray$1(h)),s,Sep.SWITCH_BRACE_INTIAL,Sep.SWITCH_BRACE_FINAL,Sep.SWITCH_BRACE_EMPTY),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceSwitchStatementWithDefault",value:function(s,a){var c=a.discriminant,h=a.preDefaultCases,d=a.defaultCase,g=a.postDefaultCases;return seq(this.t("switch"),this.sep(Sep.BEFORE_SWITCH_DISCRIM),this.paren(c,Sep.SWITCH_DISCRIM_PAREN_BEFORE,Sep.SWITCH_DISCRIM_PAREN_AFTER),this.sep(Sep.BEFORE_SWITCH_BODY),this.brace(seq.apply(void 0,_toConsumableArray$1(h).concat([d],_toConsumableArray$1(g))),s,Sep.SWITCH_BRACE_INTIAL,Sep.SWITCH_BRACE_FINAL,Sep.SWITCH_BRACE_EMPTY),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceTemplateExpression",value:function(s,a){var c=a.tag,h=a.elements,d=s.tag==null?empty$1():seq(this.p(s.tag,(0,_coderep.getPrecedence)(s),c),this.sep(Sep.TEMPLATE_TAG));d=seq(d,this.t("`"));for(var g=0,_=s.elements.length;g<_;++g)if(s.elements[g].type==="TemplateElement"){var b="";g>0&&(b+="}"),b+=s.elements[g].rawValue,g<_-1&&(b+="${"),d=seq(d,this.t(b))}else d=seq(d,this.sep(Sep.BEFORE_TEMPLATE_EXPRESSION),h[g],this.sep(Sep.AFTER_TEMPLATE_EXPRESSION));return d=seq(d,this.t("`")),s.tag!=null&&(d.startsWithCurly=c.startsWithCurly,d.startsWithLet=c.startsWithLet,d.startsWithLetSquareBracket=c.startsWithLetSquareBracket,d.startsWithFunctionOrClass=c.startsWithFunctionOrClass),d}},{key:"reduceTemplateElement",value:function(s){return this.t(s.rawValue)}},{key:"reduceThisExpression",value:function(){return this.t("this")}},{key:"reduceThrowStatement",value:function(s,a){var c=a.expression;return seq(this.t("throw"),this.sep(Sep.THROW),c,this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceTryCatchStatement",value:function(s,a){var c=a.body,h=a.catchClause;return seq(this.t("try"),this.sep(Sep.AFTER_TRY),c,this.sep(Sep.BEFORE_CATCH),h,this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceTryFinallyStatement",value:function(s,a){var c=a.body,h=a.catchClause,d=a.finalizer;return seq(this.t("try"),this.sep(Sep.AFTER_TRY),c,h?seq(this.sep(Sep.BEFORE_CATCH),h):empty$1(),this.sep(Sep.BEFORE_FINALLY),this.t("finally"),this.sep(Sep.AFTER_FINALLY),d,this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceYieldExpression",value:function(s,a){var c=a.expression;return s.expression==null?this.t("yield"):(0,_objectAssign2.default)(seq(this.t("yield"),this.sep(Sep.YIELD),this.p(s.expression,(0,_coderep.getPrecedence)(s),c)),{containsIn:c.containsIn})}},{key:"reduceYieldGeneratorExpression",value:function(s,a){var c=a.expression;return(0,_objectAssign2.default)(seq(this.t("yield"),this.sep(Sep.BEFORE_YIELD_STAR),this.t("*"),this.sep(Sep.AFTER_YIELD_STAR),this.p(s.expression,(0,_coderep.getPrecedence)(s),c)),{containsIn:c.containsIn})}},{key:"reduceDirective",value:function(s){var a=s.rawValue.match(/(^|[^\\])(\\\\)*"/)?"'":'"';return seq(this.t(a+s.rawValue+a),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceVariableDeclaration",value:function(s,a){var c=a.declarators;return seq(this.t(s.kind),this.sep(Sep.VARIABLE_DECLARATION),this.commaSep(c,Sep.DECLARATORS_BEFORE_COMMA,Sep.DECLARATORS_AFTER_COMMA))}},{key:"reduceVariableDeclarationStatement",value:function(s,a){var c=a.declaration;return seq(c,this.semiOp(),this.sep(Sep.AFTER_STATEMENT(s)))}},{key:"reduceVariableDeclarator",value:function(s,a){var c=a.binding,h=a.init,d=h&&h.containsIn&&!h.containsGroup;return h&&(h.containsGroup?h=this.paren(h,Sep.EXPRESSION_PAREN_BEFORE,Sep.EXPRESSION_PAREN_AFTER):h=markContainsIn(h)),(0,_objectAssign2.default)(h==null?c:seq(c,this.sep(Sep.BEFORE_INIT_EQUALS),this.t("="),this.sep(Sep.AFTER_INIT_EQUALS),h),{containsIn:d})}},{key:"reduceWhileStatement",value:function(s,a){var c=a.test,h=a.body;return(0,_objectAssign2.default)(seq(this.t("while"),this.sep(Sep.AFTER_WHILE),this.paren(c,Sep.WHILE_TEST_PAREN_BEFORE,Sep.WHILE_TEST_PAREN_AFTER),this.sep(Sep.BEFORE_WHILE_BODY),h,this.sep(Sep.AFTER_STATEMENT(s))),{endsWithMissingElse:h.endsWithMissingElse})}},{key:"reduceWithStatement",value:function(s,a){var c=a.object,h=a.body;return(0,_objectAssign2.default)(seq(this.t("with"),this.sep(Sep.AFTER_WITH),this.paren(c,Sep.WITH_PAREN_BEFORE,Sep.WITH_PAREN_AFTER),this.sep(Sep.BEFORE_WITH_BODY),h,this.sep(Sep.AFTER_STATEMENT(s))),{endsWithMissingElse:h.endsWithMissingElse})}}]),o}();function withoutTrailingLinebreak(o){if(o&&o instanceof _coderep.Seq){for(var e=o.children[o.children.length-1];e instanceof _coderep.Empty;)o.children.pop(),e=o.children[o.children.length-1];e instanceof _coderep.Seq?withoutTrailingLinebreak(e):e instanceof Linebreak&&o.children.pop()}return o}function indent(o,e){var s=void 0;function a(c){c instanceof Linebreak&&(s=c,++c.indentation)}return o.forEach(a),e||--s.indentation,o}formattedCodegen.FormattedCodeGen=function(o){_inherits$1(e,o);function e(){return _classCallCheck$2(this,e),_possibleConstructorReturn$1(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return _createClass$2(e,[{key:"parenToAvoidBeingDirective",value:function(a,c){return a&&a.type==="ExpressionStatement"&&a.expression.type==="LiteralStringExpression"?seq(this.paren(c.children[0],Sep.PAREN_AVOIDING_DIRECTIVE_BEFORE,Sep.PAREN_AVOIDING_DIRECTIVE_AFTER),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(a))):c}},{key:"brace",value:function(a,c){if(isEmpty(a))return this.t("{}");switch(c.type){case"ObjectAssignmentTarget":case"ObjectBinding":case"Import":case"ExportFrom":case"ExportLocals":case"ObjectExpression":return new _coderep.Brace(a)}return a=seq(new Linebreak,a),indent(a,!1),new _coderep.Brace(a)}},{key:"reduceDoWhileStatement",value:function(a,c){var h=c.body,d=c.test;return seq(this.t("do"),this.sep(Sep.AFTER_DO),withoutTrailingLinebreak(h),this.sep(Sep.BEFORE_DOWHILE_WHILE),this.t("while"),this.sep(Sep.AFTER_DOWHILE_WHILE),this.paren(d,Sep.DO_WHILE_TEST_PAREN_BEFORE,Sep.DO_WHILE_TEST_PAREN_AFTER),this.semiOp(),this.sep(Sep.AFTER_STATEMENT(a)))}},{key:"reduceIfStatement",value:function(a,c){var h=c.test,d=c.consequent,g=c.alternate;return g&&d.endsWithMissingElse&&(d=this.brace(d,a)),(0,_objectAssign2.default)(seq(this.t("if"),this.sep(Sep.AFTER_IF),this.paren(h,Sep.IF_PAREN_BEFORE,Sep.IF_PAREN_AFTER),this.sep(Sep.AFTER_IF_TEST),withoutTrailingLinebreak(d),g?seq(this.sep(Sep.BEFORE_ELSE),this.t("else"),this.sep(Sep.AFTER_ELSE),withoutTrailingLinebreak(g)):empty$1(),this.sep(Sep.AFTER_STATEMENT(a))),{endsWithMissingElse:g?g.endsWithMissingElse:!0})}},{key:"reduceSwitchCase",value:function(a,c){var h=c.test,d=c.consequent;return d=indent(withoutTrailingLinebreak(seq.apply(void 0,[this.sep(Sep.BEFORE_CASE_BODY)].concat(_toConsumableArray$1(d)))),!0),seq(this.t("case"),this.sep(Sep.BEFORE_CASE_TEST),h,this.sep(Sep.AFTER_CASE_TEST),this.t(":"),d,this.sep(Sep.AFTER_CASE_BODY))}},{key:"reduceSwitchDefault",value:function(a,c){var h=c.consequent;return h=indent(withoutTrailingLinebreak(seq.apply(void 0,[this.sep(Sep.BEFORE_CASE_BODY)].concat(_toConsumableArray$1(h)))),!0),seq(this.t("default"),this.sep(Sep.DEFAULT),this.t(":"),h,this.sep(Sep.AFTER_DEFAULT_BODY))}},{key:"sep",value:function(a){switch(a.type){case"AWAIT":case"AFTER_FORAWAIT_AWAIT":case"ARRAY_AFTER_COMMA":case"OBJECT_AFTER_COMMA":case"ARGS_AFTER_COMMA":case"PARAMETER_AFTER_COMMA":case"DECLARATORS_AFTER_COMMA":case"NAMED_IMPORT_AFTER_COMMA":case"IMPORT_AFTER_COMMA":case"BEFORE_DEFAULT_EQUALS":case"AFTER_DEFAULT_EQUALS":case"AFTER_PROP":case"BEFORE_JUMP_LABEL":case"BEFORE_CATCH_BINDING":case"AFTER_CATCH_BINDING":case"BEFORE_CLASS_NAME":case"BEFORE_EXTENDS":case"AFTER_EXTENDS":case"BEFORE_CLASS_DECLARATION_ELEMENTS":case"BEFORE_CLASS_EXPRESSION_ELEMENTS":case"AFTER_STATIC":case"BEFORE_TERNARY_QUESTION":case"AFTER_TERNARY_QUESTION":case"BEFORE_TERNARY_COLON":case"AFTER_TERNARY_COLON":case"AFTER_DO":case"BEFORE_DOWHILE_WHILE":case"AFTER_DOWHILE_WHILE":case"AFTER_FORIN_FOR":case"BEFORE_FORIN_IN":case"BEFORE_FORIN_BODY":case"BEFORE_FOROF_OF":case"AFTER_FOROF_FOR":case"BEFORE_FOROF_BODY":case"AFTER_FOR_FOR":case"BEFORE_FOR_TEST":case"BEFORE_FOR_UPDATE":case"BEFORE_FOR_BODY":case"BEFORE_FUNCTION_DECLARATION_BODY":case"BEFORE_FUNCTION_EXPRESSION_BODY":case"BEFORE_ARROW":case"AFTER_ARROW":case"BEFORE_ARROW_ASYNC_PARAMS":case"AFTER_GET":case"BEFORE_GET_BODY":case"AFTER_IF":case"AFTER_IF_TEST":case"BEFORE_ELSE":case"AFTER_ELSE":case"BEFORE_IMPORT_BINDINGS":case"BEFORE_IMPORT_MODULE":case"AFTER_IMPORT_BINDINGS":case"AFTER_FROM":case"BEFORE_IMPORT_NAMESPACE":case"BEFORE_IMPORT_STAR":case"AFTER_IMPORT_STAR":case"AFTER_NAMESPACE_BINDING":case"BEFORE_IMPORT_AS":case"AFTER_IMPORT_AS":case"EXPORTS_AFTER_COMMA":case"BEFORE_EXPORT_STAR":case"AFTER_EXPORT_STAR":case"BEFORE_EXPORT_BINDINGS":case"AFTER_EXPORT_FROM_BINDINGS":case"AFTER_EXPORT":case"AFTER_EXPORT_DEFAULT":case"BEFORE_EXPORT_AS":case"AFTER_EXPORT_AS":case"AFTER_LABEL_COLON":case"AFTER_METHOD_ASYNC":case"BEFORE_METHOD_BODY":case"AFTER_NEW":case"RETURN":case"AFTER_SET":case"BEFORE_SET_BODY":case"BEFORE_SET_PARAMS":case"BEFORE_CASE_TEST":case"BEFORE_SWITCH_DISCRIM":case"BEFORE_SWITCH_BODY":case"THROW":case"AFTER_TRY":case"BEFORE_CATCH":case"BEFORE_FINALLY":case"AFTER_FINALLY":case"VARIABLE_DECLARATION":case"YIELD":case"AFTER_YIELD_STAR":case"BEFORE_INIT_EQUALS":case"AFTER_INIT_EQUALS":case"AFTER_WHILE":case"BEFORE_WHILE_BODY":case"AFTER_WITH":case"BEFORE_WITH_BODY":case"BEFORE_FUNCTION_NAME":case"AFTER_BINOP":case"BEFORE_ASSIGN_OP":case"AFTER_ASSIGN_OP":return this.t(" ");case"AFTER_STATEMENT":switch(a.node.type){case"ForInStatement":case"ForOfStatement":case"ForStatement":case"WhileStatement":case"WithStatement":return empty$1();default:return new Linebreak}case"AFTER_CLASS_ELEMENT":case"BEFORE_CASE_BODY":case"AFTER_CASE_BODY":case"AFTER_DEFAULT_BODY":return new Linebreak;case"BEFORE_BINOP":return a.op===","?empty$1():this.t(" ");case"UNARY":return a.op==="delete"||a.op==="void"||a.op==="typeof"?this.t(" "):empty$1();default:return empty$1()}}}]),e}(ExtensibleCodeGen);var withLocation={},tokenStream={},unicode={};Object.defineProperty(unicode,"__esModule",{value:!0});unicode.whitespaceArray=[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279];unicode.whitespaceBool=[!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!0,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1];unicode.idStartLargeRegex=/^[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]$/;unicode.idStartBool=[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!0,!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,!1,!1,!1,!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,!0,!0,!0,!1,!1,!1,!1,!1];unicode.idContinueLargeRegex=/^[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]$/;unicode.idContinueBool=[!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!1,!1,!1,!1,!1,!1,!1,!0,!0,!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,!1,!1,!1,!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,!0,!0,!0,!1,!1,!1,!1,!1];Object.defineProperty(tokenStream,"__esModule",{value:!0});tokenStream.TokenStream=void 0;var _createClass$1=function(){function o(e,s){for(var a=0;a=1e3&&o%10===0?(e=o.toString(10),/[eE]/.test(e)?e.replace(/[eE]\+/,"e"):o.toString(10).replace(/0{3,}$/,function(s){return"e"+s.length})):o%1===0?o>1e15&&o<1e20?"0x"+o.toString(16).toUpperCase():o.toString(10).replace(/[eE]\+/,"e"):o.toString(10).replace(/^0\./,".").replace(/[eE]\+/,"e")}tokenStream.TokenStream=function(){function o(){_classCallCheck$1(this,o),this.result="",this.lastNumber=null,this.lastCodePoint=null,this.lastTokenStr="",this.optionalSemi=!1,this.previousWasRegExp=!1,this.partialHtmlComment=!1}return _createClass$1(o,[{key:"putNumber",value:function(s){var a=renderNumber(s);this.put(a),this.lastNumber=a}},{key:"putOptionalSemi",value:function(){this.optionalSemi=!0}},{key:"putRaw",value:function(s){this.result+=s,this.lastTokenStr=s}},{key:"put",value:function(s,a){if(this.optionalSemi&&(this.optionalSemi=!1,s!=="}"&&(this.result+=";",this.lastCodePoint=";",this.previousWasRegExp=!1)),this.lastNumber!==null&&s.length===1&&s==="."){this.result+=needsDoubleDot(this.lastNumber)?"..":".",this.lastNumber=null,this.lastCodePoint=".";return}var c=[].concat(_toConsumableArray(s)).length;if(c>0){this.lastNumber=null;var h=String.fromCodePoint(s.codePointAt(0)),d=this.lastCodePoint;this.lastCodePoint=String.fromCodePoint(s.codePointAt(c-1));var g=this.previousWasRegExp;this.previousWasRegExp=a,d&&((d==="+"||d==="-")&&d===h||isIdentifierPartES6(d)&&isIdentifierPartES6(h)||d==="/"&&h==="/"||g&&h==="i"||this.partialHtmlComment&&s.startsWith("--"))&&(this.result+=" ")}this.partialHtmlComment=this.lastTokenStr.endsWith("<")&&s==="!",this.result+=s,this.lastTokenStr=s}}]),o}();Object.defineProperty(withLocation,"__esModule",{value:!0});var _createClass=function(){function o(e,s){for(var a=0;a1?c-1:0),d=1;d1?c-1:0),d=1;d1?c-1:0),d=1;d1&&arguments[1]!==void 0?arguments[1]:new _minimalCodegen2.default,s=new TokenStreamWithLocation,a=(0,_shiftReducer.reduce)(addLocationToReducer(e),o);return a.emit(s),{source:s.result,locations:s.locations}}(function(o){Object.defineProperty(o,"__esModule",{value:!0}),o.codeGenWithLocation=o.SemiOp=o.CommaSep=o.Semi=o.Seq=o.ContainsIn=o.NoIn=o.Brace=o.Bracket=o.Paren=o.NumberCodeRep=o.Token=o.Empty=o.CodeRep=o.escapeStringLiteral=o.getPrecedence=o.Precedence=o.Sep=o.FormattedCodeGen=o.ExtensibleCodeGen=o.MinimalCodeGen=void 0,o.default=$;var e=minimalCodegen;Object.defineProperty(o,"MinimalCodeGen",{enumerable:!0,get:function(){return b(e).default}});var s=formattedCodegen;Object.defineProperty(o,"ExtensibleCodeGen",{enumerable:!0,get:function(){return s.ExtensibleCodeGen}}),Object.defineProperty(o,"FormattedCodeGen",{enumerable:!0,get:function(){return s.FormattedCodeGen}}),Object.defineProperty(o,"Sep",{enumerable:!0,get:function(){return s.Sep}});var a=coderep;Object.defineProperty(o,"Precedence",{enumerable:!0,get:function(){return a.Precedence}}),Object.defineProperty(o,"getPrecedence",{enumerable:!0,get:function(){return a.getPrecedence}}),Object.defineProperty(o,"escapeStringLiteral",{enumerable:!0,get:function(){return a.escapeStringLiteral}}),Object.defineProperty(o,"CodeRep",{enumerable:!0,get:function(){return a.CodeRep}}),Object.defineProperty(o,"Empty",{enumerable:!0,get:function(){return a.Empty}}),Object.defineProperty(o,"Token",{enumerable:!0,get:function(){return a.Token}}),Object.defineProperty(o,"NumberCodeRep",{enumerable:!0,get:function(){return a.NumberCodeRep}}),Object.defineProperty(o,"Paren",{enumerable:!0,get:function(){return a.Paren}}),Object.defineProperty(o,"Bracket",{enumerable:!0,get:function(){return a.Bracket}}),Object.defineProperty(o,"Brace",{enumerable:!0,get:function(){return a.Brace}}),Object.defineProperty(o,"NoIn",{enumerable:!0,get:function(){return a.NoIn}}),Object.defineProperty(o,"ContainsIn",{enumerable:!0,get:function(){return a.ContainsIn}}),Object.defineProperty(o,"Seq",{enumerable:!0,get:function(){return a.Seq}}),Object.defineProperty(o,"Semi",{enumerable:!0,get:function(){return a.Semi}}),Object.defineProperty(o,"CommaSep",{enumerable:!0,get:function(){return a.CommaSep}}),Object.defineProperty(o,"SemiOp",{enumerable:!0,get:function(){return a.SemiOp}});var c=withLocation;Object.defineProperty(o,"codeGenWithLocation",{enumerable:!0,get:function(){return b(c).default}});var h=dist$4,d=b(h),g=tokenStream,_=b(e);function b(j){return j&&j.__esModule?j:{default:j}}function $(j){var _e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:new _.default,et=new g.TokenStream,tt=(0,d.default)(_e,j);return tt.emit(et),et.result}})(dist);const shiftCodegen=getDefaultExportFromCjs(dist);function bjorklund(o,e){for(var s=[],a=[],c=[e],h=o-e,d=0,g=function(_){if(_==-1)s.push(0);else if(_==-2)s.push(1);else{for(var b=0;b1;)a.push(Math.floor(h/c[d])),c.push(h%c[d]),h=c[d],d++;return a.push(h),g(d),s.reverse()}var bjork=function(o,e){return o>e?bjorklund(o,e):bjorklund(e,o)};const euclid=(o,e,s=0)=>{const a=bjork(e,o);return s?rotate(a,-s):a};Pattern$3.prototype.euclid=function(o,e,s=0){return this.struct(euclid(o,e,s))};Pattern$3.prototype.euclidLegato=function(o,e,s=0){const a=euclid(o,e,s),c=a.indexOf(1),h=rotate(a,c).join("").split("1").slice(1).map(d=>[d.length+1,!0]);return this.struct(timeCat(...h)).late(fraction(c).div(e))};function steady(o){return new Pattern$3(e=>[new Hap(void 0,e.span,o)])}const signal=o=>{const e=s=>[new Hap(void 0,s.span,o(s.span.midpoint()))];return new Pattern$3(e)},isaw=signal(o=>1-o%1),isaw2=isaw._toBipolar(),saw=signal(o=>o%1),saw2=saw._toBipolar(),sine2=signal(o=>Math.sin(Math.PI*2*o)),sine=sine2._fromBipolar(),cosine=sine._early(fraction(1).div(4)),cosine2=sine2._early(fraction(1).div(4)),square=signal(o=>Math.floor(o*2%2)),square2=square._toBipolar(),tri=fastcat(isaw,saw),tri2=fastcat(isaw2,saw2),time=signal(id$1),xorwise=o=>{const e=o<<13^o,s=e>>17^e;return s<<5^s},_frac=o=>o-Math.trunc(o),timeToIntSeed=o=>xorwise(Math.trunc(_frac(o/300)*536870912)),intSeedToRand=o=>o%536870912/536870912,timeToRand=o=>Math.abs(intSeedToRand(timeToIntSeed(o))),rand=signal(timeToRand),rand2=rand._toBipolar(),_brandBy=o=>rand.fmap(e=>ereify$1(o).fmap(_brandBy).innerJoin(),brand=_brandBy(.5),_irand=o=>rand.fmap(e=>Math.trunc(e*o)),irand=o=>reify$1(o).fmap(_irand).innerJoin(),__chooseWith=(o,e)=>(e=e.map(reify$1),e.length==0?silence:o.range(0,e.length).fmap(s=>e[Math.floor(s)])),chooseWith=(o,e)=>__chooseWith(o,e).outerJoin(),chooseInWith=(o,e)=>__chooseWith(o,e).innerJoin(),choose=(...o)=>chooseWith(rand,o);Pattern$3.prototype.choose=function(...o){return chooseWith(this,o)};Pattern$3.prototype.choose2=function(...o){return chooseWith(this._fromBipolar(),o)};const chooseCycles=(...o)=>chooseInWith(rand.segment(1),o),randcat=chooseCycles,_wchooseWith=function(o,...e){const s=e.map(g=>reify$1(g[0])),a=[];let c=0;for(const g of e)c+=g[1],a.push(c);const h=c,d=function(g){const _=g*h;return s[a.findIndex(b=>b>_,a)]};return o.fmap(d)},wchooseWith=(...o)=>_wchooseWith(...o).outerJoin(),wchoose=(...o)=>wchooseWith(rand,...o),wchooseCycles=(...o)=>_wchooseWith(rand,...o).innerJoin(),perlinWith=o=>{const e=o.fmap(Math.floor),s=o.fmap(h=>Math.floor(h)+1),a=h=>6*h**5-15*h**4+10*h**3,c=h=>d=>g=>d+a(h)*(g-d);return o.sub(e).fmap(c).appBoth(e.fmap(timeToRand)).appBoth(s.fmap(timeToRand))},perlin=perlinWith(time);Pattern$3.prototype._degradeByWith=function(o,e){return this.fmap(s=>a=>s).appLeft(o._filterValues(s=>s>e))};Pattern$3.prototype._degradeBy=function(o){return this._degradeByWith(rand,o)};Pattern$3.prototype.degrade=function(){return this._degradeBy(.5)};Pattern$3.prototype._undegradeBy=function(o){return this._degradeByWith(rand.fmap(e=>1-e),o)};Pattern$3.prototype.undegrade=function(){return this._undegradeBy(.5)};Pattern$3.prototype._sometimesBy=function(o,e){return stack(this._degradeBy(o),e(this._undegradeBy(1-o)))};Pattern$3.prototype.sometimesBy=function(o,e){const s=this;return reify$1(o).fmap(a=>s._sometimesBy(a,e)).innerJoin()};Pattern$3.prototype._sometimesByPre=function(o,e){return stack(this._degradeBy(o),e(this).undegradeBy(1-o))};Pattern$3.prototype.sometimesByPre=function(o,e){const s=this;return reify$1(o).fmap(a=>s._sometimesByPre(a,e)).innerJoin()};Pattern$3.prototype.sometimes=function(o){return this._sometimesBy(.5,o)};Pattern$3.prototype.sometimesPre=function(o){return this._sometimesByPre(.5,o)};Pattern$3.prototype._someCyclesBy=function(o,e){return stack(this._degradeByWith(rand._segment(1),o),e(this._degradeByWith(rand.fmap(s=>1-s)._segment(1),1-o)))};Pattern$3.prototype.someCyclesBy=function(o,e){const s=this;return reify$1(o).fmap(a=>s._someCyclesBy(a,e)).innerJoin()};Pattern$3.prototype.someCycles=function(o){return this._someCyclesBy(.5,o)};Pattern$3.prototype.often=function(o){return this.sometimesBy(.75,o)};Pattern$3.prototype.rarely=function(o){return this.sometimesBy(.25,o)};Pattern$3.prototype.almostNever=function(o){return this.sometimesBy(.1,o)};Pattern$3.prototype.almostAlways=function(o){return this.sometimesBy(.9,o)};Pattern$3.prototype.never=function(o){return this};Pattern$3.prototype.always=function(o){return o(this)};Pattern$3.prototype.patternified.push("degradeBy","undegradeBy");let synth;try{synth=window==null?void 0:window.speechSynthesis}catch{console.warn("cannot use window: not in browser?")}let allVoices=synth==null?void 0:synth.getVoices();function speak(o,e,s){synth.cancel();const a=new SpeechSynthesisUtterance(o);a.lang=e,allVoices=synth.getVoices();const c=allVoices.filter(h=>h.lang.includes(e));typeof s=="number"?a.voice=c[s%c.length]:typeof s=="string"&&(a.voice=c.find(h=>h.name===h)),speechSynthesis.speak(a)}Pattern$3.prototype._speak=function(o,e){return this._withHap(s=>{const a=(c,h)=>{speak(h.value,o,e)};return s.setContext({...s.context,onTrigger:a})})};Pattern$3.prototype.speak=function(o,e){return patternify2(Pattern$3.prototype._speak)(reify(o),reify(e),this)};const stringifyFunction=o=>"("+o+")();",urlifyFunction=o=>URL.createObjectURL(new Blob([stringifyFunction(o)],{type:"text/javascript"})),createWorker=o=>new Worker(urlifyFunction(o));class ClockWorker{constructor(e,s){Rt(this,"worker");Rt(this,"interval",1/20);Rt(this,"tick",0);this.interval=s||this.interval,this.worker=createWorker(()=>{let a,c=null;const h=()=>{c&&(clearInterval(c),c=null)},d=()=>{if(h(),!a)throw new Error("no interval set! call worker.postMessage({interval}) before starting.");postMessage("tick"),c=setInterval(()=>postMessage("tick"),a*1e3)};self.onmessage=function(g){g.data=="start"?d():g.data.interval?(a=g.data.interval,c&&d()):g.data=="stop"&&h()}}),this.setInterval(this.interval),this.worker.onmessage=a=>{a.data==="tick"&&e(this.tick++,this.interval)}}start(){this.worker.postMessage("start")}stop(){this.worker.postMessage("stop"),this.tick=0}setInterval(e){this.worker.postMessage({interval:e})}}class Scheduler{constructor({interval:e,onTrigger:s,onError:a,latency:c=.2,getTime:h}){Rt(this,"worker");Rt(this,"pattern");Rt(this,"started",!1);Rt(this,"phase",0);Rt(this,"cps",1);Rt(this,"getTime");Rt(this,"lastTime");this.worker=new ClockWorker((d,g)=>{try{const _=h();if(!this.lastTime){this.lastTime=_;return}const b=_-this.lastTime;this.lastTime=_;const $=this.phase,j=this.phase+b*this.cps;this.phase=j,this.pattern.queryArc($,j).forEach(et=>{var it,at;if(typeof((it=et.value)==null?void 0:it.cps)=="number"&&this.setCps((at=et.value)==null?void 0:at.cps),!et.part.begin.equals(et.whole.begin))return;const tt=_+(et.whole.begin-$)/this.cps-b+g+c,nt=et.duration/this.cps,st=h(),rt=tt-st;if(tth.hasOnset());console.log(`${e.toFixed(4)} - ${s.toFixed(4)} ${Array(c.length).fill("I").join("")}`)}}const gist=(route,cache=!0)=>fetch(`https://gist.githubusercontent.com/${route}?cachebust=${cache?"":Date.now()}`).then(o=>o.text()).then(code=>eval(code));console.log("%c // \u{1F300} @strudel.cycles/core loaded \u{1F300}","background-color: black;color:white;padding:4px;border-radius:15px");globalThis._strudelLoaded&&console.warn(`@strudel.cycles/core was loaded more than once... +This might happen when you have multiple versions of strudel installed. +Please check with "npm ls @strudel.cycles/core".`);globalThis._strudelLoaded=!0;const strudel=Object.freeze(Object.defineProperty({__proto__:null,Fraction:fraction,gist,Hap,Pattern:Pattern$3,silence,pure,isPattern:isPattern$1,reify:reify$1,stack,slowcat,slowcatPrime,fastcat,cat,timeCat,sequence,seq:seq$2,polymeterSteps,polymeter,pm,polyrhythm,pr,add:add$1,chop,chunk,chunkBack,div,early,echo,every,fast,inv,invert,iter,iterBack,jux,juxBy,late,linger,mask,mul,off,ply,range,range2,rev,slow,struct,sub,superimpose,set,when,makeComposable,patternify2,patternify3,patternify4,steady,signal,isaw,isaw2,saw,saw2,sine2,sine,cosine,cosine2,square,square2,tri,tri2,time,rand,rand2,_brandBy,brandBy,brand,_irand,irand,__chooseWith,chooseWith,chooseInWith,choose,chooseCycles,randcat,wchoose,wchooseCycles,perlinWith,perlin,State,TimeSpan,isNote:isNote$1,tokenizeNote,toMidi,fromMidi,getFreq,midi2note,mod,getPlayableNoteValue,getFrequency,rotate,pipe,compose,removeUndefineds,flatten:flatten$1,id:id$1,constant,listRange,curry,ClockWorker,Scheduler},Symbol.toStringTag,{value:"Module"})),{replace}=estraverse,codegen=shiftCodegen.default||shiftCodegen,{Pattern:Pattern$2}=strudel,isNote=o=>/^[a-gC-G][bs]?[0-9]$/.test(o),shapeshifter=o=>{const{code:e,addReturn:s}=wrapAsync(o),a=dist$7.parseScriptWithLocation(disguiseImports(e)),c=[],h=[],d=replace(a.tree,{enter(_,b){var et,tt,nt;if(h.push(b),h.some(st=>c.includes(st)))return _;if(isBackTickString(_))return minifyWithLocation(_,_,a.locations,c);if(((et=_.directives)==null?void 0:et.length)===1&&!((tt=_.statements)!=null&&tt.length)){const st=new LiteralStringExpression_1({value:_.directives[0].rawValue}),rt=minifyWithLocation(st,_.directives[0],a.locations,c);return{..._,directives:[],statements:[rt]}}if(isStringWithDoubleQuotes(_,a.locations,e))return minifyWithLocation(_,_,a.locations,c);const j={"*":"fast","/":"slow","&":"stack","&&":"append"};if(_.type==="BinaryExpression"&&j[_.operator]&&["LiteralNumericExpression","LiteralStringExpression","IdentifierExpression"].includes((nt=_.right)==null?void 0:nt.type)&&canBeOverloaded(_.left)){let st=_.left;return _.left.type==="IdentifierExpression"&&(st=wrapFunction("reify",_.left)),new CallExpression_1({callee:new StaticMemberExpression_1({property:j[_.operator],object:wrapFunction("reify",st)}),arguments:[_.right]})}const _e=isPatternArg(h)||hasModifierCall(b);if(_.type==="CallExpression"&&_.callee.name==="pure"){const st=_.arguments[0];return reifyWithLocation(st,_.arguments[0],a.locations,c)}if(_.type==="IdentifierExpression"){if(isNote(_.name)){const st=_.name[1]==="s"?_.name.replace("s","#"):_.name;return _e?reifyWithLocation(new LiteralStringExpression_1({value:st}),_,a.locations,c):new LiteralStringExpression_1({value:st})}if(_.name==="r")return new IdentifierExpression_1({name:"silence"})}return["LiteralStringExpression"].includes(_.type)&&_e?reifyWithLocation(_,_,a.locations,c):addMiniNotationLocations(_,a.locations,c)},leave(){h.pop()}});return s(d),undisguiseImports(codegen(d))};function disguiseImports(o){return o.replaceAll("import","_mport")}function undisguiseImports(o){return o.replaceAll("_mport","import")}function wrapAsync(o){return o=`(async () => { +${o} +})()`,{code:o,addReturn:s=>{const a=s.statements[0].expression.callee.body;a.statements=a.statements.slice(0,-1).concat([new ReturnStatement_1({expression:a.statements.slice(-1)[0]})])}}}function addMiniNotationLocations(o,e,s){const a=["mini","m"];if(o.type==="CallExpression"&&a.includes(o.callee.name)){if(o.arguments.length>1)return console.warn("multi arg mini locations not supported yet..."),o;const c=o.arguments[0];return minifyWithLocation(c,c,e,s)}return o.type==="StaticMemberExpression"&&a.includes(o.property)?minifyWithLocation(o.object,o,e,s):o}function wrapFunction(o,...e){return new CallExpression_1({callee:new IdentifierExpression_1({name:o}),arguments:e})}function isBackTickString(o){return o.type==="TemplateExpression"&&o.elements.length===1}function isStringWithDoubleQuotes(o,e,s){if(o.type!=="LiteralStringExpression")return!1;const a=e.get(o);return s.slice(a.start.offset,a.end.offset)[0]==='"'}function isPatternArg(o){if(!o.length)return!1;const e=o.slice(0,-1),s=o[o.length-1];return isPatternFactory(s)?!0:(s==null?void 0:s.type)==="ArrayExpression"?isPatternArg(e):!1}function hasModifierCall(o){return(o==null?void 0:o.type)==="StaticMemberExpression"&&Object.keys(Pattern$2.prototype.composable).includes(o.property)}const factories=Object.keys(Pattern$2.prototype.factories).concat(["mini"]);function isPatternFactory(o){return(o==null?void 0:o.type)==="CallExpression"&&factories.includes(o.callee.name)}function canBeOverloaded(o){return o.type==="IdentifierExpression"&&isNote(o.name)||isPatternFactory(o)}function reifyWithLocation(o,e,s,a){const c=getLocationArguments(e,s),h=new CallExpression_1({callee:new StaticMemberExpression_1({object:wrapFunction("reify",o),property:"withLocation"}),arguments:c});return a.push(h),h}function minifyWithLocation(o,e,s,a){const c=getLocationArguments(e,s),h=wrapFunction("mini",o),d=new CallExpression_1({callee:new StaticMemberExpression_1({object:h,property:"withMiniLocation"}),arguments:c});return a.push(d),d}function getLocationArguments(o,e){const s=e.get(o),a=-1;return[new ArrayExpression_1({elements:[new LiteralNumericExpression_1({value:s.start.line+a}),new LiteralNumericExpression_1({value:s.start.column}),new LiteralNumericExpression_1({value:s.start.offset})]}),new ArrayExpression_1({elements:[new LiteralNumericExpression_1({value:s.end.line+a}),new LiteralNumericExpression_1({value:s.end.column}),new LiteralNumericExpression_1({value:s.end.offset})]})]}const{isPattern,Pattern:Pattern$1}=strudel;let scoped=!1;const evalScope=async(...o)=>{scoped&&console.warn("@strudel.cycles/eval evalScope was called more than once."),scoped=!0;const e=await Promise.allSettled(o),s=e.filter(a=>a.status==="fulfilled").map(a=>a.value);e.forEach((a,c)=>{a.status==="rejected"&&console.warn(`evalScope: module with index ${c} could not be loaded:`,a.reason)}),Object.assign(globalThis,...s,Pattern$1.prototype.bootstrap())};function safeEval(o){return Function('"use strict";return ('+o+")")()}const evaluate=async o=>{scoped||await evalScope();const e=shapeshifter(o);let s=await safeEval(e);if(!isPattern(s)){console.log("evaluated",s);const a=`got "${typeof s}" instead of pattern`;throw new Error(a+(typeof s=="function"?", did you forget to call a function?":"."))}return{mode:"javascript",pattern:s}},bufferCache={},loadCache={},getCachedBuffer=o=>bufferCache[o],loadBuffer=(o,e)=>(loadCache[o]||(loadCache[o]=fetch(o).then(s=>s.arrayBuffer()).then(async s=>{const a=await e.decodeAudioData(s);return bufferCache[o]=a,a})),loadCache[o]),getLoadedBuffer=o=>bufferCache[o],githubCache={};let sampleCache={current:void 0};const loadGithubSamples=async(o,e)=>{const s="loadGithubSamples "+o,a=localStorage.getItem(s);if(a&&(console.log("[sampler]: loaded sample list from localstorage",o),githubCache[o]=JSON.parse(a)),githubCache[o])return sampleCache.current=githubCache[o],githubCache[o];console.log("[sampler]: fetching sample list from github",o);try{const[c,h,...d]=o.split("/"),g=`https://api.github.com/repos/${c}/${h}/contents`,_=await fetch(`${g}/${d.join("/")}`).then(b=>b.json());githubCache[o]=(await Promise.all(_.map(async({name:b,path:$})=>({name:b,content:await fetch(`${g}/${$}`).then(j=>j.json()).catch(j=>{console.error("could not load path",j)})})))).filter(({content:b})=>!!b).reduce((b,{name:$,content:j})=>({...b,[(e==null?void 0:e($))||$]:j.map(({download_url:_e})=>_e)}),{})}catch(c){console.error("[sampler]: failed to fetch sample list from github",c);return}return sampleCache.current=githubCache[o],localStorage.setItem(s,JSON.stringify(sampleCache.current)),console.log("[sampler]: loaded samples:",sampleCache.current),githubCache[o]},samples=(o,e=o._base||"")=>{sampleCache.current={...sampleCache.current,...Object.fromEntries(Object.entries(o).map(([s,a])=>{if(typeof a=="string"&&(a=[a]),typeof a!="object")throw new Error("wrong sample map format for "+s);e=a._base||e;const c=h=>(e+h).replace("github:","https://raw.githubusercontent.com/");return Array.isArray(a)?[s,a.map(c)]:[s,Object.fromEntries(Object.entries(a).map(([h,d])=>[h,(typeof d=="string"?[d]:d).map(c)]))]}))}},resetLoadedSamples=()=>{sampleCache.current=void 0},getLoadedSamples$1=()=>sampleCache.current,{Pattern}=strudel;let audioContext;const getAudioContext=()=>(audioContext||(audioContext=new AudioContext),audioContext);let destination;const getDestination=()=>{const o=getAudioContext();return destination||(destination=o.createGain(),destination.connect(o.destination)),destination},panic=()=>{getDestination().gain.linearRampToValueAtTime(0,getAudioContext().currentTime+.01),destination=null},getFilter=(o,e,s)=>{const a=getAudioContext().createBiquadFilter();return a.type=o,a.frequency.value=e,a.Q.value=s,a},getADSR=(o,e,s,a,c,h,d)=>{const g=getAudioContext().createGain();return g.gain.setValueAtTime(0,h),g.gain.linearRampToValueAtTime(c,h+o),g.gain.linearRampToValueAtTime(s*c,h+o+e),g.gain.setValueAtTime(s*c,d),g.gain.linearRampToValueAtTime(0,d+a),g},getOscillator=({s:o,freq:e,t:s,duration:a,release:c})=>{const h=getAudioContext().createOscillator();return h.type=o||"triangle",h.frequency.value=Number(e),h.start(s),h.stop(s+a+c),h},getSoundfontKey=o=>{var a,c,h,d;if(!globalThis.soundfontList)return!1;if((c=(a=globalThis.soundfontList)==null?void 0:a.instruments)!=null&&c.includes(o))return o;const e=(d=(h=globalThis.soundfontList)==null?void 0:h.instrumentNames)==null?void 0:d.indexOf(o),s=e<10?`00${e}`:e<100?`0${e}`:e;if(e!==-1)return globalThis.soundfontList.instruments.find(g=>g.startsWith(s))},getSampleBufferSource=async(o,e,s)=>{let a=0;s&&(a=toMidi(s)-36);const c=getAudioContext(),h=getLoadedSamples();if(!h)throw new Error("no samples loaded");const d=h==null?void 0:h[o];if(!d)throw new Error(`sample not found: "${o}", try one of ${Object.keys(h).join(", ")}`);if(typeof d!="object")throw new Error("wrong format for sample bank:",o);let g;if(Array.isArray(d))g=d[e%d.length];else{if(!s)throw new Error("no note(...) set for sound",o);const j=et=>toMidi(et)-toMidi(s),_e=Object.keys(d).filter(et=>!et.startsWith("_")).reduce((et,tt,nt)=>!et||Math.abs(j(tt)){if(!o.includes(":"))return[o,e];let[s,a]=o.split(":");return isNaN(Number(a))?[o,e]:[s,a]},webaudioOutput=async(o,e,s)=>{try{const a=getAudioContext();if(typeof o.value!="object")throw new Error(`hap.value ${o.value} is not supported by webaudio output. Hint: append .note() or .s() to the end`);const c=a.currentTime+e;let{freq:h,s:d,sf:g,clip:_=0,n:b=0,note:$,gain:j=1,cutoff:_e,resonance:et=1,hcutoff:tt,hresonance:nt=1,bandf:st,bandq:rt=1,pan:it,attack:at=.001,decay:ot=.05,sustain:ut=.5,release:ct=.001,speed:ht=1,begin:lt=0,end:pt=1}=o.value;const{velocity:ft=1}=o.context;j*=ft;const gt=[];if(typeof d=="string"&&([d,b]=splitSN(d,b)),typeof $=="string"&&([$,b]=splitSN($,b)),!d||["sine","square","triangle","sawtooth"].includes(d)){b=$||b,typeof b=="string"&&(b=toMidi(b)),!h&&typeof b=="number"&&(h=fromMidi(b));const mt=getOscillator({t:c,s:d,freq:h,duration:s,release:ct});gt.push(mt);const Et=a.createGain();Et.gain.value=.3,gt.push(Et);const Ot=getADSR(at,ot,ut,ct,1,c,c+s);gt.push(Ot)}else{if(ht===0)return;if(!d){console.warn("no sample specified");return}const mt=getSoundfontKey(d);let Et;try{mt?Et=await globalThis.getFontBufferSource(mt,$||b,a):Et=await getSampleBufferSource(d,b,$)}catch(At){console.warn(At);return}if(a.currentTime>c){console.warn("sample still loading:",d,b);return}if(!Et){console.warn("no buffer source");return}Et.playbackRate.value=Math.abs(ht)*Et.playbackRate.value;let Ot=mt||_?s:Et.buffer.duration;const St=lt*Ot;if(Ot=(pt-lt)*Ot/Math.abs(ht),mt||_?Et.start(c,St):Et.start(c,St,Ot),gt.push(Et),mt||_){const At=a.createGain(),dt=.1;At.gain.value=.6,At.gain.setValueAtTime(At.gain.value,c+Ot),At.gain.linearRampToValueAtTime(0,c+Ot+dt),gt.push(At),Et.stop(c+Ot+dt)}else Et.stop(c+Ot)}const yt=a.createGain();if(yt.gain.value=j,gt.push(yt),_e!==void 0&>.push(getFilter("lowpass",_e,et)),tt!==void 0&>.push(getFilter("highpass",tt,nt)),st!==void 0&>.push(getFilter("bandpass",st,rt)),it!==void 0){const mt=a.createStereoPanner();mt.pan.value=2*it-1,gt.push(mt)}gt.push(getDestination()),gt.slice(1).reduce((mt,Et)=>mt.connect(Et),gt[0])}catch(a){console.warn(".out error:",a)}};Pattern.prototype.out=function(){return this.onTrigger((o,e,s,a)=>webaudioOutput(e,o-s,e.duration/a))};function _extends(){return _extends=Object.assign?Object.assign.bind():function(o){for(var e=1;e=0)&&(s[c]=o[c]);return s}class Text{constructor(){}lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,s,a){let c=[];return this.decompose(0,e,c,2),a.length&&a.decompose(0,a.length,c,3),this.decompose(s,this.length,c,1),TextNode.from(c,this.length-(s-e)+a.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,s=this.length){let a=[];return this.decompose(e,s,a,0),TextNode.from(a,s-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let s=this.scanIdentical(e,1),a=this.length-this.scanIdentical(e,-1),c=new RawTextCursor(this),h=new RawTextCursor(e);for(let d=s,g=s;;){if(c.next(d),h.next(d),d=0,c.lineBreak!=h.lineBreak||c.done!=h.done||c.value!=h.value)return!1;if(g+=c.value.length,c.done||g>=a)return!0}}iter(e=1){return new RawTextCursor(this,e)}iterRange(e,s=this.length){return new PartialTextCursor(this,e,s)}iterLines(e,s){let a;if(e==null)a=this.iter();else{s==null&&(s=this.lines+1);let c=this.line(e).from;a=this.iterRange(c,Math.max(c,s==this.lines+1?this.length:s<=1?0:this.line(s-1).to))}return new LineCursor(a)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?Text.empty:e.length<=32?new TextLeaf(e):TextNode.from(TextLeaf.split(e,[]))}}class TextLeaf extends Text{constructor(e,s=textLength(e)){super(),this.text=e,this.length=s}get lines(){return this.text.length}get children(){return null}lineInner(e,s,a,c){for(let h=0;;h++){let d=this.text[h],g=c+d.length;if((s?a:g)>=e)return new Line(c,g,a,d);c=g+1,a++}}decompose(e,s,a,c){let h=e<=0&&s>=this.length?this:new TextLeaf(sliceText(this.text,e,s),Math.min(s,this.length)-Math.max(0,e));if(c&1){let d=a.pop(),g=appendText(h.text,d.text.slice(),0,h.length);if(g.length<=32)a.push(new TextLeaf(g,d.length+h.length));else{let _=g.length>>1;a.push(new TextLeaf(g.slice(0,_)),new TextLeaf(g.slice(_)))}}else a.push(h)}replace(e,s,a){if(!(a instanceof TextLeaf))return super.replace(e,s,a);let c=appendText(this.text,appendText(a.text,sliceText(this.text,0,e)),s),h=this.length+a.length-(s-e);return c.length<=32?new TextLeaf(c,h):TextNode.from(TextLeaf.split(c,[]),h)}sliceString(e,s=this.length,a=` +`){let c="";for(let h=0,d=0;h<=s&&de&&d&&(c+=a),e<_&&s>h&&(c+=g.slice(Math.max(0,e-h),s-h)),h=_+1}return c}flatten(e){for(let s of this.text)e.push(s)}scanIdentical(){return 0}static split(e,s){let a=[],c=-1;for(let h of e)a.push(h),c+=h.length+1,a.length==32&&(s.push(new TextLeaf(a,c)),a=[],c=-1);return c>-1&&s.push(new TextLeaf(a,c)),s}}class TextNode extends Text{constructor(e,s){super(),this.children=e,this.length=s,this.lines=0;for(let a of e)this.lines+=a.lines}lineInner(e,s,a,c){for(let h=0;;h++){let d=this.children[h],g=c+d.length,_=a+d.lines-1;if((s?_:g)>=e)return d.lineInner(e,s,a,c);c=g+1,a=_+1}}decompose(e,s,a,c){for(let h=0,d=0;d<=s&&h=d){let b=c&((d<=e?1:0)|(_>=s?2:0));d>=e&&_<=s&&!b?a.push(g):g.decompose(e-d,s-d,a,b)}d=_+1}}replace(e,s,a){if(a.lines=h&&s<=g){let _=d.replace(e-h,s-h,a),b=this.lines-d.lines+_.lines;if(_.lines>5-1&&_.lines>b>>5+1){let $=this.children.slice();return $[c]=_,new TextNode($,this.length-(s-e)+a.length)}return super.replace(h,g,_)}h=g+1}return super.replace(e,s,a)}sliceString(e,s=this.length,a=` +`){let c="";for(let h=0,d=0;he&&h&&(c+=a),e<_&&s>d&&(c+=g.sliceString(e-d,s-d,a)),d=_+1}return c}flatten(e){for(let s of this.children)s.flatten(e)}scanIdentical(e,s){if(!(e instanceof TextNode))return 0;let a=0,[c,h,d,g]=s>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;c+=s,h+=s){if(c==d||h==g)return a;let _=this.children[c],b=e.children[h];if(_!=b)return a+_.scanIdentical(b,s);a+=_.length+1}}static from(e,s=e.reduce((a,c)=>a+c.length+1,-1)){let a=0;for(let et of e)a+=et.lines;if(a<32){let et=[];for(let tt of e)tt.flatten(et);return new TextLeaf(et,s)}let c=Math.max(32,a>>5),h=c<<1,d=c>>1,g=[],_=0,b=-1,$=[];function j(et){let tt;if(et.lines>h&&et instanceof TextNode)for(let nt of et.children)j(nt);else et.lines>d&&(_>d||!_)?(_e(),g.push(et)):et instanceof TextLeaf&&_&&(tt=$[$.length-1])instanceof TextLeaf&&et.lines+tt.lines<=32?(_+=et.lines,b+=et.length+1,$[$.length-1]=new TextLeaf(tt.text.concat(et.text),tt.length+1+et.length)):(_+et.lines>c&&_e(),_+=et.lines,b+=et.length+1,$.push(et))}function _e(){_!=0&&(g.push($.length==1?$[0]:TextNode.from($,b)),b=-1,_=$.length=0)}for(let et of e)j(et);return _e(),g.length==1?g[0]:new TextNode(g,s)}}Text.empty=new TextLeaf([""],0);function textLength(o){let e=-1;for(let s of o)e+=s.length+1;return e}function appendText(o,e,s=0,a=1e9){for(let c=0,h=0,d=!0;h=s&&(_>a&&(g=g.slice(0,a-c)),c0?1:(e instanceof TextLeaf?e.text.length:e.children.length)<<1]}nextInner(e,s){for(this.done=this.lineBreak=!1;;){let a=this.nodes.length-1,c=this.nodes[a],h=this.offsets[a],d=h>>1,g=c instanceof TextLeaf?c.text.length:c.children.length;if(d==(s>0?g:0)){if(a==0)return this.done=!0,this.value="",this;s>0&&this.offsets[a-1]++,this.nodes.pop(),this.offsets.pop()}else if((h&1)==(s>0?0:1)){if(this.offsets[a]+=s,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(c instanceof TextLeaf){let _=c.text[d+(s<0?-1:0)];if(this.offsets[a]+=s,_.length>Math.max(0,e))return this.value=e==0?_:s>0?_.slice(e):_.slice(0,_.length-e),this;e-=_.length}else{let _=c.children[d+(s<0?-1:0)];e>_.length?(e-=_.length,this.offsets[a]+=s):(s<0&&this.offsets[a]--,this.nodes.push(_),this.offsets.push(s>0?1:(_ instanceof TextLeaf?_.text.length:_.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class PartialTextCursor{constructor(e,s,a){this.value="",this.done=!1,this.cursor=new RawTextCursor(e,s>a?-1:1),this.pos=s>a?e.length:0,this.from=Math.min(s,a),this.to=Math.max(s,a)}nextInner(e,s){if(s<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,s<0?this.pos-this.to:this.from-this.pos);let a=s<0?this.pos-this.from:this.to-this.pos;e>a&&(e=a),a-=e;let{value:c}=this.cursor.next(e);return this.pos+=(c.length+e)*s,this.value=c.length<=a?c:s<0?c.slice(c.length-a):c.slice(0,a),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class LineCursor{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:s,lineBreak:a,value:c}=this.inner.next(e);return s?(this.done=!0,this.value=""):a?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=c,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(Text.prototype[Symbol.iterator]=function(){return this.iter()},RawTextCursor.prototype[Symbol.iterator]=PartialTextCursor.prototype[Symbol.iterator]=LineCursor.prototype[Symbol.iterator]=function(){return this});class Line{constructor(e,s,a,c){this.from=e,this.to=s,this.number=a,this.text=c}get length(){return this.to-this.from}}let extend="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(o=>o?parseInt(o,36):1);for(let o=1;oo)return extend[e-1]<=o;return!1}function isRegionalIndicator(o){return o>=127462&&o<=127487}const ZWJ=8205;function findClusterBreak(o,e,s=!0,a=!0){return(s?nextClusterBreak:prevClusterBreak)(o,e,a)}function nextClusterBreak(o,e,s){if(e==o.length)return e;e&&surrogateLow(o.charCodeAt(e))&&surrogateHigh(o.charCodeAt(e-1))&&e--;let a=codePointAt(o,e);for(e+=codePointSize(a);e=0&&isRegionalIndicator(codePointAt(o,d));)h++,d-=2;if(h%2==0)break;e+=2}else break}return e}function prevClusterBreak(o,e,s){for(;e>0;){let a=nextClusterBreak(o,e-2,s);if(a=56320&&o<57344}function surrogateHigh(o){return o>=55296&&o<56320}function codePointAt(o,e){let s=o.charCodeAt(e);if(!surrogateHigh(s)||e+1==o.length)return s;let a=o.charCodeAt(e+1);return surrogateLow(a)?(s-55296<<10)+(a-56320)+65536:s}function fromCodePoint(o){return o<=65535?String.fromCharCode(o):(o-=65536,String.fromCharCode((o>>10)+55296,(o&1023)+56320))}function codePointSize(o){return o<65536?1:2}const DefaultSplit=/\r\n?|\n/;var MapMode=function(o){return o[o.Simple=0]="Simple",o[o.TrackDel=1]="TrackDel",o[o.TrackBefore=2]="TrackBefore",o[o.TrackAfter=3]="TrackAfter",o}(MapMode||(MapMode={}));class ChangeDesc{constructor(e){this.sections=e}get length(){let e=0;for(let s=0;se)return h+(e-c);h+=g}else{if(a!=MapMode.Simple&&b>=e&&(a==MapMode.TrackDel&&ce||a==MapMode.TrackBefore&&ce))return null;if(b>e||b==e&&s<0&&!g)return e==c||s<0?h:h+_;h+=_}c=b}if(e>c)throw new RangeError(`Position ${e} is out of range for changeset of length ${c}`);return h}touchesRange(e,s=e){for(let a=0,c=0;a=0&&c<=s&&g>=e)return cs?"cover":!0;c=g}return!1}toString(){let e="";for(let s=0;s=0?":"+c:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(s=>typeof s!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new ChangeDesc(e)}static create(e){return new ChangeDesc(e)}}class ChangeSet extends ChangeDesc{constructor(e,s){super(e),this.inserted=s}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return iterChanges(this,(s,a,c,h,d)=>e=e.replace(c,c+(a-s),d),!1),e}mapDesc(e,s=!1){return mapSet(this,e,s,!0)}invert(e){let s=this.sections.slice(),a=[];for(let c=0,h=0;c=0){s[c]=g,s[c+1]=d;let _=c>>1;for(;a.length<_;)a.push(Text.empty);a.push(d?e.slice(h,h+d):Text.empty)}h+=d}return new ChangeSet(s,a)}compose(e){return this.empty?e:e.empty?this:composeSets(this,e,!0)}map(e,s=!1){return e.empty?this:mapSet(this,e,s,!0)}iterChanges(e,s=!1){iterChanges(this,e,s)}get desc(){return ChangeDesc.create(this.sections)}filter(e){let s=[],a=[],c=[],h=new SectionIter(this);e:for(let d=0,g=0;;){let _=d==e.length?1e9:e[d++];for(;g<_||g==_&&h.len==0;){if(h.done)break e;let $=Math.min(h.len,_-g);addSection(c,$,-1);let j=h.ins==-1?-1:h.off==0?h.ins:0;addSection(s,$,j),j>0&&addInsert(a,s,h.text),h.forward($),g+=$}let b=e[d++];for(;g>1].toJSON()))}return e}static of(e,s,a){let c=[],h=[],d=0,g=null;function _($=!1){if(!$&&!c.length)return;d_e||j<0||_e>s)throw new RangeError(`Invalid change range ${j} to ${_e} (in doc of length ${s})`);let tt=et?typeof et=="string"?Text.of(et.split(a||DefaultSplit)):et:Text.empty,nt=tt.length;if(j==_e&&nt==0)return;jd&&addSection(c,j-d,-1),addSection(c,_e-j,nt),addInsert(h,c,tt),d=_e}}return b(e),_(!g),g}static empty(e){return new ChangeSet(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let s=[],a=[];for(let c=0;cg&&typeof d!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(h.length==1)s.push(h[0],0);else{for(;a.length=0&&s<=0&&s==o[c+1]?o[c]+=e:e==0&&o[c]==0?o[c+1]+=s:a?(o[c]+=e,o[c+1]+=s):o.push(e,s)}function addInsert(o,e,s){if(s.length==0)return;let a=e.length-2>>1;if(a>1])),!(s||d==o.sections.length||o.sections[d+1]<0);)g=o.sections[d++],_=o.sections[d++];e(c,b,h,$,j),c=b,h=$}}}function mapSet(o,e,s,a=!1){let c=[],h=a?[]:null,d=new SectionIter(o),g=new SectionIter(e);for(let _=-1;;)if(d.ins==-1&&g.ins==-1){let b=Math.min(d.len,g.len);addSection(c,b,-1),d.forward(b),g.forward(b)}else if(g.ins>=0&&(d.ins<0||_==d.i||d.off==0&&(g.len=0&&_=0){let b=0,$=d.len;for(;$;)if(g.ins==-1){let j=Math.min($,g.len);b+=j,$-=j,g.forward(j)}else if(g.ins==0&&g.len<$)$-=g.len,g.next();else break;addSection(c,b,__||d.ins>=0&&d.len>_)&&(g||a.length>b),h.forward2(_),d.forward(_)}}}}class SectionIter{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return s>=e.length?Text.empty:e[s]}textBit(e){let{inserted:s}=this.set,a=this.i-2>>1;return a>=s.length&&!e?Text.empty:s[a].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class SelectionRange{constructor(e,s,a){this.from=e,this.to=s,this.flags=a}get anchor(){return this.flags&16?this.to:this.from}get head(){return this.flags&16?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&4?-1:this.flags&8?1:0}get bidiLevel(){let e=this.flags&3;return e==3?null:e}get goalColumn(){let e=this.flags>>5;return e==33554431?void 0:e}map(e,s=-1){let a,c;return this.empty?a=c=e.mapPos(this.from,s):(a=e.mapPos(this.from,1),c=e.mapPos(this.to,-1)),a==this.from&&c==this.to?this:new SelectionRange(a,c,this.flags)}extend(e,s=e){if(e<=this.anchor&&s>=this.anchor)return EditorSelection.range(e,s);let a=Math.abs(e-this.anchor)>Math.abs(s-this.anchor)?e:s;return EditorSelection.range(this.anchor,a)}eq(e){return this.anchor==e.anchor&&this.head==e.head}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return EditorSelection.range(e.anchor,e.head)}static create(e,s,a){return new SelectionRange(e,s,a)}}class EditorSelection{constructor(e,s){this.ranges=e,this.mainIndex=s}map(e,s=-1){return e.empty?this:EditorSelection.create(this.ranges.map(a=>a.map(e,s)),this.mainIndex)}eq(e){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let s=0;se.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new EditorSelection(e.ranges.map(s=>SelectionRange.fromJSON(s)),e.main)}static single(e,s=e){return new EditorSelection([EditorSelection.range(e,s)],0)}static create(e,s=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let a=0,c=0;ce?4:0))}static normalized(e,s=0){let a=e[s];e.sort((c,h)=>c.from-h.from),s=e.indexOf(a);for(let c=1;ch.head?EditorSelection.range(_,g):EditorSelection.range(g,_))}}return new EditorSelection(e,s)}}function checkSelection(o,e){for(let s of o.ranges)if(s.to>e)throw new RangeError("Selection points outside of document")}let nextID=0;class Facet{constructor(e,s,a,c,h){this.combine=e,this.compareInput=s,this.compare=a,this.isStatic=c,this.id=nextID++,this.default=e([]),this.extensions=typeof h=="function"?h(this):h}static define(e={}){return new Facet(e.combine||(s=>s),e.compareInput||((s,a)=>s===a),e.compare||(e.combine?(s,a)=>s===a:sameArray$1),!!e.static,e.enables)}of(e){return new FacetProvider([],this,0,e)}compute(e,s){if(this.isStatic)throw new Error("Can't compute a static facet");return new FacetProvider(e,this,1,s)}computeN(e,s){if(this.isStatic)throw new Error("Can't compute a static facet");return new FacetProvider(e,this,2,s)}from(e,s){return s||(s=a=>a),this.compute([e],a=>s(a.field(e)))}}function sameArray$1(o,e){return o==e||o.length==e.length&&o.every((s,a)=>s===e[a])}class FacetProvider{constructor(e,s,a,c){this.dependencies=e,this.facet=s,this.type=a,this.value=c,this.id=nextID++}dynamicSlot(e){var s;let a=this.value,c=this.facet.compareInput,h=this.id,d=e[h]>>1,g=this.type==2,_=!1,b=!1,$=[];for(let j of this.dependencies)j=="doc"?_=!0:j=="selection"?b=!0:(((s=e[j.id])!==null&&s!==void 0?s:1)&1)==0&&$.push(e[j.id]);return{create(j){return j.values[d]=a(j),1},update(j,_e){if(_&&_e.docChanged||b&&(_e.docChanged||_e.selection)||ensureAll(j,$)){let et=a(j);if(g?!compareArray(et,j.values[d],c):!c(et,j.values[d]))return j.values[d]=et,1}return 0},reconfigure:(j,_e)=>{let et=a(j),tt=_e.config.address[h];if(tt!=null){let nt=getAddr(_e,tt);if(this.dependencies.every(st=>st instanceof Facet?_e.facet(st)===j.facet(st):st instanceof StateField?_e.field(st,!1)==j.field(st,!1):!0)||(g?compareArray(et,nt,c):c(et,nt)))return j.values[d]=nt,0}return j.values[d]=et,1}}}}function compareArray(o,e,s){if(o.length!=e.length)return!1;for(let a=0;ao[_.id]),c=s.map(_=>_.type),h=a.filter(_=>!(_&1)),d=o[e.id]>>1;function g(_){let b=[];for(let $=0;$a===c),e);return e.provide&&(s.provides=e.provide(s)),s}create(e){let s=e.facet(initField).find(a=>a.field==this);return((s==null?void 0:s.create)||this.createF)(e)}slot(e){let s=e[this.id]>>1;return{create:a=>(a.values[s]=this.create(a),1),update:(a,c)=>{let h=a.values[s],d=this.updateF(h,c);return this.compareF(h,d)?0:(a.values[s]=d,1)},reconfigure:(a,c)=>c.config.address[this.id]!=null?(a.values[s]=c.field(this),0):(a.values[s]=this.create(a),1)}}init(e){return[this,initField.of({field:this,create:e})]}get extension(){return this}}const Prec_={lowest:4,low:3,default:2,high:1,highest:0};function prec(o){return e=>new PrecExtension(e,o)}const Prec={highest:prec(Prec_.highest),high:prec(Prec_.high),default:prec(Prec_.default),low:prec(Prec_.low),lowest:prec(Prec_.lowest)};class PrecExtension{constructor(e,s){this.inner=e,this.prec=s}}class Compartment{of(e){return new CompartmentInstance(this,e)}reconfigure(e){return Compartment.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class CompartmentInstance{constructor(e,s){this.compartment=e,this.inner=s}}class Configuration{constructor(e,s,a,c,h,d){for(this.base=e,this.compartments=s,this.dynamicSlots=a,this.address=c,this.staticValues=h,this.facets=d,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,s,a){let c=[],h=Object.create(null),d=new Map;for(let _e of flatten(e,s,d))_e instanceof StateField?c.push(_e):(h[_e.facet.id]||(h[_e.facet.id]=[])).push(_e);let g=Object.create(null),_=[],b=[];for(let _e of c)g[_e.id]=b.length<<1,b.push(et=>_e.slot(et));let $=a==null?void 0:a.config.facets;for(let _e in h){let et=h[_e],tt=et[0].facet,nt=$&&$[_e]||[];if(et.every(st=>st.type==0))if(g[tt.id]=_.length<<1|1,sameArray$1(nt,et))_.push(a.facet(tt));else{let st=tt.combine(et.map(rt=>rt.value));_.push(a&&tt.compare(st,a.facet(tt))?a.facet(tt):st)}else{for(let st of et)st.type==0?(g[st.id]=_.length<<1|1,_.push(st.value)):(g[st.id]=b.length<<1,b.push(rt=>st.dynamicSlot(rt)));g[tt.id]=b.length<<1,b.push(st=>dynamicFacetSlot(st,tt,et))}}let j=b.map(_e=>_e(g));return new Configuration(e,d,j,g,_,h)}}function flatten(o,e,s){let a=[[],[],[],[],[]],c=new Map;function h(d,g){let _=c.get(d);if(_!=null){if(_<=g)return;let b=a[_].indexOf(d);b>-1&&a[_].splice(b,1),d instanceof CompartmentInstance&&s.delete(d.compartment)}if(c.set(d,g),Array.isArray(d))for(let b of d)h(b,g);else if(d instanceof CompartmentInstance){if(s.has(d.compartment))throw new RangeError("Duplicate use of compartment in extensions");let b=e.get(d.compartment)||d.inner;s.set(d.compartment,b),h(b,g)}else if(d instanceof PrecExtension)h(d.inner,d.prec);else if(d instanceof StateField)a[g].push(d),d.provides&&h(d.provides,g);else if(d instanceof FacetProvider)a[g].push(d),d.facet.extensions&&h(d.facet.extensions,Prec_.default);else{let b=d.extension;if(!b)throw new Error(`Unrecognized extension value in extension set (${d}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);h(b,g)}}return h(o,Prec_.default),a.reduce((d,g)=>d.concat(g))}function ensureAddr(o,e){if(e&1)return 2;let s=e>>1,a=o.status[s];if(a==4)throw new Error("Cyclic dependency between fields and/or facets");if(a&2)return a;o.status[s]=4;let c=o.computeSlot(o,o.config.dynamicSlots[s]);return o.status[s]=2|c}function getAddr(o,e){return e&1?o.config.staticValues[e>>1]:o.values[e>>1]}const languageData=Facet.define(),allowMultipleSelections=Facet.define({combine:o=>o.some(e=>e),static:!0}),lineSeparator=Facet.define({combine:o=>o.length?o[0]:void 0,static:!0}),changeFilter=Facet.define(),transactionFilter=Facet.define(),transactionExtender=Facet.define(),readOnly=Facet.define({combine:o=>o.length?o[0]:!1});class Annotation{constructor(e,s){this.type=e,this.value=s}static define(){return new AnnotationType}}class AnnotationType{of(e){return new Annotation(this,e)}}class StateEffectType{constructor(e){this.map=e}of(e){return new StateEffect(this,e)}}class StateEffect{constructor(e,s){this.type=e,this.value=s}map(e){let s=this.type.map(this.value,e);return s===void 0?void 0:s==this.value?this:new StateEffect(this.type,s)}is(e){return this.type==e}static define(e={}){return new StateEffectType(e.map||(s=>s))}static mapEffects(e,s){if(!e.length)return e;let a=[];for(let c of e){let h=c.map(s);h&&a.push(h)}return a}}StateEffect.reconfigure=StateEffect.define();StateEffect.appendConfig=StateEffect.define();class Transaction{constructor(e,s,a,c,h,d){this.startState=e,this.changes=s,this.selection=a,this.effects=c,this.annotations=h,this.scrollIntoView=d,this._doc=null,this._state=null,a&&checkSelection(a,s.newLength),h.some(g=>g.type==Transaction.time)||(this.annotations=h.concat(Transaction.time.of(Date.now())))}static create(e,s,a,c,h,d){return new Transaction(e,s,a,c,h,d)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let s of this.annotations)if(s.type==e)return s.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let s=this.annotation(Transaction.userEvent);return!!(s&&(s==e||s.length>e.length&&s.slice(0,e.length)==e&&s[e.length]=="."))}}Transaction.time=Annotation.define();Transaction.userEvent=Annotation.define();Transaction.addToHistory=Annotation.define();Transaction.remote=Annotation.define();function joinRanges(o,e){let s=[];for(let a=0,c=0;;){let h,d;if(a=o[a]))h=o[a++],d=o[a++];else if(c=0;c--){let h=a[c](o);h instanceof Transaction?o=h:Array.isArray(h)&&h.length==1&&h[0]instanceof Transaction?o=h[0]:o=resolveTransaction(e,asArray$1(h),!1)}return o}function extendTransaction(o){let e=o.startState,s=e.facet(transactionExtender),a=o;for(let c=s.length-1;c>=0;c--){let h=s[c](o);h&&Object.keys(h).length&&(a=mergeTransaction(o,resolveTransactionInner(e,h,o.changes.newLength),!0))}return a==o?o:Transaction.create(e,o.changes,o.selection,a.effects,a.annotations,a.scrollIntoView)}const none$2=[];function asArray$1(o){return o==null?none$2:Array.isArray(o)?o:[o]}var CharCategory=function(o){return o[o.Word=0]="Word",o[o.Space=1]="Space",o[o.Other=2]="Other",o}(CharCategory||(CharCategory={}));const nonASCIISingleCaseWordChar=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let wordChar;try{wordChar=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch(o){}function hasWordChar(o){if(wordChar)return wordChar.test(o);for(let e=0;e"\x80"&&(s.toUpperCase()!=s.toLowerCase()||nonASCIISingleCaseWordChar.test(s)))return!0}return!1}function makeCategorizer(o){return e=>{if(!/\S/.test(e))return CharCategory.Space;if(hasWordChar(e))return CharCategory.Word;for(let s=0;s-1)return CharCategory.Word;return CharCategory.Other}}class EditorState{constructor(e,s,a,c,h,d){this.config=e,this.doc=s,this.selection=a,this.values=c,this.status=e.statusTemplate.slice(),this.computeSlot=h,d&&(d._state=this);for(let g=0;gc.set(_,g)),s=null),c.set(d.value.compartment,d.value.extension)):d.is(StateEffect.reconfigure)?(s=null,a=d.value):d.is(StateEffect.appendConfig)&&(s=null,a=asArray$1(a).concat(d.value));let h;s?h=e.startState.values.slice():(s=Configuration.resolve(a,c,this),h=new EditorState(s,this.doc,this.selection,s.dynamicSlots.map(()=>null),(g,_)=>_.reconfigure(g,this),null).values),new EditorState(s,e.newDoc,e.newSelection,h,(d,g)=>g.update(d,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(s=>({changes:{from:s.from,to:s.to,insert:e},range:EditorSelection.cursor(s.from+e.length)}))}changeByRange(e){let s=this.selection,a=e(s.ranges[0]),c=this.changes(a.changes),h=[a.range],d=asArray$1(a.effects);for(let g=1;gd.spec.fromJSON(g,_)))}}return EditorState.create({doc:e.doc,selection:EditorSelection.fromJSON(e.selection),extensions:s.extensions?c.concat([s.extensions]):c})}static create(e={}){let s=Configuration.resolve(e.extensions||[],new Map),a=e.doc instanceof Text?e.doc:Text.of((e.doc||"").split(s.staticFacet(EditorState.lineSeparator)||DefaultSplit)),c=e.selection?e.selection instanceof EditorSelection?e.selection:EditorSelection.single(e.selection.anchor,e.selection.head):EditorSelection.single(0);return checkSelection(c,a.length),s.staticFacet(allowMultipleSelections)||(c=c.asSingle()),new EditorState(s,a,c,s.dynamicSlots.map(()=>null),(h,d)=>d.create(h),null)}get tabSize(){return this.facet(EditorState.tabSize)}get lineBreak(){return this.facet(EditorState.lineSeparator)||` +`}get readOnly(){return this.facet(readOnly)}phrase(e,...s){for(let a of this.facet(EditorState.phrases))if(Object.prototype.hasOwnProperty.call(a,e)){e=a[e];break}return s.length&&(e=e.replace(/\$(\$|\d*)/g,(a,c)=>{if(c=="$")return"$";let h=+(c||1);return!h||h>s.length?a:s[h-1]})),e}languageDataAt(e,s,a=-1){let c=[];for(let h of this.facet(languageData))for(let d of h(this,s,a))Object.prototype.hasOwnProperty.call(d,e)&&c.push(d[e]);return c}charCategorizer(e){return makeCategorizer(this.languageDataAt("wordChars",e).join(""))}wordAt(e){let{text:s,from:a,length:c}=this.doc.lineAt(e),h=this.charCategorizer(e),d=e-a,g=e-a;for(;d>0;){let _=findClusterBreak(s,d,!1);if(h(s.slice(_,d))!=CharCategory.Word)break;d=_}for(;go.length?o[0]:4});EditorState.lineSeparator=lineSeparator;EditorState.readOnly=readOnly;EditorState.phrases=Facet.define({compare(o,e){let s=Object.keys(o),a=Object.keys(e);return s.length==a.length&&s.every(c=>o[c]==e[c])}});EditorState.languageData=languageData;EditorState.changeFilter=changeFilter;EditorState.transactionFilter=transactionFilter;EditorState.transactionExtender=transactionExtender;Compartment.reconfigure=StateEffect.define();function combineConfig(o,e,s={}){let a={};for(let c of o)for(let h of Object.keys(c)){let d=c[h],g=a[h];if(g===void 0)a[h]=d;else if(!(g===d||d===void 0))if(Object.hasOwnProperty.call(s,h))a[h]=s[h](g,d);else throw new Error("Config merge conflict for field "+h)}for(let c in e)a[c]===void 0&&(a[c]=e[c]);return a}class RangeValue{eq(e){return this==e}range(e,s=e){return Range$1.create(e,s,this)}}RangeValue.prototype.startSide=RangeValue.prototype.endSide=0;RangeValue.prototype.point=!1;RangeValue.prototype.mapMode=MapMode.TrackDel;class Range$1{constructor(e,s,a){this.from=e,this.to=s,this.value=a}static create(e,s,a){return new Range$1(e,s,a)}}function cmpRange(o,e){return o.from-e.from||o.value.startSide-e.value.startSide}class Chunk{constructor(e,s,a,c){this.from=e,this.to=s,this.value=a,this.maxPoint=c}get length(){return this.to[this.to.length-1]}findIndex(e,s,a,c=0){let h=a?this.to:this.from;for(let d=c,g=h.length;;){if(d==g)return d;let _=d+g>>1,b=h[_]-e||(a?this.value[_].endSide:this.value[_].startSide)-s;if(_==d)return b>=0?d:g;b>=0?g=_:d=_+1}}between(e,s,a,c){for(let h=this.findIndex(s,-1e9,!0),d=this.findIndex(a,1e9,!1,h);het||_e==et&&b.startSide>0&&b.endSide<=0)continue;(et-_e||b.endSide-b.startSide)<0||(d<0&&(d=_e),b.point&&(g=Math.max(g,et-_e)),a.push(b),c.push(_e-d),h.push(et-d))}return{mapped:a.length?new Chunk(c,h,a,g):null,pos:d}}}class RangeSet{constructor(e,s,a,c){this.chunkPos=e,this.chunk=s,this.nextLayer=a,this.maxPoint=c}static create(e,s,a,c){return new RangeSet(e,s,a,c)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let s of this.chunk)e+=s.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:s=[],sort:a=!1,filterFrom:c=0,filterTo:h=this.length}=e,d=e.filter;if(s.length==0&&!d)return this;if(a&&(s=s.slice().sort(cmpRange)),this.isEmpty)return s.length?RangeSet.of(s):this;let g=new LayerCursor(this,null,-1).goto(0),_=0,b=[],$=new RangeSetBuilder;for(;g.value||_=0){let j=s[_++];$.addInner(j.from,j.to,j.value)||b.push(j)}else g.rangeIndex==1&&g.chunkIndexthis.chunkEnd(g.chunkIndex)||hg.to||h=h&&e<=h+d.length&&d.between(h,e-h,s-h,a)===!1)return}this.nextLayer.between(e,s,a)}}iter(e=0){return HeapCursor.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,s=0){return HeapCursor.from(e).goto(s)}static compare(e,s,a,c,h=-1){let d=e.filter(j=>j.maxPoint>0||!j.isEmpty&&j.maxPoint>=h),g=s.filter(j=>j.maxPoint>0||!j.isEmpty&&j.maxPoint>=h),_=findSharedChunks(d,g,a),b=new SpanCursor(d,_,h),$=new SpanCursor(g,_,h);a.iterGaps((j,_e,et)=>compare(b,j,$,_e,et,c)),a.empty&&a.length==0&&compare(b,0,$,0,0,c)}static eq(e,s,a=0,c){c==null&&(c=1e9);let h=e.filter($=>!$.isEmpty&&s.indexOf($)<0),d=s.filter($=>!$.isEmpty&&e.indexOf($)<0);if(h.length!=d.length)return!1;if(!h.length)return!0;let g=findSharedChunks(h,d),_=new SpanCursor(h,g,0).goto(a),b=new SpanCursor(d,g,0).goto(a);for(;;){if(_.to!=b.to||!sameValues(_.active,b.active)||_.point&&(!b.point||!_.point.eq(b.point)))return!1;if(_.to>c)return!0;_.next(),b.next()}}static spans(e,s,a,c,h=-1){let d=new SpanCursor(e,null,h).goto(s),g=s,_=d.openStart;for(;;){let b=Math.min(d.to,a);if(d.point?(c.point(g,b,d.point,d.activeForPoint(d.to),_,d.pointRank),_=d.openEnd(b)+(d.to>b?1:0)):b>g&&(c.span(g,b,d.active,_),_=d.openEnd(b)),d.to>a)break;g=d.to,d.next()}return _}static of(e,s=!1){let a=new RangeSetBuilder;for(let c of e instanceof Range$1?[e]:s?lazySort(e):e)a.add(c.from,c.to,c.value);return a.finish()}}RangeSet.empty=new RangeSet([],[],null,-1);function lazySort(o){if(o.length>1)for(let e=o[0],s=1;s0)return o.slice().sort(cmpRange);e=a}return o}RangeSet.empty.nextLayer=RangeSet.empty;class RangeSetBuilder{constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}finishChunk(e){this.chunks.push(new Chunk(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}add(e,s,a){this.addInner(e,s,a)||(this.nextLayer||(this.nextLayer=new RangeSetBuilder)).add(e,s,a)}addInner(e,s,a){let c=e-this.lastTo||a.startSide-this.last.endSide;if(c<=0&&(e-this.lastFrom||a.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return c<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(s-this.chunkStart),this.last=a,this.lastFrom=e,this.lastTo=s,this.value.push(a),a.point&&(this.maxPoint=Math.max(this.maxPoint,s-e)),!0)}addChunk(e,s){if((e-this.lastTo||s.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,s.maxPoint),this.chunks.push(s),this.chunkPos.push(e);let a=s.value.length-1;return this.last=s.value[a],this.lastFrom=s.from[a]+e,this.lastTo=s.to[a]+e,!0}finish(){return this.finishInner(RangeSet.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let s=RangeSet.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,s}}function findSharedChunks(o,e,s){let a=new Map;for(let h of o)for(let d=0;d=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=a&&c.push(new LayerCursor(d,s,a,h));return c.length==1?c[0]:new HeapCursor(c)}get startSide(){return this.value?this.value.startSide:0}goto(e,s=-1e9){for(let a of this.heap)a.goto(e,s);for(let a=this.heap.length>>1;a>=0;a--)heapBubble(this.heap,a);return this.next(),this}forward(e,s){for(let a of this.heap)a.forward(e,s);for(let a=this.heap.length>>1;a>=0;a--)heapBubble(this.heap,a);(this.to-e||this.value.endSide-s)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),heapBubble(this.heap,0)}}}function heapBubble(o,e){for(let s=o[e];;){let a=(e<<1)+1;if(a>=o.length)break;let c=o[a];if(a+1=0&&(c=o[a+1],a++),s.compare(c)<0)break;o[a]=s,o[e]=c,e=a}}class SpanCursor{constructor(e,s,a){this.minPoint=a,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=HeapCursor.from(e,s,a)}goto(e,s=-1e9){return this.cursor.goto(e,s),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=s,this.openStart=-1,this.next(),this}forward(e,s){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-s)<0;)this.removeActive(this.minActive);this.cursor.forward(e,s)}removeActive(e){remove(this.active,e),remove(this.activeTo,e),remove(this.activeRank,e),this.minActive=findMinIndex(this.active,this.activeTo)}addActive(e){let s=0,{value:a,to:c,rank:h}=this.cursor;for(;s-1&&(this.activeTo[h]-this.cursor.from||this.active[h].endSide-this.cursor.startSide)<0){if(this.activeTo[h]>e){this.to=this.activeTo[h],this.endSide=this.active[h].endSide;break}this.removeActive(h),a&&remove(a,h)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let d=this.cursor.value;if(!d.point)this.addActive(a),this.cursor.frome&&c++,this.cursor.next();else if(s&&this.cursor.to==this.to&&this.cursor.from=0&&!(this.activeRank[a]e||this.activeTo[a]==e&&this.active[a].endSide>=this.point.endSide)&&s.push(this.active[a]);return s.reverse()}openEnd(e){let s=0;for(let a=this.activeTo.length-1;a>=0&&this.activeTo[a]>e;a--)s++;return s}}function compare(o,e,s,a,c,h){o.goto(e),s.goto(a);let d=a+c,g=a,_=a-e;for(;;){let b=o.to+_-s.to||o.endSide-s.endSide,$=b<0?o.to+_:s.to,j=Math.min($,d);if(o.point||s.point?o.point&&s.point&&(o.point==s.point||o.point.eq(s.point))&&sameValues(o.activeForPoint(o.to+_),s.activeForPoint(s.to))||h.comparePoint(g,j,o.point,s.point):j>g&&!sameValues(o.active,s.active)&&h.compareRange(g,j,o.active,s.active),$>d)break;g=$,b<=0&&o.next(),b>=0&&s.next()}}function sameValues(o,e){if(o.length!=e.length)return!1;for(let s=0;s=e;a--)o[a+1]=o[a];o[e]=s}function findMinIndex(o,e){let s=-1,a=1e9;for(let c=0;c=e)return c;if(c==o.length)break;h+=o.charCodeAt(c)==9?s-h%s:1,c=findClusterBreak(o,c)}return a===!0?-1:o.length}const C="\u037C",COUNT=typeof Symbol>"u"?"__"+C:Symbol.for(C),SET=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),top=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class StyleModule{constructor(e,s){this.rules=[];let{finish:a}=s||{};function c(d){return/^@/.test(d)?[d]:d.split(/,\s*/)}function h(d,g,_,b){let $=[],j=/^@(\w+)\b/.exec(d[0]),_e=j&&j[1]=="keyframes";if(j&&g==null)return _.push(d[0]+";");for(let et in g){let tt=g[et];if(/&/.test(et))h(et.split(/,\s*/).map(nt=>d.map(st=>nt.replace(/&/,st))).reduce((nt,st)=>nt.concat(st)),tt,_);else if(tt&&typeof tt=="object"){if(!j)throw new RangeError("The value of a property ("+et+") should be a primitive value.");h(c(et),tt,$,_e)}else tt!=null&&$.push(et.replace(/_.*/,"").replace(/[A-Z]/g,nt=>"-"+nt.toLowerCase())+": "+tt+";")}($.length||_e)&&_.push((a&&!j&&!b?d.map(a):d).join(", ")+" {"+$.join(" ")+"}")}for(let d in e)h(c(d),e[d],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=top[COUNT]||1;return top[COUNT]=e+1,C+e.toString(36)}static mount(e,s){(e[SET]||new StyleSet(e)).mount(Array.isArray(s)?s:[s])}}let adoptedSet=null;class StyleSet{constructor(e){if(!e.head&&e.adoptedStyleSheets&&typeof CSSStyleSheet<"u"){if(adoptedSet)return e.adoptedStyleSheets=[adoptedSet.sheet].concat(e.adoptedStyleSheets),e[SET]=adoptedSet;this.sheet=new CSSStyleSheet,e.adoptedStyleSheets=[this.sheet].concat(e.adoptedStyleSheets),adoptedSet=this}else{this.styleTag=(e.ownerDocument||e).createElement("style");let s=e.head||e;s.insertBefore(this.styleTag,s.firstChild)}this.modules=[],e[SET]=this}mount(e){let s=this.sheet,a=0,c=0;for(let h=0;h-1&&(this.modules.splice(g,1),c--,g=-1),g==-1){if(this.modules.splice(c++,0,d),s)for(let _=0;_",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"',229:"Q"},chrome$1=typeof navigator<"u"&&/Chrome\/(\d+)/.exec(navigator.userAgent),safari$1=typeof navigator<"u"&&/Apple Computer/.test(navigator.vendor),gecko$1=typeof navigator<"u"&&/Gecko\/\d+/.test(navigator.userAgent),mac=typeof navigator<"u"&&/Mac/.test(navigator.platform),ie$1=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),brokenModifierNames=chrome$1&&(mac||+chrome$1[1]<57)||gecko$1&&mac;for(var i=0;i<10;i++)base[48+i]=base[96+i]=String(i);for(var i=1;i<=24;i++)base[i+111]="F"+i;for(var i=65;i<=90;i++)base[i]=String.fromCharCode(i+32),shift[i]=String.fromCharCode(i);for(var code in base)shift.hasOwnProperty(code)||(shift[code]=base[code]);function keyName(o){var e=brokenModifierNames&&(o.ctrlKey||o.altKey||o.metaKey)||(safari$1||ie$1)&&o.shiftKey&&o.key&&o.key.length==1,s=!e&&o.key||(o.shiftKey?shift:base)[o.keyCode]||o.key||"Unidentified";return s=="Esc"&&(s="Escape"),s=="Del"&&(s="Delete"),s=="Left"&&(s="ArrowLeft"),s=="Up"&&(s="ArrowUp"),s=="Right"&&(s="ArrowRight"),s=="Down"&&(s="ArrowDown"),s}function getSelection(o){let e;return o.nodeType==11?e=o.getSelection?o:o.ownerDocument:e=o,e.getSelection()}function contains(o,e){return e?o==e||o.contains(e.nodeType!=1?e.parentNode:e):!1}function deepActiveElement(){let o=document.activeElement;for(;o&&o.shadowRoot;)o=o.shadowRoot.activeElement;return o}function hasSelection(o,e){if(!e.anchorNode)return!1;try{return contains(o,e.anchorNode)}catch{return!1}}function clientRectsFor(o){return o.nodeType==3?textRange(o,0,o.nodeValue.length).getClientRects():o.nodeType==1?o.getClientRects():[]}function isEquivalentPosition(o,e,s,a){return s?scanFor(o,e,s,a,-1)||scanFor(o,e,s,a,1):!1}function domIndex(o){for(var e=0;;e++)if(o=o.previousSibling,!o)return e}function scanFor(o,e,s,a,c){for(;;){if(o==s&&e==a)return!0;if(e==(c<0?0:maxOffset(o))){if(o.nodeName=="DIV")return!1;let h=o.parentNode;if(!h||h.nodeType!=1)return!1;e=domIndex(o)+(c<0?0:1),o=h}else if(o.nodeType==1){if(o=o.childNodes[e+(c<0?-1:0)],o.nodeType==1&&o.contentEditable=="false")return!1;e=c<0?maxOffset(o):0}else return!1}}function maxOffset(o){return o.nodeType==3?o.nodeValue.length:o.childNodes.length}const Rect0={left:0,right:0,top:0,bottom:0};function flattenRect(o,e){let s=e?o.left:o.right;return{left:s,right:s,top:o.top,bottom:o.bottom}}function windowRect(o){return{left:0,right:o.innerWidth,top:0,bottom:o.innerHeight}}function scrollRectIntoView(o,e,s,a,c,h,d,g){let _=o.ownerDocument,b=_.defaultView;for(let $=o;$;)if($.nodeType==1){let j,_e=$==_.body;if(_e)j=windowRect(b);else{if($.scrollHeight<=$.clientHeight&&$.scrollWidth<=$.clientWidth){$=$.parentNode;continue}let nt=$.getBoundingClientRect();j={left:nt.left,right:nt.left+$.clientWidth,top:nt.top,bottom:nt.top+$.clientHeight}}let et=0,tt=0;if(c=="nearest")e.top0&&e.bottom>j.bottom+tt&&(tt=e.bottom-j.bottom+tt+d)):e.bottom>j.bottom&&(tt=e.bottom-j.bottom+d,s<0&&e.top-tt0&&e.right>j.right+et&&(et=e.right-j.right+et+h)):e.right>j.right&&(et=e.right-j.right+h,s<0&&e.lefts)return j.domBoundsAround(e,s,b);if(_e>=e&&c==-1&&(c=_,h=b),b>s&&j.dom.parentNode==this.dom){d=_,g=$;break}$=_e,b=_e+j.breakAfter}return{from:h,to:g<0?a+this.length:g,startDOM:(c?this.children[c-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:d=0?this.children[d].dom:null}}markDirty(e=!1){this.dirty|=2,this.markParentsDirty(e)}markParentsDirty(e){for(let s=this.parent;s;s=s.parent){if(e&&(s.dirty|=2),s.dirty&1)return;s.dirty|=1,e=!1}}setParent(e){this.parent!=e&&(this.parent=e,this.dirty&&this.markParentsDirty(!0))}setDOM(e){this.dom&&(this.dom.cmView=null),this.dom=e,e.cmView=this}get rootView(){for(let e=this;;){let s=e.parent;if(!s)return e;e=s}}replaceChildren(e,s,a=noChildren){this.markDirty();for(let c=e;cthis.pos||e==this.pos&&(s>0||this.i==0||this.children[this.i-1].breakAfter))return this.off=e-this.pos,this;let a=this.children[--this.i];this.pos-=a.length+a.breakAfter}}}function replaceRange(o,e,s,a,c,h,d,g,_){let{children:b}=o,$=b.length?b[e]:null,j=h.length?h[h.length-1]:null,_e=j?j.breakAfter:d;if(!(e==a&&$&&!d&&!_e&&h.length<2&&$.merge(s,c,h.length?j:null,s==0,g,_))){if(a0&&(!d&&h.length&&$.merge(s,$.length,h[0],!1,g,0)?$.breakAfter=h.shift().breakAfter:(s<$.length||$.children.length&&$.children[$.children.length-1].length==0)&&$.merge(s,$.length,null,!1,g,0),e++));e2);var browser={mac:ios||/Mac/.test(nav.platform),windows:/Win/.test(nav.platform),linux:/Linux|X11/.test(nav.platform),ie,ie_version:ie_upto10?doc.documentMode||6:ie_11up?+ie_11up[1]:ie_edge?+ie_edge[1]:0,gecko,gecko_version:gecko?+(/Firefox\/(\d+)/.exec(nav.userAgent)||[0,0])[1]:0,chrome:!!chrome,chrome_version:chrome?+chrome[1]:0,ios,android:/Android\b/.test(nav.userAgent),webkit,safari,webkit_version:webkit?+(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent)||[0,0])[1]:0,tabSize:doc.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};const MaxJoinLen=256;class TextView extends ContentView{constructor(e){super(),this.text=e}get length(){return this.text.length}createDOM(e){this.setDOM(e||document.createTextNode(this.text))}sync(e){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(e&&e.node==this.dom&&(e.written=!0),this.dom.nodeValue=this.text)}reuseDOM(e){e.nodeType==3&&this.createDOM(e)}merge(e,s,a){return a&&(!(a instanceof TextView)||this.length-(s-e)+a.length>MaxJoinLen)?!1:(this.text=this.text.slice(0,e)+(a?a.text:"")+this.text.slice(s),this.markDirty(),!0)}split(e){let s=new TextView(this.text.slice(e));return this.text=this.text.slice(0,e),this.markDirty(),s}localPosFromDOM(e,s){return e==this.dom?s:s?this.text.length:0}domAtPos(e){return new DOMPos(this.dom,e)}domBoundsAround(e,s,a){return{from:a,to:a+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}}coordsAt(e,s){return textCoords(this.dom,e,s)}}class MarkView extends ContentView{constructor(e,s=[],a=0){super(),this.mark=e,this.children=s,this.length=a;for(let c of s)c.setParent(this)}setAttrs(e){if(clearAttributes(e),this.mark.class&&(e.className=this.mark.class),this.mark.attrs)for(let s in this.mark.attrs)e.setAttribute(s,this.mark.attrs[s]);return e}reuseDOM(e){e.nodeName==this.mark.tagName.toUpperCase()&&(this.setDOM(e),this.dirty|=6)}sync(e){this.dom?this.dirty&4&&this.setAttrs(this.dom):this.setDOM(this.setAttrs(document.createElement(this.mark.tagName))),super.sync(e)}merge(e,s,a,c,h,d){return a&&(!(a instanceof MarkView&&a.mark.eq(this.mark))||e&&h<=0||se&&s.push(a=e&&(c=h),a=_,h++}let d=this.length-e;return this.length=e,c>-1&&(this.children.length=c,this.markDirty()),new MarkView(this.mark,s,d)}domAtPos(e){return inlineDOMAtPos(this.dom,this.children,e)}coordsAt(e,s){return coordsInChildren(this,e,s)}}function textCoords(o,e,s){let a=o.nodeValue.length;e>a&&(e=a);let c=e,h=e,d=0;e==0&&s<0||e==a&&s>=0?browser.chrome||browser.gecko||(e?(c--,d=1):h=0)?0:g.length-1];return browser.safari&&!d&&_.width==0&&(_=Array.prototype.find.call(g,b=>b.width)||_),d?flattenRect(_,d<0):_||null}class WidgetView extends ContentView{constructor(e,s,a){super(),this.widget=e,this.length=s,this.side=a,this.prevWidget=null}static create(e,s,a){return new(e.customView||WidgetView)(e,s,a)}split(e){let s=WidgetView.create(this.widget,this.length-e,this.side);return this.length-=e,s}sync(){(!this.dom||!this.widget.updateDOM(this.dom))&&(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(this.editorView)),this.dom.contentEditable="false")}getSide(){return this.side}merge(e,s,a,c,h,d){return a&&(!(a instanceof WidgetView)||!this.widget.compare(a.widget)||e>0&&h<=0||s0?a.length-1:0;c=a[h],!(e>0?h==0:h==a.length-1||c.top0?-1:1);return e==0&&s>0||e==this.length&&s<=0?c:flattenRect(c,e==0)}get isEditable(){return!1}destroy(){super.destroy(),this.dom&&this.widget.destroy(this.dom)}}class CompositionView extends WidgetView{domAtPos(e){let{topView:s,text:a}=this.widget;return s?scanCompositionTree(e,0,s,a,(c,h)=>c.domAtPos(h),c=>new DOMPos(a,Math.min(c,a.nodeValue.length))):new DOMPos(a,Math.min(e,a.nodeValue.length))}sync(){this.setDOM(this.widget.toDOM())}localPosFromDOM(e,s){let{topView:a,text:c}=this.widget;return a?posFromDOMInCompositionTree(e,s,a,c):Math.min(s,this.length)}ignoreMutation(){return!1}get overrideDOMText(){return null}coordsAt(e,s){let{topView:a,text:c}=this.widget;return a?scanCompositionTree(e,s,a,c,(h,d,g)=>h.coordsAt(d,g),(h,d)=>textCoords(c,h,d)):textCoords(c,e,s)}destroy(){var e;super.destroy(),(e=this.widget.topView)===null||e===void 0||e.destroy()}get isEditable(){return!0}}function scanCompositionTree(o,e,s,a,c,h){if(s instanceof MarkView){for(let d of s.children){let g=contains(d.dom,a),_=g?a.nodeValue.length:d.length;if(o<_||o==_&&d.getSide()<=0)return g?scanCompositionTree(o,e,d,a,c,h):c(d,o,e);o-=_}return c(s,s.length,-1)}else return s.dom==a?h(o,e):c(s,o,e)}function posFromDOMInCompositionTree(o,e,s,a){if(s instanceof MarkView)for(let c of s.children){let h=0,d=contains(c.dom,a);if(contains(c.dom,o))return h+(d?posFromDOMInCompositionTree(o,e,c,a):c.localPosFromDOM(o,e));h+=d?a.nodeValue.length:c.length}else if(s.dom==a)return Math.min(e,a.nodeValue.length);return s.localPosFromDOM(o,e)}class WidgetBufferView extends ContentView{constructor(e){super(),this.side=e}get length(){return 0}merge(){return!1}become(e){return e instanceof WidgetBufferView&&e.side==this.side}split(){return new WidgetBufferView(this.side)}sync(){if(!this.dom){let e=document.createElement("img");e.className="cm-widgetBuffer",e.setAttribute("aria-hidden","true"),this.setDOM(e)}}getSide(){return this.side}domAtPos(e){return DOMPos.before(this.dom)}localPosFromDOM(){return 0}domBoundsAround(){return null}coordsAt(e){let s=this.dom.getBoundingClientRect(),a=inlineSiblingRect(this,this.side>0?-1:1);return a&&a.tops.top?{left:s.left,right:s.right,top:a.top,bottom:a.bottom}:s}get overrideDOMText(){return Text.empty}}TextView.prototype.children=WidgetView.prototype.children=WidgetBufferView.prototype.children=noChildren;function inlineSiblingRect(o,e){let s=o.parent,a=s?s.children.indexOf(o):-1;for(;s&&a>=0;)if(e<0?a>0:ac&&s0;a--){let c=e[a-1].dom;if(c.parentNode==o)return DOMPos.after(c)}return new DOMPos(o,0)}function joinInlineInto(o,e,s){let a,{children:c}=o;s>0&&e instanceof MarkView&&c.length&&(a=c[c.length-1])instanceof MarkView&&a.mark.eq(e.mark)?joinInlineInto(a,e.children[0],s-1):(c.push(e),e.setParent(o)),o.length+=e.length}function coordsInChildren(o,e,s){for(let h=0,d=0;d0?_>=e:_>e)&&(e<_||d+1==o.children.length||(b=o.children[d+1]).length||b.getSide()>0)){let $=0;if(_==h){if(g.getSide()<=0)continue;$=s=-g.getSide()}let j=g.coordsAt(Math.max(0,e-h),s);return $&&j?flattenRect(j,s<0):j}h=_}let a=o.dom.lastChild;if(!a)return o.dom.getBoundingClientRect();let c=clientRectsFor(a);return c[c.length-1]||null}function combineAttrs(o,e){for(let s in o)s=="class"&&e.class?e.class+=" "+o.class:s=="style"&&e.style?e.style+=";"+o.style:e[s]=o[s];return e}function attrsEq(o,e){if(o==e)return!0;if(!o||!e)return!1;let s=Object.keys(o),a=Object.keys(e);if(s.length!=a.length)return!1;for(let c of s)if(a.indexOf(c)==-1||o[c]!==e[c])return!1;return!0}function updateAttrs(o,e,s){let a=null;if(e)for(let c in e)s&&c in s||o.removeAttribute(a=c);if(s)for(let c in s)e&&e[c]==s[c]||o.setAttribute(a=c,s[c]);return!!a}class WidgetType{eq(e){return!1}updateDOM(e){return!1}compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}get estimatedHeight(){return-1}ignoreEvent(e){return!0}get customView(){return null}destroy(e){}}var BlockType=function(o){return o[o.Text=0]="Text",o[o.WidgetBefore=1]="WidgetBefore",o[o.WidgetAfter=2]="WidgetAfter",o[o.WidgetRange=3]="WidgetRange",o}(BlockType||(BlockType={}));class Decoration extends RangeValue{constructor(e,s,a,c){super(),this.startSide=e,this.endSide=s,this.widget=a,this.spec=c}get heightRelevant(){return!1}static mark(e){return new MarkDecoration(e)}static widget(e){let s=e.side||0,a=!!e.block;return s+=a?s>0?3e8:-4e8:s>0?1e8:-1e8,new PointDecoration(e,s,s,a,e.widget||null,!1)}static replace(e){let s=!!e.block,a,c;if(e.isBlockGap)a=-5e8,c=4e8;else{let{start:h,end:d}=getInclusive(e,s);a=(h?s?-3e8:-1:5e8)-1,c=(d?s?2e8:1:-6e8)+1}return new PointDecoration(e,a,c,s,e.widget||null,!0)}static line(e){return new LineDecoration(e)}static set(e,s=!1){return RangeSet.of(e,s)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}Decoration.none=RangeSet.empty;class MarkDecoration extends Decoration{constructor(e){let{start:s,end:a}=getInclusive(e);super(s?-1:5e8,a?1:-6e8,null,e),this.tagName=e.tagName||"span",this.class=e.class||"",this.attrs=e.attributes||null}eq(e){return this==e||e instanceof MarkDecoration&&this.tagName==e.tagName&&this.class==e.class&&attrsEq(this.attrs,e.attrs)}range(e,s=e){if(e>=s)throw new RangeError("Mark decorations may not be empty");return super.range(e,s)}}MarkDecoration.prototype.point=!1;class LineDecoration extends Decoration{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof LineDecoration&&attrsEq(this.spec.attributes,e.spec.attributes)}range(e,s=e){if(s!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,s)}}LineDecoration.prototype.mapMode=MapMode.TrackBefore;LineDecoration.prototype.point=!0;class PointDecoration extends Decoration{constructor(e,s,a,c,h,d){super(s,a,h,e),this.block=c,this.isReplace=d,this.mapMode=c?s<=0?MapMode.TrackBefore:MapMode.TrackAfter:MapMode.TrackDel}get type(){return this.startSide=5}eq(e){return e instanceof PointDecoration&&widgetsEq(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,s=e){if(this.isReplace&&(e>s||e==s&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&s!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,s)}}PointDecoration.prototype.point=!0;function getInclusive(o,e=!1){let{inclusiveStart:s,inclusiveEnd:a}=o;return s==null&&(s=o.inclusive),a==null&&(a=o.inclusive),{start:s!=null?s:e,end:a!=null?a:e}}function widgetsEq(o,e){return o==e||!!(o&&e&&o.compare(e))}function addRange(o,e,s,a=0){let c=s.length-1;c>=0&&s[c]+a>=o?s[c]=Math.max(s[c],e):s.push(o,e)}class LineView extends ContentView{constructor(){super(...arguments),this.children=[],this.length=0,this.prevAttrs=void 0,this.attrs=null,this.breakAfter=0}merge(e,s,a,c,h,d){if(a){if(!(a instanceof LineView))return!1;this.dom||a.transferDOM(this)}return c&&this.setDeco(a?a.attrs:null),mergeChildrenInto(this,e,s,a?a.children:[],h,d),!0}split(e){let s=new LineView;if(s.breakAfter=this.breakAfter,this.length==0)return s;let{i:a,off:c}=this.childPos(e);c&&(s.append(this.children[a].split(c),0),this.children[a].merge(c,this.children[a].length,null,!1,0,0),a++);for(let h=a;h0&&this.children[a-1].length==0;)this.children[--a].destroy();return this.children.length=a,this.markDirty(),this.length=e,s}transferDOM(e){!this.dom||(this.markDirty(),e.setDOM(this.dom),e.prevAttrs=this.prevAttrs===void 0?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)}setDeco(e){attrsEq(this.attrs,e)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=e)}append(e,s){joinInlineInto(this,e,s)}addLineDeco(e){let s=e.spec.attributes,a=e.spec.class;s&&(this.attrs=combineAttrs(s,this.attrs||{})),a&&(this.attrs=combineAttrs({class:a},this.attrs||{}))}domAtPos(e){return inlineDOMAtPos(this.dom,this.children,e)}reuseDOM(e){e.nodeName=="DIV"&&(this.setDOM(e),this.dirty|=6)}sync(e){var s;this.dom?this.dirty&4&&(clearAttributes(this.dom),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0):(this.setDOM(document.createElement("div")),this.dom.className="cm-line",this.prevAttrs=this.attrs?null:void 0),this.prevAttrs!==void 0&&(updateAttrs(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add("cm-line"),this.prevAttrs=void 0),super.sync(e);let a=this.dom.lastChild;for(;a&&ContentView.get(a)instanceof MarkView;)a=a.lastChild;if(!a||!this.length||a.nodeName!="BR"&&((s=ContentView.get(a))===null||s===void 0?void 0:s.isEditable)==!1&&(!browser.ios||!this.children.some(c=>c instanceof TextView))){let c=document.createElement("BR");c.cmIgnore=!0,this.dom.appendChild(c)}}measureTextSize(){if(this.children.length==0||this.length>20)return null;let e=0;for(let s of this.children){if(!(s instanceof TextView)||/[^ -~]/.test(s.text))return null;let a=clientRectsFor(s.dom);if(a.length!=1)return null;e+=a[0].width}return e?{lineHeight:this.dom.getBoundingClientRect().height,charWidth:e/this.length}:null}coordsAt(e,s){return coordsInChildren(this,e,s)}become(e){return!1}get type(){return BlockType.Text}static find(e,s){for(let a=0,c=0;a=s){if(h instanceof LineView)return h;if(d>s)break}c=d+h.breakAfter}return null}}class BlockWidgetView extends ContentView{constructor(e,s,a){super(),this.widget=e,this.length=s,this.type=a,this.breakAfter=0,this.prevWidget=null}merge(e,s,a,c,h,d){return a&&(!(a instanceof BlockWidgetView)||!this.widget.compare(a.widget)||e>0&&h<=0||s0;){if(this.textOff==this.text.length){let{value:h,lineBreak:d,done:g}=this.cursor.next(this.skip);if(this.skip=0,g)throw new Error("Ran out of text content when drawing inline views");if(d){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.flushBuffer([]),this.curLine=null,e--;continue}else this.text=h,this.textOff=0}let c=Math.min(this.text.length-this.textOff,e,512);this.flushBuffer(s.slice(0,a)),this.getLine().append(wrapMarks(new TextView(this.text.slice(this.textOff,this.textOff+c)),s),a),this.atCursorPos=!0,this.textOff+=c,e-=c,a=0}}span(e,s,a,c){this.buildText(s-e,a,c),this.pos=s,this.openStart<0&&(this.openStart=c)}point(e,s,a,c,h,d){if(this.disallowBlockEffectsFor[d]&&a instanceof PointDecoration){if(a.block)throw new RangeError("Block decorations may not be specified via plugins");if(s>this.doc.lineAt(this.pos).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}let g=s-e;if(a instanceof PointDecoration)if(a.block){let{type:_}=a;_==BlockType.WidgetAfter&&!this.posCovered()&&this.getLine(),this.addBlockWidget(new BlockWidgetView(a.widget||new NullWidget("div"),g,_))}else{let _=WidgetView.create(a.widget||new NullWidget("span"),g,a.startSide),b=this.atCursorPos&&!_.isEditable&&h<=c.length&&(e0),$=!_.isEditable&&(eo.some(e=>e)});class ScrollTarget{constructor(e,s="nearest",a="nearest",c=5,h=5){this.range=e,this.y=s,this.x=a,this.yMargin=c,this.xMargin=h}map(e){return e.empty?this:new ScrollTarget(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin)}}const scrollIntoView$1=StateEffect.define({map:(o,e)=>o.map(e)});function logException(o,e,s){let a=o.facet(exceptionSink);a.length?a[0](e):window.onerror?window.onerror(String(e),s,void 0,void 0,e):s?console.error(s+":",e):console.error(e)}const editable=Facet.define({combine:o=>o.length?o[0]:!0});let nextPluginID=0;const viewPlugin=Facet.define();class ViewPlugin{constructor(e,s,a,c){this.id=e,this.create=s,this.domEventHandlers=a,this.extension=c(this)}static define(e,s){const{eventHandlers:a,provide:c,decorations:h}=s||{};return new ViewPlugin(nextPluginID++,e,a,d=>{let g=[viewPlugin.of(d)];return h&&g.push(decorations.of(_=>{let b=_.plugin(d);return b?h(b):Decoration.none})),c&&g.push(c(d)),g})}static fromClass(e,s){return ViewPlugin.define(a=>new e(a),s)}}class PluginInstance{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}update(e){if(this.value){if(this.mustUpdate){let s=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(s)}catch(a){if(logException(s.state,a,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.create(e)}catch(s){logException(e.state,s,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var s;if(!((s=this.value)===null||s===void 0)&&s.destroy)try{this.value.destroy()}catch(a){logException(e.state,a,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const editorAttributes=Facet.define(),contentAttributes=Facet.define(),decorations=Facet.define(),atomicRanges=Facet.define(),scrollMargins=Facet.define(),styleModule=Facet.define();class ChangedRange{constructor(e,s,a,c){this.fromA=e,this.toA=s,this.fromB=a,this.toB=c}join(e){return new ChangedRange(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let s=e.length,a=this;for(;s>0;s--){let c=e[s-1];if(!(c.fromA>a.toA)){if(c.toA$)break;h+=2}if(!_)return a;new ChangedRange(_.fromA,_.toA,_.fromB,_.toB).addToSet(a),d=_.toA,g=_.toB}}}class ViewUpdate{constructor(e,s,a){this.view=e,this.state=s,this.transactions=a,this.flags=0,this.startState=e.state,this.changes=ChangeSet.empty(this.startState.doc.length);for(let d of a)this.changes=this.changes.compose(d.changes);let c=[];this.changes.iterChangedRanges((d,g,_,b)=>c.push(new ChangedRange(d,g,_,b))),this.changedRanges=c;let h=e.hasFocus;h!=e.inputState.notifiedFocused&&(e.inputState.notifiedFocused=h,this.flags|=1)}static create(e,s,a){return new ViewUpdate(e,s,a)}get viewportChanged(){return(this.flags&4)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&10)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}var Direction=function(o){return o[o.LTR=0]="LTR",o[o.RTL=1]="RTL",o}(Direction||(Direction={}));const LTR=Direction.LTR,RTL=Direction.RTL;function dec(o){let e=[];for(let s=0;s=s){if(g.level==a)return d;(h<0||(c!=0?c<0?g.froms:e[h].level>g.level))&&(h=d)}}if(h<0)throw new RangeError("Index out of range");return h}}const types=[];function computeOrder(o,e){let s=o.length,a=e==LTR?1:2,c=e==LTR?2:1;if(!o||a==1&&!BidiRE.test(o))return trivialOrder(s);for(let d=0,g=a,_=a;d=0;_e-=3)if(BracketStack[_e+1]==-$){let et=BracketStack[_e+2],tt=et&2?a:et&4?et&1?c:a:0;tt&&(types[d]=types[BracketStack[_e]]=tt),g=_e;break}}else{if(BracketStack.length==189)break;BracketStack[g++]=d,BracketStack[g++]=b,BracketStack[g++]=_}else if((j=types[d])==2||j==1){let _e=j==a;_=_e?0:1;for(let et=g-3;et>=0;et-=3){let tt=BracketStack[et+2];if(tt&2)break;if(_e)BracketStack[et+2]|=2;else{if(tt&4)break;BracketStack[et+2]|=4}}}for(let d=0;dg;){let $=b,j=types[--b]!=2;for(;b>g&&j==(types[b-1]!=2);)b--;h.push(new BidiSpan(b,$,j?2:1))}else h.push(new BidiSpan(g,d,0))}else for(let d=0;d1)for(let _ of this.points)_.node==e&&_.pos>this.text.length&&(_.pos-=d-1);a=h+d}}readNode(e){if(e.cmIgnore)return;let s=ContentView.get(e),a=s&&s.overrideDOMText;if(a!=null){this.findPointInside(e,a.length);for(let c=a.iter();!c.next().done;)c.lineBreak?this.lineBreak():this.append(c.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,s){for(let a of this.points)a.node==e&&e.childNodes[a.offset]==s&&(a.pos=this.text.length)}findPointInside(e,s){for(let a of this.points)(e.nodeType==3?a.node==e:e.contains(a.node))&&(a.pos=this.text.length+Math.min(s,a.offset))}}function isBlockElement(o){return o.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(o.nodeName)}class DOMPoint{constructor(e,s){this.node=e,this.offset=s,this.pos=-1}}class DocView extends ContentView{constructor(e){super(),this.view=e,this.compositionDeco=Decoration.none,this.decorations=[],this.dynamicDecorationMap=[],this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.setDOM(e.contentDOM),this.children=[new LineView],this.children[0].setParent(this),this.updateDeco(),this.updateInner([new ChangedRange(0,0,0,e.state.doc.length)],0)}get editorView(){return this.view}get length(){return this.view.state.doc.length}update(e){let s=e.changedRanges;this.minWidth>0&&s.length&&(s.every(({fromA:d,toA:g})=>gthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.view.inputState.composing<0?this.compositionDeco=Decoration.none:(e.transactions.length||this.dirty)&&(this.compositionDeco=computeCompositionDeco(this.view,e.changes)),(browser.ie||browser.chrome)&&!this.compositionDeco.size&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let a=this.decorations,c=this.updateDeco(),h=findChangedDeco(a,c,e.changes);return s=ChangedRange.extendWithRanges(s,h),this.dirty==0&&s.length==0?!1:(this.updateInner(s,e.startState.doc.length),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,s){this.view.viewState.mustMeasureContent=!0,this.updateChildren(e,s);let{observer:a}=this.view;a.ignore(()=>{this.dom.style.height=this.view.viewState.contentHeight+"px",this.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let h=browser.chrome||browser.ios?{node:a.selectionRange.focusNode,written:!1}:void 0;this.sync(h),this.dirty=0,h&&(h.written||a.selectionRange.focusNode!=h.node)&&(this.forceSelection=!0),this.dom.style.height=""});let c=[];if(this.view.viewport.from||this.view.viewport.to=0?e[c]:null;if(!h)break;let{fromA:d,toA:g,fromB:_,toB:b}=h,{content:$,breakAtStart:j,openStart:_e,openEnd:et}=ContentBuilder.build(this.view.state.doc,_,b,this.decorations,this.dynamicDecorationMap),{i:tt,off:nt}=a.findPos(g,1),{i:st,off:rt}=a.findPos(d,-1);replaceRange(this,st,rt,tt,nt,$,j,_e,et)}}updateSelection(e=!1,s=!1){if((e||!this.view.observer.selectionRange.focusNode)&&this.view.observer.readSelectionRange(),!(s||this.mayControlSelection())||browser.ios&&this.view.inputState.rapidCompositionStart)return;let a=this.forceSelection;this.forceSelection=!1;let c=this.view.state.selection.main,h=this.domAtPos(c.anchor),d=c.empty?h:this.domAtPos(c.head);if(browser.gecko&&c.empty&&betweenUneditable(h)){let _=document.createTextNode("");this.view.observer.ignore(()=>h.node.insertBefore(_,h.node.childNodes[h.offset]||null)),h=d=new DOMPos(_,0),a=!0}let g=this.view.observer.selectionRange;(a||!g.focusNode||!isEquivalentPosition(h.node,h.offset,g.anchorNode,g.anchorOffset)||!isEquivalentPosition(d.node,d.offset,g.focusNode,g.focusOffset))&&(this.view.observer.ignore(()=>{browser.android&&browser.chrome&&this.dom.contains(g.focusNode)&&inUneditable(g.focusNode,this.dom)&&(this.dom.blur(),this.dom.focus({preventScroll:!0}));let _=getSelection(this.view.root);if(_)if(c.empty){if(browser.gecko){let b=nextToUneditable(h.node,h.offset);if(b&&b!=3){let $=nearbyTextNode(h.node,h.offset,b==1?1:-1);$&&(h=new DOMPos($,b==1?0:$.nodeValue.length))}}_.collapse(h.node,h.offset),c.bidiLevel!=null&&g.cursorBidiLevel!=null&&(g.cursorBidiLevel=c.bidiLevel)}else if(_.extend)_.collapse(h.node,h.offset),_.extend(d.node,d.offset);else{let b=document.createRange();c.anchor>c.head&&([h,d]=[d,h]),b.setEnd(d.node,d.offset),b.setStart(h.node,h.offset),_.removeAllRanges(),_.addRange(b)}}),this.view.observer.setSelectionRange(h,d)),this.impreciseAnchor=h.precise?null:new DOMPos(g.anchorNode,g.anchorOffset),this.impreciseHead=d.precise?null:new DOMPos(g.focusNode,g.focusOffset)}enforceCursorAssoc(){if(this.compositionDeco.size)return;let e=this.view.state.selection.main,s=getSelection(this.view.root);if(!s||!e.empty||!e.assoc||!s.modify)return;let a=LineView.find(this,e.head);if(!a)return;let c=a.posAtStart;if(e.head==c||e.head==c+a.length)return;let h=this.coordsAt(e.head,-1),d=this.coordsAt(e.head,1);if(!h||!d||h.bottom>d.top)return;let g=this.domAtPos(e.head+e.assoc);s.collapse(g.node,g.offset),s.modify("move",e.assoc<0?"forward":"backward","lineboundary")}mayControlSelection(){let e=this.view.root.activeElement;return e==this.dom||hasSelection(this.dom,this.view.observer.selectionRange)&&!(e&&this.dom.contains(e))}nearest(e){for(let s=e;s;){let a=ContentView.get(s);if(a&&a.rootView==this)return a;s=s.parentNode}return null}posFromDOM(e,s){let a=this.nearest(e);if(!a)throw new RangeError("Trying to find position for a DOM position outside of the document");return a.localPosFromDOM(e,s)+a.posAtStart}domAtPos(e){let{i:s,off:a}=this.childCursor().findPos(e,-1);for(;sd||e==d&&h.type!=BlockType.WidgetBefore&&h.type!=BlockType.WidgetAfter&&(!c||s==2||this.children[c-1].breakAfter||this.children[c-1].type==BlockType.WidgetBefore&&s>-2))return h.coordsAt(e-d,s);a=d}}measureVisibleLineHeights(e){let s=[],{from:a,to:c}=e,h=this.view.contentDOM.clientWidth,d=h>Math.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,g=-1,_=this.view.textDirection==Direction.LTR;for(let b=0,$=0;$c)break;if(b>=a){let et=j.dom.getBoundingClientRect();if(s.push(et.height),d){let tt=j.dom.lastChild,nt=tt?clientRectsFor(tt):[];if(nt.length){let st=nt[nt.length-1],rt=_?st.right-et.left:et.right-st.left;rt>g&&(g=rt,this.minWidth=h,this.minWidthFrom=b,this.minWidthTo=_e)}}}b=_e+j.breakAfter}return s}textDirectionAt(e){let{i:s}=this.childPos(e,1);return getComputedStyle(this.children[s].dom).direction=="rtl"?Direction.RTL:Direction.LTR}measureTextSize(){for(let c of this.children)if(c instanceof LineView){let h=c.measureTextSize();if(h)return h}let e=document.createElement("div"),s,a;return e.className="cm-line",e.style.width="99999px",e.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.dom.appendChild(e);let c=clientRectsFor(e.firstChild)[0];s=e.getBoundingClientRect().height,a=c?c.width/27:7,e.remove()}),{lineHeight:s,charWidth:a}}childCursor(e=this.length){let s=this.children.length;return s&&(e-=this.children[--s].length),new ChildCursor(this.children,e,s)}computeBlockGapDeco(){let e=[],s=this.view.viewState;for(let a=0,c=0;;c++){let h=c==s.viewports.length?null:s.viewports[c],d=h?h.from-1:this.length;if(d>a){let g=s.lineBlockAt(d).bottom-s.lineBlockAt(a).top;e.push(Decoration.replace({widget:new BlockGapWidget(g),block:!0,inclusive:!0,isBlockGap:!0}).range(a,d))}if(!h)break;a=h.to+1}return Decoration.set(e)}updateDeco(){let e=this.view.state.facet(decorations).map((s,a)=>(this.dynamicDecorationMap[a]=typeof s=="function")?s(this.view):s);for(let s=e.length;ss.anchor?-1:1),c;if(!a)return;!s.empty&&(c=this.coordsAt(s.anchor,s.anchor>s.head?-1:1))&&(a={left:Math.min(a.left,c.left),top:Math.min(a.top,c.top),right:Math.max(a.right,c.right),bottom:Math.max(a.bottom,c.bottom)});let h=0,d=0,g=0,_=0;for(let $ of this.view.state.facet(scrollMargins).map(j=>j(this.view)))if($){let{left:j,right:_e,top:et,bottom:tt}=$;j!=null&&(h=Math.max(h,j)),_e!=null&&(d=Math.max(d,_e)),et!=null&&(g=Math.max(g,et)),tt!=null&&(_=Math.max(_,tt))}let b={left:a.left-h,top:a.top-g,right:a.right+d,bottom:a.bottom+_};scrollRectIntoView(this.view.scrollDOM,b,s.head0&&s<=0)o=o.childNodes[e-1],e=maxOffset(o);else if(o.nodeType==1&&e=0)o=o.childNodes[e],e=0;else return null}}function nextToUneditable(o,e){return o.nodeType!=1?0:(e&&o.childNodes[e-1].contentEditable=="false"?1:0)|(e0;){let b=findClusterBreak(c.text,d,!1);if(a(c.text.slice(b,d))!=_)break;d=b}for(;go?e.left-o:Math.max(0,o-e.right)}function getdy(o,e){return e.top>o?e.top-o:Math.max(0,o-e.bottom)}function yOverlap(o,e){return o.tope.top+1}function upTop(o,e){return eo.bottom?{top:o.top,left:o.left,right:o.right,bottom:e}:o}function domPosAtCoords(o,e,s){let a,c,h,d,g=!1,_,b,$,j;for(let tt=o.firstChild;tt;tt=tt.nextSibling){let nt=clientRectsFor(tt);for(let st=0;stat||d==at&&h>it)&&(a=tt,c=rt,h=it,d=at,g=!it||(it>0?st0)),it==0?s>rt.bottom&&(!$||$.bottomrt.top)&&(b=tt,j=rt):$&&yOverlap($,rt)?$=upBot($,rt.bottom):j&&yOverlap(j,rt)&&(j=upTop(j,rt.top))}}if($&&$.bottom>=s?(a=_,c=$):j&&j.top<=s&&(a=b,c=j),!a)return{node:o,offset:0};let _e=Math.max(c.left,Math.min(c.right,e));if(a.nodeType==3)return domPosInText(a,_e,s);if(g&&a.contentEditable!="false")return domPosAtCoords(a,_e,s);let et=Array.prototype.indexOf.call(o.childNodes,a)+(e>=(c.left+c.right)/2?1:0);return{node:o,offset:et}}function domPosInText(o,e,s){let a=o.nodeValue.length,c=-1,h=1e9,d=0;for(let g=0;gs?$.top-s:s-$.bottom)-1;if($.left-1<=e&&$.right+1>=e&&j=($.left+$.right)/2,et=_e;if((browser.chrome||browser.gecko)&&textRange(o,g).getBoundingClientRect().left==$.right&&(et=!_e),j<=0)return{node:o,offset:g+(et?1:0)};c=g+(et?1:0),h=j}}}return{node:o,offset:c>-1?c:d>0?o.nodeValue.length:0}}function posAtCoords(o,{x:e,y:s},a,c=-1){var h;let d=o.contentDOM.getBoundingClientRect(),g=d.top+o.viewState.paddingTop,_,{docHeight:b}=o.viewState,$=s-g;if($<0)return 0;if($>b)return o.state.doc.length;for(let rt=o.defaultLineHeight/2,it=!1;_=o.elementAtHeight($),_.type!=BlockType.Text;)for(;$=c>0?_.bottom+rt:_.top-rt,!($>=0&&$<=b);){if(it)return a?null:0;it=!0,c=-c}s=g+$;let j=_.from;if(jo.viewport.to)return o.viewport.to==o.state.doc.length?o.state.doc.length:a?null:posAtCoordsImprecise(o,d,_,e,s);let _e=o.dom.ownerDocument,et=o.root.elementFromPoint?o.root:_e,tt=et.elementFromPoint(e,s);tt&&!o.contentDOM.contains(tt)&&(tt=null),tt||(e=Math.max(d.left+1,Math.min(d.right-1,e)),tt=et.elementFromPoint(e,s),tt&&!o.contentDOM.contains(tt)&&(tt=null));let nt,st=-1;if(tt&&((h=o.docView.nearest(tt))===null||h===void 0?void 0:h.isEditable)!=!1){if(_e.caretPositionFromPoint){let rt=_e.caretPositionFromPoint(e,s);rt&&({offsetNode:nt,offset:st}=rt)}else if(_e.caretRangeFromPoint){let rt=_e.caretRangeFromPoint(e,s);rt&&({startContainer:nt,startOffset:st}=rt,(!o.contentDOM.contains(nt)||browser.safari&&isSuspiciousSafariCaretResult(nt,st,e)||browser.chrome&&isSuspiciousChromeCaretResult(nt,st,e))&&(nt=void 0))}}if(!nt||!o.docView.dom.contains(nt)){let rt=LineView.find(o.docView,j);if(!rt)return $>_.top+_.height/2?_.to:_.from;({node:nt,offset:st}=domPosAtCoords(rt.dom,e,s))}return o.docView.posFromDOM(nt,st)}function posAtCoordsImprecise(o,e,s,a,c){let h=Math.round((a-e.left)*o.defaultCharacterWidth);o.lineWrapping&&s.height>o.defaultLineHeight*1.5&&(h+=Math.floor((c-s.top)/o.defaultLineHeight)*o.viewState.heightOracle.lineLength);let d=o.state.sliceDoc(s.from,s.to);return s.from+findColumn(d,h,o.state.tabSize)}function isSuspiciousSafariCaretResult(o,e,s){let a;if(o.nodeType!=3||e!=(a=o.nodeValue.length))return!1;for(let c=o.nextSibling;c;c=c.nextSibling)if(c.nodeType!=1||c.nodeName!="BR")return!1;return textRange(o,a-1,a).getBoundingClientRect().left>s}function isSuspiciousChromeCaretResult(o,e,s){if(e!=0)return!1;for(let c=o;;){let h=c.parentNode;if(!h||h.nodeType!=1||h.firstChild!=c)return!1;if(h.classList.contains("cm-line"))break;c=h}let a=o.nodeType==1?o.getBoundingClientRect():textRange(o,0,Math.max(o.nodeValue.length,1)).getBoundingClientRect();return s-a.left>5}function moveToLineBoundary(o,e,s,a){let c=o.state.doc.lineAt(e.head),h=!a||!o.lineWrapping?null:o.coordsAtPos(e.assoc<0&&e.head>c.from?e.head-1:e.head);if(h){let _=o.dom.getBoundingClientRect(),b=o.textDirectionAt(c.from),$=o.posAtCoords({x:s==(b==Direction.LTR)?_.right-1:_.left+1,y:(h.top+h.bottom)/2});if($!=null)return EditorSelection.cursor($,s?-1:1)}let d=LineView.find(o.docView,e.head),g=d?s?d.posAtEnd:d.posAtStart:s?c.to:c.from;return EditorSelection.cursor(g,s?-1:1)}function moveByChar(o,e,s,a){let c=o.state.doc.lineAt(e.head),h=o.bidiSpans(c),d=o.textDirectionAt(c.from);for(let g=e,_=null;;){let b=moveVisually(c,h,d,g,s),$=movedOver;if(!b){if(c.number==(s?o.state.doc.lines:1))return g;$=` +`,c=o.state.doc.line(c.number+(s?1:-1)),h=o.bidiSpans(c),b=EditorSelection.cursor(s?c.from:c.to)}if(_){if(!_($))return g}else{if(!a)return b;_=a($)}g=b}}function byGroup(o,e,s){let a=o.state.charCategorizer(e),c=a(s);return h=>{let d=a(h);return c==CharCategory.Space&&(c=d),c==d}}function moveVertically(o,e,s,a){let c=e.head,h=s?1:-1;if(c==(s?o.state.doc.length:0))return EditorSelection.cursor(c,e.assoc);let d=e.goalColumn,g,_=o.contentDOM.getBoundingClientRect(),b=o.coordsAtPos(c),$=o.documentTop;if(b)d==null&&(d=b.left-_.left),g=h<0?b.top:b.bottom;else{let et=o.viewState.lineBlockAt(c);d==null&&(d=Math.min(_.right-_.left,o.defaultCharacterWidth*(c-et.from))),g=(h<0?et.top:et.bottom)+$}let j=_.left+d,_e=a!=null?a:o.defaultLineHeight>>1;for(let et=0;;et+=10){let tt=g+(_e+et)*h,nt=posAtCoords(o,{x:j,y:tt},!1,h);if(tt<_.top||tt>_.bottom||(h<0?ntc))return EditorSelection.cursor(nt,e.assoc,void 0,d)}}function skipAtoms(o,e,s){let a=o.state.facet(atomicRanges).map(c=>c(o));for(;;){let c=!1;for(let h of a)h.between(s.from-1,s.from+1,(d,g,_)=>{s.from>d&&s.froms.from?EditorSelection.cursor(d,1):EditorSelection.cursor(g,-1),c=!0)});if(!c)return s}}class InputState{constructor(e){this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.chromeScrollHack=-1,this.pendingIOSKey=void 0,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastEscPress=0,this.lastContextMenu=0,this.scrollHandlers=[],this.registeredEvents=[],this.customHandlers=[],this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.rapidCompositionStart=!1,this.mouseSelection=null;for(let s in handlers){let a=handlers[s];e.contentDOM.addEventListener(s,c=>{!eventBelongsToEditor(e,c)||this.ignoreDuringComposition(c)||s=="keydown"&&this.keydown(e,c)||(this.mustFlushObserver(c)&&e.observer.forceFlush(),this.runCustomHandlers(s,e,c)?c.preventDefault():a(e,c))},handlerOptions[s]),this.registeredEvents.push(s)}browser.chrome&&browser.chrome_version==102&&e.scrollDOM.addEventListener("wheel",()=>{this.chromeScrollHack<0?e.contentDOM.style.pointerEvents="none":window.clearTimeout(this.chromeScrollHack),this.chromeScrollHack=setTimeout(()=>{this.chromeScrollHack=-1,e.contentDOM.style.pointerEvents=""},100)},{passive:!0}),this.notifiedFocused=e.hasFocus,browser.safari&&e.contentDOM.addEventListener("input",()=>null)}setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}ensureHandlers(e,s){var a;let c;this.customHandlers=[];for(let h of s)if(c=(a=h.update(e).spec)===null||a===void 0?void 0:a.domEventHandlers){this.customHandlers.push({plugin:h.value,handlers:c});for(let d in c)this.registeredEvents.indexOf(d)<0&&d!="scroll"&&(this.registeredEvents.push(d),e.contentDOM.addEventListener(d,g=>{!eventBelongsToEditor(e,g)||this.runCustomHandlers(d,e,g)&&g.preventDefault()}))}}runCustomHandlers(e,s,a){for(let c of this.customHandlers){let h=c.handlers[e];if(h)try{if(h.call(c.plugin,a,s)||a.defaultPrevented)return!0}catch(d){logException(s.state,d)}}return!1}runScrollHandlers(e,s){this.lastScrollTop=e.scrollDOM.scrollTop,this.lastScrollLeft=e.scrollDOM.scrollLeft;for(let a of this.customHandlers){let c=a.handlers.scroll;if(c)try{c.call(a.plugin,s,e)}catch(h){logException(e.state,h)}}}keydown(e,s){if(this.lastKeyCode=s.keyCode,this.lastKeyTime=Date.now(),s.keyCode==9&&Date.now()c.keyCode==s.keyCode))&&!(s.ctrlKey||s.altKey||s.metaKey)&&!s.synthetic?(this.pendingIOSKey=a,setTimeout(()=>this.flushIOSKey(e),250),!0):!1}flushIOSKey(e){let s=this.pendingIOSKey;return s?(this.pendingIOSKey=void 0,dispatchKey(e.contentDOM,s.key,s.keyCode)):!1}ignoreDuringComposition(e){return/^key/.test(e.type)?this.composing>0?!0:browser.safari&&!browser.ios&&Date.now()-this.compositionEndedAt<100?(this.compositionEndedAt=0,!0):!1:!1}mustFlushObserver(e){return e.type=="keydown"&&e.keyCode!=229||e.type=="compositionend"&&!browser.ios}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.mouseSelection&&this.mouseSelection.update(e),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}const PendingKeys=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],modifierCodes=[16,17,18,20,91,92,224,225];class MouseSelection{constructor(e,s,a,c){this.view=e,this.style=a,this.mustSelect=c,this.lastEvent=s;let h=e.contentDOM.ownerDocument;h.addEventListener("mousemove",this.move=this.move.bind(this)),h.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=s.shiftKey,this.multiple=e.state.facet(EditorState.allowMultipleSelections)&&addsSelectionRange(e,s),this.dragMove=dragMovesSelection(e,s),this.dragging=isInPrimarySelection(e,s)&&getClickType(s)==1?null:!1,this.dragging===!1&&(s.preventDefault(),this.select(s))}move(e){if(e.buttons==0)return this.destroy();this.dragging===!1&&this.select(this.lastEvent=e)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=null}select(e){let s=this.style.get(e,this.extend,this.multiple);(this.mustSelect||!s.eq(this.view.state.selection)||s.main.assoc!=this.view.state.selection.main.assoc)&&this.view.dispatch({selection:s,userEvent:"select.pointer",scrollIntoView:!0}),this.mustSelect=!1}update(e){e.docChanged&&this.dragging&&(this.dragging=this.dragging.map(e.changes)),this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function addsSelectionRange(o,e){let s=o.state.facet(clickAddsSelectionRange);return s.length?s[0](e):browser.mac?e.metaKey:e.ctrlKey}function dragMovesSelection(o,e){let s=o.state.facet(dragMovesSelection$1);return s.length?s[0](e):browser.mac?!e.altKey:!e.ctrlKey}function isInPrimarySelection(o,e){let{main:s}=o.state.selection;if(s.empty)return!1;let a=getSelection(o.root);if(!a||a.rangeCount==0)return!0;let c=a.getRangeAt(0).getClientRects();for(let h=0;h=e.clientX&&d.top<=e.clientY&&d.bottom>=e.clientY)return!0}return!1}function eventBelongsToEditor(o,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let s=e.target,a;s!=o.contentDOM;s=s.parentNode)if(!s||s.nodeType==11||(a=ContentView.get(s))&&a.ignoreEvent(e))return!1;return!0}const handlers=Object.create(null),handlerOptions=Object.create(null),brokenClipboardAPI=browser.ie&&browser.ie_version<15||browser.ios&&browser.webkit_version<604;function capturePaste(o){let e=o.dom.parentNode;if(!e)return;let s=e.appendChild(document.createElement("textarea"));s.style.cssText="position: fixed; left: -10000px; top: 10px",s.focus(),setTimeout(()=>{o.focus(),s.remove(),doPaste(o,s.value)},50)}function doPaste(o,e){let{state:s}=o,a,c=1,h=s.toText(e),d=h.lines==s.selection.ranges.length;if(lastLinewiseCopy!=null&&s.selection.ranges.every(_=>_.empty)&&lastLinewiseCopy==h.toString()){let _=-1;a=s.changeByRange(b=>{let $=s.doc.lineAt(b.from);if($.from==_)return{range:b};_=$.from;let j=s.toText((d?h.line(c++).text:e)+s.lineBreak);return{changes:{from:$.from,insert:j},range:EditorSelection.cursor(b.from+j.length)}})}else d?a=s.changeByRange(_=>{let b=h.line(c++);return{changes:{from:_.from,to:_.to,insert:b.text},range:EditorSelection.cursor(_.from+b.length)}}):a=s.replaceSelection(h);o.dispatch(a,{userEvent:"input.paste",scrollIntoView:!0})}handlers.keydown=(o,e)=>{o.inputState.setSelectionOrigin("select"),e.keyCode==27?o.inputState.lastEscPress=Date.now():modifierCodes.indexOf(e.keyCode)<0&&(o.inputState.lastEscPress=0)};handlers.touchstart=(o,e)=>{o.inputState.lastTouchTime=Date.now(),o.inputState.setSelectionOrigin("select.pointer")};handlers.touchmove=o=>{o.inputState.setSelectionOrigin("select.pointer")};handlerOptions.touchstart=handlerOptions.touchmove={passive:!0};handlers.mousedown=(o,e)=>{if(o.observer.flush(),o.inputState.lastTouchTime>Date.now()-2e3&&getClickType(e)==1)return;let s=null;for(let a of o.state.facet(mouseSelectionStyle))if(s=a(o,e),s)break;if(!s&&e.button==0&&(s=basicMouseSelection(o,e)),s){let a=o.root.activeElement!=o.contentDOM;a&&o.observer.ignore(()=>focusPreventScroll(o.contentDOM)),o.inputState.startMouseSelection(new MouseSelection(o,e,s,a))}};function rangeForClick(o,e,s,a){if(a==1)return EditorSelection.cursor(e,s);if(a==2)return groupAt(o.state,e,s);{let c=LineView.find(o.docView,e),h=o.state.doc.lineAt(c?c.posAtEnd:e),d=c?c.posAtStart:h.from,g=c?c.posAtEnd:h.to;return go>=e.top&&o<=e.bottom,inside=(o,e,s)=>insideY(e,s)&&o>=s.left&&o<=s.right;function findPositionSide(o,e,s,a){let c=LineView.find(o.docView,e);if(!c)return 1;let h=e-c.posAtStart;if(h==0)return 1;if(h==c.length)return-1;let d=c.coordsAt(h,-1);if(d&&inside(s,a,d))return-1;let g=c.coordsAt(h,1);return g&&inside(s,a,g)?1:d&&insideY(a,d)?-1:1}function queryPos(o,e){let s=o.posAtCoords({x:e.clientX,y:e.clientY},!1);return{pos:s,bias:findPositionSide(o,s,e.clientX,e.clientY)}}const BadMouseDetail=browser.ie&&browser.ie_version<=11;let lastMouseDown=null,lastMouseDownCount=0,lastMouseDownTime=0;function getClickType(o){if(!BadMouseDetail)return o.detail;let e=lastMouseDown,s=lastMouseDownTime;return lastMouseDown=o,lastMouseDownTime=Date.now(),lastMouseDownCount=!e||s>Date.now()-400&&Math.abs(e.clientX-o.clientX)<2&&Math.abs(e.clientY-o.clientY)<2?(lastMouseDownCount+1)%3:1}function basicMouseSelection(o,e){let s=queryPos(o,e),a=getClickType(e),c=o.state.selection,h=s,d=e;return{update(g){g.docChanged&&(s&&(s.pos=g.changes.mapPos(s.pos)),c=c.map(g.changes),d=null)},get(g,_,b){let $;if(d&&g.clientX==d.clientX&&g.clientY==d.clientY?$=h:($=h=queryPos(o,g),d=g),!$||!s)return c;let j=rangeForClick(o,$.pos,$.bias,a);if(s.pos!=$.pos&&!_){let _e=rangeForClick(o,s.pos,s.bias,a),et=Math.min(_e.from,j.from),tt=Math.max(_e.to,j.to);j=et1&&c.ranges.some(_e=>_e.eq(j))?removeRange(c,j):b?c.addRange(j):EditorSelection.create([j])}}}function removeRange(o,e){for(let s=0;;s++)if(o.ranges[s].eq(e))return EditorSelection.create(o.ranges.slice(0,s).concat(o.ranges.slice(s+1)),o.mainIndex==s?0:o.mainIndex-(o.mainIndex>s?1:0))}handlers.dragstart=(o,e)=>{let{selection:{main:s}}=o.state,{mouseSelection:a}=o.inputState;a&&(a.dragging=s),e.dataTransfer&&(e.dataTransfer.setData("Text",o.state.sliceDoc(s.from,s.to)),e.dataTransfer.effectAllowed="copyMove")};function dropText(o,e,s,a){if(!s)return;let c=o.posAtCoords({x:e.clientX,y:e.clientY},!1);e.preventDefault();let{mouseSelection:h}=o.inputState,d=a&&h&&h.dragging&&h.dragMove?{from:h.dragging.from,to:h.dragging.to}:null,g={from:c,insert:s},_=o.state.changes(d?[d,g]:g);o.focus(),o.dispatch({changes:_,selection:{anchor:_.mapPos(c,-1),head:_.mapPos(c,1)},userEvent:d?"move.drop":"input.drop"})}handlers.drop=(o,e)=>{if(!e.dataTransfer)return;if(o.state.readOnly)return e.preventDefault();let s=e.dataTransfer.files;if(s&&s.length){e.preventDefault();let a=Array(s.length),c=0,h=()=>{++c==s.length&&dropText(o,e,a.filter(d=>d!=null).join(o.state.lineBreak),!1)};for(let d=0;d{/[\x00-\x08\x0e-\x1f]{2}/.test(g.result)||(a[d]=g.result),h()},g.readAsText(s[d])}}else dropText(o,e,e.dataTransfer.getData("Text"),!0)};handlers.paste=(o,e)=>{if(o.state.readOnly)return e.preventDefault();o.observer.flush();let s=brokenClipboardAPI?null:e.clipboardData;s?(doPaste(o,s.getData("text/plain")),e.preventDefault()):capturePaste(o)};function captureCopy(o,e){let s=o.dom.parentNode;if(!s)return;let a=s.appendChild(document.createElement("textarea"));a.style.cssText="position: fixed; left: -10000px; top: 10px",a.value=e,a.focus(),a.selectionEnd=e.length,a.selectionStart=0,setTimeout(()=>{a.remove(),o.focus()},50)}function copiedRange(o){let e=[],s=[],a=!1;for(let c of o.selection.ranges)c.empty||(e.push(o.sliceDoc(c.from,c.to)),s.push(c));if(!e.length){let c=-1;for(let{from:h}of o.selection.ranges){let d=o.doc.lineAt(h);d.number>c&&(e.push(d.text),s.push({from:d.from,to:Math.min(o.doc.length,d.to+1)})),c=d.number}a=!0}return{text:e.join(o.lineBreak),ranges:s,linewise:a}}let lastLinewiseCopy=null;handlers.copy=handlers.cut=(o,e)=>{let{text:s,ranges:a,linewise:c}=copiedRange(o.state);if(!s&&!c)return;lastLinewiseCopy=c?s:null;let h=brokenClipboardAPI?null:e.clipboardData;h?(e.preventDefault(),h.clearData(),h.setData("text/plain",s)):captureCopy(o,s),e.type=="cut"&&!o.state.readOnly&&o.dispatch({changes:a,scrollIntoView:!0,userEvent:"delete.cut"})};function updateForFocusChange(o){setTimeout(()=>{o.hasFocus!=o.inputState.notifiedFocused&&o.update([])},10)}handlers.focus=o=>{o.inputState.lastFocusTime=Date.now(),!o.scrollDOM.scrollTop&&(o.inputState.lastScrollTop||o.inputState.lastScrollLeft)&&(o.scrollDOM.scrollTop=o.inputState.lastScrollTop,o.scrollDOM.scrollLeft=o.inputState.lastScrollLeft),updateForFocusChange(o)};handlers.blur=o=>{o.observer.clearSelectionRange(),updateForFocusChange(o)};function forceClearComposition(o,e){if(o.docView.compositionDeco.size){o.inputState.rapidCompositionStart=e;try{o.update([])}finally{o.inputState.rapidCompositionStart=!1}}}handlers.compositionstart=handlers.compositionupdate=o=>{o.inputState.compositionFirstChange==null&&(o.inputState.compositionFirstChange=!0),o.inputState.composing<0&&(o.inputState.composing=0,o.docView.compositionDeco.size&&(o.observer.flush(),forceClearComposition(o,!0)))};handlers.compositionend=o=>{o.inputState.composing=-1,o.inputState.compositionEndedAt=Date.now(),o.inputState.compositionFirstChange=null,setTimeout(()=>{o.inputState.composing<0&&forceClearComposition(o,!1)},50)};handlers.contextmenu=o=>{o.inputState.lastContextMenu=Date.now()};handlers.beforeinput=(o,e)=>{var s;let a;if(browser.chrome&&browser.android&&(a=PendingKeys.find(c=>c.inputType==e.inputType))&&(o.observer.delayAndroidKey(a.key,a.keyCode),a.key=="Backspace"||a.key=="Delete")){let c=((s=window.visualViewport)===null||s===void 0?void 0:s.height)||0;setTimeout(()=>{var h;(((h=window.visualViewport)===null||h===void 0?void 0:h.height)||0)>c+10&&o.hasFocus&&(o.contentDOM.blur(),o.focus())},100)}};const wrappingWhiteSpace=["pre-wrap","normal","pre-line","break-spaces"];class HeightOracle{constructor(){this.doc=Text.empty,this.lineWrapping=!1,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.lineLength=30,this.heightChanged=!1}heightForGap(e,s){let a=this.doc.lineAt(s).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(a+=Math.ceil((s-e-a*this.lineLength*.5)/this.lineLength)),this.lineHeight*a}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/(this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return wrappingWhiteSpace.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let s=!1;for(let a=0;a-1,g=Math.round(s)!=Math.round(this.lineHeight)||this.lineWrapping!=d;if(this.lineWrapping=d,this.lineHeight=s,this.charWidth=a,this.lineLength=c,g){this.heightSamples={};for(let _=0;_0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e,s){this.height!=s&&(Math.abs(this.height-s)>Epsilon&&(e.heightChanged=!0),this.height=s)}replace(e,s,a){return HeightMap.of(a)}decomposeLeft(e,s){s.push(this)}decomposeRight(e,s){s.push(this)}applyChanges(e,s,a,c){let h=this;for(let d=c.length-1;d>=0;d--){let{fromA:g,toA:_,fromB:b,toB:$}=c[d],j=h.lineAt(g,QueryType$1.ByPosNoHeight,s,0,0),_e=j.to>=_?j:h.lineAt(_,QueryType$1.ByPosNoHeight,s,0,0);for($+=_e.to-_,_=_e.to;d>0&&j.from<=c[d-1].toA;)g=c[d-1].fromA,b=c[d-1].fromB,d--,gh*2){let g=e[s-1];g.break?e.splice(--s,1,g.left,null,g.right):e.splice(--s,1,g.left,g.right),a+=1+g.break,c-=g.size}else if(h>c*2){let g=e[a];g.break?e.splice(a,1,g.left,null,g.right):e.splice(a,1,g.left,g.right),a+=2+g.break,h-=g.size}else break;else if(c=h&&d(this.blockAt(0,a,c,h))}updateHeight(e,s=0,a=!1,c){return c&&c.from<=s&&c.more&&this.setHeight(e,c.heights[c.index++]),this.outdated=!1,this}toString(){return`block(${this.length})`}}class HeightMapText extends HeightMapBlock{constructor(e,s){super(e,s,BlockType.Text),this.collapsed=0,this.widgetHeight=0}replace(e,s,a){let c=a[0];return a.length==1&&(c instanceof HeightMapText||c instanceof HeightMapGap&&c.flags&4)&&Math.abs(this.length-c.length)<10?(c instanceof HeightMapGap?c=new HeightMapText(c.length,this.height):c.height=this.height,this.outdated||(c.outdated=!1),c):HeightMap.of(a)}updateHeight(e,s=0,a=!1,c){return c&&c.from<=s&&c.more?this.setHeight(e,c.heights[c.index++]):(a||this.outdated)&&this.setHeight(e,Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class HeightMapGap extends HeightMap{constructor(e){super(e,0)}lines(e,s){let a=e.lineAt(s).number,c=e.lineAt(s+this.length).number;return{firstLine:a,lastLine:c,lineHeight:this.height/(c-a+1)}}blockAt(e,s,a,c){let{firstLine:h,lastLine:d,lineHeight:g}=this.lines(s,c),_=Math.max(0,Math.min(d-h,Math.floor((e-a)/g))),{from:b,length:$}=s.line(h+_);return new BlockInfo(b,$,a+g*_,g,BlockType.Text)}lineAt(e,s,a,c,h){if(s==QueryType$1.ByHeight)return this.blockAt(e,a,c,h);if(s==QueryType$1.ByPosNoHeight){let{from:j,to:_e}=a.lineAt(e);return new BlockInfo(j,_e-j,0,0,BlockType.Text)}let{firstLine:d,lineHeight:g}=this.lines(a,h),{from:_,length:b,number:$}=a.lineAt(e);return new BlockInfo(_,b,c+g*($-d),g,BlockType.Text)}forEachLine(e,s,a,c,h,d){let{firstLine:g,lineHeight:_}=this.lines(a,h);for(let b=Math.max(e,h),$=Math.min(h+this.length,s);b<=$;){let j=a.lineAt(b);b==e&&(c+=_*(j.number-g)),d(new BlockInfo(j.from,j.length,c,_,BlockType.Text)),c+=_,b=j.to+1}}replace(e,s,a){let c=this.length-s;if(c>0){let h=a[a.length-1];h instanceof HeightMapGap?a[a.length-1]=new HeightMapGap(h.length+c):a.push(null,new HeightMapGap(c-1))}if(e>0){let h=a[0];h instanceof HeightMapGap?a[0]=new HeightMapGap(e+h.length):a.unshift(new HeightMapGap(e-1),null)}return HeightMap.of(a)}decomposeLeft(e,s){s.push(new HeightMapGap(e-1),null)}decomposeRight(e,s){s.push(null,new HeightMapGap(this.length-e-1))}updateHeight(e,s=0,a=!1,c){let h=s+this.length;if(c&&c.from<=s+this.length&&c.more){let d=[],g=Math.max(s,c.from),_=-1,b=e.heightChanged;for(c.from>s&&d.push(new HeightMapGap(c.from-s-1).updateHeight(e,s));g<=h&&c.more;){let j=e.doc.lineAt(g).length;d.length&&d.push(null);let _e=c.heights[c.index++];_==-1?_=_e:Math.abs(_e-_)>=Epsilon&&(_=-2);let et=new HeightMapText(j,_e);et.outdated=!1,d.push(et),g+=j+1}g<=h&&d.push(null,new HeightMapGap(h-g).updateHeight(e,g));let $=HeightMap.of(d);return e.heightChanged=b||_<0||Math.abs($.height-this.height)>=Epsilon||Math.abs(_-this.lines(e.doc,s).lineHeight)>=Epsilon,$}else(a||this.outdated)&&(this.setHeight(e,e.heightForGap(s,s+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class HeightMapBranch extends HeightMap{constructor(e,s,a){super(e.length+s+a.length,e.height+a.height,s|(e.outdated||a.outdated?2:0)),this.left=e,this.right=a,this.size=e.size+a.size}get break(){return this.flags&1}blockAt(e,s,a,c){let h=a+this.left.height;return eg))return b;let $=s==QueryType$1.ByPosNoHeight?QueryType$1.ByPosNoHeight:QueryType$1.ByPos;return _?b.join(this.right.lineAt(g,$,a,d,g)):this.left.lineAt(g,$,a,c,h).join(b)}forEachLine(e,s,a,c,h,d){let g=c+this.left.height,_=h+this.left.length+this.break;if(this.break)e<_&&this.left.forEachLine(e,s,a,c,h,d),s>=_&&this.right.forEachLine(e,s,a,g,_,d);else{let b=this.lineAt(_,QueryType$1.ByPos,a,c,h);e=e&&b.from<=s&&d(b),s>b.to&&this.right.forEachLine(b.to+1,s,a,g,_,d)}}replace(e,s,a){let c=this.left.length+this.break;if(sthis.left.length)return this.balanced(this.left,this.right.replace(e-c,s-c,a));let h=[];e>0&&this.decomposeLeft(e,h);let d=h.length;for(let g of a)h.push(g);if(e>0&&mergeGaps(h,d-1),s=a&&s.push(null)),e>a&&this.right.decomposeLeft(e-a,s)}decomposeRight(e,s){let a=this.left.length,c=a+this.break;if(e>=c)return this.right.decomposeRight(e-c,s);e2*s.size||s.size>2*e.size?HeightMap.of(this.break?[e,null,s]:[e,s]):(this.left=e,this.right=s,this.height=e.height+s.height,this.outdated=e.outdated||s.outdated,this.size=e.size+s.size,this.length=e.length+this.break+s.length,this)}updateHeight(e,s=0,a=!1,c){let{left:h,right:d}=this,g=s+h.length+this.break,_=null;return c&&c.from<=s+h.length&&c.more?_=h=h.updateHeight(e,s,a,c):h.updateHeight(e,s,a),c&&c.from<=g+d.length&&c.more?_=d=d.updateHeight(e,g,a,c):d.updateHeight(e,g,a),_?this.balanced(h,d):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function mergeGaps(o,e){let s,a;o[e]==null&&(s=o[e-1])instanceof HeightMapGap&&(a=o[e+1])instanceof HeightMapGap&&o.splice(e-1,3,new HeightMapGap(s.length+1+a.length))}const relevantWidgetHeight=5;class NodeBuilder{constructor(e,s){this.pos=e,this.oracle=s,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,s){if(this.lineStart>-1){let a=Math.min(s,this.lineEnd),c=this.nodes[this.nodes.length-1];c instanceof HeightMapText?c.length+=a-this.pos:(a>this.pos||!this.isCovered)&&this.nodes.push(new HeightMapText(a-this.pos,-1)),this.writtenTo=a,s>a&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=s}point(e,s,a){if(e=relevantWidgetHeight)&&this.addLineDeco(c,h)}else s>e&&this.span(e,s);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:s}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=s,this.writtenToe&&this.nodes.push(new HeightMapText(this.pos-e,-1)),this.writtenTo=this.pos}blankContent(e,s){let a=new HeightMapGap(s-e);return this.oracle.doc.lineAt(e).to==s&&(a.flags|=4),a}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof HeightMapText)return e;let s=new HeightMapText(0,-1);return this.nodes.push(s),s}addBlock(e){this.enterLine(),e.type==BlockType.WidgetAfter&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,e.type!=BlockType.WidgetBefore&&(this.covering=e)}addLineDeco(e,s){let a=this.ensureLine();a.length+=s,a.collapsed+=s,a.widgetHeight=Math.max(a.widgetHeight,e),this.writtenTo=this.pos=this.pos+s}finish(e){let s=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(s instanceof HeightMapText)&&!this.isCovered?this.nodes.push(new HeightMapText(0,-1)):(this.writtenTob.clientHeight||b.scrollWidth>b.clientWidth)&&$.overflow!="visible"){let j=b.getBoundingClientRect();a=Math.max(a,j.left),c=Math.min(c,j.right),h=Math.max(h,j.top),d=_==o.parentNode?j.bottom:Math.min(d,j.bottom)}_=$.position=="absolute"||$.position=="fixed"?b.offsetParent:b.parentNode}else if(_.nodeType==11)_=_.host;else break;return{left:a-s.left,right:Math.max(a,c)-s.left,top:h-(s.top+e),bottom:Math.max(h,d)-(s.top+e)}}function fullPixelRange(o,e){let s=o.getBoundingClientRect();return{left:0,right:s.right-s.left,top:e,bottom:s.bottom-(s.top+e)}}class LineGap{constructor(e,s,a){this.from=e,this.to=s,this.size=a}static same(e,s){if(e.length!=s.length)return!1;for(let a=0;atypeof s!="function"),this.heightMap=HeightMap.empty().applyChanges(this.stateDeco,Text.empty,this.heightOracle.setDoc(e.doc),[new ChangedRange(0,0,0,e.doc.length)]),this.viewport=this.getViewport(0,null),this.updateViewportLines(),this.updateForViewport(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=Decoration.set(this.lineGaps.map(s=>s.draw(!1))),this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:s}=this.state.selection;for(let a=0;a<=1;a++){let c=a?s.head:s.anchor;if(!e.some(({from:h,to:d})=>c>=h&&c<=d)){let{from:h,to:d}=this.lineBlockAt(c);e.push(new Viewport(h,d))}}this.viewports=e.sort((a,c)=>a.from-c.from),this.scaler=this.heightMap.height<=7e6?IdScaler:new BigScaler(this.heightOracle.doc,this.heightMap,this.viewports)}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.state.doc,0,0,e=>{this.viewportLines.push(this.scaler.scale==1?e:scaleBlock(e,this.scaler))})}update(e,s=null){this.state=e.state;let a=this.stateDeco;this.stateDeco=this.state.facet(decorations).filter(b=>typeof b!="function");let c=e.changedRanges,h=ChangedRange.extendWithRanges(c,heightRelevantDecoChanges(a,this.stateDeco,e?e.changes:ChangeSet.empty(this.state.doc.length))),d=this.heightMap.height;this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),h),this.heightMap.height!=d&&(e.flags|=2);let g=h.length?this.mapViewport(this.viewport,e.changes):this.viewport;(s&&(s.range.headg.to)||!this.viewportIsAppropriate(g))&&(g=this.getViewport(0,s));let _=!e.changes.empty||e.flags&2||g.from!=this.viewport.from||g.to!=this.viewport.to;this.viewport=g,this.updateForViewport(),_&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(),s&&(this.scrollTarget=s),!this.mustEnforceCursorAssoc&&e.selectionSet&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&(this.mustEnforceCursorAssoc=!0)}measure(e){let s=e.contentDOM,a=window.getComputedStyle(s),c=this.heightOracle,h=a.whiteSpace;this.defaultTextDirection=a.direction=="rtl"?Direction.RTL:Direction.LTR;let d=this.heightOracle.mustRefreshForWrapping(h),g=d||this.mustMeasureContent||this.contentDOMHeight!=s.clientHeight;this.contentDOMHeight=s.clientHeight,this.mustMeasureContent=!1;let _=0,b=0,$=parseInt(a.paddingTop)||0,j=parseInt(a.paddingBottom)||0;(this.paddingTop!=$||this.paddingBottom!=j)&&(this.paddingTop=$,this.paddingBottom=j,_|=10),this.editorWidth!=e.scrollDOM.clientWidth&&(c.lineWrapping&&(g=!0),this.editorWidth=e.scrollDOM.clientWidth,_|=8);let _e=(this.printing?fullPixelRange:visiblePixelRange)(s,this.paddingTop),et=_e.top-this.pixelViewport.top,tt=_e.bottom-this.pixelViewport.bottom;this.pixelViewport=_e;let nt=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(nt!=this.inView&&(this.inView=nt,nt&&(g=!0)),!this.inView)return 0;let st=s.clientWidth;if((this.contentDOMWidth!=st||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=st,this.editorHeight=e.scrollDOM.clientHeight,_|=8),g){let it=e.docView.measureVisibleLineHeights(this.viewport);if(c.mustRefreshForHeights(it)&&(d=!0),d||c.lineWrapping&&Math.abs(st-this.contentDOMWidth)>c.charWidth){let{lineHeight:at,charWidth:ot}=e.docView.measureTextSize();d=c.refresh(h,at,ot,st/ot,it),d&&(e.docView.minWidth=0,_|=8)}et>0&&tt>0?b=Math.max(et,tt):et<0&&tt<0&&(b=Math.min(et,tt)),c.heightChanged=!1;for(let at of this.viewports){let ot=at.from==this.viewport.from?it:e.docView.measureVisibleLineHeights(at);this.heightMap=this.heightMap.updateHeight(c,0,d,new MeasuredHeights(at.from,ot))}c.heightChanged&&(_|=2)}let rt=!this.viewportIsAppropriate(this.viewport,b)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return rt&&(this.viewport=this.getViewport(b,this.scrollTarget)),this.updateForViewport(),(_&2||rt)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(d?[]:this.lineGaps)),_|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),_}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,s){let a=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),c=this.heightMap,h=this.state.doc,{visibleTop:d,visibleBottom:g}=this,_=new Viewport(c.lineAt(d-a*1e3,QueryType$1.ByHeight,h,0,0).from,c.lineAt(g+(1-a)*1e3,QueryType$1.ByHeight,h,0,0).to);if(s){let{head:b}=s.range;if(b<_.from||b>_.to){let $=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),j=c.lineAt(b,QueryType$1.ByPos,h,0,0),_e;s.y=="center"?_e=(j.top+j.bottom)/2-$/2:s.y=="start"||s.y=="nearest"&&b<_.from?_e=j.top:_e=j.bottom-$,_=new Viewport(c.lineAt(_e-1e3/2,QueryType$1.ByHeight,h,0,0).from,c.lineAt(_e+$+1e3/2,QueryType$1.ByHeight,h,0,0).to)}}return _}mapViewport(e,s){let a=s.mapPos(e.from,-1),c=s.mapPos(e.to,1);return new Viewport(this.heightMap.lineAt(a,QueryType$1.ByPos,this.state.doc,0,0).from,this.heightMap.lineAt(c,QueryType$1.ByPos,this.state.doc,0,0).to)}viewportIsAppropriate({from:e,to:s},a=0){if(!this.inView)return!0;let{top:c}=this.heightMap.lineAt(e,QueryType$1.ByPos,this.state.doc,0,0),{bottom:h}=this.heightMap.lineAt(s,QueryType$1.ByPos,this.state.doc,0,0),{visibleTop:d,visibleBottom:g}=this;return(e==0||c<=d-Math.max(10,Math.min(-a,250)))&&(s==this.state.doc.length||h>=g+Math.max(10,Math.min(a,250)))&&c>d-2*1e3&&ha.from&&g.push({from:a.from,to:h}),d=a.from&&_.from<=a.to&&cutRange(g,_.from-10,_.from+10),!_.empty&&_.to>=a.from&&_.to<=a.to&&cutRange(g,_.to-10,_.to+10);for(let{from:b,to:$}of g)$-b>1e3&&s.push(find(e,j=>j.from>=a.from&&j.to<=a.to&&Math.abs(j.from-b)<1e3&&Math.abs(j.to-$)<1e3)||new LineGap(b,$,this.gapSize(a,b,$,c)))}return s}gapSize(e,s,a,c){let h=findFraction(c,a)-findFraction(c,s);return this.heightOracle.lineWrapping?e.height*h:c.total*this.heightOracle.charWidth*h}updateLineGaps(e){LineGap.same(e,this.lineGaps)||(this.lineGaps=e,this.lineGapDeco=Decoration.set(e.map(s=>s.draw(this.heightOracle.lineWrapping))))}computeVisibleRanges(){let e=this.stateDeco;this.lineGaps.length&&(e=e.concat(this.lineGapDeco));let s=[];RangeSet.spans(e,this.viewport.from,this.viewport.to,{span(c,h){s.push({from:c,to:h})},point(){}},20);let a=s.length!=this.visibleRanges.length||this.visibleRanges.some((c,h)=>c.from!=s[h].from||c.to!=s[h].to);return this.visibleRanges=s,a?4:0}lineBlockAt(e){return e>=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(s=>s.from<=e&&s.to>=e)||scaleBlock(this.heightMap.lineAt(e,QueryType$1.ByPos,this.state.doc,0,0),this.scaler)}lineBlockAtHeight(e){return scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(e),QueryType$1.ByHeight,this.state.doc,0,0),this.scaler)}elementAtHeight(e){return scaleBlock(this.heightMap.blockAt(this.scaler.fromDOM(e),this.state.doc,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class Viewport{constructor(e,s){this.from=e,this.to=s}}function lineStructure(o,e,s){let a=[],c=o,h=0;return RangeSet.spans(s,o,e,{span(){},point(d,g){d>c&&(a.push({from:c,to:d}),h+=d-c),c=g}},20),c=1)return e[e.length-1].to;let a=Math.floor(o*s);for(let c=0;;c++){let{from:h,to:d}=e[c],g=d-h;if(a<=g)return h+a;a-=g}}function findFraction(o,e){let s=0;for(let{from:a,to:c}of o.ranges){if(e<=c){s+=e-a;break}s+=c-a}return s/o.total}function cutRange(o,e,s){for(let a=0;ae){let h=[];c.froms&&h.push({from:s,to:c.to}),o.splice(a,1,...h),a+=h.length-1}}}function find(o,e){for(let s of o)if(e(s))return s}const IdScaler={toDOM(o){return o},fromDOM(o){return o},scale:1};class BigScaler{constructor(e,s,a){let c=0,h=0,d=0;this.viewports=a.map(({from:g,to:_})=>{let b=s.lineAt(g,QueryType$1.ByPos,e,0,0).top,$=s.lineAt(_,QueryType$1.ByPos,e,0,0).bottom;return c+=$-b,{from:g,to:_,top:b,bottom:$,domTop:0,domBottom:0}}),this.scale=(7e6-c)/(s.height-c);for(let g of this.viewports)g.domTop=d+(g.top-h)*this.scale,d=g.domBottom=g.domTop+(g.bottom-g.top),h=g.bottom}toDOM(e){for(let s=0,a=0,c=0;;s++){let h=sscaleBlock(c,e)):o.type)}const theme=Facet.define({combine:o=>o.join(" ")}),darkTheme=Facet.define({combine:o=>o.indexOf(!0)>-1}),baseThemeID=StyleModule.newName(),baseLightID=StyleModule.newName(),baseDarkID=StyleModule.newName(),lightDarkIDs={"&light":"."+baseLightID,"&dark":"."+baseDarkID};function buildTheme(o,e,s){return new StyleModule(e,{finish(a){return/&/.test(a)?a.replace(/&\w*/,c=>{if(c=="&")return o;if(!s||!s[c])throw new RangeError(`Unsupported selector: ${c}`);return s[c]}):o+" "+a}})}const baseTheme$1$3=buildTheme("."+baseThemeID,{"&.cm-editor":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0},".cm-content":{margin:0,flexGrow:2,flexShrink:0,minHeight:"100%",display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 4px"},".cm-selectionLayer":{zIndex:-1,contain:"size style"},".cm-selectionBackground":{position:"absolute"},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{zIndex:100,contain:"size style",pointerEvents:"none"},"&.cm-focused .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{position:"absolute",borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#444"},"&.cm-focused .cm-cursor":{display:"block"},"&light .cm-activeLine":{backgroundColor:"#f3f9ff"},"&dark .cm-activeLine":{backgroundColor:"#223039"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",left:0,zIndex:200},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",borderRight:"1px solid #ddd"},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},lightDarkIDs),observeOptions={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},useCharData=browser.ie&&browser.ie_version<=11;class DOMObserver{constructor(e,s,a){this.view=e,this.onChange=s,this.onScrollChanged=a,this.active=!1,this.selectionRange=new DOMSelectionState,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.scrollTargets=[],this.intersection=null,this.resize=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(c=>{for(let h of c)this.queue.push(h);(browser.ie&&browser.ie_version<=11||browser.ios&&e.composing)&&c.some(h=>h.type=="childList"&&h.removedNodes.length||h.type=="characterData"&&h.oldValue.length>h.target.nodeValue.length)?this.flushSoon():this.flush()}),useCharData&&(this.onCharData=c=>{this.queue.push({target:c.target,type:"characterData",oldValue:c.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),typeof ResizeObserver=="function"&&(this.resize=new ResizeObserver(()=>{this.view.docView.lastUpdate{this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),c.length>0&&c[c.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(c=>{c.length>0&&c[c.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScroll(e){this.intersecting&&this.flush(!1),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(){this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500)}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((s,a)=>s!=e[a]))){this.gapIntersection.disconnect();for(let s of e)this.gapIntersection.observe(s);this.gaps=e}}onSelectionChange(e){if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:s}=this,a=this.selectionRange;if(s.state.facet(editable)?s.root.activeElement!=this.dom:!hasSelection(s.dom,a))return;let c=a.anchorNode&&s.docView.nearest(a.anchorNode);c&&c.ignoreEvent(e)||((browser.ie&&browser.ie_version<=11||browser.android&&browser.chrome)&&!s.state.selection.main.empty&&a.focusNode&&isEquivalentPosition(a.focusNode,a.focusOffset,a.anchorNode,a.anchorOffset)?this.flushSoon():this.flush(!1))}readSelectionRange(){let{view:e}=this,s=browser.safari&&e.root.nodeType==11&&deepActiveElement()==this.dom&&safariSelectionRangeHack(this.view)||getSelection(e.root);if(!s||this.selectionRange.eq(s))return!1;let a=hasSelection(this.dom,s);return a&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let a=this.delayedAndroidKey;this.delayedAndroidKey=null,this.delayedFlush=-1,this.flush()||dispatchKey(this.dom,a.key,a.keyCode)}),(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:s})}flushSoon(){this.delayedFlush<0&&(this.delayedFlush=window.setTimeout(()=>{this.delayedFlush=-1,this.flush()},20))}forceFlush(){this.delayedFlush>=0&&(window.clearTimeout(this.delayedFlush),this.delayedFlush=-1),this.flush()}processRecords(){let e=this.queue;for(let h of this.observer.takeRecords())e.push(h);e.length&&(this.queue=[]);let s=-1,a=-1,c=!1;for(let h of e){let d=this.readMutation(h);!d||(d.typeOver&&(c=!0),s==-1?{from:s,to:a}=d:(s=Math.min(d.from,s),a=Math.max(d.to,a)))}return{from:s,to:a,typeOver:c}}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return;e&&this.readSelectionRange();let{from:s,to:a,typeOver:c}=this.processRecords(),h=this.selectionChanged&&hasSelection(this.dom,this.selectionRange);if(s<0&&!h)return;this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let d=this.view.state,g=this.onChange(s,a,c);return this.view.state==d&&this.view.update([]),g}readMutation(e){let s=this.view.docView.nearest(e.target);if(!s||s.ignoreMutation(e))return null;if(s.markDirty(e.type=="attributes"),e.type=="attributes"&&(s.dirty|=4),e.type=="childList"){let a=findChild(s,e.previousSibling||e.target.previousSibling,-1),c=findChild(s,e.nextSibling||e.target.nextSibling,1);return{from:a?s.posAfter(a):s.posAtStart,to:c?s.posBefore(c):s.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:s.posAtStart,to:s.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}destroy(){var e,s,a;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(s=this.gapIntersection)===null||s===void 0||s.disconnect(),(a=this.resize)===null||a===void 0||a.disconnect();for(let c of this.scrollTargets)c.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout)}}function findChild(o,e,s){for(;e;){let a=ContentView.get(e);if(a&&a.parent==o)return a;let c=e.parentNode;e=c!=o.dom?c:s>0?e.nextSibling:e.previousSibling}return null}function safariSelectionRangeHack(o){let e=null;function s(_){_.preventDefault(),_.stopImmediatePropagation(),e=_.getTargetRanges()[0]}if(o.contentDOM.addEventListener("beforeinput",s,!0),document.execCommand("indent"),o.contentDOM.removeEventListener("beforeinput",s,!0),!e)return null;let a=e.startContainer,c=e.startOffset,h=e.endContainer,d=e.endOffset,g=o.docView.domAtPos(o.state.selection.main.anchor);return isEquivalentPosition(g.node,g.offset,h,d)&&([a,c,h,d]=[h,d,a,c]),{anchorNode:a,anchorOffset:c,focusNode:h,focusOffset:d}}function applyDOMChange(o,e,s,a){let c,h,d=o.state.selection.main;if(e>-1){let g=o.docView.domBoundsAround(e,s,0);if(!g||o.state.readOnly)return!1;let{from:_,to:b}=g,$=o.docView.impreciseHead||o.docView.impreciseAnchor?[]:selectionPoints(o),j=new DOMReader($,o.state);j.readRange(g.startDOM,g.endDOM);let _e=d.from,et=null;(o.inputState.lastKeyCode===8&&o.inputState.lastKeyTime>Date.now()-100||browser.android&&j.text.length=d.from&&c.to<=d.to&&(c.from!=d.from||c.to!=d.to)&&d.to-d.from-(c.to-c.from)<=4?c={from:d.from,to:d.to,insert:o.state.doc.slice(d.from,c.from).append(c.insert).append(o.state.doc.slice(c.to,d.to))}:(browser.mac||browser.android)&&c&&c.from==c.to&&c.from==d.head-1&&c.insert.toString()=="."&&(c={from:d.from,to:d.to,insert:Text.of([" "])}),c){let g=o.state;if(browser.ios&&o.inputState.flushIOSKey(o)||browser.android&&(c.from==d.from&&c.to==d.to&&c.insert.length==1&&c.insert.lines==2&&dispatchKey(o.contentDOM,"Enter",13)||c.from==d.from-1&&c.to==d.to&&c.insert.length==0&&dispatchKey(o.contentDOM,"Backspace",8)||c.from==d.from&&c.to==d.to+1&&c.insert.length==0&&dispatchKey(o.contentDOM,"Delete",46)))return!0;let _=c.insert.toString();if(o.state.facet(inputHandler$1).some(j=>j(o,c.from,c.to,_)))return!0;o.inputState.composing>=0&&o.inputState.composing++;let b;if(c.from>=d.from&&c.to<=d.to&&c.to-c.from>=(d.to-d.from)/3&&(!h||h.main.empty&&h.main.from==c.from+c.insert.length)&&o.inputState.composing<0){let j=d.fromc.to?g.sliceDoc(c.to,d.to):"";b=g.replaceSelection(o.state.toText(j+c.insert.sliceString(0,void 0,o.state.lineBreak)+_e))}else{let j=g.changes(c),_e=h&&!g.selection.main.eq(h.main)&&h.main.to<=j.newLength?h.main:void 0;if(g.selection.ranges.length>1&&o.inputState.composing>=0&&c.to<=d.to&&c.to>=d.to-10){let et=o.state.sliceDoc(c.from,c.to),tt=compositionSurroundingNode(o)||o.state.doc.lineAt(d.head),nt=d.to-c.to,st=d.to-d.from;b=g.changeByRange(rt=>{if(rt.from==d.from&&rt.to==d.to)return{changes:j,range:_e||rt.map(j)};let it=rt.to-nt,at=it-et.length;if(rt.to-rt.from!=st||o.state.sliceDoc(at,it)!=et||tt&&rt.to>=tt.from&&rt.from<=tt.to)return{range:rt};let ot=g.changes({from:at,to:it,insert:c.insert}),ut=rt.to-d.to;return{changes:ot,range:_e?EditorSelection.range(Math.max(0,_e.anchor+ut),Math.max(0,_e.head+ut)):rt.map(ot)}})}else b={changes:j,selection:_e&&g.selection.replaceRange(_e)}}let $="input.type";return o.composing&&($+=".compose",o.inputState.compositionFirstChange&&($+=".start",o.inputState.compositionFirstChange=!1)),o.dispatch(b,{scrollIntoView:!0,userEvent:$}),!0}else if(h&&!h.main.eq(d)){let g=!1,_="select";return o.inputState.lastSelectionTime>Date.now()-50&&(o.inputState.lastSelectionOrigin=="select"&&(g=!0),_=o.inputState.lastSelectionOrigin),o.dispatch({selection:h,scrollIntoView:g,userEvent:_}),!0}else return!1}function findDiff(o,e,s,a){let c=Math.min(o.length,e.length),h=0;for(;h0&&g>0&&o.charCodeAt(d-1)==e.charCodeAt(g-1);)d--,g--;if(a=="end"){let _=Math.max(0,h-Math.min(d,g));s-=d+_-h}return d=d?h-s:0,g=h+(g-d),d=h):g=g?h-s:0,d=h+(d-g),g=h),{from:h,toA:d,toB:g}}function selectionPoints(o){let e=[];if(o.root.activeElement!=o.contentDOM)return e;let{anchorNode:s,anchorOffset:a,focusNode:c,focusOffset:h}=o.observer.selectionRange;return s&&(e.push(new DOMPoint(s,a)),(c!=s||h!=a)&&e.push(new DOMPoint(c,h))),e}function selectionFromPoints(o,e){if(o.length==0)return null;let s=o[0].pos,a=o.length==2?o[1].pos:s;return s>-1&&a>-1?EditorSelection.single(s+e,a+e):null}class EditorView{constructor(e={}){this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.style.cssText="position: absolute; top: -10000px",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),this._dispatch=e.dispatch||(s=>this.update([s])),this.dispatch=this.dispatch.bind(this),this._root=e.root||getRoot(e.parent)||document,this.viewState=new ViewState(e.state||EditorState.create(e)),this.plugins=this.state.facet(viewPlugin).map(s=>new PluginInstance(s));for(let s of this.plugins)s.update(this);this.observer=new DOMObserver(this,(s,a,c)=>applyDOMChange(this,s,a,c),s=>{this.inputState.runScrollHandlers(this,s),this.observer.intersecting&&this.measure()}),this.inputState=new InputState(this),this.inputState.ensureHandlers(this,this.plugins),this.docView=new DocView(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),e.parent&&e.parent.appendChild(this.dom)}get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return this.inputState.composing>0}get compositionStarted(){return this.inputState.composing>=0}get root(){return this._root}dispatch(...e){this._dispatch(e.length==1&&e[0]instanceof Transaction?e[0]:this.state.update(...e))}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let s=!1,a=!1,c,h=this.state;for(let g of e){if(g.startState!=h)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");h=g.state}if(this.destroyed){this.viewState.state=h;return}if(this.observer.clear(),h.facet(EditorState.phrases)!=this.state.facet(EditorState.phrases))return this.setState(h);c=ViewUpdate.create(this,h,e);let d=this.viewState.scrollTarget;try{this.updateState=2;for(let g of e){if(d&&(d=d.map(g.changes)),g.scrollIntoView){let{main:_}=g.state.selection;d=new ScrollTarget(_.empty?_:EditorSelection.cursor(_.head,_.head>_.anchor?-1:1))}for(let _ of g.effects)_.is(scrollIntoView$1)&&(d=_.value)}this.viewState.update(c,d),this.bidiCache=CachedOrder.update(this.bidiCache,c.changes),c.empty||(this.updatePlugins(c),this.inputState.update(c)),s=this.docView.update(c),this.state.facet(styleModule)!=this.styleModules&&this.mountStyles(),a=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(s,e.some(g=>g.isUserEvent("select.pointer")))}finally{this.updateState=0}if(c.startState.facet(theme)!=c.state.facet(theme)&&(this.viewState.mustMeasureContent=!0),(s||a||d||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),!c.empty)for(let g of this.state.facet(updateListener))g(c)}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let s=this.hasFocus;try{for(let a of this.plugins)a.destroy(this);this.viewState=new ViewState(e),this.plugins=e.facet(viewPlugin).map(a=>new PluginInstance(a)),this.pluginMap.clear();for(let a of this.plugins)a.update(this);this.docView=new DocView(this),this.inputState.ensureHandlers(this,this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}s&&this.focus(),this.requestMeasure()}updatePlugins(e){let s=e.startState.facet(viewPlugin),a=e.state.facet(viewPlugin);if(s!=a){let c=[];for(let h of a){let d=s.indexOf(h);if(d<0)c.push(new PluginInstance(h));else{let g=this.plugins[d];g.mustUpdate=e,c.push(g)}}for(let h of this.plugins)h.mustUpdate!=e&&h.destroy(this);this.plugins=c,this.pluginMap.clear(),this.inputState.ensureHandlers(this,this.plugins)}else for(let c of this.plugins)c.mustUpdate=e;for(let c=0;c-1&&cancelAnimationFrame(this.measureScheduled),this.measureScheduled=0,e&&this.observer.forceFlush();let s=null,{scrollHeight:a,scrollTop:c,clientHeight:h}=this.scrollDOM,d=c>a-h-4?a:c;try{for(let g=0;;g++){this.updateState=1;let _=this.viewport,b=this.viewState.lineBlockAtHeight(d),$=this.viewState.measure(this);if(!$&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(g>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let j=[];$&4||([this.measureRequests,j]=[j,this.measureRequests]);let _e=j.map(st=>{try{return st.read(this)}catch(rt){return logException(this.state,rt),BadMeasure}}),et=ViewUpdate.create(this,this.state,[]),tt=!1,nt=!1;et.flags|=$,s?s.flags|=$:s=et,this.updateState=2,et.empty||(this.updatePlugins(et),this.inputState.update(et),this.updateAttrs(),tt=this.docView.update(et));for(let st=0;st1||st<-1)&&(this.scrollDOM.scrollTop+=st,nt=!0)}if(tt&&this.docView.updateSelection(!0),this.viewport.from==_.from&&this.viewport.to==_.to&&!nt&&this.measureRequests.length==0)break}}finally{this.updateState=0,this.measureScheduled=-1}if(s&&!s.empty)for(let g of this.state.facet(updateListener))g(s)}get themeClasses(){return baseThemeID+" "+(this.state.facet(darkTheme)?baseDarkID:baseLightID)+" "+this.state.facet(theme)}updateAttrs(){let e=attrsFromFacet(this,editorAttributes,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),s={spellcheck:"false",autocorrect:"off",autocapitalize:"off",translate:"no",contenteditable:this.state.facet(editable)?"true":"false",class:"cm-content",style:`${browser.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(s["aria-readonly"]="true"),attrsFromFacet(this,contentAttributes,s);let a=this.observer.ignore(()=>{let c=updateAttrs(this.contentDOM,this.contentAttrs,s),h=updateAttrs(this.dom,this.editorAttrs,e);return c||h});return this.editorAttrs=e,this.contentAttrs=s,a}showAnnouncements(e){let s=!0;for(let a of e)for(let c of a.effects)if(c.is(EditorView.announce)){s&&(this.announceDOM.textContent=""),s=!1;let h=this.announceDOM.appendChild(document.createElement("div"));h.textContent=c.value}}mountStyles(){this.styleModules=this.state.facet(styleModule),StyleModule.mount(this.root,this.styleModules.concat(baseTheme$1$3).reverse())}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=requestAnimationFrame(()=>this.measure())),e){if(e.key!=null){for(let s=0;sa.spec==e)||null),s&&s.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,s,a){return skipAtoms(this,e,moveByChar(this,e,s,a))}moveByGroup(e,s){return skipAtoms(this,e,moveByChar(this,e,s,a=>byGroup(this,e.head,a)))}moveToLineBoundary(e,s,a=!0){return moveToLineBoundary(this,e,s,a)}moveVertically(e,s,a){return skipAtoms(this,e,moveVertically(this,e,s,a))}domAtPos(e){return this.docView.domAtPos(e)}posAtDOM(e,s=0){return this.docView.posFromDOM(e,s)}posAtCoords(e,s=!0){return this.readMeasured(),posAtCoords(this,e,s)}coordsAtPos(e,s=1){this.readMeasured();let a=this.docView.coordsAt(e,s);if(!a||a.left==a.right)return a;let c=this.state.doc.lineAt(e),h=this.bidiSpans(c),d=h[BidiSpan.find(h,e-c.from,-1,s)];return flattenRect(a,d.dir==Direction.LTR==s>0)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(perLineTextDirection)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>MaxBidiLine)return trivialOrder(e.length);let s=this.textDirectionAt(e.from);for(let c of this.bidiCache)if(c.from==e.from&&c.dir==s)return c.order;let a=computeOrder(e.text,s);return this.bidiCache.push(new CachedOrder(e.from,e.to,s,a)),a}get hasFocus(){var e;return(document.hasFocus()||browser.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{focusPreventScroll(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView),this.mountStyles())}destroy(){for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,s={}){return scrollIntoView$1.of(new ScrollTarget(typeof e=="number"?EditorSelection.cursor(e):e,s.y,s.x,s.yMargin,s.xMargin))}static domEventHandlers(e){return ViewPlugin.define(()=>({}),{eventHandlers:e})}static theme(e,s){let a=StyleModule.newName(),c=[theme.of(a),styleModule.of(buildTheme(`.${a}`,e))];return s&&s.dark&&c.push(darkTheme.of(!0)),c}static baseTheme(e){return Prec.lowest(styleModule.of(buildTheme("."+baseThemeID,e,lightDarkIDs)))}static findFromDOM(e){var s;let a=e.querySelector(".cm-content"),c=a&&ContentView.get(a)||ContentView.get(e);return((s=c==null?void 0:c.rootView)===null||s===void 0?void 0:s.view)||null}}EditorView.styleModule=styleModule;EditorView.inputHandler=inputHandler$1;EditorView.perLineTextDirection=perLineTextDirection;EditorView.exceptionSink=exceptionSink;EditorView.updateListener=updateListener;EditorView.editable=editable;EditorView.mouseSelectionStyle=mouseSelectionStyle;EditorView.dragMovesSelection=dragMovesSelection$1;EditorView.clickAddsSelectionRange=clickAddsSelectionRange;EditorView.decorations=decorations;EditorView.atomicRanges=atomicRanges;EditorView.scrollMargins=scrollMargins;EditorView.darkTheme=darkTheme;EditorView.contentAttributes=contentAttributes;EditorView.editorAttributes=editorAttributes;EditorView.lineWrapping=EditorView.contentAttributes.of({class:"cm-lineWrapping"});EditorView.announce=StateEffect.define();const MaxBidiLine=4096,BadMeasure={};class CachedOrder{constructor(e,s,a,c){this.from=e,this.to=s,this.dir=a,this.order=c}static update(e,s){if(s.empty)return e;let a=[],c=e.length?e[e.length-1].dir:Direction.LTR;for(let h=Math.max(0,e.length-10);h=0;c--){let h=a[c],d=typeof h=="function"?h(o):h;d&&combineAttrs(d,s)}return s}const currentPlatform=browser.mac?"mac":browser.windows?"win":browser.linux?"linux":"key";function normalizeKeyName(o,e){const s=o.split(/-(?!$)/);let a=s[s.length-1];a=="Space"&&(a=" ");let c,h,d,g;for(let _=0;_a.concat(c),[]))),s}function runScopeHandlers(o,e,s){return runHandlers(getKeymap(o.state),e,o,s)}let storedPrefix=null;const PrefixTimeout=4e3;function buildKeymap(o,e=currentPlatform){let s=Object.create(null),a=Object.create(null),c=(d,g)=>{let _=a[d];if(_==null)a[d]=g;else if(_!=g)throw new Error("Key binding "+d+" is used both as a regular binding and as a multi-stroke prefix")},h=(d,g,_,b)=>{let $=s[d]||(s[d]=Object.create(null)),j=g.split(/ (?!$)/).map(tt=>normalizeKeyName(tt,e));for(let tt=1;tt{let rt=storedPrefix={view:st,prefix:nt,scope:d};return setTimeout(()=>{storedPrefix==rt&&(storedPrefix=null)},PrefixTimeout),!0}]})}let _e=j.join(" ");c(_e,!1);let et=$[_e]||($[_e]={preventDefault:!1,commands:[]});et.commands.push(_),b&&(et.preventDefault=!0)};for(let d of o){let g=d[e]||d.key;if(!!g)for(let _ of d.scope?d.scope.split(" "):["editor"])h(_,g,d.run,d.preventDefault),d.shift&&h(_,"Shift-"+g,d.shift,d.preventDefault)}return s}function runHandlers(o,e,s,a){let c=keyName(e),h=codePointAt(c,0),d=codePointSize(h)==c.length&&c!=" ",g="",_=!1;storedPrefix&&storedPrefix.view==s&&storedPrefix.scope==a&&(g=storedPrefix.prefix+" ",(_=modifierCodes.indexOf(e.keyCode)<0)&&(storedPrefix=null));let b=_e=>{if(_e){for(let et of _e.commands)if(et(s))return!0;_e.preventDefault&&(_=!0)}return!1},$=o[a],j;if($){if(b($[g+modifiers(c,e,!d)]))return!0;if(d&&(e.shiftKey||e.altKey||e.metaKey||h>127)&&(j=base[e.keyCode])&&j!=c){if(b($[g+modifiers(j,e,!0)]))return!0;if(e.shiftKey&&shift[e.keyCode]!=j&&b($[g+modifiers(shift[e.keyCode],e,!1)]))return!0}else if(d&&e.shiftKey&&b($[g+modifiers(c,e,!0)]))return!0}return _}const CanHidePrimary=!browser.ios,selectionConfig=Facet.define({combine(o){return combineConfig(o,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(e,s)=>Math.min(e,s),drawRangeCursor:(e,s)=>e||s})}});function drawSelection(o={}){return[selectionConfig.of(o),drawSelectionPlugin,hideNativeSelection]}class Piece{constructor(e,s,a,c,h){this.left=e,this.top=s,this.width=a,this.height=c,this.className=h}draw(){let e=document.createElement("div");return e.className=this.className,this.adjust(e),e}adjust(e){e.style.left=this.left+"px",e.style.top=this.top+"px",this.width>=0&&(e.style.width=this.width+"px"),e.style.height=this.height+"px"}eq(e){return this.left==e.left&&this.top==e.top&&this.width==e.width&&this.height==e.height&&this.className==e.className}}const drawSelectionPlugin=ViewPlugin.fromClass(class{constructor(o){this.view=o,this.rangePieces=[],this.cursors=[],this.measureReq={read:this.readPos.bind(this),write:this.drawSel.bind(this)},this.selectionLayer=o.scrollDOM.appendChild(document.createElement("div")),this.selectionLayer.className="cm-selectionLayer",this.selectionLayer.setAttribute("aria-hidden","true"),this.cursorLayer=o.scrollDOM.appendChild(document.createElement("div")),this.cursorLayer.className="cm-cursorLayer",this.cursorLayer.setAttribute("aria-hidden","true"),o.requestMeasure(this.measureReq),this.setBlinkRate()}setBlinkRate(){this.cursorLayer.style.animationDuration=this.view.state.facet(selectionConfig).cursorBlinkRate+"ms"}update(o){let e=o.startState.facet(selectionConfig)!=o.state.facet(selectionConfig);(e||o.selectionSet||o.geometryChanged||o.viewportChanged)&&this.view.requestMeasure(this.measureReq),o.transactions.some(s=>s.scrollIntoView)&&(this.cursorLayer.style.animationName=this.cursorLayer.style.animationName=="cm-blink"?"cm-blink2":"cm-blink"),e&&this.setBlinkRate()}readPos(){let{state:o}=this.view,e=o.facet(selectionConfig),s=o.selection.ranges.map(c=>c.empty?[]:measureRange(this.view,c)).reduce((c,h)=>c.concat(h)),a=[];for(let c of o.selection.ranges){let h=c==o.selection.main;if(c.empty?!h||CanHidePrimary:e.drawRangeCursor){let d=measureCursor(this.view,c,h);d&&a.push(d)}}return{rangePieces:s,cursors:a}}drawSel({rangePieces:o,cursors:e}){if(o.length!=this.rangePieces.length||o.some((s,a)=>!s.eq(this.rangePieces[a]))){this.selectionLayer.textContent="";for(let s of o)this.selectionLayer.appendChild(s.draw());this.rangePieces=o}if(e.length!=this.cursors.length||e.some((s,a)=>!s.eq(this.cursors[a]))){let s=this.cursorLayer.children;if(s.length!==e.length){this.cursorLayer.textContent="";for(const a of e)this.cursorLayer.appendChild(a.draw())}else e.forEach((a,c)=>a.adjust(s[c]));this.cursors=e}}destroy(){this.selectionLayer.remove(),this.cursorLayer.remove()}}),themeSpec={".cm-line":{"& ::selection":{backgroundColor:"transparent !important"},"&::selection":{backgroundColor:"transparent !important"}}};CanHidePrimary&&(themeSpec[".cm-line"].caretColor="transparent !important");const hideNativeSelection=Prec.highest(EditorView.theme(themeSpec));function getBase(o){let e=o.scrollDOM.getBoundingClientRect();return{left:(o.textDirection==Direction.LTR?e.left:e.right-o.scrollDOM.clientWidth)-o.scrollDOM.scrollLeft,top:e.top-o.scrollDOM.scrollTop}}function wrappedLine(o,e,s){let a=EditorSelection.cursor(e);return{from:Math.max(s.from,o.moveToLineBoundary(a,!1,!0).from),to:Math.min(s.to,o.moveToLineBoundary(a,!0,!0).from),type:BlockType.Text}}function blockAt(o,e){let s=o.lineBlockAt(e);if(Array.isArray(s.type)){for(let a of s.type)if(a.to>e||a.to==e&&(a.to==s.to||a.type==BlockType.Text))return a}return s}function measureRange(o,e){if(e.to<=o.viewport.from||e.from>=o.viewport.to)return[];let s=Math.max(e.from,o.viewport.from),a=Math.min(e.to,o.viewport.to),c=o.textDirection==Direction.LTR,h=o.contentDOM,d=h.getBoundingClientRect(),g=getBase(o),_=window.getComputedStyle(h.firstChild),b=d.left+parseInt(_.paddingLeft)+Math.min(0,parseInt(_.textIndent)),$=d.right-parseInt(_.paddingRight),j=blockAt(o,s),_e=blockAt(o,a),et=j.type==BlockType.Text?j:null,tt=_e.type==BlockType.Text?_e:null;if(o.lineWrapping&&(et&&(et=wrappedLine(o,s,et)),tt&&(tt=wrappedLine(o,a,tt))),et&&tt&&et.from==tt.from)return st(rt(e.from,e.to,et));{let at=et?rt(e.from,null,et):it(j,!1),ot=tt?rt(null,e.to,tt):it(_e,!0),ut=[];return(et||j).to<(tt||_e).from-1?ut.push(nt(b,at.bottom,$,ot.top)):at.bottomft&&yt.from=Et)break;dt>mt&&pt(Math.max(At,mt),at==null&&At<=ft,Math.min(dt,Et),ot==null&&dt>=gt,St.dir)}if(mt=Ot.to+1,mt>=Et)break}return lt.length==0&&pt(ft,at==null,gt,ot==null,o.textDirection),{top:ct,bottom:ht,horizontal:lt}}function it(at,ot){let ut=d.top+(ot?at.top:at.bottom);return{top:ut,bottom:ut,horizontal:[]}}}function measureCursor(o,e,s){let a=o.coordsAtPos(e.head,e.assoc||1);if(!a)return null;let c=getBase(o);return new Piece(a.left-c.left,a.top-c.top,-1,a.bottom-a.top,s?"cm-cursor cm-cursor-primary":"cm-cursor cm-cursor-secondary")}const setDropCursorPos=StateEffect.define({map(o,e){return o==null?null:e.mapPos(o)}}),dropCursorPos=StateField.define({create(){return null},update(o,e){return o!=null&&(o=e.changes.mapPos(o)),e.effects.reduce((s,a)=>a.is(setDropCursorPos)?a.value:s,o)}}),drawDropCursor=ViewPlugin.fromClass(class{constructor(o){this.view=o,this.cursor=null,this.measureReq={read:this.readPos.bind(this),write:this.drawCursor.bind(this)}}update(o){var e;let s=o.state.field(dropCursorPos);s==null?this.cursor!=null&&((e=this.cursor)===null||e===void 0||e.remove(),this.cursor=null):(this.cursor||(this.cursor=this.view.scrollDOM.appendChild(document.createElement("div")),this.cursor.className="cm-dropCursor"),(o.startState.field(dropCursorPos)!=s||o.docChanged||o.geometryChanged)&&this.view.requestMeasure(this.measureReq))}readPos(){let o=this.view.state.field(dropCursorPos),e=o!=null&&this.view.coordsAtPos(o);if(!e)return null;let s=this.view.scrollDOM.getBoundingClientRect();return{left:e.left-s.left+this.view.scrollDOM.scrollLeft,top:e.top-s.top+this.view.scrollDOM.scrollTop,height:e.bottom-e.top}}drawCursor(o){this.cursor&&(o?(this.cursor.style.left=o.left+"px",this.cursor.style.top=o.top+"px",this.cursor.style.height=o.height+"px"):this.cursor.style.left="-100000px")}destroy(){this.cursor&&this.cursor.remove()}setDropPos(o){this.view.state.field(dropCursorPos)!=o&&this.view.dispatch({effects:setDropCursorPos.of(o)})}},{eventHandlers:{dragover(o){this.setDropPos(this.view.posAtCoords({x:o.clientX,y:o.clientY}))},dragleave(o){(o.target==this.view.contentDOM||!this.view.contentDOM.contains(o.relatedTarget))&&this.setDropPos(null)},dragend(){this.setDropPos(null)},drop(){this.setDropPos(null)}}});function dropCursor(){return[dropCursorPos,drawDropCursor]}function iterMatches(o,e,s,a,c){e.lastIndex=0;for(let h=o.iterRange(s,a),d=s,g;!h.next().done;d+=h.value.length)if(!h.lineBreak)for(;g=e.exec(h.value);)c(d+g.index,g)}function matchRanges(o,e){let s=o.visibleRanges;if(s.length==1&&s[0].from==o.viewport.from&&s[0].to==o.viewport.to)return s;let a=[];for(let{from:c,to:h}of s)c=Math.max(o.state.doc.lineAt(c).from,c-e),h=Math.min(o.state.doc.lineAt(h).to,h+e),a.length&&a[a.length-1].to>=c?a[a.length-1].to=h:a.push({from:c,to:h});return a}class MatchDecorator{constructor(e){const{regexp:s,decoration:a,decorate:c,boundary:h,maxLength:d=1e3}=e;if(!s.global)throw new RangeError("The regular expression given to MatchDecorator should have its 'g' flag set");if(this.regexp=s,c)this.addMatch=(g,_,b,$)=>c($,b,b+g[0].length,g,_);else if(a){let g=typeof a=="function"?a:()=>a;this.addMatch=(_,b,$,j)=>j($,$+_[0].length,g(_,b,$))}else throw new RangeError("Either 'decorate' or 'decoration' should be provided to MatchDecorator");this.boundary=h,this.maxLength=d}createDeco(e){let s=new RangeSetBuilder,a=s.add.bind(s);for(let{from:c,to:h}of matchRanges(e,this.maxLength))iterMatches(e.state.doc,this.regexp,c,h,(d,g)=>this.addMatch(g,e,d,a));return s.finish()}updateDeco(e,s){let a=1e9,c=-1;return e.docChanged&&e.changes.iterChanges((h,d,g,_)=>{_>e.view.viewport.from&&g1e3?this.createDeco(e.view):c>-1?this.updateRange(e.view,s.map(e.changes),a,c):s}updateRange(e,s,a,c){for(let h of e.visibleRanges){let d=Math.max(h.from,a),g=Math.min(h.to,c);if(g>d){let _=e.state.doc.lineAt(d),b=_.to_.from;d--)if(this.boundary.test(_.text[d-1-_.from])){$=d;break}for(;g_e.push(rt.range(nt,st));if(_==b)for(this.regexp.lastIndex=$-_.from;(et=this.regexp.exec(_.text))&&et.indexthis.addMatch(st,e,nt,tt));s=s.update({filterFrom:$,filterTo:j,filter:(nt,st)=>nt<$||st>j,add:_e})}}return s}}const UnicodeRegexpSupport=/x/.unicode!=null?"gu":"g",Specials=new RegExp(`[\0-\b +-\x7F-\x9F\xAD\u061C\u200B\u200E\u200F\u2028\u2029\u202D\u202E\u2066\u2067\u2069\uFEFF\uFFF9-\uFFFC]`,UnicodeRegexpSupport),Names={0:"null",7:"bell",8:"backspace",10:"newline",11:"vertical tab",13:"carriage return",27:"escape",8203:"zero width space",8204:"zero width non-joiner",8205:"zero width joiner",8206:"left-to-right mark",8207:"right-to-left mark",8232:"line separator",8237:"left-to-right override",8238:"right-to-left override",8294:"left-to-right isolate",8295:"right-to-left isolate",8297:"pop directional isolate",8233:"paragraph separator",65279:"zero width no-break space",65532:"object replacement"};let _supportsTabSize=null;function supportsTabSize(){var o;if(_supportsTabSize==null&&typeof document<"u"&&document.body){let e=document.body.style;_supportsTabSize=((o=e.tabSize)!==null&&o!==void 0?o:e.MozTabSize)!=null}return _supportsTabSize||!1}const specialCharConfig=Facet.define({combine(o){let e=combineConfig(o,{render:null,specialChars:Specials,addSpecialChars:null});return(e.replaceTabs=!supportsTabSize())&&(e.specialChars=new RegExp(" |"+e.specialChars.source,UnicodeRegexpSupport)),e.addSpecialChars&&(e.specialChars=new RegExp(e.specialChars.source+"|"+e.addSpecialChars.source,UnicodeRegexpSupport)),e}});function highlightSpecialChars(o={}){return[specialCharConfig.of(o),specialCharPlugin()]}let _plugin=null;function specialCharPlugin(){return _plugin||(_plugin=ViewPlugin.fromClass(class{constructor(o){this.view=o,this.decorations=Decoration.none,this.decorationCache=Object.create(null),this.decorator=this.makeDecorator(o.state.facet(specialCharConfig)),this.decorations=this.decorator.createDeco(o)}makeDecorator(o){return new MatchDecorator({regexp:o.specialChars,decoration:(e,s,a)=>{let{doc:c}=s.state,h=codePointAt(e[0],0);if(h==9){let d=c.lineAt(a),g=s.state.tabSize,_=countColumn(d.text,g,a-d.from);return Decoration.replace({widget:new TabWidget((g-_%g)*this.view.defaultCharacterWidth)})}return this.decorationCache[h]||(this.decorationCache[h]=Decoration.replace({widget:new SpecialCharWidget(o,h)}))},boundary:o.replaceTabs?void 0:/[^]/})}update(o){let e=o.state.facet(specialCharConfig);o.startState.facet(specialCharConfig)!=e?(this.decorator=this.makeDecorator(e),this.decorations=this.decorator.createDeco(o.view)):this.decorations=this.decorator.updateDeco(o,this.decorations)}},{decorations:o=>o.decorations}))}const DefaultPlaceholder="\u2022";function placeholder$1(o){return o>=32?DefaultPlaceholder:o==10?"\u2424":String.fromCharCode(9216+o)}class SpecialCharWidget extends WidgetType{constructor(e,s){super(),this.options=e,this.code=s}eq(e){return e.code==this.code}toDOM(e){let s=placeholder$1(this.code),a=e.state.phrase("Control character")+" "+(Names[this.code]||"0x"+this.code.toString(16)),c=this.options.render&&this.options.render(this.code,a,s);if(c)return c;let h=document.createElement("span");return h.textContent=s,h.title=a,h.setAttribute("aria-label",a),h.className="cm-specialChar",h}ignoreEvent(){return!1}}class TabWidget extends WidgetType{constructor(e){super(),this.width=e}eq(e){return e.width==this.width}toDOM(){let e=document.createElement("span");return e.textContent=" ",e.className="cm-tab",e.style.width=this.width+"px",e}ignoreEvent(){return!1}}function highlightActiveLine(){return activeLineHighlighter}const lineDeco=Decoration.line({class:"cm-activeLine"}),activeLineHighlighter=ViewPlugin.fromClass(class{constructor(o){this.decorations=this.getDeco(o)}update(o){(o.docChanged||o.selectionSet)&&(this.decorations=this.getDeco(o.view))}getDeco(o){let e=-1,s=[];for(let a of o.state.selection.ranges){if(!a.empty)return Decoration.none;let c=o.lineBlockAt(a.head);c.from>e&&(s.push(lineDeco.range(c.from)),e=c.from)}return Decoration.set(s)}},{decorations:o=>o.decorations});class Placeholder extends WidgetType{constructor(e){super(),this.content=e}toDOM(){let e=document.createElement("span");return e.className="cm-placeholder",e.style.pointerEvents="none",e.appendChild(typeof this.content=="string"?document.createTextNode(this.content):this.content),typeof this.content=="string"?e.setAttribute("aria-label","placeholder "+this.content):e.setAttribute("aria-hidden","true"),e}ignoreEvent(){return!1}}function placeholder(o){return ViewPlugin.fromClass(class{constructor(e){this.view=e,this.placeholder=Decoration.set([Decoration.widget({widget:new Placeholder(o),side:1}).range(0)])}get decorations(){return this.view.state.doc.length?Decoration.none:this.placeholder}},{decorations:e=>e.decorations})}const MaxOff=2e3;function rectangleFor(o,e,s){let a=Math.min(e.line,s.line),c=Math.max(e.line,s.line),h=[];if(e.off>MaxOff||s.off>MaxOff||e.col<0||s.col<0){let d=Math.min(e.off,s.off),g=Math.max(e.off,s.off);for(let _=a;_<=c;_++){let b=o.doc.line(_);b.length<=g&&h.push(EditorSelection.range(b.from+d,b.to+g))}}else{let d=Math.min(e.col,s.col),g=Math.max(e.col,s.col);for(let _=a;_<=c;_++){let b=o.doc.line(_),$=findColumn(b.text,d,o.tabSize,!0);if($>-1){let j=findColumn(b.text,g,o.tabSize);h.push(EditorSelection.range(b.from+$,b.from+j))}}}return h}function absoluteColumn(o,e){let s=o.coordsAtPos(o.viewport.from);return s?Math.round(Math.abs((s.left-e)/o.defaultCharacterWidth)):-1}function getPos(o,e){let s=o.posAtCoords({x:e.clientX,y:e.clientY},!1),a=o.state.doc.lineAt(s),c=s-a.from,h=c>MaxOff?-1:c==a.length?absoluteColumn(o,e.clientX):countColumn(a.text,o.state.tabSize,s-a.from);return{line:a.number,col:h,off:c}}function rectangleSelectionStyle(o,e){let s=getPos(o,e),a=o.state.selection;return s?{update(c){if(c.docChanged){let h=c.changes.mapPos(c.startState.doc.line(s.line).from),d=c.state.doc.lineAt(h);s={line:d.number,col:s.col,off:Math.min(s.off,d.length)},a=a.map(c.changes)}},get(c,h,d){let g=getPos(o,c);if(!g)return a;let _=rectangleFor(o.state,s,g);return _.length?d?EditorSelection.create(_.concat(a.ranges)):EditorSelection.create(_):a}}:null}function rectangularSelection(o){let e=(o==null?void 0:o.eventFilter)||(s=>s.altKey&&s.button==0);return EditorView.mouseSelectionStyle.of((s,a)=>e(a)?rectangleSelectionStyle(s,a):null)}const keys={Alt:[18,o=>o.altKey],Control:[17,o=>o.ctrlKey],Shift:[16,o=>o.shiftKey],Meta:[91,o=>o.metaKey]},showCrosshair={style:"cursor: crosshair"};function crosshairCursor(o={}){let[e,s]=keys[o.key||"Alt"],a=ViewPlugin.fromClass(class{constructor(c){this.view=c,this.isDown=!1}set(c){this.isDown!=c&&(this.isDown=c,this.view.update([]))}},{eventHandlers:{keydown(c){this.set(c.keyCode==e||s(c))},keyup(c){(c.keyCode==e||!s(c))&&this.set(!1)}}});return[a,EditorView.contentAttributes.of(c=>{var h;return!((h=c.plugin(a))===null||h===void 0)&&h.isDown?showCrosshair:null})]}const Outside="-10000px";class TooltipViewManager{constructor(e,s,a){this.facet=s,this.createTooltipView=a,this.input=e.state.facet(s),this.tooltips=this.input.filter(c=>c),this.tooltipViews=this.tooltips.map(a)}update(e){let s=e.state.facet(this.facet),a=s.filter(h=>h);if(s===this.input){for(let h of this.tooltipViews)h.update&&h.update(e);return!1}let c=[];for(let h=0;h{var e,s,a;return{position:browser.ios?"absolute":((e=o.find(c=>c.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((s=o.find(c=>c.parent))===null||s===void 0?void 0:s.parent)||null,tooltipSpace:((a=o.find(c=>c.tooltipSpace))===null||a===void 0?void 0:a.tooltipSpace)||windowSpace}}}),tooltipPlugin=ViewPlugin.fromClass(class{constructor(o){var e;this.view=o,this.inView=!0,this.lastTransaction=0,this.measureTimeout=-1;let s=o.state.facet(tooltipConfig);this.position=s.position,this.parent=s.parent,this.classes=o.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.manager=new TooltipViewManager(o,showTooltip,a=>this.createTooltip(a)),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(a=>{Date.now()>this.lastTransaction-50&&a.length>0&&a[a.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),(e=o.dom.ownerDocument.defaultView)===null||e===void 0||e.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let o of this.manager.tooltipViews)this.intersectionObserver.observe(o.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(o){o.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(o);e&&this.observeIntersection();let s=e||o.geometryChanged,a=o.state.facet(tooltipConfig);if(a.position!=this.position){this.position=a.position;for(let c of this.manager.tooltipViews)c.dom.style.position=this.position;s=!0}if(a.parent!=this.parent){this.parent&&this.container.remove(),this.parent=a.parent,this.createContainer();for(let c of this.manager.tooltipViews)this.container.appendChild(c.dom);s=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);s&&this.maybeMeasure()}createTooltip(o){let e=o.create(this.view);if(e.dom.classList.add("cm-tooltip"),o.arrow&&!e.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let s=document.createElement("div");s.className="cm-tooltip-arrow",e.dom.appendChild(s)}return e.dom.style.position=this.position,e.dom.style.top=Outside,this.container.appendChild(e.dom),e.mount&&e.mount(this.view),e}destroy(){var o,e;(o=this.view.dom.ownerDocument.defaultView)===null||o===void 0||o.removeEventListener("resize",this.measureSoon);for(let{dom:s}of this.manager.tooltipViews)s.remove();(e=this.intersectionObserver)===null||e===void 0||e.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let o=this.view.dom.getBoundingClientRect();return{editor:o,parent:this.parent?this.container.getBoundingClientRect():o,pos:this.manager.tooltips.map((e,s)=>{let a=this.manager.tooltipViews[s];return a.getCoords?a.getCoords(e.pos):this.view.coordsAtPos(e.pos)}),size:this.manager.tooltipViews.map(({dom:e})=>e.getBoundingClientRect()),space:this.view.state.facet(tooltipConfig).tooltipSpace(this.view)}}writeMeasure(o){let{editor:e,space:s}=o,a=[];for(let c=0;c=Math.min(e.bottom,s.bottom)||_.rightMath.min(e.right,s.right)+.1){g.style.top=Outside;continue}let $=h.arrow?d.dom.querySelector(".cm-tooltip-arrow"):null,j=$?7:0,_e=b.right-b.left,et=b.bottom-b.top,tt=d.offset||noOffset,nt=this.view.textDirection==Direction.LTR,st=b.width>s.right-s.left?nt?s.left:s.right-b.width:nt?Math.min(_.left-($?14:0)+tt.x,s.right-_e):Math.max(s.left,_.left-_e+($?14:0)-tt.x),rt=!!h.above;!h.strictSide&&(rt?_.top-(b.bottom-b.top)-tt.ys.bottom)&&rt==s.bottom-_.bottom>_.top-s.top&&(rt=!rt);let it=rt?_.top-et-j-tt.y:_.bottom+j+tt.y,at=st+_e;if(d.overlap!==!0)for(let ot of a)ot.leftst&&ot.topit&&(it=rt?ot.top-et-2-j:ot.bottom+j+2);this.position=="absolute"?(g.style.top=it-o.parent.top+"px",g.style.left=st-o.parent.left+"px"):(g.style.top=it+"px",g.style.left=st+"px"),$&&($.style.left=`${_.left+(nt?tt.x:-tt.x)-(st+14-7)}px`),d.overlap!==!0&&a.push({left:st,top:it,right:at,bottom:it+et}),g.classList.toggle("cm-tooltip-above",rt),g.classList.toggle("cm-tooltip-below",!rt),d.positioned&&d.positioned()}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let o of this.manager.tooltipViews)o.dom.style.top=Outside}},{eventHandlers:{scroll(){this.maybeMeasure()}}}),baseTheme$4=EditorView.baseTheme({".cm-tooltip":{zIndex:100},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:`${7}px`,width:`${7*2}px`,position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:`${7}px solid transparent`,borderRight:`${7}px solid transparent`},".cm-tooltip-above &":{bottom:`-${7}px`,"&:before":{borderTop:`${7}px solid #bbb`},"&:after":{borderTop:`${7}px solid #f5f5f5`,bottom:"1px"}},".cm-tooltip-below &":{top:`-${7}px`,"&:before":{borderBottom:`${7}px solid #bbb`},"&:after":{borderBottom:`${7}px solid #f5f5f5`,top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),noOffset={x:0,y:0},showTooltip=Facet.define({enables:[tooltipPlugin,baseTheme$4]}),showHoverTooltip=Facet.define();class HoverTooltipHost{constructor(e){this.view=e,this.mounted=!1,this.dom=document.createElement("div"),this.dom.classList.add("cm-tooltip-hover"),this.manager=new TooltipViewManager(e,showHoverTooltip,s=>this.createHostedView(s))}static create(e){return new HoverTooltipHost(e)}createHostedView(e){let s=e.create(this.view);return s.dom.classList.add("cm-tooltip-section"),this.dom.appendChild(s.dom),this.mounted&&s.mount&&s.mount(this.view),s}mount(e){for(let s of this.manager.tooltipViews)s.mount&&s.mount(e);this.mounted=!0}positioned(){for(let e of this.manager.tooltipViews)e.positioned&&e.positioned()}update(e){this.manager.update(e)}}const showHoverTooltipHost=showTooltip.compute([showHoverTooltip],o=>{let e=o.facet(showHoverTooltip).filter(s=>s);return e.length===0?null:{pos:Math.min(...e.map(s=>s.pos)),end:Math.max(...e.filter(s=>s.end!=null).map(s=>s.end)),create:HoverTooltipHost.create,above:e[0].above,arrow:e.some(s=>s.arrow)}});class HoverPlugin{constructor(e,s,a,c,h){this.view=e,this.source=s,this.field=a,this.setHover=c,this.hoverTime=h,this.hoverTimeout=-1,this.restartTimeout=-1,this.pending=null,this.lastMove={x:0,y:0,target:e.dom,time:0},this.checkHover=this.checkHover.bind(this),e.dom.addEventListener("mouseleave",this.mouseleave=this.mouseleave.bind(this)),e.dom.addEventListener("mousemove",this.mousemove=this.mousemove.bind(this))}update(){this.pending&&(this.pending=null,clearTimeout(this.restartTimeout),this.restartTimeout=setTimeout(()=>this.startHover(),20))}get active(){return this.view.state.field(this.field)}checkHover(){if(this.hoverTimeout=-1,this.active)return;let e=Date.now()-this.lastMove.time;ea.bottom||e.xa.right+this.view.defaultCharacterWidth)return;let c=this.view.bidiSpans(this.view.state.doc.lineAt(s)).find(g=>g.from<=s&&g.to>=s),h=c&&c.dir==Direction.RTL?-1:1,d=this.source(this.view,s,e.x{this.pending==g&&(this.pending=null,_&&this.view.dispatch({effects:this.setHover.of(_)}))},_=>logException(this.view.state,_,"hover tooltip"))}else d&&this.view.dispatch({effects:this.setHover.of(d)})}mousemove(e){var s;this.lastMove={x:e.clientX,y:e.clientY,target:e.target,time:Date.now()},this.hoverTimeout<0&&(this.hoverTimeout=setTimeout(this.checkHover,this.hoverTime));let a=this.active;if(a&&!isInTooltip(this.lastMove.target)||this.pending){let{pos:c}=a||this.pending,h=(s=a==null?void 0:a.end)!==null&&s!==void 0?s:c;(c==h?this.view.posAtCoords(this.lastMove)!=c:!isOverRange(this.view,c,h,e.clientX,e.clientY,6))&&(this.view.dispatch({effects:this.setHover.of(null)}),this.pending=null)}}mouseleave(){clearTimeout(this.hoverTimeout),this.hoverTimeout=-1,this.active&&this.view.dispatch({effects:this.setHover.of(null)})}destroy(){clearTimeout(this.hoverTimeout),this.view.dom.removeEventListener("mouseleave",this.mouseleave),this.view.dom.removeEventListener("mousemove",this.mousemove)}}function isInTooltip(o){for(let e=o;e;e=e.parentNode)if(e.nodeType==1&&e.classList.contains("cm-tooltip"))return!0;return!1}function isOverRange(o,e,s,a,c,h){let d=document.createRange(),g=o.domAtPos(e),_=o.domAtPos(s);d.setEnd(_.node,_.offset),d.setStart(g.node,g.offset);let b=d.getClientRects();d.detach();for(let $=0;$showHoverTooltip.from(c)});return[a,ViewPlugin.define(c=>new HoverPlugin(c,o,a,s,e.hoverTime||300)),showHoverTooltipHost]}function getTooltip(o,e){let s=o.plugin(tooltipPlugin);if(!s)return null;let a=s.manager.tooltips.indexOf(e);return a<0?null:s.manager.tooltipViews[a]}const closeHoverTooltipEffect=StateEffect.define(),panelConfig=Facet.define({combine(o){let e,s;for(let a of o)e=e||a.topContainer,s=s||a.bottomContainer;return{topContainer:e,bottomContainer:s}}});function getPanel(o,e){let s=o.plugin(panelPlugin),a=s?s.specs.indexOf(e):-1;return a>-1?s.panels[a]:null}const panelPlugin=ViewPlugin.fromClass(class{constructor(o){this.input=o.state.facet(showPanel),this.specs=this.input.filter(s=>s),this.panels=this.specs.map(s=>s(o));let e=o.state.facet(panelConfig);this.top=new PanelGroup(o,!0,e.topContainer),this.bottom=new PanelGroup(o,!1,e.bottomContainer),this.top.sync(this.panels.filter(s=>s.top)),this.bottom.sync(this.panels.filter(s=>!s.top));for(let s of this.panels)s.dom.classList.add("cm-panel"),s.mount&&s.mount()}update(o){let e=o.state.facet(panelConfig);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new PanelGroup(o.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new PanelGroup(o.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let s=o.state.facet(showPanel);if(s!=this.input){let a=s.filter(_=>_),c=[],h=[],d=[],g=[];for(let _ of a){let b=this.specs.indexOf(_),$;b<0?($=_(o.view),g.push($)):($=this.panels[b],$.update&&$.update(o)),c.push($),($.top?h:d).push($)}this.specs=a,this.panels=c,this.top.sync(h),this.bottom.sync(d);for(let _ of g)_.dom.classList.add("cm-panel"),_.mount&&_.mount()}else for(let a of this.panels)a.update&&a.update(o)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:o=>EditorView.scrollMargins.of(e=>{let s=e.plugin(o);return s&&{top:s.top.scrollMargin(),bottom:s.bottom.scrollMargin()}})});class PanelGroup{constructor(e,s,a){this.view=e,this.top=s,this.container=a,this.dom=void 0,this.classes="",this.panels=[],this.syncClasses()}sync(e){for(let s of this.panels)s.destroy&&e.indexOf(s)<0&&s.destroy();this.panels=e,this.syncDOM()}syncDOM(){if(this.panels.length==0){this.dom&&(this.dom.remove(),this.dom=void 0);return}if(!this.dom){this.dom=document.createElement("div"),this.dom.className=this.top?"cm-panels cm-panels-top":"cm-panels cm-panels-bottom",this.dom.style[this.top?"top":"bottom"]="0";let s=this.container||this.view.dom;s.insertBefore(this.dom,this.top?s.firstChild:null)}let e=this.dom.firstChild;for(let s of this.panels)if(s.dom.parentNode==this.dom){for(;e!=s.dom;)e=rm(e);e=e.nextSibling}else this.dom.insertBefore(s.dom,e);for(;e;)e=rm(e)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(!(!this.container||this.classes==this.view.themeClasses)){for(let e of this.classes.split(" "))e&&this.container.classList.remove(e);for(let e of(this.classes=this.view.themeClasses).split(" "))e&&this.container.classList.add(e)}}}function rm(o){let e=o.nextSibling;return o.remove(),e}const showPanel=Facet.define({enables:panelPlugin});class GutterMarker extends RangeValue{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}GutterMarker.prototype.elementClass="";GutterMarker.prototype.toDOM=void 0;GutterMarker.prototype.mapMode=MapMode.TrackBefore;GutterMarker.prototype.startSide=GutterMarker.prototype.endSide=-1;GutterMarker.prototype.point=!0;const gutterLineClass=Facet.define(),defaults$1={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>RangeSet.empty,lineMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{}},activeGutters=Facet.define();function gutter(o){return[gutters(),activeGutters.of(Object.assign(Object.assign({},defaults$1),o))]}const unfixGutters=Facet.define({combine:o=>o.some(e=>e)});function gutters(o){let e=[gutterView];return o&&o.fixed===!1&&e.push(unfixGutters.of(!0)),e}const gutterView=ViewPlugin.fromClass(class{constructor(o){this.view=o,this.prevViewport=o.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight+"px",this.gutters=o.state.facet(activeGutters).map(e=>new SingleGutterView(o,e));for(let e of this.gutters)this.dom.appendChild(e.dom);this.fixed=!o.state.facet(unfixGutters),this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),o.scrollDOM.insertBefore(this.dom,o.contentDOM)}update(o){if(this.updateGutters(o)){let e=this.prevViewport,s=o.view.viewport,a=Math.min(e.to,s.to)-Math.max(e.from,s.from);this.syncGutters(a<(s.to-s.from)*.8)}o.geometryChanged&&(this.dom.style.minHeight=this.view.contentHeight+"px"),this.view.state.facet(unfixGutters)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":""),this.prevViewport=o.view.viewport}syncGutters(o){let e=this.dom.nextSibling;o&&this.dom.remove();let s=RangeSet.iter(this.view.state.facet(gutterLineClass),this.view.viewport.from),a=[],c=this.gutters.map(h=>new UpdateContext(h,this.view.viewport,-this.view.documentPadding.top));for(let h of this.view.viewportLineBlocks){let d;if(Array.isArray(h.type)){for(let g of h.type)if(g.type==BlockType.Text){d=g;break}}else d=h.type==BlockType.Text?h:void 0;if(!!d){a.length&&(a=[]),advanceCursor(s,a,h.from);for(let g of c)g.line(this.view,d,a)}}for(let h of c)h.finish();o&&this.view.scrollDOM.insertBefore(this.dom,e)}updateGutters(o){let e=o.startState.facet(activeGutters),s=o.state.facet(activeGutters),a=o.docChanged||o.heightChanged||o.viewportChanged||!RangeSet.eq(o.startState.facet(gutterLineClass),o.state.facet(gutterLineClass),o.view.viewport.from,o.view.viewport.to);if(e==s)for(let c of this.gutters)c.update(o)&&(a=!0);else{a=!0;let c=[];for(let h of s){let d=e.indexOf(h);d<0?c.push(new SingleGutterView(this.view,h)):(this.gutters[d].update(o),c.push(this.gutters[d]))}for(let h of this.gutters)h.dom.remove(),c.indexOf(h)<0&&h.destroy();for(let h of c)this.dom.appendChild(h.dom);this.gutters=c}return a}destroy(){for(let o of this.gutters)o.destroy();this.dom.remove()}},{provide:o=>EditorView.scrollMargins.of(e=>{let s=e.plugin(o);return!s||s.gutters.length==0||!s.fixed?null:e.textDirection==Direction.LTR?{left:s.dom.offsetWidth}:{right:s.dom.offsetWidth}})});function asArray(o){return Array.isArray(o)?o:[o]}function advanceCursor(o,e,s){for(;o.value&&o.from<=s;)o.from==s&&e.push(o.value),o.next()}class UpdateContext{constructor(e,s,a){this.gutter=e,this.height=a,this.localMarkers=[],this.i=0,this.cursor=RangeSet.iter(e.markers,s.from)}line(e,s,a){this.localMarkers.length&&(this.localMarkers=[]),advanceCursor(this.cursor,this.localMarkers,s.from);let c=a.length?this.localMarkers.concat(a):this.localMarkers,h=this.gutter.config.lineMarker(e,s,c);h&&c.unshift(h);let d=this.gutter;if(c.length==0&&!d.config.renderEmptyElements)return;let g=s.top-this.height;if(this.i==d.elements.length){let _=new GutterElement(e,s.height,g,c);d.elements.push(_),d.dom.appendChild(_.dom)}else d.elements[this.i].update(e,s.height,g,c);this.height=s.bottom,this.i++}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let s=e.elements.pop();e.dom.removeChild(s.dom),s.destroy()}}}class SingleGutterView{constructor(e,s){this.view=e,this.config=s,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let a in s.domEventHandlers)this.dom.addEventListener(a,c=>{let h=e.lineBlockAtHeight(c.clientY-e.documentTop);s.domEventHandlers[a](e,h,c)&&c.preventDefault()});this.markers=asArray(s.markers(e)),s.initialSpacer&&(this.spacer=new GutterElement(e,0,0,[s.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let s=this.markers;if(this.markers=asArray(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let c=this.config.updateSpacer(this.spacer.markers[0],e);c!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[c])}let a=e.view.viewport;return!RangeSet.eq(this.markers,s,a.from,a.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class GutterElement{constructor(e,s,a,c){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,s,a,c)}update(e,s,a,c){this.height!=s&&(this.dom.style.height=(this.height=s)+"px"),this.above!=a&&(this.dom.style.marginTop=(this.above=a)?a+"px":""),sameMarkers(this.markers,c)||this.setMarkers(e,c)}setMarkers(e,s){let a="cm-gutterElement",c=this.dom.firstChild;for(let h=0,d=0;;){let g=d,_=hh(g,_,b)||d(g,_,b):d}return a}})}});class NumberMarker extends GutterMarker{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function formatNumber(o,e){return o.state.facet(lineNumberConfig).formatNumber(e,o.state)}const lineNumberGutter=activeGutters.compute([lineNumberConfig],o=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(lineNumberMarkers)},lineMarker(e,s,a){return a.some(c=>c.toDOM)?null:new NumberMarker(formatNumber(e,e.state.doc.lineAt(s.from).number))},lineMarkerChange:e=>e.startState.facet(lineNumberConfig)!=e.state.facet(lineNumberConfig),initialSpacer(e){return new NumberMarker(formatNumber(e,maxLineNumber(e.state.doc.lines)))},updateSpacer(e,s){let a=formatNumber(s.view,maxLineNumber(s.view.state.doc.lines));return a==e.number?e:new NumberMarker(a)},domEventHandlers:o.facet(lineNumberConfig).domEventHandlers}));function lineNumbers(o={}){return[lineNumberConfig.of(o),gutters(),lineNumberGutter]}function maxLineNumber(o){let e=9;for(;e{let e=[],s=-1;for(let a of o.selection.ranges)if(a.empty){let c=o.doc.lineAt(a.head).from;c>s&&(s=c,e.push(activeLineGutterMarker.range(c)))}return RangeSet.of(e)});function highlightActiveLineGutter(){return activeLineGutterHighlighter}const DefaultBufferLength=1024;let nextPropID=0;class Range{constructor(e,s){this.from=e,this.to=s}}class NodeProp{constructor(e={}){this.id=nextPropID++,this.perNode=!!e.perNode,this.deserialize=e.deserialize||(()=>{throw new Error("This node type doesn't define a deserialize function")})}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=NodeType.match(e)),s=>{let a=e(s);return a===void 0?null:[this,a]}}}NodeProp.closedBy=new NodeProp({deserialize:o=>o.split(" ")});NodeProp.openedBy=new NodeProp({deserialize:o=>o.split(" ")});NodeProp.group=new NodeProp({deserialize:o=>o.split(" ")});NodeProp.contextHash=new NodeProp({perNode:!0});NodeProp.lookAhead=new NodeProp({perNode:!0});NodeProp.mounted=new NodeProp({perNode:!0});const noProps=Object.create(null);class NodeType{constructor(e,s,a,c=0){this.name=e,this.props=s,this.id=a,this.flags=c}static define(e){let s=e.props&&e.props.length?Object.create(null):noProps,a=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),c=new NodeType(e.name||"",s,e.id,a);if(e.props){for(let h of e.props)if(Array.isArray(h)||(h=h(c)),h){if(h[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");s[h[0].id]=h[1]}}return c}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let s=this.prop(NodeProp.group);return s?s.indexOf(e)>-1:!1}return this.id==e}static match(e){let s=Object.create(null);for(let a in e)for(let c of a.split(" "))s[c]=e[a];return a=>{for(let c=a.prop(NodeProp.group),h=-1;h<(c?c.length:0);h++){let d=s[h<0?a.name:c[h]];if(d)return d}}}}NodeType.none=new NodeType("",Object.create(null),0,8);class NodeSet{constructor(e){this.types=e;for(let s=0;s=c&&(d.type.isAnonymous||s(d)!==!1)){if(d.firstChild())continue;g=!0}for(;g&&a&&!d.type.isAnonymous&&a(d),!d.nextSibling();){if(!d.parent())return;g=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let s in this.props)e.push([+s,this.props[s]]);return e}balance(e={}){return this.children.length<=8?this:balanceRange(NodeType.none,this.children,this.positions,0,this.children.length,0,this.length,(s,a,c)=>new Tree(this.type,s,a,c,this.propValues),e.makeTree||((s,a,c)=>new Tree(NodeType.none,s,a,c)))}static build(e){return buildTree(e)}}Tree.empty=new Tree(NodeType.none,[],[],0);class FlatBufferCursor{constructor(e,s){this.buffer=e,this.index=s}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new FlatBufferCursor(this.buffer,this.index)}}class TreeBuffer{constructor(e,s,a){this.buffer=e,this.length=s,this.set=a}get type(){return NodeType.none}toString(){let e=[];for(let s=0;s0));_=d[_+3]);return g}slice(e,s,a,c){let h=this.buffer,d=new Uint16Array(s-e);for(let g=e,_=0;g=e&&se;case 1:return s<=e&&a>e;case 2:return a>e;case 4:return!0}}function enterUnfinishedNodesBefore(o,e){let s=o.childBefore(e);for(;s;){let a=s.lastChild;if(!a||a.to!=s.to)break;a.type.isError&&a.from==a.to?(o=s,s=a.prevSibling):s=a}return o}function resolveNode(o,e,s,a){for(var c;o.from==o.to||(s<1?o.from>=e:o.from>e)||(s>-1?o.to<=e:o.to0?g.length:-1;e!=b;e+=s){let $=g[e],j=_[e]+d.from;if(!!checkSide(c,a,j,j+$.length)){if($ instanceof TreeBuffer){if(h&IterMode.ExcludeBuffers)continue;let _e=$.findChild(0,$.buffer.length,s,a-j,c);if(_e>-1)return new BufferNode(new BufferContext(d,$,e,j),null,_e)}else if(h&IterMode.IncludeAnonymous||!$.type.isAnonymous||hasChild($)){let _e;if(!(h&IterMode.IgnoreMounts)&&$.props&&(_e=$.prop(NodeProp.mounted))&&!_e.overlay)return new TreeNode(_e.tree,j,e,d);let et=new TreeNode($,j,e,d);return h&IterMode.IncludeAnonymous||!et.type.isAnonymous?et:et.nextChild(s<0?$.children.length-1:0,s,a,c)}}}if(h&IterMode.IncludeAnonymous||!d.type.isAnonymous||(d.index>=0?e=d.index+s:e=s<0?-1:d._parent._tree.children.length,d=d._parent,!d))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}enter(e,s,a=0){let c;if(!(a&IterMode.IgnoreOverlays)&&(c=this._tree.prop(NodeProp.mounted))&&c.overlay){let h=e-this.from;for(let{from:d,to:g}of c.overlay)if((s>0?d<=h:d=h:g>h))return new TreeNode(c.tree,c.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,s,a)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}cursor(e=0){return new TreeCursor(this,e)}get tree(){return this._tree}toTree(){return this._tree}resolve(e,s=0){return resolveNode(this,e,s,!1)}resolveInner(e,s=0){return resolveNode(this,e,s,!0)}enterUnfinishedNodesBefore(e){return enterUnfinishedNodesBefore(this,e)}getChild(e,s=null,a=null){let c=getChildren(this,e,s,a);return c.length?c[0]:null}getChildren(e,s=null,a=null){return getChildren(this,e,s,a)}toString(){return this._tree.toString()}get node(){return this}matchContext(e){return matchNodeContext(this,e)}}function getChildren(o,e,s,a){let c=o.cursor(),h=[];if(!c.firstChild())return h;if(s!=null){for(;!c.type.is(s);)if(!c.nextSibling())return h}for(;;){if(a!=null&&c.type.is(a))return h;if(c.type.is(e)&&h.push(c.node),!c.nextSibling())return a==null?h:[]}}function matchNodeContext(o,e,s=e.length-1){for(let a=o.parent;s>=0;a=a.parent){if(!a)return!1;if(!a.type.isAnonymous){if(e[s]&&e[s]!=a.name)return!1;s--}}return!0}class BufferContext{constructor(e,s,a,c){this.parent=e,this.buffer=s,this.index=a,this.start=c}}class BufferNode{constructor(e,s,a){this.context=e,this._parent=s,this.index=a,this.type=e.buffer.set.types[e.buffer.buffer[a]]}get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}child(e,s,a){let{buffer:c}=this.context,h=c.findChild(this.index+4,c.buffer[this.index+3],e,s-this.context.start,a);return h<0?null:new BufferNode(this.context,this,h)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}enter(e,s,a=0){if(a&IterMode.ExcludeBuffers)return null;let{buffer:c}=this.context,h=c.findChild(this.index+4,c.buffer[this.index+3],s>0?1:-1,e-this.context.start,s);return h<0?null:new BufferNode(this.context,this,h)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,s=e.buffer[this.index+3];return s<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new BufferNode(this.context,this._parent,s):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,s=this._parent?this._parent.index+4:0;return this.index==s?this.externalSibling(-1):new BufferNode(this.context,this._parent,e.findChild(s,this.index,-1,0,4))}cursor(e=0){return new TreeCursor(this,e)}get tree(){return null}toTree(){let e=[],s=[],{buffer:a}=this.context,c=this.index+4,h=a.buffer[this.index+3];if(h>c){let d=a.buffer[this.index+1],g=a.buffer[this.index+2];e.push(a.slice(c,h,d,g)),s.push(0)}return new Tree(this.type,e,s,this.to-this.from)}resolve(e,s=0){return resolveNode(this,e,s,!1)}resolveInner(e,s=0){return resolveNode(this,e,s,!0)}enterUnfinishedNodesBefore(e){return enterUnfinishedNodesBefore(this,e)}toString(){return this.context.buffer.childString(this.index)}getChild(e,s=null,a=null){let c=getChildren(this,e,s,a);return c.length?c[0]:null}getChildren(e,s=null,a=null){return getChildren(this,e,s,a)}get node(){return this}matchContext(e){return matchNodeContext(this,e)}}class TreeCursor{constructor(e,s=0){if(this.mode=s,this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,e instanceof TreeNode)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let a=e._parent;a;a=a._parent)this.stack.unshift(a.index);this.bufferNode=e,this.yieldBuf(e.index)}}get name(){return this.type.name}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,s){this.index=e;let{start:a,buffer:c}=this.buffer;return this.type=s||c.set.types[c.buffer[e]],this.from=a+c.buffer[e+1],this.to=a+c.buffer[e+2],!0}yield(e){return e?e instanceof TreeNode?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,s,a){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,s,a,this.mode));let{buffer:c}=this.buffer,h=c.findChild(this.index+4,c.buffer[this.index+3],e,s-this.buffer.start,a);return h<0?!1:(this.stack.push(this.index),this.yieldBuf(h))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,s,a=this.mode){return this.buffer?a&IterMode.ExcludeBuffers?!1:this.enterChild(1,e,s):this.yield(this._tree.enter(e,s,a))}parent(){if(!this.buffer)return this.yieldNode(this.mode&IterMode.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&IterMode.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:s}=this.buffer,a=this.stack.length-1;if(e<0){let c=a<0?0:this.stack[a]+4;if(this.index!=c)return this.yieldBuf(s.findChild(c,this.index,-1,0,4))}else{let c=s.buffer[this.index+3];if(c<(a<0?s.buffer.length:s.buffer[this.stack[a]+3]))return this.yieldBuf(c)}return a<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let s,a,{buffer:c}=this;if(c){if(e>0){if(this.index-1)for(let h=s+e,d=e<0?-1:a._tree.children.length;h!=d;h+=e){let g=a._tree.children[h];if(this.mode&IterMode.IncludeAnonymous||g instanceof TreeBuffer||!g.type.isAnonymous||hasChild(g))return!1}return!0}move(e,s){if(s&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,s=0){for(;(this.from==this.to||(s<1?this.from>=e:this.from>e)||(s>-1?this.to<=e:this.to=0;){for(let d=e;d;d=d._parent)if(d.index==c){if(c==this.index)return d;s=d,a=h+1;break e}c=this.stack[--h]}}for(let c=a;c=0;h--){if(h<0)return matchNodeContext(this.node,e,c);let d=a[s.buffer[this.stack[h]]];if(!d.isAnonymous){if(e[c]&&e[c]!=d.name)return!1;c--}}return!0}}function hasChild(o){return o.children.some(e=>e instanceof TreeBuffer||!e.type.isAnonymous||hasChild(e))}function buildTree(o){var e;let{buffer:s,nodeSet:a,maxBufferLength:c=DefaultBufferLength,reused:h=[],minRepeatType:d=a.types.length}=o,g=Array.isArray(s)?new FlatBufferCursor(s,s.length):s,_=a.types,b=0,$=0;function j(ot,ut,ct,ht,lt){let{id:pt,start:ft,end:gt,size:yt}=g,mt=$;for(;yt<0;)if(g.next(),yt==-1){let dt=h[pt];ct.push(dt),ht.push(ft-ot);return}else if(yt==-3){b=pt;return}else if(yt==-4){$=pt;return}else throw new RangeError(`Unrecognized record size: ${yt}`);let Et=_[pt],Ot,St,At=ft-ot;if(gt-ft<=c&&(St=nt(g.pos-ut,lt))){let dt=new Uint16Array(St.size-St.skip),Dt=g.pos-St.size,Ct=dt.length;for(;g.pos>Dt;)Ct=st(St.start,dt,Ct);Ot=new TreeBuffer(dt,gt-St.start,a),At=St.start-ot}else{let dt=g.pos-yt;g.next();let Dt=[],Ct=[],xt=pt>=d?pt:-1,Tt=0,kt=gt;for(;g.pos>dt;)xt>=0&&g.id==xt&&g.size>=0?(g.end<=kt-c&&(et(Dt,Ct,ft,Tt,g.end,kt,xt,mt),Tt=Dt.length,kt=g.end),g.next()):j(ft,dt,Dt,Ct,xt);if(xt>=0&&Tt>0&&Tt-1&&Tt>0){let _t=_e(Et);Ot=balanceRange(Et,Dt,Ct,0,Dt.length,0,gt-ft,_t,_t)}else Ot=tt(Et,Dt,Ct,gt-ft,mt-gt)}ct.push(Ot),ht.push(At)}function _e(ot){return(ut,ct,ht)=>{let lt=0,pt=ut.length-1,ft,gt;if(pt>=0&&(ft=ut[pt])instanceof Tree){if(!pt&&ft.type==ot&&ft.length==ht)return ft;(gt=ft.prop(NodeProp.lookAhead))&&(lt=ct[pt]+ft.length+gt)}return tt(ot,ut,ct,ht,lt)}}function et(ot,ut,ct,ht,lt,pt,ft,gt){let yt=[],mt=[];for(;ot.length>ht;)yt.push(ot.pop()),mt.push(ut.pop()+ct-lt);ot.push(tt(a.types[ft],yt,mt,pt-lt,gt-pt)),ut.push(lt-ct)}function tt(ot,ut,ct,ht,lt=0,pt){if(b){let ft=[NodeProp.contextHash,b];pt=pt?[ft].concat(pt):[ft]}if(lt>25){let ft=[NodeProp.lookAhead,lt];pt=pt?[ft].concat(pt):[ft]}return new Tree(ot,ut,ct,ht,pt)}function nt(ot,ut){let ct=g.fork(),ht=0,lt=0,pt=0,ft=ct.end-c,gt={size:0,start:0,skip:0};e:for(let yt=ct.pos-ot;ct.pos>yt;){let mt=ct.size;if(ct.id==ut&&mt>=0){gt.size=ht,gt.start=lt,gt.skip=pt,pt+=4,ht+=4,ct.next();continue}let Et=ct.pos-mt;if(mt<0||Et=d?4:0,St=ct.start;for(ct.next();ct.pos>Et;){if(ct.size<0)if(ct.size==-3)Ot+=4;else break e;else ct.id>=d&&(Ot+=4);ct.next()}lt=St,ht+=mt,pt+=Ot}return(ut<0||ht==ot)&&(gt.size=ht,gt.start=lt,gt.skip=pt),gt.size>4?gt:void 0}function st(ot,ut,ct){let{id:ht,start:lt,end:pt,size:ft}=g;if(g.next(),ft>=0&&ht4){let yt=g.pos-(ft-4);for(;g.pos>yt;)ct=st(ot,ut,ct)}ut[--ct]=gt,ut[--ct]=pt-ot,ut[--ct]=lt-ot,ut[--ct]=ht}else ft==-3?b=ht:ft==-4&&($=ht);return ct}let rt=[],it=[];for(;g.pos>0;)j(o.start||0,o.bufferStart||0,rt,it,-1);let at=(e=o.length)!==null&&e!==void 0?e:rt.length?it[0]+rt[0].length:0;return new Tree(_[o.topID],rt.reverse(),it.reverse(),at)}const nodeSizeCache=new WeakMap;function nodeSize(o,e){if(!o.isAnonymous||e instanceof TreeBuffer||e.type!=o)return 1;let s=nodeSizeCache.get(e);if(s==null){s=1;for(let a of e.children){if(a.type!=o||!(a instanceof Tree)){s=1;break}s+=nodeSize(o,a)}nodeSizeCache.set(e,s)}return s}function balanceRange(o,e,s,a,c,h,d,g,_){let b=0;for(let tt=a;tt=$)break;ct+=ht}if(at==ot+1){if(ct>$){let ht=tt[ot];et(ht.children,ht.positions,0,ht.children.length,nt[ot]+it);continue}j.push(tt[ot])}else{let ht=nt[at-1]+tt[at-1].length-ut;j.push(balanceRange(o,tt,nt,ot,at,ut,ht,null,_))}_e.push(ut+it-h)}}return et(e,s,a,c,0),(g||_)(j,_e,d)}class NodeWeakMap{constructor(){this.map=new WeakMap}setBuffer(e,s,a){let c=this.map.get(e);c||this.map.set(e,c=new Map),c.set(s,a)}getBuffer(e,s){let a=this.map.get(e);return a&&a.get(s)}set(e,s){e instanceof BufferNode?this.setBuffer(e.context.buffer,e.index,s):e instanceof TreeNode&&this.map.set(e.tree,s)}get(e){return e instanceof BufferNode?this.getBuffer(e.context.buffer,e.index):e instanceof TreeNode?this.map.get(e.tree):void 0}cursorSet(e,s){e.buffer?this.setBuffer(e.buffer.buffer,e.index,s):this.map.set(e.tree,s)}cursorGet(e){return e.buffer?this.getBuffer(e.buffer.buffer,e.index):this.map.get(e.tree)}}class TreeFragment{constructor(e,s,a,c,h=!1,d=!1){this.from=e,this.to=s,this.tree=a,this.offset=c,this.open=(h?1:0)|(d?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,s=[],a=!1){let c=[new TreeFragment(0,e.length,e,0,!1,a)];for(let h of s)h.to>e.length&&c.push(h);return c}static applyChanges(e,s,a=128){if(!s.length)return e;let c=[],h=1,d=e.length?e[0]:null;for(let g=0,_=0,b=0;;g++){let $=g=a)for(;d&&d.from=_e.from||j<=_e.to||b){let et=Math.max(_e.from,_)-b,tt=Math.min(_e.to,j)-b;_e=et>=tt?null:new TreeFragment(et,tt,_e.tree,_e.offset+b,g>0,!!$)}if(_e&&c.push(_e),d.to>j)break;d=hnew Range(c.from,c.to)):[new Range(0,0)]:[new Range(0,e.length)],this.createParse(e,s||[],a)}parse(e,s,a){let c=this.startParse(e,s,a);for(;;){let h=c.advance();if(h)return h}}}class StringInput{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,s){return this.string.slice(e,s)}}new NodeProp({perNode:!0});let nextTagID=0;class Tag{constructor(e,s,a){this.set=e,this.base=s,this.modified=a,this.id=nextTagID++}static define(e){if(e!=null&&e.base)throw new Error("Can not derive from a modified tag");let s=new Tag([],null,[]);if(s.set.push(s),e)for(let a of e.set)s.set.push(a);return s}static defineModifier(){let e=new Modifier;return s=>s.modified.indexOf(e)>-1?s:Modifier.get(s.base||s,s.modified.concat(e).sort((a,c)=>a.id-c.id))}}let nextModifierID=0;class Modifier{constructor(){this.instances=[],this.id=nextModifierID++}static get(e,s){if(!s.length)return e;let a=s[0].instances.find(g=>g.base==e&&sameArray(s,g.modified));if(a)return a;let c=[],h=new Tag(c,e,s);for(let g of s)g.instances.push(h);let d=permute(s);for(let g of e.set)for(let _ of d)c.push(Modifier.get(g,_));return h}}function sameArray(o,e){return o.length==e.length&&o.every((s,a)=>s==e[a])}function permute(o){let e=[o];for(let s=0;s0&&j+3==c.length){d=1;break}let _e=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(g);if(!_e)throw new RangeError("Invalid path: "+c);if(h.push(_e[0]=="*"?"":_e[0][0]=='"'?JSON.parse(_e[0]):_e[0]),j+=_e[0].length,j==c.length)break;let et=c[j++];if(j==c.length&&et=="!"){d=0;break}if(et!="/")throw new RangeError("Invalid path: "+c);g=c.slice(j)}let _=h.length-1,b=h[_];if(!b)throw new RangeError("Invalid path: "+c);let $=new Rule(a,d,_>0?h.slice(0,_):null);e[b]=$.sort(e[b])}}return ruleNodeProp.add(e)}const ruleNodeProp=new NodeProp;class Rule{constructor(e,s,a,c){this.tags=e,this.mode=s,this.context=a,this.next=c}sort(e){return!e||e.depth{let d=c;for(let g of h)for(let _ of g.set){let b=s[_.id];if(b){d=d?d+" "+b:b;break}}return d},scope:a}}function highlightTags(o,e){let s=null;for(let a of o){let c=a.style(e);c&&(s=s?s+" "+c:c)}return s}function highlightTree(o,e,s,a=0,c=o.length){let h=new HighlightBuilder(a,Array.isArray(e)?e:[e],s);h.highlightRange(o.cursor(),a,c,"",h.highlighters),h.flush(c)}class HighlightBuilder{constructor(e,s,a){this.at=e,this.highlighters=s,this.span=a,this.class=""}startSpan(e,s){s!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=s)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,s,a,c,h){let{type:d,from:g,to:_}=e;if(g>=a||_<=s)return;d.isTop&&(h=this.highlighters.filter(et=>!et.scope||et.scope(d)));let b=c,$=d.prop(ruleNodeProp),j=!1;for(;$;){if(!$.context||e.matchContext($.context)){let et=highlightTags(h,$.tags);et&&(b&&(b+=" "),b+=et,$.mode==1?c+=(c?" ":"")+et:$.mode==0&&(j=!0));break}$=$.next}if(this.startSpan(e.from,b),j)return;let _e=e.tree&&e.tree.prop(NodeProp.mounted);if(_e&&_e.overlay){let et=e.node.enter(_e.overlay[0].from+g,1),tt=this.highlighters.filter(st=>!st.scope||st.scope(_e.tree.type)),nt=e.firstChild();for(let st=0,rt=g;;st++){let it=st<_e.overlay.length?_e.overlay[st]:null,at=it?it.from+g:_,ot=Math.max(s,rt),ut=Math.min(a,at);if(ot=at||!e.nextSibling())););if(!it||at>a)break;rt=it.to+g,rt>s&&(this.highlightRange(et.cursor(),Math.max(s,it.from+g),Math.min(a,rt),c,tt),this.startSpan(rt,b))}nt&&e.parent()}else if(e.firstChild()){do if(!(e.to<=s)){if(e.from>=a)break;this.highlightRange(e,s,a,c,h),this.startSpan(Math.min(a,e.to),b)}while(e.nextSibling());e.parent()}}}const t=Tag.define,comment=t(),name=t(),typeName=t(name),propertyName=t(name),literal=t(),string=t(literal),number=t(literal),content=t(),heading=t(content),keyword=t(),operator=t(),punctuation=t(),bracket=t(punctuation),meta=t(),tags={comment,lineComment:t(comment),blockComment:t(comment),docComment:t(comment),name,variableName:t(name),typeName,tagName:t(typeName),propertyName,attributeName:t(propertyName),className:t(name),labelName:t(name),namespace:t(name),macroName:t(name),literal,string,docString:t(string),character:t(string),attributeValue:t(string),number,integer:t(number),float:t(number),bool:t(literal),regexp:t(literal),escape:t(literal),color:t(literal),url:t(literal),keyword,self:t(keyword),null:t(keyword),atom:t(keyword),unit:t(keyword),modifier:t(keyword),operatorKeyword:t(keyword),controlKeyword:t(keyword),definitionKeyword:t(keyword),moduleKeyword:t(keyword),operator,derefOperator:t(operator),arithmeticOperator:t(operator),logicOperator:t(operator),bitwiseOperator:t(operator),compareOperator:t(operator),updateOperator:t(operator),definitionOperator:t(operator),typeOperator:t(operator),controlOperator:t(operator),punctuation,separator:t(punctuation),bracket,angleBracket:t(bracket),squareBracket:t(bracket),paren:t(bracket),brace:t(bracket),content,heading,heading1:t(heading),heading2:t(heading),heading3:t(heading),heading4:t(heading),heading5:t(heading),heading6:t(heading),contentSeparator:t(content),list:t(content),quote:t(content),emphasis:t(content),strong:t(content),link:t(content),monospace:t(content),strikethrough:t(content),inserted:t(),deleted:t(),changed:t(),invalid:t(),meta,documentMeta:t(meta),annotation:t(meta),processingInstruction:t(meta),definition:Tag.defineModifier(),constant:Tag.defineModifier(),function:Tag.defineModifier(),standard:Tag.defineModifier(),local:Tag.defineModifier(),special:Tag.defineModifier()};tagHighlighter([{tag:tags.link,class:"tok-link"},{tag:tags.heading,class:"tok-heading"},{tag:tags.emphasis,class:"tok-emphasis"},{tag:tags.strong,class:"tok-strong"},{tag:tags.keyword,class:"tok-keyword"},{tag:tags.atom,class:"tok-atom"},{tag:tags.bool,class:"tok-bool"},{tag:tags.url,class:"tok-url"},{tag:tags.labelName,class:"tok-labelName"},{tag:tags.inserted,class:"tok-inserted"},{tag:tags.deleted,class:"tok-deleted"},{tag:tags.literal,class:"tok-literal"},{tag:tags.string,class:"tok-string"},{tag:tags.number,class:"tok-number"},{tag:[tags.regexp,tags.escape,tags.special(tags.string)],class:"tok-string2"},{tag:tags.variableName,class:"tok-variableName"},{tag:tags.local(tags.variableName),class:"tok-variableName tok-local"},{tag:tags.definition(tags.variableName),class:"tok-variableName tok-definition"},{tag:tags.special(tags.variableName),class:"tok-variableName2"},{tag:tags.definition(tags.propertyName),class:"tok-propertyName tok-definition"},{tag:tags.typeName,class:"tok-typeName"},{tag:tags.namespace,class:"tok-namespace"},{tag:tags.className,class:"tok-className"},{tag:tags.macroName,class:"tok-macroName"},{tag:tags.propertyName,class:"tok-propertyName"},{tag:tags.operator,class:"tok-operator"},{tag:tags.comment,class:"tok-comment"},{tag:tags.meta,class:"tok-meta"},{tag:tags.invalid,class:"tok-invalid"},{tag:tags.punctuation,class:"tok-punctuation"}]);var _a;const languageDataProp=new NodeProp;function defineLanguageFacet(o){return Facet.define({combine:o?e=>e.concat(o):void 0})}class Language{constructor(e,s,a=[]){this.data=e,EditorState.prototype.hasOwnProperty("tree")||Object.defineProperty(EditorState.prototype,"tree",{get(){return syntaxTree(this)}}),this.parser=s,this.extension=[language.of(this),EditorState.languageData.of((c,h,d)=>c.facet(languageDataFacetAt(c,h,d)))].concat(a)}isActiveAt(e,s,a=-1){return languageDataFacetAt(e,s,a)==this.data}findRegions(e){let s=e.facet(language);if((s==null?void 0:s.data)==this.data)return[{from:0,to:e.doc.length}];if(!s||!s.allowsNesting)return[];let a=[],c=(h,d)=>{if(h.prop(languageDataProp)==this.data){a.push({from:d,to:d+h.length});return}let g=h.prop(NodeProp.mounted);if(g){if(g.tree.prop(languageDataProp)==this.data){if(g.overlay)for(let _ of g.overlay)a.push({from:_.from+d,to:_.to+d});else a.push({from:d,to:d+h.length});return}else if(g.overlay){let _=a.length;if(c(g.tree,g.overlay[0].from+d),a.length>_)return}}for(let _=0;_a.isTop?s:void 0)]}))}configure(e){return new LRLanguage(this.data,this.parser.configure(e))}get allowsNesting(){return this.parser.hasWrappers()}}function syntaxTree(o){let e=o.field(Language.state,!1);return e?e.tree:Tree.empty}class DocInput{constructor(e,s=e.length){this.doc=e,this.length=s,this.cursorPos=0,this.string="",this.cursor=e.iter()}syncTo(e){return this.string=this.cursor.next(e-this.cursorPos).value,this.cursorPos=e+this.string.length,this.cursorPos-this.string.length}chunk(e){return this.syncTo(e),this.string}get lineChunks(){return!0}read(e,s){let a=this.cursorPos-this.string.length;return e=this.cursorPos?this.doc.sliceString(e,s):this.string.slice(e-a,s-a)}}let currentContext=null;class ParseContext{constructor(e,s,a=[],c,h,d,g,_){this.parser=e,this.state=s,this.fragments=a,this.tree=c,this.treeLen=h,this.viewport=d,this.skipped=g,this.scheduleOn=_,this.parse=null,this.tempSkipped=[]}static create(e,s,a){return new ParseContext(e,s,[],Tree.empty,0,a,[],null)}startParse(){return this.parser.startParse(new DocInput(this.state.doc),this.fragments)}work(e,s){return s!=null&&s>=this.state.doc.length&&(s=void 0),this.tree!=Tree.empty&&this.isDone(s!=null?s:this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var a;if(typeof e=="number"){let c=Date.now()+e;e=()=>Date.now()>c}for(this.parse||(this.parse=this.startParse()),s!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>s)&&s=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(s=this.parse.advance()););}),this.treeLen=e,this.tree=s,this.fragments=this.withoutTempSkipped(TreeFragment.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let s=currentContext;currentContext=this;try{return e()}finally{currentContext=s}}withoutTempSkipped(e){for(let s;s=this.tempSkipped.pop();)e=cutFragments(e,s.from,s.to);return e}changes(e,s){let{fragments:a,tree:c,treeLen:h,viewport:d,skipped:g}=this;if(this.takeTree(),!e.empty){let _=[];if(e.iterChangedRanges((b,$,j,_e)=>_.push({fromA:b,toA:$,fromB:j,toB:_e})),a=TreeFragment.applyChanges(a,_),c=Tree.empty,h=0,d={from:e.mapPos(d.from,-1),to:e.mapPos(d.to,1)},this.skipped.length){g=[];for(let b of this.skipped){let $=e.mapPos(b.from,1),j=e.mapPos(b.to,-1);$e.from&&(this.fragments=cutFragments(this.fragments,c,h),this.skipped.splice(a--,1))}return this.skipped.length>=s?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,s){this.skipped.push({from:e,to:s})}static getSkippingParser(e){return new class extends Parser{createParse(s,a,c){let h=c[0].from,d=c[c.length-1].to;return{parsedPos:h,advance(){let _=currentContext;if(_){for(let b of c)_.tempSkipped.push(b);e&&(_.scheduleOn=_.scheduleOn?Promise.all([_.scheduleOn,e]):e)}return this.parsedPos=d,new Tree(NodeType.none,[],[],d-h)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let s=this.fragments;return this.treeLen>=e&&s.length&&s[0].from==0&&s[0].to>=e}static get(){return currentContext}}function cutFragments(o,e,s){return TreeFragment.applyChanges(o,[{fromA:e,toA:s,fromB:e,toB:s}])}class LanguageState{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let s=this.context.changes(e.changes,e.state),a=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),s.viewport.to);return s.work(20,a)||s.takeTree(),new LanguageState(s)}static init(e){let s=Math.min(3e3,e.doc.length),a=ParseContext.create(e.facet(language).parser,e,{from:0,to:s});return a.work(20,s)||a.takeTree(),new LanguageState(a)}}Language.state=StateField.define({create:LanguageState.init,update(o,e){for(let s of e.effects)if(s.is(Language.setState))return s.value;return e.startState.facet(language)!=e.state.facet(language)?LanguageState.init(e.state):o.apply(e)}});let requestIdle=o=>{let e=setTimeout(()=>o(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(requestIdle=o=>{let e=-1,s=setTimeout(()=>{e=requestIdleCallback(o,{timeout:500-100})},100);return()=>e<0?clearTimeout(s):cancelIdleCallback(e)});const isInputPending=typeof navigator<"u"&&((_a=navigator.scheduling)===null||_a===void 0?void 0:_a.isInputPending)?()=>navigator.scheduling.isInputPending():null,parseWorker=ViewPlugin.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let s=this.view.state.field(Language.state).context;(s.updateViewport(e.view.viewport)||this.view.viewport.to>s.treeLen)&&this.scheduleWork(),e.docChanged&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(s)}scheduleWork(){if(this.working)return;let{state:e}=this.view,s=e.field(Language.state);(s.tree!=s.context.tree||!s.context.isDone(e.doc.length))&&(this.working=requestIdle(this.work))}work(e){this.working=null;let s=Date.now();if(this.chunkEndc+1e3,_=h.context.work(()=>isInputPending&&isInputPending()||Date.now()>d,c+(g?0:1e5));this.chunkBudget-=Date.now()-s,(_||this.chunkBudget<=0)&&(h.context.takeTree(),this.view.dispatch({effects:Language.setState.of(new LanguageState(h.context))})),this.chunkBudget>0&&!(_&&!g)&&this.scheduleWork(),this.checkAsyncSchedule(h.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(s=>logException(this.view.state,s)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),language=Facet.define({combine(o){return o.length?o[0]:null},enables:[Language.state,parseWorker]});class LanguageSupport{constructor(e,s=[]){this.language=e,this.support=s,this.extension=[e,s]}}const indentService=Facet.define(),indentUnit=Facet.define({combine:o=>{if(!o.length)return" ";if(!/^(?: +|\t+)$/.test(o[0]))throw new Error("Invalid indent unit: "+JSON.stringify(o[0]));return o[0]}});function getIndentUnit(o){let e=o.facet(indentUnit);return e.charCodeAt(0)==9?o.tabSize*e.length:e.length}function indentString(o,e){let s="",a=o.tabSize;if(o.facet(indentUnit).charCodeAt(0)==9)for(;e>=a;)s+=" ",e-=a;for(let c=0;c=a.from&&c<=a.to?h&&c==e?{text:"",from:e}:(s<0?c-1&&(h+=d-this.countColumn(a,a.search(/\S|$/))),h}countColumn(e,s=e.length){return countColumn(e,this.state.tabSize,s)}lineIndent(e,s=1){let{text:a,from:c}=this.lineAt(e,s),h=this.options.overrideIndentation;if(h){let d=h(c);if(d>-1)return d}return this.countColumn(a,a.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const indentNodeProp=new NodeProp;function syntaxIndentation(o,e,s){return indentFrom(e.resolveInner(s).enterUnfinishedNodesBefore(s),s,o)}function ignoreClosed(o){return o.pos==o.options.simulateBreak&&o.options.simulateDoubleBreak}function indentStrategy(o){let e=o.type.prop(indentNodeProp);if(e)return e;let s=o.firstChild,a;if(s&&(a=s.type.prop(NodeProp.closedBy))){let c=o.lastChild,h=c&&a.indexOf(c.name)>-1;return d=>delimitedStrategy(d,!0,1,void 0,h&&!ignoreClosed(d)?c.from:void 0)}return o.parent==null?topIndent:null}function indentFrom(o,e,s){for(;o;o=o.parent){let a=indentStrategy(o);if(a)return a(TreeIndentContext.create(s,e,o))}return null}function topIndent(){return 0}class TreeIndentContext extends IndentContext{constructor(e,s,a){super(e.state,e.options),this.base=e,this.pos=s,this.node=a}static create(e,s,a){return new TreeIndentContext(e,s,a)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){let e=this.state.doc.lineAt(this.node.from);for(;;){let s=this.node.resolve(e.from);for(;s.parent&&s.parent.from==s.from;)s=s.parent;if(isParent(s,this.node))break;e=this.state.doc.lineAt(s.from)}return this.lineIndent(e.from)}continue(){let e=this.node.parent;return e?indentFrom(e,this.pos,this.base):0}}function isParent(o,e){for(let s=e;s;s=s.parent)if(o==s)return!0;return!1}function bracketedAligned(o){let e=o.node,s=e.childAfter(e.from),a=e.lastChild;if(!s)return null;let c=o.options.simulateBreak,h=o.state.doc.lineAt(s.from),d=c==null||c<=h.from?h.to:Math.min(h.to,c);for(let g=s.to;;){let _=e.childAfter(g);if(!_||_==a)return null;if(!_.type.isSkipped)return _.fromdelimitedStrategy(a,e,s,o)}function delimitedStrategy(o,e,s,a,c){let h=o.textAfter,d=h.match(/^\s*/)[0].length,g=a&&h.slice(d,d+a.length)==a||c==o.pos+d,_=e?bracketedAligned(o):null;return _?g?o.column(_.from):o.column(_.to):o.baseIndent+(g?0:o.unit*s)}const flatIndent=o=>o.baseIndent;function continuedIndent({except:o,units:e=1}={}){return s=>{let a=o&&o.test(s.textAfter);return s.baseIndent+(a?0:e*s.unit)}}const DontIndentBeyond=200;function indentOnInput(){return EditorState.transactionFilter.of(o=>{if(!o.docChanged||!o.isUserEvent("input.type")&&!o.isUserEvent("input.complete"))return o;let e=o.startState.languageDataAt("indentOnInput",o.startState.selection.main.head);if(!e.length)return o;let s=o.newDoc,{head:a}=o.newSelection.main,c=s.lineAt(a);if(a>c.from+DontIndentBeyond)return o;let h=s.sliceString(c.from,a);if(!e.some(b=>b.test(h)))return o;let{state:d}=o,g=-1,_=[];for(let{head:b}of d.selection.ranges){let $=d.doc.lineAt(b);if($.from==g)continue;g=$.from;let j=getIndentation(d,$.from);if(j==null)continue;let _e=/^\s*/.exec($.text)[0],et=indentString(d,j);_e!=et&&_.push({from:$.from,to:$.from+_e.length,insert:et})}return _.length?[o,{changes:_,sequential:!0}]:o})}const foldService=Facet.define(),foldNodeProp=new NodeProp;function foldInside(o){let e=o.firstChild,s=o.lastChild;return e&&e.tos)continue;if(h&&d.from=e&&_.to>s&&(h=_)}}return h}function isUnfinished(o){let e=o.lastChild;return e&&e.to==o.to&&e.type.isError}function foldable(o,e,s){for(let a of o.facet(foldService)){let c=a(o,e,s);if(c)return c}return syntaxFolding(o,e,s)}function mapRange(o,e){let s=e.mapPos(o.from,1),a=e.mapPos(o.to,-1);return s>=a?void 0:{from:s,to:a}}const foldEffect=StateEffect.define({map:mapRange}),unfoldEffect=StateEffect.define({map:mapRange});function selectedLines(o){let e=[];for(let{head:s}of o.state.selection.ranges)e.some(a=>a.from<=s&&a.to>=s)||e.push(o.lineBlockAt(s));return e}const foldState=StateField.define({create(){return Decoration.none},update(o,e){o=o.map(e.changes);for(let s of e.effects)s.is(foldEffect)&&!foldExists(o,s.value.from,s.value.to)?o=o.update({add:[foldWidget.range(s.value.from,s.value.to)]}):s.is(unfoldEffect)&&(o=o.update({filter:(a,c)=>s.value.from!=a||s.value.to!=c,filterFrom:s.value.from,filterTo:s.value.to}));if(e.selection){let s=!1,{head:a}=e.selection.main;o.between(a,a,(c,h)=>{ca&&(s=!0)}),s&&(o=o.update({filterFrom:a,filterTo:a,filter:(c,h)=>h<=a||c>=a}))}return o},provide:o=>EditorView.decorations.from(o),toJSON(o,e){let s=[];return o.between(0,e.doc.length,(a,c)=>{s.push(a,c)}),s},fromJSON(o){if(!Array.isArray(o)||o.length%2)throw new RangeError("Invalid JSON for fold state");let e=[];for(let s=0;s{(!c||c.from>h)&&(c={from:h,to:d})}),c}function foldExists(o,e,s){let a=!1;return o.between(e,e,(c,h)=>{c==e&&h==s&&(a=!0)}),a}function maybeEnable(o,e){return o.field(foldState,!1)?e:e.concat(StateEffect.appendConfig.of(codeFolding()))}const foldCode=o=>{for(let e of selectedLines(o)){let s=foldable(o.state,e.from,e.to);if(s)return o.dispatch({effects:maybeEnable(o.state,[foldEffect.of(s),announceFold(o,s)])}),!0}return!1},unfoldCode=o=>{if(!o.state.field(foldState,!1))return!1;let e=[];for(let s of selectedLines(o)){let a=findFold(o.state,s.from,s.to);a&&e.push(unfoldEffect.of(a),announceFold(o,a,!1))}return e.length&&o.dispatch({effects:e}),e.length>0};function announceFold(o,e,s=!0){let a=o.state.doc.lineAt(e.from).number,c=o.state.doc.lineAt(e.to).number;return EditorView.announce.of(`${o.state.phrase(s?"Folded lines":"Unfolded lines")} ${a} ${o.state.phrase("to")} ${c}.`)}const foldAll=o=>{let{state:e}=o,s=[];for(let a=0;a{let e=o.state.field(foldState,!1);if(!e||!e.size)return!1;let s=[];return e.between(0,o.state.doc.length,(a,c)=>{s.push(unfoldEffect.of({from:a,to:c}))}),o.dispatch({effects:s}),!0},foldKeymap=[{key:"Ctrl-Shift-[",mac:"Cmd-Alt-[",run:foldCode},{key:"Ctrl-Shift-]",mac:"Cmd-Alt-]",run:unfoldCode},{key:"Ctrl-Alt-[",run:foldAll},{key:"Ctrl-Alt-]",run:unfoldAll}],defaultConfig={placeholderDOM:null,placeholderText:"\u2026"},foldConfig=Facet.define({combine(o){return combineConfig(o,defaultConfig)}});function codeFolding(o){let e=[foldState,baseTheme$1$2];return o&&e.push(foldConfig.of(o)),e}const foldWidget=Decoration.replace({widget:new class extends WidgetType{toDOM(o){let{state:e}=o,s=e.facet(foldConfig),a=h=>{let d=o.lineBlockAt(o.posAtDOM(h.target)),g=findFold(o.state,d.from,d.to);g&&o.dispatch({effects:unfoldEffect.of(g)}),h.preventDefault()};if(s.placeholderDOM)return s.placeholderDOM(o,a);let c=document.createElement("span");return c.textContent=s.placeholderText,c.setAttribute("aria-label",e.phrase("folded code")),c.title=e.phrase("unfold"),c.className="cm-foldPlaceholder",c.onclick=a,c}}}),foldGutterDefaults={openText:"\u2304",closedText:"\u203A",markerDOM:null,domEventHandlers:{},foldingChanged:()=>!1};class FoldMarker extends GutterMarker{constructor(e,s){super(),this.config=e,this.open=s}eq(e){return this.config==e.config&&this.open==e.open}toDOM(e){if(this.config.markerDOM)return this.config.markerDOM(this.open);let s=document.createElement("span");return s.textContent=this.open?this.config.openText:this.config.closedText,s.title=e.state.phrase(this.open?"Fold line":"Unfold line"),s}}function foldGutter(o={}){let e=Object.assign(Object.assign({},foldGutterDefaults),o),s=new FoldMarker(e,!0),a=new FoldMarker(e,!1),c=ViewPlugin.fromClass(class{constructor(d){this.from=d.viewport.from,this.markers=this.buildMarkers(d)}update(d){(d.docChanged||d.viewportChanged||d.startState.facet(language)!=d.state.facet(language)||d.startState.field(foldState,!1)!=d.state.field(foldState,!1)||syntaxTree(d.startState)!=syntaxTree(d.state)||e.foldingChanged(d))&&(this.markers=this.buildMarkers(d.view))}buildMarkers(d){let g=new RangeSetBuilder;for(let _ of d.viewportLineBlocks){let b=findFold(d.state,_.from,_.to)?a:foldable(d.state,_.from,_.to)?s:null;b&&g.add(_.from,_.from,b)}return g.finish()}}),{domEventHandlers:h}=e;return[c,gutter({class:"cm-foldGutter",markers(d){var g;return((g=d.plugin(c))===null||g===void 0?void 0:g.markers)||RangeSet.empty},initialSpacer(){return new FoldMarker(e,!1)},domEventHandlers:Object.assign(Object.assign({},h),{click:(d,g,_)=>{if(h.click&&h.click(d,g,_))return!0;let b=findFold(d.state,g.from,g.to);if(b)return d.dispatch({effects:unfoldEffect.of(b)}),!0;let $=foldable(d.state,g.from,g.to);return $?(d.dispatch({effects:foldEffect.of($)}),!0):!1}})}),codeFolding()]}const baseTheme$1$2=EditorView.baseTheme({".cm-foldPlaceholder":{backgroundColor:"#eee",border:"1px solid #ddd",color:"#888",borderRadius:".2em",margin:"0 1px",padding:"0 1px",cursor:"pointer"},".cm-foldGutter span":{padding:"0 1px",cursor:"pointer"}});class HighlightStyle{constructor(e,s){let a;function c(g){let _=StyleModule.newName();return(a||(a=Object.create(null)))["."+_]=g,_}const h=typeof s.all=="string"?s.all:s.all?c(s.all):void 0,d=s.scope;this.scope=d instanceof Language?g=>g.prop(languageDataProp)==d.data:d?g=>g==d:void 0,this.style=tagHighlighter(e.map(g=>({tag:g.tag,class:g.class||c(Object.assign({},g,{tag:null}))})),{all:h}).style,this.module=a?new StyleModule(a):null,this.themeType=s.themeType}static define(e,s){return new HighlightStyle(e,s||{})}}const highlighterFacet=Facet.define(),fallbackHighlighter=Facet.define({combine(o){return o.length?[o[0]]:null}});function getHighlighters(o){let e=o.facet(highlighterFacet);return e.length?e:o.facet(fallbackHighlighter)}function syntaxHighlighting(o,e){let s=[treeHighlighter],a;return o instanceof HighlightStyle&&(o.module&&s.push(EditorView.styleModule.of(o.module)),a=o.themeType),e!=null&&e.fallback?s.push(fallbackHighlighter.of(o)):a?s.push(highlighterFacet.computeN([EditorView.darkTheme],c=>c.facet(EditorView.darkTheme)==(a=="dark")?[o]:[])):s.push(highlighterFacet.of(o)),s}class TreeHighlighter{constructor(e){this.markCache=Object.create(null),this.tree=syntaxTree(e.state),this.decorations=this.buildDeco(e,getHighlighters(e.state))}update(e){let s=syntaxTree(e.state),a=getHighlighters(e.state),c=a!=getHighlighters(e.startState);s.length{a.add(d,g,this.markCache[_]||(this.markCache[_]=Decoration.mark({class:_})))},c,h);return a.finish()}}const treeHighlighter=Prec.high(ViewPlugin.fromClass(TreeHighlighter,{decorations:o=>o.decorations})),defaultHighlightStyle=HighlightStyle.define([{tag:tags.meta,color:"#7a757a"},{tag:tags.link,textDecoration:"underline"},{tag:tags.heading,textDecoration:"underline",fontWeight:"bold"},{tag:tags.emphasis,fontStyle:"italic"},{tag:tags.strong,fontWeight:"bold"},{tag:tags.strikethrough,textDecoration:"line-through"},{tag:tags.keyword,color:"#708"},{tag:[tags.atom,tags.bool,tags.url,tags.contentSeparator,tags.labelName],color:"#219"},{tag:[tags.literal,tags.inserted],color:"#164"},{tag:[tags.string,tags.deleted],color:"#a11"},{tag:[tags.regexp,tags.escape,tags.special(tags.string)],color:"#e40"},{tag:tags.definition(tags.variableName),color:"#00f"},{tag:tags.local(tags.variableName),color:"#30a"},{tag:[tags.typeName,tags.namespace],color:"#085"},{tag:tags.className,color:"#167"},{tag:[tags.special(tags.variableName),tags.macroName],color:"#256"},{tag:tags.definition(tags.propertyName),color:"#00c"},{tag:tags.comment,color:"#940"},{tag:tags.invalid,color:"#f00"}]),baseTheme$3=EditorView.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),DefaultScanDist=1e4,DefaultBrackets="()[]{}",bracketMatchingConfig=Facet.define({combine(o){return combineConfig(o,{afterCursor:!0,brackets:DefaultBrackets,maxScanDistance:DefaultScanDist,renderMatch:defaultRenderMatch})}}),matchingMark=Decoration.mark({class:"cm-matchingBracket"}),nonmatchingMark=Decoration.mark({class:"cm-nonmatchingBracket"});function defaultRenderMatch(o){let e=[],s=o.matched?matchingMark:nonmatchingMark;return e.push(s.range(o.start.from,o.start.to)),o.end&&e.push(s.range(o.end.from,o.end.to)),e}const bracketMatchingState=StateField.define({create(){return Decoration.none},update(o,e){if(!e.docChanged&&!e.selection)return o;let s=[],a=e.state.facet(bracketMatchingConfig);for(let c of e.state.selection.ranges){if(!c.empty)continue;let h=matchBrackets(e.state,c.head,-1,a)||c.head>0&&matchBrackets(e.state,c.head-1,1,a)||a.afterCursor&&(matchBrackets(e.state,c.head,1,a)||c.headEditorView.decorations.from(o)}),bracketMatchingUnique=[bracketMatchingState,baseTheme$3];function bracketMatching(o={}){return[bracketMatchingConfig.of(o),bracketMatchingUnique]}function matchingNodes(o,e,s){let a=o.prop(e<0?NodeProp.openedBy:NodeProp.closedBy);if(a)return a;if(o.name.length==1){let c=s.indexOf(o.name);if(c>-1&&c%2==(e<0?1:0))return[s[c+e]]}return null}function matchBrackets(o,e,s,a={}){let c=a.maxScanDistance||DefaultScanDist,h=a.brackets||DefaultBrackets,d=syntaxTree(o),g=d.resolveInner(e,s);for(let _=g;_;_=_.parent){let b=matchingNodes(_.type,s,h);if(b&&_.from<_.to)return matchMarkedBrackets(o,e,s,_,b,h)}return matchPlainBrackets(o,e,s,d,g.type,c,h)}function matchMarkedBrackets(o,e,s,a,c,h){let d=a.parent,g={from:a.from,to:a.to},_=0,b=d==null?void 0:d.cursor();if(b&&(s<0?b.childBefore(a.from):b.childAfter(a.to)))do if(s<0?b.to<=a.from:b.from>=a.to){if(_==0&&c.indexOf(b.type.name)>-1&&b.from0)return null;let b={from:s<0?e-1:e,to:s>0?e+1:e},$=o.doc.iterRange(e,s>0?o.doc.length:0),j=0;for(let _e=0;!$.next().done&&_e<=h;){let et=$.value;s<0&&(_e+=et.length);let tt=e+_e*s;for(let nt=s>0?0:et.length-1,st=s>0?et.length:-1;nt!=st;nt+=s){let rt=d.indexOf(et[nt]);if(!(rt<0||a.resolveInner(tt+nt,1).type!=c))if(rt%2==0==s>0)j++;else{if(j==1)return{start:b,end:{from:tt+nt,to:tt+nt+1},matched:rt>>1==_>>1};j--}}s>0&&(_e+=et.length)}return $.done?{start:b,matched:!1}:null}const noTokens=Object.create(null),typeArray=[NodeType.none],warned=[],defaultTable=Object.create(null);for(let[o,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])defaultTable[o]=createTokenType(noTokens,e);function warnForPart(o,e){warned.indexOf(o)>-1||(warned.push(o),console.warn(e))}function createTokenType(o,e){let s=null;for(let h of e.split(".")){let d=o[h]||tags[h];d?typeof d=="function"?s?s=d(s):warnForPart(h,`Modifier ${h} used at start of tag`):s?warnForPart(h,`Tag ${h} used as modifier`):s=d:warnForPart(h,`Unknown highlighting tag ${h}`)}if(!s)return 0;let a=e.replace(/ /g,"_"),c=NodeType.define({id:typeArray.length,name:a,props:[styleTags({[a]:s})]});return typeArray.push(c),c.id}const toggleComment=o=>{let e=getConfig(o.state);return e.line?toggleLineComment(o):e.block?toggleBlockCommentByLine(o):!1};function command(o,e){return({state:s,dispatch:a})=>{if(s.readOnly)return!1;let c=o(e,s);return c?(a(s.update(c)),!0):!1}}const toggleLineComment=command(changeLineComment,0),toggleBlockComment=command(changeBlockComment,0),toggleBlockCommentByLine=command((o,e)=>changeBlockComment(o,e,selectedLineRanges(e)),0);function getConfig(o,e=o.selection.main.head){let s=o.languageDataAt("commentTokens",e);return s.length?s[0]:{}}const SearchMargin=50;function findBlockComment(o,{open:e,close:s},a,c){let h=o.sliceDoc(a-SearchMargin,a),d=o.sliceDoc(c,c+SearchMargin),g=/\s*$/.exec(h)[0].length,_=/^\s*/.exec(d)[0].length,b=h.length-g;if(h.slice(b-e.length,b)==e&&d.slice(_,_+s.length)==s)return{open:{pos:a-g,margin:g&&1},close:{pos:c+_,margin:_&&1}};let $,j;c-a<=2*SearchMargin?$=j=o.sliceDoc(a,c):($=o.sliceDoc(a,a+SearchMargin),j=o.sliceDoc(c-SearchMargin,c));let _e=/^\s*/.exec($)[0].length,et=/\s*$/.exec(j)[0].length,tt=j.length-et-s.length;return $.slice(_e,_e+e.length)==e&&j.slice(tt,tt+s.length)==s?{open:{pos:a+_e+e.length,margin:/\s/.test($.charAt(_e+e.length))?1:0},close:{pos:c-et-s.length,margin:/\s/.test(j.charAt(tt-1))?1:0}}:null}function selectedLineRanges(o){let e=[];for(let s of o.selection.ranges){let a=o.doc.lineAt(s.from),c=s.to<=a.to?a:o.doc.lineAt(s.to),h=e.length-1;h>=0&&e[h].to>a.from?e[h].to=c.to:e.push({from:a.from,to:c.to})}return e}function changeBlockComment(o,e,s=e.selection.ranges){let a=s.map(h=>getConfig(e,h.from).block);if(!a.every(h=>h))return null;let c=s.map((h,d)=>findBlockComment(e,a[d],h.from,h.to));if(o!=2&&!c.every(h=>h))return{changes:e.changes(s.map((h,d)=>c[d]?[]:[{from:h.from,insert:a[d].open+" "},{from:h.to,insert:" "+a[d].close}]))};if(o!=1&&c.some(h=>h)){let h=[];for(let d=0,g;dc&&(h==d||d>$.from)){c=$.from;let j=getConfig(e,b).line;if(!j)continue;let _e=/^\s*/.exec($.text)[0].length,et=_e==$.length,tt=$.text.slice(_e,_e+j.length)==j?_e:-1;_e<$.text.length&&_e<_&&(_=_e),a.push({line:$,comment:tt,token:j,indent:_e,empty:et,single:!1})}b=$.to+1}if(_<1e9)for(let b=g;bh.comment<0&&(!h.empty||h.single))){let h=[];for(let{line:g,token:_,indent:b,empty:$,single:j}of a)(j||!$)&&h.push({from:g.from+b,insert:_+" "});let d=e.changes(h);return{changes:d,selection:e.selection.map(d,1)}}else if(o!=1&&a.some(h=>h.comment>=0)){let h=[];for(let{line:d,comment:g,token:_}of a)if(g>=0){let b=d.from+g,$=b+_.length;d.text[$-d.from]==" "&&$++,h.push({from:b,to:$})}return{changes:h}}return null}const fromHistory=Annotation.define(),isolateHistory=Annotation.define(),invertedEffects=Facet.define(),historyConfig=Facet.define({combine(o){return combineConfig(o,{minDepth:100,newGroupDelay:500},{minDepth:Math.max,newGroupDelay:Math.min})}});function changeEnd(o){let e=0;return o.iterChangedRanges((s,a)=>e=a),e}const historyField_=StateField.define({create(){return HistoryState.empty},update(o,e){let s=e.state.facet(historyConfig),a=e.annotation(fromHistory);if(a){let _=e.docChanged?EditorSelection.single(changeEnd(e.changes)):void 0,b=HistEvent.fromTransaction(e,_),$=a.side,j=$==0?o.undone:o.done;return b?j=updateBranch(j,j.length,s.minDepth,b):j=addSelection(j,e.startState.selection),new HistoryState($==0?a.rest:j,$==0?j:a.rest)}let c=e.annotation(isolateHistory);if((c=="full"||c=="before")&&(o=o.isolate()),e.annotation(Transaction.addToHistory)===!1)return e.changes.empty?o:o.addMapping(e.changes.desc);let h=HistEvent.fromTransaction(e),d=e.annotation(Transaction.time),g=e.annotation(Transaction.userEvent);return h?o=o.addChanges(h,d,g,s.newGroupDelay,s.minDepth):e.selection&&(o=o.addSelection(e.startState.selection,d,g,s.newGroupDelay)),(c=="full"||c=="after")&&(o=o.isolate()),o},toJSON(o){return{done:o.done.map(e=>e.toJSON()),undone:o.undone.map(e=>e.toJSON())}},fromJSON(o){return new HistoryState(o.done.map(HistEvent.fromJSON),o.undone.map(HistEvent.fromJSON))}});function history(o={}){return[historyField_,historyConfig.of(o),EditorView.domEventHandlers({beforeinput(e,s){let a=e.inputType=="historyUndo"?undo:e.inputType=="historyRedo"?redo:null;return a?(e.preventDefault(),a(s)):!1}})]}function cmd(o,e){return function({state:s,dispatch:a}){if(!e&&s.readOnly)return!1;let c=s.field(historyField_,!1);if(!c)return!1;let h=c.pop(o,s,e);return h?(a(h),!0):!1}}const undo=cmd(0,!1),redo=cmd(1,!1),undoSelection=cmd(0,!0),redoSelection=cmd(1,!0);class HistEvent{constructor(e,s,a,c,h){this.changes=e,this.effects=s,this.mapped=a,this.startSelection=c,this.selectionsAfter=h}setSelAfter(e){return new HistEvent(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,s,a;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(s=this.mapped)===null||s===void 0?void 0:s.toJSON(),startSelection:(a=this.startSelection)===null||a===void 0?void 0:a.toJSON(),selectionsAfter:this.selectionsAfter.map(c=>c.toJSON())}}static fromJSON(e){return new HistEvent(e.changes&&ChangeSet.fromJSON(e.changes),[],e.mapped&&ChangeDesc.fromJSON(e.mapped),e.startSelection&&EditorSelection.fromJSON(e.startSelection),e.selectionsAfter.map(EditorSelection.fromJSON))}static fromTransaction(e,s){let a=none$1;for(let c of e.startState.facet(invertedEffects)){let h=c(e);h.length&&(a=a.concat(h))}return!a.length&&e.changes.empty?null:new HistEvent(e.changes.invert(e.startState.doc),a,void 0,s||e.startState.selection,none$1)}static selection(e){return new HistEvent(void 0,none$1,void 0,void 0,e)}}function updateBranch(o,e,s,a){let c=e+1>s+20?e-s-1:0,h=o.slice(c,e);return h.push(a),h}function isAdjacent(o,e){let s=[],a=!1;return o.iterChangedRanges((c,h)=>s.push(c,h)),e.iterChangedRanges((c,h,d,g)=>{for(let _=0;_=b&&d<=$&&(a=!0)}}),a}function eqSelectionShape(o,e){return o.ranges.length==e.ranges.length&&o.ranges.filter((s,a)=>s.empty!=e.ranges[a].empty).length===0}function conc(o,e){return o.length?e.length?o.concat(e):o:e}const none$1=[],MaxSelectionsPerEvent=200;function addSelection(o,e){if(o.length){let s=o[o.length-1],a=s.selectionsAfter.slice(Math.max(0,s.selectionsAfter.length-MaxSelectionsPerEvent));return a.length&&a[a.length-1].eq(e)?o:(a.push(e),updateBranch(o,o.length-1,1e9,s.setSelAfter(a)))}else return[HistEvent.selection([e])]}function popSelection(o){let e=o[o.length-1],s=o.slice();return s[o.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),s}function addMappingToBranch(o,e){if(!o.length)return o;let s=o.length,a=none$1;for(;s;){let c=mapEvent(o[s-1],e,a);if(c.changes&&!c.changes.empty||c.effects.length){let h=o.slice(0,s);return h[s-1]=c,h}else e=c.mapped,s--,a=c.selectionsAfter}return a.length?[HistEvent.selection(a)]:none$1}function mapEvent(o,e,s){let a=conc(o.selectionsAfter.length?o.selectionsAfter.map(g=>g.map(e)):none$1,s);if(!o.changes)return HistEvent.selection(a);let c=o.changes.map(e),h=e.mapDesc(o.changes,!0),d=o.mapped?o.mapped.composeDesc(h):h;return new HistEvent(c,StateEffect.mapEffects(o.effects,e),d,o.startSelection.map(h),a)}const joinableUserEvent=/^(input\.type|delete)($|\.)/;class HistoryState{constructor(e,s,a=0,c=void 0){this.done=e,this.undone=s,this.prevTime=a,this.prevUserEvent=c}isolate(){return this.prevTime?new HistoryState(this.done,this.undone):this}addChanges(e,s,a,c,h){let d=this.done,g=d[d.length-1];return g&&g.changes&&!g.changes.empty&&e.changes&&(!a||joinableUserEvent.test(a))&&(!g.selectionsAfter.length&&s-this.prevTime0&&s-this.prevTimes.empty?o.moveByChar(s,e):rangeEnd(s,e))}function ltrAtCursor(o){return o.textDirectionAt(o.state.selection.main.head)==Direction.LTR}const cursorCharLeft=o=>cursorByChar(o,!ltrAtCursor(o)),cursorCharRight=o=>cursorByChar(o,ltrAtCursor(o));function cursorByGroup(o,e){return moveSel(o,s=>s.empty?o.moveByGroup(s,e):rangeEnd(s,e))}const cursorGroupLeft=o=>cursorByGroup(o,!ltrAtCursor(o)),cursorGroupRight=o=>cursorByGroup(o,ltrAtCursor(o));function interestingNode(o,e,s){if(e.type.prop(s))return!0;let a=e.to-e.from;return a&&(a>2||/[^\s,.;:]/.test(o.sliceDoc(e.from,e.to)))||e.firstChild}function moveBySyntax(o,e,s){let a=syntaxTree(o).resolveInner(e.head),c=s?NodeProp.closedBy:NodeProp.openedBy;for(let _=e.head;;){let b=s?a.childAfter(_):a.childBefore(_);if(!b)break;interestingNode(o,b,c)?a=b:_=s?b.to:b.from}let h=a.type.prop(c),d,g;return h&&(d=s?matchBrackets(o,a.from,1):matchBrackets(o,a.to,-1))&&d.matched?g=s?d.end.to:d.end.from:g=s?a.to:a.from,EditorSelection.cursor(g,s?-1:1)}const cursorSyntaxLeft=o=>moveSel(o,e=>moveBySyntax(o.state,e,!ltrAtCursor(o))),cursorSyntaxRight=o=>moveSel(o,e=>moveBySyntax(o.state,e,ltrAtCursor(o)));function cursorByLine(o,e){return moveSel(o,s=>{if(!s.empty)return rangeEnd(s,e);let a=o.moveVertically(s,e);return a.head!=s.head?a:o.moveToLineBoundary(s,e)})}const cursorLineUp=o=>cursorByLine(o,!1),cursorLineDown=o=>cursorByLine(o,!0);function pageHeight(o){return Math.max(o.defaultLineHeight,Math.min(o.dom.clientHeight,innerHeight)-5)}function cursorByPage(o,e){let{state:s}=o,a=updateSel(s.selection,g=>g.empty?o.moveVertically(g,e,pageHeight(o)):rangeEnd(g,e));if(a.eq(s.selection))return!1;let c=o.coordsAtPos(s.selection.main.head),h=o.scrollDOM.getBoundingClientRect(),d;return c&&c.top>h.top&&c.bottomcursorByPage(o,!1),cursorPageDown=o=>cursorByPage(o,!0);function moveByLineBoundary(o,e,s){let a=o.lineBlockAt(e.head),c=o.moveToLineBoundary(e,s);if(c.head==e.head&&c.head!=(s?a.to:a.from)&&(c=o.moveToLineBoundary(e,s,!1)),!s&&c.head==a.from&&a.length){let h=/^\s*/.exec(o.state.sliceDoc(a.from,Math.min(a.from+100,a.to)))[0].length;h&&e.head!=a.from+h&&(c=EditorSelection.cursor(a.from+h))}return c}const cursorLineBoundaryForward=o=>moveSel(o,e=>moveByLineBoundary(o,e,!0)),cursorLineBoundaryBackward=o=>moveSel(o,e=>moveByLineBoundary(o,e,!1)),cursorLineStart=o=>moveSel(o,e=>EditorSelection.cursor(o.lineBlockAt(e.head).from,1)),cursorLineEnd=o=>moveSel(o,e=>EditorSelection.cursor(o.lineBlockAt(e.head).to,-1));function toMatchingBracket(o,e,s){let a=!1,c=updateSel(o.selection,h=>{let d=matchBrackets(o,h.head,-1)||matchBrackets(o,h.head,1)||h.head>0&&matchBrackets(o,h.head-1,1)||h.headtoMatchingBracket(o,e,!1);function extendSel(o,e){let s=updateSel(o.state.selection,a=>{let c=e(a);return EditorSelection.range(a.anchor,c.head,c.goalColumn)});return s.eq(o.state.selection)?!1:(o.dispatch(setSel(o.state,s)),!0)}function selectByChar(o,e){return extendSel(o,s=>o.moveByChar(s,e))}const selectCharLeft=o=>selectByChar(o,!ltrAtCursor(o)),selectCharRight=o=>selectByChar(o,ltrAtCursor(o));function selectByGroup(o,e){return extendSel(o,s=>o.moveByGroup(s,e))}const selectGroupLeft=o=>selectByGroup(o,!ltrAtCursor(o)),selectGroupRight=o=>selectByGroup(o,ltrAtCursor(o)),selectSyntaxLeft=o=>extendSel(o,e=>moveBySyntax(o.state,e,!ltrAtCursor(o))),selectSyntaxRight=o=>extendSel(o,e=>moveBySyntax(o.state,e,ltrAtCursor(o)));function selectByLine(o,e){return extendSel(o,s=>o.moveVertically(s,e))}const selectLineUp=o=>selectByLine(o,!1),selectLineDown=o=>selectByLine(o,!0);function selectByPage(o,e){return extendSel(o,s=>o.moveVertically(s,e,pageHeight(o)))}const selectPageUp=o=>selectByPage(o,!1),selectPageDown=o=>selectByPage(o,!0),selectLineBoundaryForward=o=>extendSel(o,e=>moveByLineBoundary(o,e,!0)),selectLineBoundaryBackward=o=>extendSel(o,e=>moveByLineBoundary(o,e,!1)),selectLineStart=o=>extendSel(o,e=>EditorSelection.cursor(o.lineBlockAt(e.head).from)),selectLineEnd=o=>extendSel(o,e=>EditorSelection.cursor(o.lineBlockAt(e.head).to)),cursorDocStart=({state:o,dispatch:e})=>(e(setSel(o,{anchor:0})),!0),cursorDocEnd=({state:o,dispatch:e})=>(e(setSel(o,{anchor:o.doc.length})),!0),selectDocStart=({state:o,dispatch:e})=>(e(setSel(o,{anchor:o.selection.main.anchor,head:0})),!0),selectDocEnd=({state:o,dispatch:e})=>(e(setSel(o,{anchor:o.selection.main.anchor,head:o.doc.length})),!0),selectAll=({state:o,dispatch:e})=>(e(o.update({selection:{anchor:0,head:o.doc.length},userEvent:"select"})),!0),selectLine=({state:o,dispatch:e})=>{let s=selectedLineBlocks(o).map(({from:a,to:c})=>EditorSelection.range(a,Math.min(c+1,o.doc.length)));return e(o.update({selection:EditorSelection.create(s),userEvent:"select"})),!0},selectParentSyntax=({state:o,dispatch:e})=>{let s=updateSel(o.selection,a=>{var c;let h=syntaxTree(o).resolveInner(a.head,1);for(;!(h.from=a.to||h.to>a.to&&h.from<=a.from||!(!((c=h.parent)===null||c===void 0)&&c.parent));)h=h.parent;return EditorSelection.range(h.to,h.from)});return e(setSel(o,s)),!0},simplifySelection=({state:o,dispatch:e})=>{let s=o.selection,a=null;return s.ranges.length>1?a=EditorSelection.create([s.main]):s.main.empty||(a=EditorSelection.create([EditorSelection.cursor(s.main.head)])),a?(e(setSel(o,a)),!0):!1};function deleteBy({state:o,dispatch:e},s){if(o.readOnly)return!1;let a="delete.selection",c=o.changeByRange(h=>{let{from:d,to:g}=h;if(d==g){let _=s(d);_d&&(a="delete.forward"),d=Math.min(d,_),g=Math.max(g,_)}return d==g?{range:h}:{changes:{from:d,to:g},range:EditorSelection.cursor(d)}});return c.changes.empty?!1:(e(o.update(c,{scrollIntoView:!0,userEvent:a,effects:a=="delete.selection"?EditorView.announce.of(o.phrase("Selection deleted")):void 0})),!0)}function skipAtomic(o,e,s){if(o instanceof EditorView)for(let a of o.state.facet(EditorView.atomicRanges).map(c=>c(o)))a.between(e,e,(c,h)=>{ce&&(e=s?h:c)});return e}const deleteByChar=(o,e)=>deleteBy(o,s=>{let{state:a}=o,c=a.doc.lineAt(s),h,d;if(!e&&s>c.from&&sdeleteByChar(o,!1),deleteCharForward=o=>deleteByChar(o,!0),deleteByGroup=(o,e)=>deleteBy(o,s=>{let a=s,{state:c}=o,h=c.doc.lineAt(a),d=c.charCategorizer(a);for(let g=null;;){if(a==(e?h.to:h.from)){a==s&&h.number!=(e?c.doc.lines:1)&&(a+=e?1:-1);break}let _=findClusterBreak(h.text,a-h.from,e)+h.from,b=h.text.slice(Math.min(a,_)-h.from,Math.max(a,_)-h.from),$=d(b);if(g!=null&&$!=g)break;(b!=" "||a!=s)&&(g=$),a=_}return skipAtomic(o,a,e)}),deleteGroupBackward=o=>deleteByGroup(o,!1),deleteGroupForward=o=>deleteByGroup(o,!0),deleteToLineEnd=o=>deleteBy(o,e=>{let s=o.lineBlockAt(e).to;return skipAtomic(o,edeleteBy(o,e=>{let s=o.lineBlockAt(e).from;return skipAtomic(o,e>s?s:Math.max(0,e-1),!1)}),splitLine=({state:o,dispatch:e})=>{if(o.readOnly)return!1;let s=o.changeByRange(a=>({changes:{from:a.from,to:a.to,insert:Text.of(["",""])},range:EditorSelection.cursor(a.from)}));return e(o.update(s,{scrollIntoView:!0,userEvent:"input"})),!0},transposeChars=({state:o,dispatch:e})=>{if(o.readOnly)return!1;let s=o.changeByRange(a=>{if(!a.empty||a.from==0||a.from==o.doc.length)return{range:a};let c=a.from,h=o.doc.lineAt(c),d=c==h.from?c-1:findClusterBreak(h.text,c-h.from,!1)+h.from,g=c==h.to?c+1:findClusterBreak(h.text,c-h.from,!0)+h.from;return{changes:{from:d,to:g,insert:o.doc.slice(c,g).append(o.doc.slice(d,c))},range:EditorSelection.cursor(g)}});return s.changes.empty?!1:(e(o.update(s,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function selectedLineBlocks(o){let e=[],s=-1;for(let a of o.selection.ranges){let c=o.doc.lineAt(a.from),h=o.doc.lineAt(a.to);if(!a.empty&&a.to==h.from&&(h=o.doc.lineAt(a.to-1)),s>=c.number){let d=e[e.length-1];d.to=h.to,d.ranges.push(a)}else e.push({from:c.from,to:h.to,ranges:[a]});s=h.number+1}return e}function moveLine(o,e,s){if(o.readOnly)return!1;let a=[],c=[];for(let h of selectedLineBlocks(o)){if(s?h.to==o.doc.length:h.from==0)continue;let d=o.doc.lineAt(s?h.to+1:h.from-1),g=d.length+1;if(s){a.push({from:h.to,to:d.to},{from:h.from,insert:d.text+o.lineBreak});for(let _ of h.ranges)c.push(EditorSelection.range(Math.min(o.doc.length,_.anchor+g),Math.min(o.doc.length,_.head+g)))}else{a.push({from:d.from,to:h.from},{from:h.to,insert:o.lineBreak+d.text});for(let _ of h.ranges)c.push(EditorSelection.range(_.anchor-g,_.head-g))}}return a.length?(e(o.update({changes:a,scrollIntoView:!0,selection:EditorSelection.create(c,o.selection.mainIndex),userEvent:"move.line"})),!0):!1}const moveLineUp=({state:o,dispatch:e})=>moveLine(o,e,!1),moveLineDown=({state:o,dispatch:e})=>moveLine(o,e,!0);function copyLine(o,e,s){if(o.readOnly)return!1;let a=[];for(let c of selectedLineBlocks(o))s?a.push({from:c.from,insert:o.doc.slice(c.from,c.to)+o.lineBreak}):a.push({from:c.to,insert:o.lineBreak+o.doc.slice(c.from,c.to)});return e(o.update({changes:a,scrollIntoView:!0,userEvent:"input.copyline"})),!0}const copyLineUp=({state:o,dispatch:e})=>copyLine(o,e,!1),copyLineDown=({state:o,dispatch:e})=>copyLine(o,e,!0),deleteLine=o=>{if(o.state.readOnly)return!1;let{state:e}=o,s=e.changes(selectedLineBlocks(e).map(({from:c,to:h})=>(c>0?c--:ho.moveVertically(c,!0)).map(s);return o.dispatch({changes:s,selection:a,scrollIntoView:!0,userEvent:"delete.line"}),!0};function isBetweenBrackets(o,e){if(/\(\)|\[\]|\{\}/.test(o.sliceDoc(e-1,e+1)))return{from:e,to:e};let s=syntaxTree(o).resolveInner(e),a=s.childBefore(e),c=s.childAfter(e),h;return a&&c&&a.to<=e&&c.from>=e&&(h=a.type.prop(NodeProp.closedBy))&&h.indexOf(c.name)>-1&&o.doc.lineAt(a.to).from==o.doc.lineAt(c.from).from?{from:a.to,to:c.from}:null}const insertNewlineAndIndent=newlineAndIndent(!1),insertBlankLine=newlineAndIndent(!0);function newlineAndIndent(o){return({state:e,dispatch:s})=>{if(e.readOnly)return!1;let a=e.changeByRange(c=>{let{from:h,to:d}=c,g=e.doc.lineAt(h),_=!o&&h==d&&isBetweenBrackets(e,h);o&&(h=d=(d<=g.to?g:e.doc.lineAt(d)).to);let b=new IndentContext(e,{simulateBreak:h,simulateDoubleBreak:!!_}),$=getIndentation(b,h);for($==null&&($=/^\s*/.exec(e.doc.lineAt(h).text)[0].length);dg.from&&h{let c=[];for(let d=a.from;d<=a.to;){let g=o.doc.lineAt(d);g.number>s&&(a.empty||a.to>g.from)&&(e(g,c,a),s=g.number),d=g.to+1}let h=o.changes(c);return{changes:c,range:EditorSelection.range(h.mapPos(a.anchor,1),h.mapPos(a.head,1))}})}const indentSelection=({state:o,dispatch:e})=>{if(o.readOnly)return!1;let s=Object.create(null),a=new IndentContext(o,{overrideIndentation:h=>{let d=s[h];return d==null?-1:d}}),c=changeBySelectedLine(o,(h,d,g)=>{let _=getIndentation(a,h.from);if(_==null)return;/\S/.test(h.text)||(_=0);let b=/^\s*/.exec(h.text)[0],$=indentString(o,_);(b!=$||g.fromo.readOnly?!1:(e(o.update(changeBySelectedLine(o,(s,a)=>{a.push({from:s.from,insert:o.facet(indentUnit)})}),{userEvent:"input.indent"})),!0),indentLess=({state:o,dispatch:e})=>o.readOnly?!1:(e(o.update(changeBySelectedLine(o,(s,a)=>{let c=/^\s*/.exec(s.text)[0];if(!c)return;let h=countColumn(c,o.tabSize),d=0,g=indentString(o,Math.max(0,h-getIndentUnit(o)));for(;d({mac:o.key,run:o.run,shift:o.shift}))),defaultKeymap=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:cursorSyntaxLeft,shift:selectSyntaxLeft},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:cursorSyntaxRight,shift:selectSyntaxRight},{key:"Alt-ArrowUp",run:moveLineUp},{key:"Shift-Alt-ArrowUp",run:copyLineUp},{key:"Alt-ArrowDown",run:moveLineDown},{key:"Shift-Alt-ArrowDown",run:copyLineDown},{key:"Escape",run:simplifySelection},{key:"Mod-Enter",run:insertBlankLine},{key:"Alt-l",mac:"Ctrl-l",run:selectLine},{key:"Mod-i",run:selectParentSyntax,preventDefault:!0},{key:"Mod-[",run:indentLess},{key:"Mod-]",run:indentMore},{key:"Mod-Alt-\\",run:indentSelection},{key:"Shift-Mod-k",run:deleteLine},{key:"Shift-Mod-\\",run:cursorMatchingBracket},{key:"Mod-/",run:toggleComment},{key:"Alt-A",run:toggleBlockComment}].concat(standardKeymap),indentWithTab={key:"Tab",run:indentMore,shift:indentLess};function crelt(){var o=arguments[0];typeof o=="string"&&(o=document.createElement(o));var e=1,s=arguments[1];if(s&&typeof s=="object"&&s.nodeType==null&&!Array.isArray(s)){for(var a in s)if(Object.prototype.hasOwnProperty.call(s,a)){var c=s[a];typeof c=="string"?o.setAttribute(a,c):c!=null&&(o[a]=c)}e++}for(;eo.normalize("NFKD"):o=>o;class SearchCursor{constructor(e,s,a=0,c=e.length,h){this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(a,c),this.bufferStart=a,this.normalize=h?d=>h(basicNormalize(d)):basicNormalize,this.query=this.normalize(s)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return codePointAt(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let s=fromCodePoint(e),a=this.bufferStart+this.bufferPos;this.bufferPos+=codePointSize(e);let c=this.normalize(s);for(let h=0,d=a;;h++){let g=c.charCodeAt(h),_=this.match(g,d);if(_)return this.value=_,this;if(h==c.length-1)break;d==a&&hthis.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let s=this.matchPos<=this.to&&this.re.exec(this.curLine);if(s){let a=this.curLineStart+s.index,c=a+s[0].length;if(this.matchPos=c+(a==c?1:0),a==this.curLine.length&&this.nextLine(),athis.value.to)return this.value={from:a,to:c,match:s},this;e=this.matchPos-this.curLineStart}else if(this.curLineStart+this.curLine.length=a||c.to<=s){let g=new FlattenedDoc(s,e.sliceString(s,a));return flattened.set(e,g),g}if(c.from==s&&c.to==a)return c;let{text:h,from:d}=c;return d>s&&(h=e.sliceString(s,d)+h,d=s),c.to=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,s=this.re.exec(this.flat.text);if(s&&!s[0]&&s.index==e&&(this.re.lastIndex=e+1,s=this.re.exec(this.flat.text)),s&&this.flat.tothis.flat.text.length-10&&(s=null),s){let a=this.flat.from+s.index,c=a+s[0].length;return this.value={from:a,to:c,match:s},this.matchPos=c+(a==c?1:0),this}else{if(this.flat.to==this.to)return this.done=!0,this;this.flat=FlattenedDoc.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+this.flat.text.length*2))}}}}typeof Symbol<"u"&&(RegExpCursor.prototype[Symbol.iterator]=MultilineRegExpCursor.prototype[Symbol.iterator]=function(){return this});function validRegExp(o){try{return new RegExp(o,baseFlags),!0}catch{return!1}}function createLineDialog(o){let e=crelt("input",{class:"cm-textfield",name:"line"}),s=crelt("form",{class:"cm-gotoLine",onkeydown:c=>{c.keyCode==27?(c.preventDefault(),o.dispatch({effects:dialogEffect.of(!1)}),o.focus()):c.keyCode==13&&(c.preventDefault(),a())},onsubmit:c=>{c.preventDefault(),a()}},crelt("label",o.state.phrase("Go to line"),": ",e)," ",crelt("button",{class:"cm-button",type:"submit"},o.state.phrase("go")));function a(){let c=/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(e.value);if(!c)return;let{state:h}=o,d=h.doc.lineAt(h.selection.main.head),[,g,_,b,$]=c,j=b?+b.slice(1):0,_e=_?+_:d.number;if(_&&$){let tt=_e/100;g&&(tt=tt*(g=="-"?-1:1)+d.number/h.doc.lines),_e=Math.round(h.doc.lines*tt)}else _&&g&&(_e=_e*(g=="-"?-1:1)+d.number);let et=h.doc.line(Math.max(1,Math.min(h.doc.lines,_e)));o.dispatch({effects:dialogEffect.of(!1),selection:EditorSelection.cursor(et.from+Math.max(0,Math.min(j,et.length))),scrollIntoView:!0}),o.focus()}return{dom:s}}const dialogEffect=StateEffect.define(),dialogField=StateField.define({create(){return!0},update(o,e){for(let s of e.effects)s.is(dialogEffect)&&(o=s.value);return o},provide:o=>showPanel.from(o,e=>e?createLineDialog:null)}),gotoLine=o=>{let e=getPanel(o,createLineDialog);if(!e){let s=[dialogEffect.of(!0)];o.state.field(dialogField,!1)==null&&s.push(StateEffect.appendConfig.of([dialogField,baseTheme$1$1])),o.dispatch({effects:s}),e=getPanel(o,createLineDialog)}return e&&e.dom.querySelector("input").focus(),!0},baseTheme$1$1=EditorView.baseTheme({".cm-panel.cm-gotoLine":{padding:"2px 6px 4px","& label":{fontSize:"80%"}}}),defaultHighlightOptions={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},highlightConfig=Facet.define({combine(o){return combineConfig(o,defaultHighlightOptions,{highlightWordAroundCursor:(e,s)=>e||s,minSelectionLength:Math.min,maxMatches:Math.min})}});function highlightSelectionMatches(o){let e=[defaultTheme,matchHighlighter];return o&&e.push(highlightConfig.of(o)),e}const matchDeco=Decoration.mark({class:"cm-selectionMatch"}),mainMatchDeco=Decoration.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function insideWordBoundaries(o,e,s,a){return(s==0||o(e.sliceDoc(s-1,s))!=CharCategory.Word)&&(a==e.doc.length||o(e.sliceDoc(a,a+1))!=CharCategory.Word)}function insideWord(o,e,s,a){return o(e.sliceDoc(s,s+1))==CharCategory.Word&&o(e.sliceDoc(a-1,a))==CharCategory.Word}const matchHighlighter=ViewPlugin.fromClass(class{constructor(o){this.decorations=this.getDeco(o)}update(o){(o.selectionSet||o.docChanged||o.viewportChanged)&&(this.decorations=this.getDeco(o.view))}getDeco(o){let e=o.state.facet(highlightConfig),{state:s}=o,a=s.selection;if(a.ranges.length>1)return Decoration.none;let c=a.main,h,d=null;if(c.empty){if(!e.highlightWordAroundCursor)return Decoration.none;let _=s.wordAt(c.head);if(!_)return Decoration.none;d=s.charCategorizer(c.head),h=s.sliceDoc(_.from,_.to)}else{let _=c.to-c.from;if(_200)return Decoration.none;if(e.wholeWords){if(h=s.sliceDoc(c.from,c.to),d=s.charCategorizer(c.head),!(insideWordBoundaries(d,s,c.from,c.to)&&insideWord(d,s,c.from,c.to)))return Decoration.none}else if(h=s.sliceDoc(c.from,c.to).trim(),!h)return Decoration.none}let g=[];for(let _ of o.visibleRanges){let b=new SearchCursor(s.doc,h,_.from,_.to);for(;!b.next().done;){let{from:$,to:j}=b.value;if((!d||insideWordBoundaries(d,s,$,j))&&(c.empty&&$<=c.from&&j>=c.to?g.push(mainMatchDeco.range($,j)):($>=c.to||j<=c.from)&&g.push(matchDeco.range($,j)),g.length>e.maxMatches))return Decoration.none}}return Decoration.set(g)}},{decorations:o=>o.decorations}),defaultTheme=EditorView.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}}),selectWord=({state:o,dispatch:e})=>{let{selection:s}=o,a=EditorSelection.create(s.ranges.map(c=>o.wordAt(c.head)||EditorSelection.cursor(c.head)),s.mainIndex);return a.eq(s)?!1:(e(o.update({selection:a})),!0)};function findNextOccurrence(o,e){let{main:s,ranges:a}=o.selection,c=o.wordAt(s.head),h=c&&c.from==s.from&&c.to==s.to;for(let d=!1,g=new SearchCursor(o.doc,e,a[a.length-1].to);;)if(g.next(),g.done){if(d)return null;g=new SearchCursor(o.doc,e,0,Math.max(0,a[a.length-1].from-1)),d=!0}else{if(d&&a.some(_=>_.from==g.value.from))continue;if(h){let _=o.wordAt(g.value.from);if(!_||_.from!=g.value.from||_.to!=g.value.to)continue}return g.value}}const selectNextOccurrence=({state:o,dispatch:e})=>{let{ranges:s}=o.selection;if(s.some(h=>h.from===h.to))return selectWord({state:o,dispatch:e});let a=o.sliceDoc(s[0].from,s[0].to);if(o.selection.ranges.some(h=>o.sliceDoc(h.from,h.to)!=a))return!1;let c=findNextOccurrence(o,a);return c?(e(o.update({selection:o.selection.addRange(EditorSelection.range(c.from,c.to),!1),effects:EditorView.scrollIntoView(c.to)})),!0):!1},searchConfigFacet=Facet.define({combine(o){var e;return{top:o.reduce((s,a)=>s!=null?s:a.top,void 0)||!1,caseSensitive:o.reduce((s,a)=>s!=null?s:a.caseSensitive,void 0)||!1,createPanel:((e=o.find(s=>s.createPanel))===null||e===void 0?void 0:e.createPanel)||(s=>new SearchPanel(s))}}});class SearchQuery{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||validRegExp(this.search)),this.unquoted=e.literal?this.search:this.search.replace(/\\([nrt\\])/g,(s,a)=>a=="n"?` +`:a=="r"?"\r":a=="t"?" ":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp}create(){return this.regexp?new RegExpQuery(this):new StringQuery(this)}getCursor(e,s=0,a=e.length){return this.regexp?regexpCursor(this,e,s,a):stringCursor(this,e,s,a)}}class QueryType{constructor(e){this.spec=e}}function stringCursor(o,e,s,a){return new SearchCursor(e,o.unquoted,s,a,o.caseSensitive?void 0:c=>c.toLowerCase())}class StringQuery extends QueryType{constructor(e){super(e)}nextMatch(e,s,a){let c=stringCursor(this.spec,e,a,e.length).nextOverlapping();return c.done&&(c=stringCursor(this.spec,e,0,s).nextOverlapping()),c.done?null:c.value}prevMatchInRange(e,s,a){for(let c=a;;){let h=Math.max(s,c-1e4-this.spec.unquoted.length),d=stringCursor(this.spec,e,h,c),g=null;for(;!d.nextOverlapping().done;)g=d.value;if(g)return g;if(h==s)return null;c-=1e4}}prevMatch(e,s,a){return this.prevMatchInRange(e,0,s)||this.prevMatchInRange(e,a,e.length)}getReplacement(e){return this.spec.replace}matchAll(e,s){let a=stringCursor(this.spec,e,0,e.length),c=[];for(;!a.next().done;){if(c.length>=s)return null;c.push(a.value)}return c}highlight(e,s,a,c){let h=stringCursor(this.spec,e,Math.max(0,s-this.spec.unquoted.length),Math.min(a+this.spec.unquoted.length,e.length));for(;!h.next().done;)c(h.value.from,h.value.to)}}function regexpCursor(o,e,s,a){return new RegExpCursor(e,o.search,o.caseSensitive?void 0:{ignoreCase:!0},s,a)}class RegExpQuery extends QueryType{nextMatch(e,s,a){let c=regexpCursor(this.spec,e,a,e.length).next();return c.done&&(c=regexpCursor(this.spec,e,0,s).next()),c.done?null:c.value}prevMatchInRange(e,s,a){for(let c=1;;c++){let h=Math.max(s,a-c*1e4),d=regexpCursor(this.spec,e,h,a),g=null;for(;!d.next().done;)g=d.value;if(g&&(h==s||g.from>h+10))return g;if(h==s)return null}}prevMatch(e,s,a){return this.prevMatchInRange(e,0,s)||this.prevMatchInRange(e,a,e.length)}getReplacement(e){return this.spec.replace.replace(/\$([$&\d+])/g,(s,a)=>a=="$"?"$":a=="&"?e.match[0]:a!="0"&&+a=s)return null;c.push(a.value)}return c}highlight(e,s,a,c){let h=regexpCursor(this.spec,e,Math.max(0,s-250),Math.min(a+250,e.length));for(;!h.next().done;)c(h.value.from,h.value.to)}}const setSearchQuery=StateEffect.define(),togglePanel$1=StateEffect.define(),searchState=StateField.define({create(o){return new SearchState(defaultQuery(o).create(),null)},update(o,e){for(let s of e.effects)s.is(setSearchQuery)?o=new SearchState(s.value.create(),o.panel):s.is(togglePanel$1)&&(o=new SearchState(o.query,s.value?createSearchPanel:null));return o},provide:o=>showPanel.from(o,e=>e.panel)});class SearchState{constructor(e,s){this.query=e,this.panel=s}}const matchMark=Decoration.mark({class:"cm-searchMatch"}),selectedMatchMark=Decoration.mark({class:"cm-searchMatch cm-searchMatch-selected"}),searchHighlighter=ViewPlugin.fromClass(class{constructor(o){this.view=o,this.decorations=this.highlight(o.state.field(searchState))}update(o){let e=o.state.field(searchState);(e!=o.startState.field(searchState)||o.docChanged||o.selectionSet||o.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:o,panel:e}){if(!e||!o.spec.valid)return Decoration.none;let{view:s}=this,a=new RangeSetBuilder;for(let c=0,h=s.visibleRanges,d=h.length;ch[c+1].from-2*250;)_=h[++c].to;o.highlight(s.state.doc,g,_,(b,$)=>{let j=s.state.selection.ranges.some(_e=>_e.from==b&&_e.to==$);a.add(b,$,j?selectedMatchMark:matchMark)})}return a.finish()}},{decorations:o=>o.decorations});function searchCommand(o){return e=>{let s=e.state.field(searchState,!1);return s&&s.query.spec.valid?o(e,s):openSearchPanel(e)}}const findNext=searchCommand((o,{query:e})=>{let{to:s}=o.state.selection.main,a=e.nextMatch(o.state.doc,s,s);return a?(o.dispatch({selection:{anchor:a.from,head:a.to},scrollIntoView:!0,effects:announceMatch(o,a),userEvent:"select.search"}),!0):!1}),findPrevious=searchCommand((o,{query:e})=>{let{state:s}=o,{from:a}=s.selection.main,c=e.prevMatch(s.doc,a,a);return c?(o.dispatch({selection:{anchor:c.from,head:c.to},scrollIntoView:!0,effects:announceMatch(o,c),userEvent:"select.search"}),!0):!1}),selectMatches=searchCommand((o,{query:e})=>{let s=e.matchAll(o.state.doc,1e3);return!s||!s.length?!1:(o.dispatch({selection:EditorSelection.create(s.map(a=>EditorSelection.range(a.from,a.to))),userEvent:"select.search.matches"}),!0)}),selectSelectionMatches=({state:o,dispatch:e})=>{let s=o.selection;if(s.ranges.length>1||s.main.empty)return!1;let{from:a,to:c}=s.main,h=[],d=0;for(let g=new SearchCursor(o.doc,o.sliceDoc(a,c));!g.next().done;){if(h.length>1e3)return!1;g.value.from==a&&(d=h.length),h.push(EditorSelection.range(g.value.from,g.value.to))}return e(o.update({selection:EditorSelection.create(h,d),userEvent:"select.search.matches"})),!0},replaceNext=searchCommand((o,{query:e})=>{let{state:s}=o,{from:a,to:c}=s.selection.main;if(s.readOnly)return!1;let h=e.nextMatch(s.doc,a,a);if(!h)return!1;let d=[],g,_,b=[];if(h.from==a&&h.to==c&&(_=s.toText(e.getReplacement(h)),d.push({from:h.from,to:h.to,insert:_}),h=e.nextMatch(s.doc,h.from,h.to),b.push(EditorView.announce.of(s.phrase("replaced match on line $",s.doc.lineAt(a).number)+"."))),h){let $=d.length==0||d[0].from>=h.to?0:h.to-h.from-_.length;g={anchor:h.from-$,head:h.to-$},b.push(announceMatch(o,h))}return o.dispatch({changes:d,selection:g,scrollIntoView:!!g,effects:b,userEvent:"input.replace"}),!0}),replaceAll=searchCommand((o,{query:e})=>{if(o.state.readOnly)return!1;let s=e.matchAll(o.state.doc,1e9).map(c=>{let{from:h,to:d}=c;return{from:h,to:d,insert:e.getReplacement(c)}});if(!s.length)return!1;let a=o.state.phrase("replaced $ matches",s.length)+".";return o.dispatch({changes:s,effects:EditorView.announce.of(a),userEvent:"input.replace.all"}),!0});function createSearchPanel(o){return o.state.facet(searchConfigFacet).createPanel(o)}function defaultQuery(o,e){var s;let a=o.selection.main,c=a.empty||a.to>a.from+100?"":o.sliceDoc(a.from,a.to),h=(s=e==null?void 0:e.caseSensitive)!==null&&s!==void 0?s:o.facet(searchConfigFacet).caseSensitive;return e&&!c?e:new SearchQuery({search:c.replace(/\n/g,"\\n"),caseSensitive:h})}const openSearchPanel=o=>{let e=o.state.field(searchState,!1);if(e&&e.panel){let s=getPanel(o,createSearchPanel);if(!s)return!1;let a=s.dom.querySelector("[main-field]");if(a&&a!=o.root.activeElement){let c=defaultQuery(o.state,e.query.spec);c.valid&&o.dispatch({effects:setSearchQuery.of(c)}),a.focus(),a.select()}}else o.dispatch({effects:[togglePanel$1.of(!0),e?setSearchQuery.of(defaultQuery(o.state,e.query.spec)):StateEffect.appendConfig.of(searchExtensions)]});return!0},closeSearchPanel=o=>{let e=o.state.field(searchState,!1);if(!e||!e.panel)return!1;let s=getPanel(o,createSearchPanel);return s&&s.dom.contains(o.root.activeElement)&&o.focus(),o.dispatch({effects:togglePanel$1.of(!1)}),!0},searchKeymap=[{key:"Mod-f",run:openSearchPanel,scope:"editor search-panel"},{key:"F3",run:findNext,shift:findPrevious,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:findNext,shift:findPrevious,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:closeSearchPanel,scope:"editor search-panel"},{key:"Mod-Shift-l",run:selectSelectionMatches},{key:"Alt-g",run:gotoLine},{key:"Mod-d",run:selectNextOccurrence,preventDefault:!0}];class SearchPanel{constructor(e){this.view=e;let s=this.query=e.state.field(searchState).query.spec;this.commit=this.commit.bind(this),this.searchField=crelt("input",{value:s.search,placeholder:phrase(e,"Find"),"aria-label":phrase(e,"Find"),class:"cm-textfield",name:"search","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=crelt("input",{value:s.replace,placeholder:phrase(e,"Replace"),"aria-label":phrase(e,"Replace"),class:"cm-textfield",name:"replace",onchange:this.commit,onkeyup:this.commit}),this.caseField=crelt("input",{type:"checkbox",name:"case",checked:s.caseSensitive,onchange:this.commit}),this.reField=crelt("input",{type:"checkbox",name:"re",checked:s.regexp,onchange:this.commit});function a(c,h,d){return crelt("button",{class:"cm-button",name:c,onclick:h,type:"button"},d)}this.dom=crelt("div",{onkeydown:c=>this.keydown(c),class:"cm-search"},[this.searchField,a("next",()=>findNext(e),[phrase(e,"next")]),a("prev",()=>findPrevious(e),[phrase(e,"previous")]),a("select",()=>selectMatches(e),[phrase(e,"all")]),crelt("label",null,[this.caseField,phrase(e,"match case")]),crelt("label",null,[this.reField,phrase(e,"regexp")]),...e.state.readOnly?[]:[crelt("br"),this.replaceField,a("replace",()=>replaceNext(e),[phrase(e,"replace")]),a("replaceAll",()=>replaceAll(e),[phrase(e,"replace all")]),crelt("button",{name:"close",onclick:()=>closeSearchPanel(e),"aria-label":phrase(e,"close"),type:"button"},["\xD7"])]])}commit(){let e=new SearchQuery({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:setSearchQuery.of(e)}))}keydown(e){runScopeHandlers(this.view,e,"search-panel")?e.preventDefault():e.keyCode==13&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?findPrevious:findNext)(this.view)):e.keyCode==13&&e.target==this.replaceField&&(e.preventDefault(),replaceNext(this.view))}update(e){for(let s of e.transactions)for(let a of s.effects)a.is(setSearchQuery)&&!a.value.eq(this.query)&&this.setQuery(a.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(searchConfigFacet).top}}function phrase(o,e){return o.state.phrase(e)}const AnnounceMargin=30,Break=/[\s\.,:;?!]/;function announceMatch(o,{from:e,to:s}){let a=o.state.doc.lineAt(e),c=o.state.doc.lineAt(s).to,h=Math.max(a.from,e-AnnounceMargin),d=Math.min(c,s+AnnounceMargin),g=o.state.sliceDoc(h,d);if(h!=a.from){for(let _=0;_g.length-AnnounceMargin;_--)if(!Break.test(g[_-1])&&Break.test(g[_])){g=g.slice(0,_);break}}return EditorView.announce.of(`${o.state.phrase("current match")}. ${g} ${o.state.phrase("on line")} ${a.number}.`)}const baseTheme$2=EditorView.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),searchExtensions=[searchState,Prec.lowest(searchHighlighter),baseTheme$2];class CompletionContext{constructor(e,s,a){this.state=e,this.pos=s,this.explicit=a,this.abortListeners=[]}tokenBefore(e){let s=syntaxTree(this.state).resolveInner(this.pos,-1);for(;s&&e.indexOf(s.name)<0;)s=s.parent;return s?{from:s.from,to:this.pos,text:this.state.sliceDoc(s.from,this.pos),type:s.type}:null}matchBefore(e){let s=this.state.doc.lineAt(this.pos),a=Math.max(s.from,this.pos-250),c=s.text.slice(a-s.from,this.pos-s.from),h=c.search(ensureAnchor(e,!1));return h<0?null:{from:a+h,to:this.pos,text:c.slice(h)}}get aborted(){return this.abortListeners==null}addEventListener(e,s){e=="abort"&&this.abortListeners&&this.abortListeners.push(s)}}function toSet(o){let e=Object.keys(o).join(""),s=/\w/.test(e);return s&&(e=e.replace(/\w/g,"")),`[${s?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function prefixMatch(o){let e=Object.create(null),s=Object.create(null);for(let{label:c}of o){e[c[0]]=!0;for(let h=1;htypeof c=="string"?{label:c}:c),[s,a]=e.every(c=>/^\w+$/.test(c.label))?[/\w*$/,/\w+$/]:prefixMatch(e);return c=>{let h=c.matchBefore(a);return h||c.explicit?{from:h?h.from:c.pos,options:e,validFor:s}:null}}function ifNotIn(o,e){return s=>{for(let a=syntaxTree(s.state).resolveInner(s.pos,-1);a;a=a.parent)if(o.indexOf(a.name)>-1)return null;return e(s)}}class Option{constructor(e,s,a){this.completion=e,this.source=s,this.match=a}}function cur(o){return o.selection.main.head}function ensureAnchor(o,e){var s;let{source:a}=o,c=e&&a[0]!="^",h=a[a.length-1]!="$";return!c&&!h?o:new RegExp(`${c?"^":""}(?:${a})${h?"$":""}`,(s=o.flags)!==null&&s!==void 0?s:o.ignoreCase?"i":"")}function insertCompletionText(o,e,s,a){return Object.assign(Object.assign({},o.changeByRange(c=>{if(c==o.selection.main)return{changes:{from:s,to:a,insert:e},range:EditorSelection.cursor(s+e.length)};let h=a-s;return!c.empty||h&&o.sliceDoc(c.from-h,c.from)!=o.sliceDoc(s,a)?{range:c}:{changes:{from:c.from-h,to:c.from,insert:e},range:EditorSelection.cursor(c.from-h+e.length)}})),{userEvent:"input.complete"})}function applyCompletion(o,e){const s=e.completion.apply||e.completion.label;let a=e.source;typeof s=="string"?o.dispatch(insertCompletionText(o.state,s,a.from,a.to)):s(o,e.completion,a.from,a.to)}const SourceCache=new WeakMap;function asSource(o){if(!Array.isArray(o))return o;let e=SourceCache.get(o);return e||SourceCache.set(o,e=completeFromList(o)),e}class FuzzyMatcher{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[];for(let s=0;s=48&&ut<=57||ut>=97&&ut<=122?2:ut>=65&&ut<=90?1:0:(ct=fromCodePoint(ut))!=ct.toLowerCase()?1:ct!=ct.toUpperCase()?2:0;(!it||ht==1&&st||ot==0&&ht!=0)&&(s[j]==ut||a[j]==ut&&(_e=!0)?d[j++]=it:d.length&&(rt=!1)),ot=ht,it+=codePointSize(ut)}return j==_&&d[0]==0&&rt?this.result(-100+(_e?-200:0),d,e):et==_&&tt==0?[-200-e.length,0,nt]:g>-1?[-700-e.length,g,g+this.pattern.length]:et==_?[-200+-700-e.length,tt,nt]:j==_?this.result(-100+(_e?-200:0)+-700+(rt?0:-1100),d,e):s.length==2?null:this.result((c[0]?-700:0)+-200+-1100,c,e)}result(e,s,a){let c=[e-a.length],h=1;for(let d of s){let g=d+(this.astral?codePointSize(codePointAt(a,d)):1);h>1&&c[h-1]==d?c[h-1]=g:(c[h++]=d,c[h++]=g)}return c}}const completionConfig=Facet.define({combine(o){return combineConfig(o,{activateOnTyping:!0,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],compareCompletions:(e,s)=>e.label.localeCompare(s.label)},{defaultKeymap:(e,s)=>e&&s,closeOnBlur:(e,s)=>e&&s,icons:(e,s)=>e&&s,optionClass:(e,s)=>a=>joinClass(e(a),s(a)),addToOptions:(e,s)=>e.concat(s)})}});function joinClass(o,e){return o?e?o+" "+e:o:e}function optionContent(o){let e=o.addToOptions.slice();return o.icons&&e.push({render(s){let a=document.createElement("div");return a.classList.add("cm-completionIcon"),s.type&&a.classList.add(...s.type.split(/\s+/g).map(c=>"cm-completionIcon-"+c)),a.setAttribute("aria-hidden","true"),a},position:20}),e.push({render(s,a,c){let h=document.createElement("span");h.className="cm-completionLabel";let{label:d}=s,g=0;for(let _=1;_g&&h.appendChild(document.createTextNode(d.slice(g,b)));let j=h.appendChild(document.createElement("span"));j.appendChild(document.createTextNode(d.slice(b,$))),j.className="cm-completionMatchedText",g=$}return gs.position-a.position).map(s=>s.render)}function rangeAroundSelected(o,e,s){if(o<=s)return{from:0,to:o};if(e<0&&(e=0),e<=o>>1){let c=Math.floor(e/s);return{from:c*s,to:(c+1)*s}}let a=Math.floor((o-e)/s);return{from:o-(a+1)*s,to:o-a*s}}class CompletionTooltip{constructor(e,s){this.view=e,this.stateField=s,this.info=null,this.placeInfo={read:()=>this.measureInfo(),write:g=>this.positionInfo(g),key:this};let a=e.state.field(s),{options:c,selected:h}=a.open,d=e.state.facet(completionConfig);this.optionContent=optionContent(d),this.optionClass=d.optionClass,this.range=rangeAroundSelected(c.length,h,d.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.dom.addEventListener("mousedown",g=>{for(let _=g.target,b;_&&_!=this.dom;_=_.parentNode)if(_.nodeName=="LI"&&(b=/-(\d+)$/.exec(_.id))&&+b[1]{this.info&&this.view.requestMeasure(this.placeInfo)})}mount(){this.updateSel()}update(e){e.state.field(this.stateField)!=e.startState.field(this.stateField)&&this.updateSel()}positioned(){this.info&&this.view.requestMeasure(this.placeInfo)}updateSel(){let e=this.view.state.field(this.stateField),s=e.open;if((s.selected=this.range.to)&&(this.range=rangeAroundSelected(s.options.length,s.selected,this.view.state.facet(completionConfig).maxRenderedOptions),this.list.remove(),this.list=this.dom.appendChild(this.createListBox(s.options,e.id,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfo)})),this.updateSelectedOption(s.selected)){this.info&&(this.info.remove(),this.info=null);let{completion:a}=s.options[s.selected],{info:c}=a;if(!c)return;let h=typeof c=="string"?document.createTextNode(c):c(a);if(!h)return;"then"in h?h.then(d=>{d&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(d)}).catch(d=>logException(this.view.state,d,"completion info")):this.addInfoPane(h)}}addInfoPane(e){let s=this.info=document.createElement("div");s.className="cm-tooltip cm-completionInfo",s.appendChild(e),this.dom.appendChild(s),this.view.requestMeasure(this.placeInfo)}updateSelectedOption(e){let s=null;for(let a=this.list.firstChild,c=this.range.from;a;a=a.nextSibling,c++)c==e?a.hasAttribute("aria-selected")||(a.setAttribute("aria-selected","true"),s=a):a.hasAttribute("aria-selected")&&a.removeAttribute("aria-selected");return s&&scrollIntoView(this.list,s),s}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let s=this.dom.getBoundingClientRect(),a=this.info.getBoundingClientRect(),c=e.getBoundingClientRect();if(c.top>Math.min(innerHeight,s.bottom)-10||c.bottomnew CompletionTooltip(e,o)}function scrollIntoView(o,e){let s=o.getBoundingClientRect(),a=e.getBoundingClientRect();a.tops.bottom&&(o.scrollTop+=a.bottom-s.bottom)}function score(o){return(o.boost||0)*100+(o.apply?10:0)+(o.info?5:0)+(o.type?1:0)}function sortOptions(o,e){let s=[],a=0;for(let g of o)if(g.hasResult())if(g.result.filter===!1){let _=g.result.getMatch;for(let b of g.result.options){let $=[1e9-a++];if(_)for(let j of _(b))$.push(j);s.push(new Option(b,g,$))}}else{let _=new FuzzyMatcher(e.sliceDoc(g.from,g.to)),b;for(let $ of g.result.options)(b=_.match($.label))&&($.boost!=null&&(b[0]+=$.boost),s.push(new Option($,g,b)))}let c=[],h=null,d=e.facet(completionConfig).compareCompletions;for(let g of s.sort((_,b)=>b.match[0]-_.match[0]||d(_.completion,b.completion)))!h||h.label!=g.completion.label||h.detail!=g.completion.detail||h.type!=null&&g.completion.type!=null&&h.type!=g.completion.type||h.apply!=g.completion.apply?c.push(g):score(g.completion)>score(h)&&(c[c.length-1]=g),h=g.completion;return c}class CompletionDialog{constructor(e,s,a,c,h){this.options=e,this.attrs=s,this.tooltip=a,this.timestamp=c,this.selected=h}setSelected(e,s){return e==this.selected||e>=this.options.length?this:new CompletionDialog(this.options,makeAttrs(s,e),this.tooltip,this.timestamp,e)}static build(e,s,a,c,h){let d=sortOptions(e,s);if(!d.length)return null;let g=s.facet(completionConfig).selectOnOpen?0:-1;if(c&&c.selected!=g&&c.selected!=-1){let _=c.options[c.selected].completion;for(let b=0;bb.hasResult()?Math.min(_,b.from):_,1e8),create:completionTooltip(completionState),above:h.aboveCursor},c?c.timestamp:Date.now(),g)}map(e){return new CompletionDialog(this.options,this.attrs,Object.assign(Object.assign({},this.tooltip),{pos:e.mapPos(this.tooltip.pos)}),this.timestamp,this.selected)}}class CompletionState{constructor(e,s,a){this.active=e,this.id=s,this.open=a}static start(){return new CompletionState(none,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:s}=e,a=s.facet(completionConfig),h=(a.override||s.languageDataAt("autocomplete",cur(s)).map(asSource)).map(g=>(this.active.find(b=>b.source==g)||new ActiveSource(g,this.active.some(b=>b.state!=0)?1:0)).update(e,a));h.length==this.active.length&&h.every((g,_)=>g==this.active[_])&&(h=this.active);let d=e.selection||h.some(g=>g.hasResult()&&e.changes.touchesRange(g.from,g.to))||!sameResults(h,this.active)?CompletionDialog.build(h,s,this.id,this.open,a):this.open&&e.docChanged?this.open.map(e.changes):this.open;!d&&h.every(g=>g.state!=1)&&h.some(g=>g.hasResult())&&(h=h.map(g=>g.hasResult()?new ActiveSource(g.source,0):g));for(let g of e.effects)g.is(setSelectedEffect)&&(d=d&&d.setSelected(g.value,this.id));return h==this.active&&d==this.open?this:new CompletionState(h,this.id,d)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:baseAttrs}}function sameResults(o,e){if(o==e)return!0;for(let s=0,a=0;;){for(;s-1&&(s["aria-activedescendant"]=o+"-"+e),s}const none=[];function getUserEvent(o){return o.isUserEvent("input.type")?"input":o.isUserEvent("delete.backward")?"delete":null}class ActiveSource{constructor(e,s,a=-1){this.source=e,this.state=s,this.explicitPos=a}hasResult(){return!1}update(e,s){let a=getUserEvent(e),c=this;a?c=c.handleUserEvent(e,a,s):e.docChanged?c=c.handleChange(e):e.selection&&c.state!=0&&(c=new ActiveSource(c.source,0));for(let h of e.effects)if(h.is(startCompletionEffect))c=new ActiveSource(c.source,1,h.value?cur(e.state):-1);else if(h.is(closeCompletionEffect))c=new ActiveSource(c.source,0);else if(h.is(setActiveEffect))for(let d of h.value)d.source==c.source&&(c=d);return c}handleUserEvent(e,s,a){return s=="delete"||!a.activateOnTyping?this.map(e.changes):new ActiveSource(this.source,1)}handleChange(e){return e.changes.touchesRange(cur(e.startState))?new ActiveSource(this.source,0):this.map(e.changes)}map(e){return e.empty||this.explicitPos<0?this:new ActiveSource(this.source,this.state,e.mapPos(this.explicitPos))}}class ActiveResult extends ActiveSource{constructor(e,s,a,c,h){super(e,2,s),this.result=a,this.from=c,this.to=h}hasResult(){return!0}handleUserEvent(e,s,a){var c;let h=e.changes.mapPos(this.from),d=e.changes.mapPos(this.to,1),g=cur(e.state);if((this.explicitPos<0?g<=h:gd||s=="delete"&&cur(e.startState)==this.from)return new ActiveSource(this.source,s=="input"&&a.activateOnTyping?1:0);let _=this.explicitPos<0?-1:e.changes.mapPos(this.explicitPos),b;return checkValid(this.result.validFor,e.state,h,d)?new ActiveResult(this.source,_,this.result,h,d):this.result.update&&(b=this.result.update(this.result,h,d,new CompletionContext(e.state,g,_>=0)))?new ActiveResult(this.source,_,b,b.from,(c=b.to)!==null&&c!==void 0?c:cur(e.state)):new ActiveSource(this.source,1,_)}handleChange(e){return e.changes.touchesRange(this.from,this.to)?new ActiveSource(this.source,0):this.map(e.changes)}map(e){return e.empty?this:new ActiveResult(this.source,this.explicitPos<0?-1:e.mapPos(this.explicitPos),this.result,e.mapPos(this.from),e.mapPos(this.to,1))}}function checkValid(o,e,s,a){if(!o)return!1;let c=e.sliceDoc(s,a);return typeof o=="function"?o(c,s,a,e):ensureAnchor(o,!0).test(c)}const startCompletionEffect=StateEffect.define(),closeCompletionEffect=StateEffect.define(),setActiveEffect=StateEffect.define({map(o,e){return o.map(s=>s.map(e))}}),setSelectedEffect=StateEffect.define(),completionState=StateField.define({create(){return CompletionState.start()},update(o,e){return o.update(e)},provide:o=>[showTooltip.from(o,e=>e.tooltip),EditorView.contentAttributes.from(o,e=>e.attrs)]}),CompletionInteractMargin=75;function moveCompletionSelection(o,e="option"){return s=>{let a=s.state.field(completionState,!1);if(!a||!a.open||Date.now()-a.open.timestamp-1?a.open.selected+c*(o?1:-1):o?0:d-1;return g<0?g=e=="page"?0:d-1:g>=d&&(g=e=="page"?d-1:0),s.dispatch({effects:setSelectedEffect.of(g)}),!0}}const acceptCompletion=o=>{let e=o.state.field(completionState,!1);return o.state.readOnly||!e||!e.open||Date.now()-e.open.timestampo.state.field(completionState,!1)?(o.dispatch({effects:startCompletionEffect.of(!0)}),!0):!1,closeCompletion=o=>{let e=o.state.field(completionState,!1);return!e||!e.active.some(s=>s.state!=0)?!1:(o.dispatch({effects:closeCompletionEffect.of(null)}),!0)};class RunningQuery{constructor(e,s){this.active=e,this.context=s,this.time=Date.now(),this.updates=[],this.done=void 0}}const DebounceTime=50,MaxUpdateCount=50,MinAbortTime=1e3,completionPlugin=ViewPlugin.fromClass(class{constructor(o){this.view=o,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.composing=0;for(let e of o.state.field(completionState).active)e.state==1&&this.startQuery(e)}update(o){let e=o.state.field(completionState);if(!o.selectionSet&&!o.docChanged&&o.startState.field(completionState)==e)return;let s=o.transactions.some(a=>(a.selection||a.docChanged)&&!getUserEvent(a));for(let a=0;aMaxUpdateCount&&Date.now()-c.time>MinAbortTime){for(let h of c.context.abortListeners)try{h()}catch(d){logException(this.view.state,d)}c.context.abortListeners=null,this.running.splice(a--,1)}else c.updates.push(...o.transactions)}if(this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),this.debounceUpdate=e.active.some(a=>a.state==1&&!this.running.some(c=>c.active.source==a.source))?setTimeout(()=>this.startUpdate(),DebounceTime):-1,this.composing!=0)for(let a of o.transactions)getUserEvent(a)=="input"?this.composing=2:this.composing==2&&a.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1;let{state:o}=this.view,e=o.field(completionState);for(let s of e.active)s.state==1&&!this.running.some(a=>a.active.source==s.source)&&this.startQuery(s)}startQuery(o){let{state:e}=this.view,s=cur(e),a=new CompletionContext(e,s,o.explicitPos==s),c=new RunningQuery(o,a);this.running.push(c),Promise.resolve(o.source(a)).then(h=>{c.context.aborted||(c.done=h||null,this.scheduleAccept())},h=>{this.view.dispatch({effects:closeCompletionEffect.of(null)}),logException(this.view.state,h)})}scheduleAccept(){this.running.every(o=>o.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),DebounceTime))}accept(){var o;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],s=this.view.state.facet(completionConfig);for(let a=0;ad.source==c.active.source);if(h&&h.state==1)if(c.done==null){let d=new ActiveSource(c.active.source,0);for(let g of c.updates)d=d.update(g,s);d.state!=1&&e.push(d)}else this.startQuery(h)}e.length&&this.view.dispatch({effects:setActiveEffect.of(e)})}},{eventHandlers:{blur(){let o=this.view.state.field(completionState,!1);o&&o.tooltip&&this.view.state.facet(completionConfig).closeOnBlur&&this.view.dispatch({effects:closeCompletionEffect.of(null)})},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:startCompletionEffect.of(!1)}),20),this.composing=0}}}),baseTheme$1=EditorView.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",listStyle:"none",margin:0,padding:0,"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer",padding:"1px 3px",lineHeight:1.2}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"\xB7\xB7\xB7"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"300px"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'\u0192'"}},".cm-completionIcon-class":{"&:after":{content:"'\u25CB'"}},".cm-completionIcon-interface":{"&:after":{content:"'\u25CC'"}},".cm-completionIcon-variable":{"&:after":{content:"'\u{1D465}'"}},".cm-completionIcon-constant":{"&:after":{content:"'\u{1D436}'"}},".cm-completionIcon-type":{"&:after":{content:"'\u{1D461}'"}},".cm-completionIcon-enum":{"&:after":{content:"'\u222A'"}},".cm-completionIcon-property":{"&:after":{content:"'\u25A1'"}},".cm-completionIcon-keyword":{"&:after":{content:"'\u{1F511}\uFE0E'"}},".cm-completionIcon-namespace":{"&:after":{content:"'\u25A2'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class FieldPos{constructor(e,s,a,c){this.field=e,this.line=s,this.from=a,this.to=c}}class FieldRange{constructor(e,s,a){this.field=e,this.from=s,this.to=a}map(e){let s=e.mapPos(this.from,-1,MapMode.TrackDel),a=e.mapPos(this.to,1,MapMode.TrackDel);return s==null||a==null?null:new FieldRange(this.field,s,a)}}class Snippet{constructor(e,s){this.lines=e,this.fieldPositions=s}instantiate(e,s){let a=[],c=[s],h=e.doc.lineAt(s),d=/^\s*/.exec(h.text)[0];for(let _ of this.lines){if(a.length){let b=d,$=/^\t*/.exec(_)[0].length;for(let j=0;j<$;j++)b+=e.facet(indentUnit);c.push(s+b.length-$),_=b+_.slice($)}a.push(_),s+=_.length+1}let g=this.fieldPositions.map(_=>new FieldRange(_.field,c[_.line]+_.from,c[_.line]+_.to));return{text:a,ranges:g}}static parse(e){let s=[],a=[],c=[],h;for(let d of e.split(/\r\n?|\n/)){for(;h=/[#$]\{(?:(\d+)(?::([^}]*))?|([^}]*))\}/.exec(d);){let g=h[1]?+h[1]:null,_=h[2]||h[3]||"",b=-1;for(let $=0;$=b&&j.field++}c.push(new FieldPos(b,a.length,h.index,h.index+_.length)),d=d.slice(0,h.index)+_+d.slice(h.index+h[0].length)}for(let g;g=/([$#])\\{/.exec(d);){d=d.slice(0,g.index)+g[1]+"{"+d.slice(g.index+g[0].length);for(let _ of c)_.line==a.length&&_.from>g.index&&(_.from--,_.to--)}a.push(d)}return new Snippet(a,c)}}let fieldMarker=Decoration.widget({widget:new class extends WidgetType{toDOM(){let o=document.createElement("span");return o.className="cm-snippetFieldPosition",o}ignoreEvent(){return!1}}}),fieldRange=Decoration.mark({class:"cm-snippetField"});class ActiveSnippet{constructor(e,s){this.ranges=e,this.active=s,this.deco=Decoration.set(e.map(a=>(a.from==a.to?fieldMarker:fieldRange).range(a.from,a.to)))}map(e){let s=[];for(let a of this.ranges){let c=a.map(e);if(!c)return null;s.push(c)}return new ActiveSnippet(s,this.active)}selectionInsideField(e){return e.ranges.every(s=>this.ranges.some(a=>a.field==this.active&&a.from<=s.from&&a.to>=s.to))}}const setActive=StateEffect.define({map(o,e){return o&&o.map(e)}}),moveToField=StateEffect.define(),snippetState=StateField.define({create(){return null},update(o,e){for(let s of e.effects){if(s.is(setActive))return s.value;if(s.is(moveToField)&&o)return new ActiveSnippet(o.ranges,s.value)}return o&&e.docChanged&&(o=o.map(e.changes)),o&&e.selection&&!o.selectionInsideField(e.selection)&&(o=null),o},provide:o=>EditorView.decorations.from(o,e=>e?e.deco:Decoration.none)});function fieldSelection(o,e){return EditorSelection.create(o.filter(s=>s.field==e).map(s=>EditorSelection.range(s.from,s.to)))}function snippet(o){let e=Snippet.parse(o);return(s,a,c,h)=>{let{text:d,ranges:g}=e.instantiate(s.state,c),_={changes:{from:c,to:h,insert:Text.of(d)},scrollIntoView:!0};if(g.length&&(_.selection=fieldSelection(g,0)),g.length>1){let b=new ActiveSnippet(g,0),$=_.effects=[setActive.of(b)];s.state.field(snippetState,!1)===void 0&&$.push(StateEffect.appendConfig.of([snippetState,addSnippetKeymap,snippetPointerHandler,baseTheme$1]))}s.dispatch(s.state.update(_))}}function moveField(o){return({state:e,dispatch:s})=>{let a=e.field(snippetState,!1);if(!a||o<0&&a.active==0)return!1;let c=a.active+o,h=o>0&&!a.ranges.some(d=>d.field==c+o);return s(e.update({selection:fieldSelection(a.ranges,c),effects:setActive.of(h?null:new ActiveSnippet(a.ranges,c))})),!0}}const clearSnippet=({state:o,dispatch:e})=>o.field(snippetState,!1)?(e(o.update({effects:setActive.of(null)})),!0):!1,nextSnippetField=moveField(1),prevSnippetField=moveField(-1),defaultSnippetKeymap=[{key:"Tab",run:nextSnippetField,shift:prevSnippetField},{key:"Escape",run:clearSnippet}],snippetKeymap=Facet.define({combine(o){return o.length?o[0]:defaultSnippetKeymap}}),addSnippetKeymap=Prec.highest(keymap.compute([snippetKeymap],o=>o.facet(snippetKeymap)));function snippetCompletion(o,e){return Object.assign(Object.assign({},e),{apply:snippet(o)})}const snippetPointerHandler=EditorView.domEventHandlers({mousedown(o,e){let s=e.state.field(snippetState,!1),a;if(!s||(a=e.posAtCoords({x:o.clientX,y:o.clientY}))==null)return!1;let c=s.ranges.find(h=>h.from<=a&&h.to>=a);return!c||c.field==s.active?!1:(e.dispatch({selection:fieldSelection(s.ranges,c.field),effects:setActive.of(s.ranges.some(h=>h.field>c.field)?new ActiveSnippet(s.ranges,c.field):null)}),!0)}}),defaults={brackets:["(","[","{","'",'"'],before:")]}:;>"},closeBracketEffect=StateEffect.define({map(o,e){let s=e.mapPos(o,-1,MapMode.TrackAfter);return s==null?void 0:s}}),skipBracketEffect=StateEffect.define({map(o,e){return e.mapPos(o)}}),closedBracket=new class extends RangeValue{};closedBracket.startSide=1;closedBracket.endSide=-1;const bracketState=StateField.define({create(){return RangeSet.empty},update(o,e){if(e.selection){let s=e.state.doc.lineAt(e.selection.main.head).from,a=e.startState.doc.lineAt(e.startState.selection.main.head).from;s!=e.changes.mapPos(a,-1)&&(o=RangeSet.empty)}o=o.map(e.changes);for(let s of e.effects)s.is(closeBracketEffect)?o=o.update({add:[closedBracket.range(s.value,s.value+1)]}):s.is(skipBracketEffect)&&(o=o.update({filter:a=>a!=s.value}));return o}});function closeBrackets(){return[inputHandler,bracketState]}const definedClosing="()[]{}<>";function closing(o){for(let e=0;e{if((android$1?o.composing:o.compositionStarted)||o.state.readOnly)return!1;let c=o.state.selection.main;if(a.length>2||a.length==2&&codePointSize(codePointAt(a,0))==1||e!=c.from||s!=c.to)return!1;let h=insertBracket(o.state,a);return h?(o.dispatch(h),!0):!1}),deleteBracketPair=({state:o,dispatch:e})=>{if(o.readOnly)return!1;let a=config(o,o.selection.main.head).brackets||defaults.brackets,c=null,h=o.changeByRange(d=>{if(d.empty){let g=prevChar(o.doc,d.head);for(let _ of a)if(_==g&&nextChar(o.doc,d.head)==closing(codePointAt(_,0)))return{changes:{from:d.head-_.length,to:d.head+_.length},range:EditorSelection.cursor(d.head-_.length),userEvent:"delete.backward"}}return{range:c=d}});return c||e(o.update(h,{scrollIntoView:!0})),!c},closeBracketsKeymap=[{key:"Backspace",run:deleteBracketPair}];function insertBracket(o,e){let s=config(o,o.selection.main.head),a=s.brackets||defaults.brackets;for(let c of a){let h=closing(codePointAt(c,0));if(e==c)return h==c?handleSame(o,c,a.indexOf(c+c+c)>-1):handleOpen(o,c,h,s.before||defaults.before);if(e==h&&closedBracketAt(o,o.selection.main.from))return handleClose(o,c,h)}return null}function closedBracketAt(o,e){let s=!1;return o.field(bracketState).between(0,o.doc.length,a=>{a==e&&(s=!0)}),s}function nextChar(o,e){let s=o.sliceString(e,e+2);return s.slice(0,codePointSize(codePointAt(s,0)))}function prevChar(o,e){let s=o.sliceString(e-2,e);return codePointSize(codePointAt(s,0))==s.length?s:s.slice(1)}function handleOpen(o,e,s,a){let c=null,h=o.changeByRange(d=>{if(!d.empty)return{changes:[{insert:e,from:d.from},{insert:s,from:d.to}],effects:closeBracketEffect.of(d.to+e.length),range:EditorSelection.range(d.anchor+e.length,d.head+e.length)};let g=nextChar(o.doc,d.head);return!g||/\s/.test(g)||a.indexOf(g)>-1?{changes:{insert:e+s,from:d.head},effects:closeBracketEffect.of(d.head+e.length),range:EditorSelection.cursor(d.head+e.length)}:{range:c=d}});return c?null:o.update(h,{scrollIntoView:!0,userEvent:"input.type"})}function handleClose(o,e,s){let a=null,c=o.selection.ranges.map(h=>h.empty&&nextChar(o.doc,h.head)==s?EditorSelection.cursor(h.head+s.length):a=h);return a?null:o.update({selection:EditorSelection.create(c,o.selection.mainIndex),scrollIntoView:!0,effects:o.selection.ranges.map(({from:h})=>skipBracketEffect.of(h))})}function handleSame(o,e,s){let a=null,c=o.changeByRange(h=>{if(!h.empty)return{changes:[{insert:e,from:h.from},{insert:e,from:h.to}],effects:closeBracketEffect.of(h.to+e.length),range:EditorSelection.range(h.anchor+e.length,h.head+e.length)};let d=h.head,g=nextChar(o.doc,d);if(g==e){if(nodeStart(o,d))return{changes:{insert:e+e,from:d},effects:closeBracketEffect.of(d+e.length),range:EditorSelection.cursor(d+e.length)};if(closedBracketAt(o,d)){let _=s&&o.sliceDoc(d,d+e.length*3)==e+e+e;return{range:EditorSelection.cursor(d+e.length*(_?3:1)),effects:skipBracketEffect.of(d)}}}else{if(s&&o.sliceDoc(d-2*e.length,d)==e+e&&nodeStart(o,d-2*e.length))return{changes:{insert:e+e+e+e,from:d},effects:closeBracketEffect.of(d+e.length),range:EditorSelection.cursor(d+e.length)};if(o.charCategorizer(d)(g)!=CharCategory.Word){let _=o.sliceDoc(d-1,d);if(_!=e&&o.charCategorizer(d)(_)!=CharCategory.Word&&!probablyInString(o,d,e))return{changes:{insert:e+e,from:d},effects:closeBracketEffect.of(d+e.length),range:EditorSelection.cursor(d+e.length)}}}return{range:a=h}});return a?null:o.update(c,{scrollIntoView:!0,userEvent:"input.type"})}function nodeStart(o,e){let s=syntaxTree(o).resolveInner(e+1);return s.parent&&s.from==e}function probablyInString(o,e,s){let a=syntaxTree(o).resolveInner(e,-1);for(let c=0;c<5;c++){if(o.sliceDoc(a.from,a.from+s.length)==s){let d=a.firstChild;for(;d&&d.from==a.from&&d.to-d.from>s.length;){if(o.sliceDoc(d.to-s.length,d.to)==s)return!1;d=d.firstChild}return!0}let h=a.to==e&&a.parent;if(!h)break;a=h}return!1}function autocompletion(o={}){return[completionState,completionConfig.of(o),completionPlugin,completionKeymapExt,baseTheme$1]}const completionKeymap=[{key:"Ctrl-Space",run:startCompletion},{key:"Escape",run:closeCompletion},{key:"ArrowDown",run:moveCompletionSelection(!0)},{key:"ArrowUp",run:moveCompletionSelection(!1)},{key:"PageDown",run:moveCompletionSelection(!0,"page")},{key:"PageUp",run:moveCompletionSelection(!1,"page")},{key:"Enter",run:acceptCompletion}],completionKeymapExt=Prec.highest(keymap.computeN([completionConfig],o=>o.facet(completionConfig).defaultKeymap?[completionKeymap]:[]));class SelectedDiagnostic{constructor(e,s,a){this.from=e,this.to=s,this.diagnostic=a}}class LintState{constructor(e,s,a){this.diagnostics=e,this.panel=s,this.selected=a}static init(e,s,a){let c=e,h=a.facet(lintConfig).markerFilter;h&&(c=h(c));let d=Decoration.set(c.map(g=>g.from==g.to||g.from==g.to-1&&a.doc.lineAt(g.from).to==g.from?Decoration.widget({widget:new DiagnosticWidget(g),diagnostic:g}).range(g.from):Decoration.mark({attributes:{class:"cm-lintRange cm-lintRange-"+g.severity},diagnostic:g}).range(g.from,g.to)),!0);return new LintState(d,s,findDiagnostic(d))}}function findDiagnostic(o,e=null,s=0){let a=null;return o.between(s,1e9,(c,h,{spec:d})=>{if(!(e&&d.diagnostic!=e))return a=new SelectedDiagnostic(c,h,d.diagnostic),!1}),a}function hideTooltip(o,e){return!!(o.effects.some(s=>s.is(setDiagnosticsEffect))||o.changes.touchesRange(e.pos))}function maybeEnableLint(o,e){return o.field(lintState,!1)?e:e.concat(StateEffect.appendConfig.of([lintState,EditorView.decorations.compute([lintState],s=>{let{selected:a,panel:c}=s.field(lintState);return!a||!c||a.from==a.to?Decoration.none:Decoration.set([activeMark.range(a.from,a.to)])}),hoverTooltip(lintTooltip,{hideOn:hideTooltip}),baseTheme]))}function setDiagnostics(o,e){return{effects:maybeEnableLint(o,[setDiagnosticsEffect.of(e)])}}const setDiagnosticsEffect=StateEffect.define(),togglePanel=StateEffect.define(),movePanelSelection=StateEffect.define(),lintState=StateField.define({create(){return new LintState(Decoration.none,null,null)},update(o,e){if(e.docChanged){let s=o.diagnostics.map(e.changes),a=null;if(o.selected){let c=e.changes.mapPos(o.selected.from,1);a=findDiagnostic(s,o.selected.diagnostic,c)||findDiagnostic(s,null,c)}o=new LintState(s,o.panel,a)}for(let s of e.effects)s.is(setDiagnosticsEffect)?o=LintState.init(s.value,o.panel,e.state):s.is(togglePanel)?o=new LintState(o.diagnostics,s.value?LintPanel.open:null,o.selected):s.is(movePanelSelection)&&(o=new LintState(o.diagnostics,o.panel,s.value));return o},provide:o=>[showPanel.from(o,e=>e.panel),EditorView.decorations.from(o,e=>e.diagnostics)]}),activeMark=Decoration.mark({class:"cm-lintRange cm-lintRange-active"});function lintTooltip(o,e,s){let{diagnostics:a}=o.state.field(lintState),c=[],h=2e8,d=0;a.between(e-(s<0?1:0),e+(s>0?1:0),(_,b,{spec:$})=>{e>=_&&e<=b&&(_==b||(e>_||s>0)&&(erenderDiagnostic(o,s,!1)))}const openLintPanel=o=>{let e=o.state.field(lintState,!1);(!e||!e.panel)&&o.dispatch({effects:maybeEnableLint(o.state,[togglePanel.of(!0)])});let s=getPanel(o,LintPanel.open);return s&&s.dom.querySelector(".cm-panel-lint ul").focus(),!0},closeLintPanel=o=>{let e=o.state.field(lintState,!1);return!e||!e.panel?!1:(o.dispatch({effects:togglePanel.of(!1)}),!0)},nextDiagnostic=o=>{let e=o.state.field(lintState,!1);if(!e)return!1;let s=o.state.selection.main,a=e.diagnostics.iter(s.to+1);return!a.value&&(a=e.diagnostics.iter(0),!a.value||a.from==s.from&&a.to==s.to)?!1:(o.dispatch({selection:{anchor:a.from,head:a.to},scrollIntoView:!0}),!0)},lintKeymap=[{key:"Mod-Shift-m",run:openLintPanel},{key:"F8",run:nextDiagnostic}],lintPlugin=ViewPlugin.fromClass(class{constructor(o){this.view=o,this.timeout=-1,this.set=!0;let{delay:e}=o.state.facet(lintConfig);this.lintTime=Date.now()+e,this.run=this.run.bind(this),this.timeout=setTimeout(this.run,e)}run(){let o=Date.now();if(oPromise.resolve(a(this.view)))).then(a=>{let c=a.reduce((h,d)=>h.concat(d));this.view.state.doc==e.doc&&this.view.dispatch(setDiagnostics(this.view.state,c))},a=>{logException(this.view.state,a)})}}update(o){let e=o.state.facet(lintConfig);(o.docChanged||e!=o.startState.facet(lintConfig))&&(this.lintTime=Date.now()+e.delay,this.set||(this.set=!0,this.timeout=setTimeout(this.run,e.delay)))}force(){this.set&&(this.lintTime=Date.now(),this.run())}destroy(){clearTimeout(this.timeout)}}),lintConfig=Facet.define({combine(o){return Object.assign({sources:o.map(e=>e.source)},combineConfig(o.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null}))},enables:lintPlugin});function assignKeys(o){let e=[];if(o)e:for(let{name:s}of o){for(let a=0;ah.toLowerCase()==c.toLowerCase())){e.push(c);continue e}}e.push("")}return e}function renderDiagnostic(o,e,s){var a;let c=s?assignKeys(e.actions):[];return crelt("li",{class:"cm-diagnostic cm-diagnostic-"+e.severity},crelt("span",{class:"cm-diagnosticText"},e.renderMessage?e.renderMessage():e.message),(a=e.actions)===null||a===void 0?void 0:a.map((h,d)=>{let g=j=>{j.preventDefault();let _e=findDiagnostic(o.state.field(lintState).diagnostics,e);_e&&h.apply(o,_e.from,_e.to)},{name:_}=h,b=c[d]?_.indexOf(c[d]):-1,$=b<0?_:[_.slice(0,b),crelt("u",_.slice(b,b+1)),_.slice(b+1)];return crelt("button",{type:"button",class:"cm-diagnosticAction",onclick:g,onmousedown:g,"aria-label":` Action: ${_}${b<0?"":` (access key "${c[d]})"`}.`},$)}),e.source&&crelt("div",{class:"cm-diagnosticSource"},e.source))}class DiagnosticWidget extends WidgetType{constructor(e){super(),this.diagnostic=e}eq(e){return e.diagnostic==this.diagnostic}toDOM(){return crelt("span",{class:"cm-lintPoint cm-lintPoint-"+this.diagnostic.severity})}}class PanelItem{constructor(e,s){this.diagnostic=s,this.id="item_"+Math.floor(Math.random()*4294967295).toString(16),this.dom=renderDiagnostic(e,s,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class LintPanel{constructor(e){this.view=e,this.items=[];let s=c=>{if(c.keyCode==27)closeLintPanel(this.view),this.view.focus();else if(c.keyCode==38||c.keyCode==33)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(c.keyCode==40||c.keyCode==34)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(c.keyCode==36)this.moveSelection(0);else if(c.keyCode==35)this.moveSelection(this.items.length-1);else if(c.keyCode==13)this.view.focus();else if(c.keyCode>=65&&c.keyCode<=90&&this.selectedIndex>=0){let{diagnostic:h}=this.items[this.selectedIndex],d=assignKeys(h.actions);for(let g=0;g{for(let h=0;hcloseLintPanel(this.view)},"\xD7")),this.update()}get selectedIndex(){let e=this.view.state.field(lintState).selected;if(!e)return-1;for(let s=0;s{let b=-1,$;for(let j=a;ja&&(this.items.splice(a,b-a),c=!0)),s&&$.diagnostic==s.diagnostic?$.dom.hasAttribute("aria-selected")||($.dom.setAttribute("aria-selected","true"),h=$):$.dom.hasAttribute("aria-selected")&&$.dom.removeAttribute("aria-selected"),a++});a({sel:h.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:d,panel:g})=>{d.topg.bottom&&(this.list.scrollTop+=d.bottom-g.bottom)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),c&&this.sync()}sync(){let e=this.list.firstChild;function s(){let a=e;e=a.nextSibling,a.remove()}for(let a of this.items)if(a.dom.parentNode==this.list){for(;e!=a.dom;)s();e=a.dom.nextSibling}else this.list.insertBefore(a.dom,e);for(;e;)s()}moveSelection(e){if(this.selectedIndex<0)return;let s=this.view.state.field(lintState),a=findDiagnostic(s.diagnostics,this.items[e].diagnostic);!a||this.view.dispatch({selection:{anchor:a.from,head:a.to},scrollIntoView:!0,effects:movePanelSelection.of(a)})}static open(e){return new LintPanel(e)}}function svg(o,e='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,${encodeURIComponent(o)}')`}function underline(o){return svg(``,'width="6" height="3"')}const baseTheme=EditorView.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:underline("#d11")},".cm-lintRange-warning":{backgroundImage:underline("orange")},".cm-lintRange-info":{backgroundImage:underline("#999")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}}});var basicSetup=function o(e){e===void 0&&(e={});var s=[];e.closeBracketsKeymap!==!1&&(s=s.concat(closeBracketsKeymap)),e.defaultKeymap!==!1&&(s=s.concat(defaultKeymap)),e.searchKeymap!==!1&&(s=s.concat(searchKeymap)),e.historyKeymap!==!1&&(s=s.concat(historyKeymap)),e.foldKeymap!==!1&&(s=s.concat(foldKeymap)),e.completionKeymap!==!1&&(s=s.concat(completionKeymap)),e.lintKeymap!==!1&&(s=s.concat(lintKeymap));var a=[];return e.lineNumbers!==!1&&a.push(lineNumbers()),e.highlightActiveLineGutter!==!1&&a.push(highlightActiveLineGutter()),e.highlightSpecialChars!==!1&&a.push(highlightSpecialChars()),e.history!==!1&&a.push(history()),e.foldGutter!==!1&&a.push(foldGutter()),e.drawSelection!==!1&&a.push(drawSelection()),e.dropCursor!==!1&&a.push(dropCursor()),e.allowMultipleSelections!==!1&&a.push(EditorState.allowMultipleSelections.of(!0)),e.indentOnInput!==!1&&a.push(indentOnInput()),e.syntaxHighlighting!==!1&&a.push(syntaxHighlighting(defaultHighlightStyle,{fallback:!0})),e.bracketMatching!==!1&&a.push(bracketMatching()),e.closeBrackets!==!1&&a.push(closeBrackets()),e.autocompletion!==!1&&a.push(autocompletion()),e.rectangularSelection!==!1&&a.push(rectangularSelection()),e.crosshairCursor!==!1&&a.push(crosshairCursor()),e.highlightActiveLine!==!1&&a.push(highlightActiveLine()),e.highlightSelectionMatches!==!1&&a.push(highlightSelectionMatches()),a.concat([keymap.of(s.flat())]).filter(Boolean)};const chalky="#e5c07b",coral="#e06c75",cyan="#56b6c2",invalid="#ffffff",ivory="#abb2bf",stone="#7d8799",malibu="#61afef",sage="#98c379",whiskey="#d19a66",violet="#c678dd",darkBackground="#21252b",highlightBackground="#2c313a",background="#282c34",tooltipBackground="#353a42",selection="#3E4451",cursor="#528bff",oneDarkTheme=EditorView.theme({"&":{color:ivory,backgroundColor:background},".cm-content":{caretColor:cursor},".cm-cursor, .cm-dropCursor":{borderLeftColor:cursor},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:selection},".cm-panels":{backgroundColor:darkBackground,color:ivory},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:highlightBackground},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847",outline:"1px solid #515a6b"},".cm-gutters":{backgroundColor:background,color:stone,border:"none"},".cm-activeLineGutter":{backgroundColor:highlightBackground},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:tooltipBackground},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:tooltipBackground,borderBottomColor:tooltipBackground},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:highlightBackground,color:ivory}}},{dark:!0}),oneDarkHighlightStyle=HighlightStyle.define([{tag:tags.keyword,color:violet},{tag:[tags.name,tags.deleted,tags.character,tags.propertyName,tags.macroName],color:coral},{tag:[tags.function(tags.variableName),tags.labelName],color:malibu},{tag:[tags.color,tags.constant(tags.name),tags.standard(tags.name)],color:whiskey},{tag:[tags.definition(tags.name),tags.separator],color:ivory},{tag:[tags.typeName,tags.className,tags.number,tags.changed,tags.annotation,tags.modifier,tags.self,tags.namespace],color:chalky},{tag:[tags.operator,tags.operatorKeyword,tags.url,tags.escape,tags.regexp,tags.link,tags.special(tags.string)],color:cyan},{tag:[tags.meta,tags.comment],color:stone},{tag:tags.strong,fontWeight:"bold"},{tag:tags.emphasis,fontStyle:"italic"},{tag:tags.strikethrough,textDecoration:"line-through"},{tag:tags.link,color:stone,textDecoration:"underline"},{tag:tags.heading,fontWeight:"bold",color:coral},{tag:[tags.atom,tags.bool,tags.special(tags.variableName)],color:whiskey},{tag:[tags.processingInstruction,tags.string,tags.inserted],color:sage},{tag:tags.invalid,color:invalid}]),oneDark=[oneDarkTheme,syntaxHighlighting(oneDarkHighlightStyle)];var getStatistics=o=>({line:o.state.doc.lineAt(o.state.selection.main.from),lineCount:o.state.doc.lines,lineBreak:o.state.lineBreak,length:o.state.doc.length,readOnly:o.state.readOnly,tabSize:o.state.tabSize,selection:o.state.selection,selectionAsSingle:o.state.selection.asSingle().main,ranges:o.state.selection.ranges,selectionCode:o.state.sliceDoc(o.state.selection.main.from,o.state.selection.main.to),selections:o.state.selection.ranges.map(e=>o.state.sliceDoc(e.from,e.to)),selectedText:o.state.selection.ranges.some(e=>!e.empty)});function useCodeMirror(o){var{value:e,selection:s,onChange:a,onStatistics:c,onCreateEditor:h,onUpdate:d,extensions:g=[],autoFocus:_,theme:b="light",height:$="",minHeight:j="",maxHeight:_e="",placeholder:et="",width:tt="",minWidth:nt="",maxWidth:st="",editable:rt=!0,readOnly:it=!1,indentWithTab:at=!0,basicSetup:ot=!0,root:ut}=o,[ct,ht]=react.exports.useState(),[lt,pt]=react.exports.useState(),[ft,gt]=react.exports.useState(),yt=EditorView.theme({"&":{backgroundColor:"#fff"}},{dark:!1}),mt=EditorView.theme({"&":{height:$,minHeight:j,maxHeight:_e,width:tt,minWidth:nt,maxWidth:st}}),Et=EditorView.updateListener.of(St=>{if(St.docChanged&&typeof a=="function"){var At=St.state.doc,dt=At.toString();a(dt,St)}c&&c(getStatistics(St))}),Ot=[Et,mt];switch(at&&Ot.unshift(keymap.of([indentWithTab])),ot&&(typeof ot=="boolean"?Ot.unshift(basicSetup()):Ot.unshift(basicSetup(ot))),et&&Ot.unshift(placeholder(et)),b){case"light":Ot.push(yt);break;case"dark":Ot.push(oneDark);break;default:Ot.push(b);break}return rt===!1&&Ot.push(EditorView.editable.of(!1)),it&&Ot.push(EditorState.readOnly.of(!0)),d&&typeof d=="function"&&Ot.push(EditorView.updateListener.of(d)),Ot=Ot.concat(g),react.exports.useEffect(()=>{if(ct&&!ft){var St=EditorState.create({doc:e,selection:s,extensions:Ot});if(gt(St),!lt){var At=new EditorView({state:St,parent:ct,root:ut});pt(At),h&&h(At,St)}}return()=>{lt&&(gt(void 0),pt(void 0))}},[ct,ft]),react.exports.useEffect(()=>ht(o.container),[o.container]),react.exports.useEffect(()=>()=>{lt&&(lt.destroy(),pt(void 0))},[lt]),react.exports.useEffect(()=>{_&<&<.focus()},[_,lt]),react.exports.useEffect(()=>{lt&<.dispatch({effects:StateEffect.reconfigure.of(Ot)})},[b,g,$,j,_e,tt,nt,st,et,rt,it,at,ot,a,d]),react.exports.useEffect(()=>{var St=lt?lt.state.doc.toString():"";lt&&e!==St&<.dispatch({changes:{from:0,to:St.length,insert:e||""}})},[e,lt]),{state:ft,setState:gt,view:lt,setView:pt,container:ct,setContainer:ht}}var jsxRuntime={exports:{}},reactJsxRuntime_production_min={};/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var f=react.exports,k=Symbol.for("react.element"),l=Symbol.for("react.fragment"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};function q(o,e,s){var a,c={},h=null,d=null;s!==void 0&&(h=""+s),e.key!==void 0&&(h=""+e.key),e.ref!==void 0&&(d=e.ref);for(a in e)m.call(e,a)&&!p.hasOwnProperty(a)&&(c[a]=e[a]);if(o&&o.defaultProps)for(a in e=o.defaultProps,e)c[a]===void 0&&(c[a]=e[a]);return{$$typeof:k,type:o,key:h,ref:d,props:c,_owner:n.current}}reactJsxRuntime_production_min.Fragment=l;reactJsxRuntime_production_min.jsx=q;reactJsxRuntime_production_min.jsxs=q;(function(o){o.exports=reactJsxRuntime_production_min})(jsxRuntime);const Fragment=jsxRuntime.exports.Fragment,jsx=jsxRuntime.exports.jsx,jsxs=jsxRuntime.exports.jsxs;var _excluded=["className","value","selection","extensions","onChange","onStatistics","onCreateEditor","onUpdate","autoFocus","theme","height","minHeight","maxHeight","width","minWidth","maxWidth","basicSetup","placeholder","indentWithTab","editable","readOnly","root"],ReactCodeMirror=react.exports.forwardRef((o,e)=>{var{className:s,value:a="",selection:c,extensions:h=[],onChange:d,onStatistics:g,onCreateEditor:_,onUpdate:b,autoFocus:$,theme:j="light",height:_e,minHeight:et,maxHeight:tt,width:nt,minWidth:st,maxWidth:rt,basicSetup:it,placeholder:at,indentWithTab:ot,editable:ut,readOnly:ct,root:ht}=o,lt=_objectWithoutPropertiesLoose(o,_excluded),pt=react.exports.useRef(null),{state:ft,view:gt,container:yt,setContainer:mt}=useCodeMirror({container:pt.current,root:ht,value:a,autoFocus:$,theme:j,height:_e,minHeight:et,maxHeight:tt,width:nt,minWidth:st,maxWidth:rt,basicSetup:it,placeholder:at,indentWithTab:ot,editable:ut,readOnly:ct,selection:c,onChange:d,onStatistics:g,onCreateEditor:_,onUpdate:b,extensions:h});if(react.exports.useImperativeHandle(e,()=>({editor:pt.current,state:ft,view:gt}),[pt,yt,ft,gt]),typeof a!="string")throw new Error("value must be typeof string but got "+typeof a);var Et=typeof j=="string"?"cm-theme-"+j:"cm-theme";return jsx("div",_extends({ref:pt,className:""+Et+(s?" "+s:"")},lt))});ReactCodeMirror.displayName="CodeMirror";class Stack{constructor(e,s,a,c,h,d,g,_,b,$=0,j){this.p=e,this.stack=s,this.state=a,this.reducePos=c,this.pos=h,this.score=d,this.buffer=g,this.bufferBase=_,this.curContext=b,this.lookAhead=$,this.parent=j}toString(){return`[${this.stack.filter((e,s)=>s%3==0).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(e,s,a=0){let c=e.parser.context;return new Stack(e,[],s,a,a,0,[],0,c?new StackContext(c,c.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(e,s){this.stack.push(this.state,s,this.bufferBase+this.buffer.length),this.state=e}reduce(e){let s=e>>19,a=e&65535,{parser:c}=this.p,h=c.dynamicPrecedence(a);if(h&&(this.score+=h),s==0){this.pushState(c.getGoto(this.state,a,!0),this.reducePos),ad;)this.stack.pop();this.reduceContext(a,g)}storeNode(e,s,a,c=4,h=!1){if(e==0&&(!this.stack.length||this.stack[this.stack.length-1]0&&d.buffer[g-4]==0&&d.buffer[g-1]>-1){if(s==a)return;if(d.buffer[g-2]>=s){d.buffer[g-2]=a;return}}}if(!h||this.pos==a)this.buffer.push(e,s,a,c);else{let d=this.buffer.length;if(d>0&&this.buffer[d-4]!=0)for(;d>0&&this.buffer[d-2]>a;)this.buffer[d]=this.buffer[d-4],this.buffer[d+1]=this.buffer[d-3],this.buffer[d+2]=this.buffer[d-2],this.buffer[d+3]=this.buffer[d-1],d-=4,c>4&&(c-=4);this.buffer[d]=e,this.buffer[d+1]=s,this.buffer[d+2]=a,this.buffer[d+3]=c}}shift(e,s,a){let c=this.pos;if(e&131072)this.pushState(e&65535,this.pos);else if((e&262144)==0){let h=e,{parser:d}=this.p;(a>this.pos||s<=d.maxNode)&&(this.pos=a,d.stateFlag(h,1)||(this.reducePos=a)),this.pushState(h,c),this.shiftContext(s,c),s<=d.maxNode&&this.buffer.push(s,c,a,4)}else this.pos=a,this.shiftContext(s,c),s<=this.p.parser.maxNode&&this.buffer.push(s,c,a,4)}apply(e,s,a){e&65536?this.reduce(e):this.shift(e,s,a)}useNode(e,s){let a=this.p.reused.length-1;(a<0||this.p.reused[a]!=e)&&(this.p.reused.push(e),a++);let c=this.pos;this.reducePos=this.pos=c+e.length,this.pushState(s,c),this.buffer.push(a,c,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,e,this,this.p.stream.reset(this.pos-e.length)))}split(){let e=this,s=e.buffer.length;for(;s>0&&e.buffer[s-2]>e.reducePos;)s-=4;let a=e.buffer.slice(s),c=e.bufferBase+s;for(;e&&c==e.bufferBase;)e=e.parent;return new Stack(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,a,c,this.curContext,this.lookAhead,e)}recoverByDelete(e,s){let a=e<=this.p.parser.maxNode;a&&this.storeNode(e,this.pos,s,4),this.storeNode(0,this.pos,s,a?8:4),this.pos=this.reducePos=s,this.score-=190}canShift(e){for(let s=new SimulatedStack(this);;){let a=this.p.parser.stateSlot(s.state,4)||this.p.parser.hasAction(s.state,e);if((a&65536)==0)return!0;if(a==0)return!1;s.reduce(a)}}recoverByInsert(e){if(this.stack.length>=300)return[];let s=this.p.parser.nextStates(this.state);if(s.length>4<<1||this.stack.length>=120){let c=[];for(let h=0,d;h_&1&&g==d)||c.push(s[h],d)}s=c}let a=[];for(let c=0;c>19,c=e&65535,h=this.stack.length-a*3;if(h<0||s.getGoto(this.stack[h],c,!1)<0)return!1;this.storeNode(0,this.reducePos,this.reducePos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(e),!0}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(this.stack.length!=3)return!1;let{parser:e}=this.p;return e.data[e.stateSlot(this.state,1)]==65535&&!e.stateSlot(this.state,4)}restart(){this.state=this.stack[0],this.stack.length=0}sameState(e){if(this.state!=e.state||this.stack.length!=e.stack.length)return!1;for(let s=0;sthis.lookAhead&&(this.emitLookAhead(),this.lookAhead=e)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}}class StackContext{constructor(e,s){this.tracker=e,this.context=s,this.hash=e.strict?e.hash(s):0}}var Recover;(function(o){o[o.Insert=200]="Insert",o[o.Delete=190]="Delete",o[o.Reduce=100]="Reduce",o[o.MaxNext=4]="MaxNext",o[o.MaxInsertStackDepth=300]="MaxInsertStackDepth",o[o.DampenInsertStackDepth=120]="DampenInsertStackDepth"})(Recover||(Recover={}));class SimulatedStack{constructor(e){this.start=e,this.state=e.state,this.stack=e.stack,this.base=this.stack.length}reduce(e){let s=e&65535,a=e>>19;a==0?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=(a-1)*3;let c=this.start.p.parser.getGoto(this.stack[this.base-3],s,!0);this.state=c}}class StackBufferCursor{constructor(e,s,a){this.stack=e,this.pos=s,this.index=a,this.buffer=e.buffer,this.index==0&&this.maybeNext()}static create(e,s=e.bufferBase+e.buffer.length){return new StackBufferCursor(e,s,s-e.bufferBase)}maybeNext(){let e=this.stack.parent;e!=null&&(this.index=this.stack.bufferBase-e.bufferBase,this.stack=e,this.buffer=e.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,this.index==0&&this.maybeNext()}fork(){return new StackBufferCursor(this.stack,this.pos,this.index)}}class CachedToken{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const nullToken=new CachedToken;class InputStream{constructor(e,s){this.input=e,this.ranges=s,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=nullToken,this.rangeIndex=0,this.pos=this.chunkPos=s[0].from,this.range=s[0],this.end=s[s.length-1].to,this.readNext()}resolveOffset(e,s){let a=this.range,c=this.rangeIndex,h=this.pos+e;for(;ha.to:h>=a.to;){if(c==this.ranges.length-1)return null;let d=this.ranges[++c];h+=d.from-a.to,a=d}return h}peek(e){let s=this.chunkOff+e,a,c;if(s>=0&&s=this.chunk2Pos&&ag.to&&(this.chunk2=this.chunk2.slice(0,g.to-a)),c=this.chunk2.charCodeAt(0)}}return a>=this.token.lookAhead&&(this.token.lookAhead=a+1),c}acceptToken(e,s=0){let a=s?this.resolveOffset(s,-1):this.pos;if(a==null||a=this.chunk2Pos&&this.posthis.range.to?e.slice(0,this.range.to-this.pos):e,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(e=1){for(this.chunkOff+=e;this.pos+e>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();e-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=e,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(e,s){if(s?(this.token=s,s.start=e,s.lookAhead=e+1,s.value=s.extended=-1):this.token=nullToken,this.pos!=e){if(this.pos=e,e==this.end)return this.setDone(),this;for(;e=this.range.to;)this.range=this.ranges[++this.rangeIndex];e>=this.chunkPos&&e=this.chunkPos&&s<=this.chunkPos+this.chunk.length)return this.chunk.slice(e-this.chunkPos,s-this.chunkPos);if(e>=this.chunk2Pos&&s<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(e-this.chunk2Pos,s-this.chunk2Pos);if(e>=this.range.from&&s<=this.range.to)return this.input.read(e,s);let a="";for(let c of this.ranges){if(c.from>=s)break;c.to>e&&(a+=this.input.read(Math.max(c.from,e),Math.min(c.to,s)))}return a}}class TokenGroup{constructor(e,s){this.data=e,this.id=s}token(e,s){readToken(this.data,e,s,this.id)}}TokenGroup.prototype.contextual=TokenGroup.prototype.fallback=TokenGroup.prototype.extend=!1;class ExternalTokenizer{constructor(e,s={}){this.token=e,this.contextual=!!s.contextual,this.fallback=!!s.fallback,this.extend=!!s.extend}}function readToken(o,e,s,a){let c=0,h=1<0){let et=o[_e];if(g.allows(et)&&(e.token.value==-1||e.token.value==et||d.overrides(et,e.token.value))){e.acceptToken(et);break}}let b=e.next,$=0,j=o[c+2];if(e.next<0&&j>$&&o[_+j*3-3]==65535){c=o[_+j*3-1];continue e}for(;$>1,et=_+_e+(_e<<1),tt=o[et],nt=o[et+1];if(b=nt)$=_e+1;else{c=o[et+2],e.advance();continue e}}break}}function decodeArray(o,e=Uint16Array){if(typeof o!="string")return o;let s=null;for(let a=0,c=0;a=92&&d--,d>=34&&d--;let _=d-32;if(_>=46&&(_-=46,g=!0),h+=_,g)break;h*=46}s?s[c++]=h:s=new e(h)}return s}const verbose=typeof process<"u"&&process.env&&/\bparse\b/.test(process.env.LOG);let stackIDs=null;var Safety;(function(o){o[o.Margin=25]="Margin"})(Safety||(Safety={}));function cutAt(o,e,s){let a=o.cursor(IterMode.IncludeAnonymous);for(a.moveTo(e);;)if(!(s<0?a.childBefore(e):a.childAfter(e)))for(;;){if((s<0?a.toe)&&!a.type.isError)return s<0?Math.max(0,Math.min(a.to-1,e-25)):Math.min(o.length,Math.max(a.from+1,e+25));if(s<0?a.prevSibling():a.nextSibling())break;if(!a.parent())return s<0?0:o.length}}class FragmentCursor{constructor(e,s){this.fragments=e,this.nodeSet=s,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let e=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(e){for(this.safeFrom=e.openStart?cutAt(e.tree,e.from+e.offset,1)-e.offset:e.from,this.safeTo=e.openEnd?cutAt(e.tree,e.to+e.offset,-1)-e.offset:e.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(e.tree),this.start.push(-e.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(e){if(ee)return this.nextStart=d,null;if(h instanceof Tree){if(d==e){if(d=Math.max(this.safeFrom,e)&&(this.trees.push(h),this.start.push(d),this.index.push(0))}else this.index[s]++,this.nextStart=d+h.length}}}class TokenCache{constructor(e,s){this.stream=s,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=e.tokenizers.map(a=>new CachedToken)}getActions(e){let s=0,a=null,{parser:c}=e.p,{tokenizers:h}=c,d=c.stateSlot(e.state,3),g=e.curContext?e.curContext.hash:0,_=0;for(let b=0;bj.end+25&&(_=Math.max(j.lookAhead,_)),j.value!=0)){let _e=s;if(j.extended>-1&&(s=this.addActions(e,j.extended,j.end,s)),s=this.addActions(e,j.value,j.end,s),!$.extend&&(a=j,s>_e))break}}for(;this.actions.length>s;)this.actions.pop();return _&&e.setLookAhead(_),!a&&e.pos==this.stream.end&&(a=new CachedToken,a.value=e.p.parser.eofTerm,a.start=a.end=e.pos,s=this.addActions(e,a.value,a.end,s)),this.mainToken=a,this.actions}getMainToken(e){if(this.mainToken)return this.mainToken;let s=new CachedToken,{pos:a,p:c}=e;return s.start=a,s.end=Math.min(a+1,c.stream.end),s.value=a==c.stream.end?c.parser.eofTerm:0,s}updateCachedToken(e,s,a){if(s.token(this.stream.reset(a.pos,e),a),e.value>-1){let{parser:c}=a.p;for(let h=0;h=0&&a.p.parser.dialect.allows(d>>1)){(d&1)==0?e.value=d>>1:e.extended=d>>1;break}}}else e.value=0,e.end=Math.min(a.p.stream.end,a.pos+1)}putAction(e,s,a,c){for(let h=0;he.bufferLength*4?new FragmentCursor(a,e.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let e=this.stacks,s=this.minStackPos,a=this.stacks=[],c,h;for(let d=0;ds)a.push(g);else{if(this.advanceStack(g,a,e))continue;{c||(c=[],h=[]),c.push(g);let _=this.tokens.getMainToken(g);h.push(_.value,_.end)}}break}}if(!a.length){let d=c&&findFinished(c);if(d)return this.stackToTree(d);if(this.parser.strict)throw verbose&&c&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+s);this.recovering||(this.recovering=5)}if(this.recovering&&c){let d=this.stoppedAt!=null&&c[0].pos>this.stoppedAt?c[0]:this.runRecovery(c,h,a);if(d)return this.stackToTree(d.forceAll())}if(this.recovering){let d=this.recovering==1?1:this.recovering*3;if(a.length>d)for(a.sort((g,_)=>_.score-g.score);a.length>d;)a.pop();a.some(g=>g.reducePos>s)&&this.recovering--}else if(a.length>1){e:for(let d=0;d500&&b.buffer.length>500)if((g.score-b.score||g.buffer.length-b.buffer.length)>0)a.splice(_--,1);else{a.splice(d--,1);continue e}}}}this.minStackPos=a[0].pos;for(let d=1;d ":"";if(this.stoppedAt!=null&&c>this.stoppedAt)return e.forceReduce()?e:null;if(this.fragments){let b=e.curContext&&e.curContext.tracker.strict,$=b?e.curContext.hash:0;for(let j=this.fragments.nodeAt(c);j;){let _e=this.parser.nodeSet.types[j.type.id]==j.type?h.getGoto(e.state,j.type.id):-1;if(_e>-1&&j.length&&(!b||(j.prop(NodeProp.contextHash)||0)==$))return e.useNode(j,_e),verbose&&console.log(d+this.stackID(e)+` (via reuse of ${h.getName(j.type.id)})`),!0;if(!(j instanceof Tree)||j.children.length==0||j.positions[0]>0)break;let et=j.children[0];if(et instanceof Tree&&j.positions[0]==0)j=et;else break}}let g=h.stateSlot(e.state,4);if(g>0)return e.reduce(g),verbose&&console.log(d+this.stackID(e)+` (via always-reduce ${h.getName(g&65535)})`),!0;if(e.stack.length>=15e3)for(;e.stack.length>9e3&&e.forceReduce(););let _=this.tokens.getActions(e);for(let b=0;b<_.length;){let $=_[b++],j=_[b++],_e=_[b++],et=b==_.length||!a,tt=et?e:e.split();if(tt.apply($,j,_e),verbose&&console.log(d+this.stackID(tt)+` (via ${($&65536)==0?"shift":`reduce of ${h.getName($&65535)}`} for ${h.getName(j)} @ ${c}${tt==e?"":", split"})`),et)return!0;tt.pos>c?s.push(tt):a.push(tt)}return!1}advanceFully(e,s){let a=e.pos;for(;;){if(!this.advanceStack(e,null,null))return!1;if(e.pos>a)return pushStackDedup(e,s),!0}}runRecovery(e,s,a){let c=null,h=!1;for(let d=0;d ":"";if(g.deadEnd&&(h||(h=!0,g.restart(),verbose&&console.log($+this.stackID(g)+" (restarted)"),this.advanceFully(g,a))))continue;let j=g.split(),_e=$;for(let et=0;j.forceReduce()&&et<10&&(verbose&&console.log(_e+this.stackID(j)+" (via force-reduce)"),!this.advanceFully(j,a));et++)verbose&&(_e=this.stackID(j)+" -> ");for(let et of g.recoverByInsert(_))verbose&&console.log($+this.stackID(et)+" (via recover-insert)"),this.advanceFully(et,a);this.stream.end>g.pos?(b==g.pos&&(b++,_=0),g.recoverByDelete(_,b),verbose&&console.log($+this.stackID(g)+` (via recover-delete ${this.parser.getName(_)})`),pushStackDedup(g,a)):(!c||c.scoreo;class ContextTracker{constructor(e){this.start=e.start,this.shift=e.shift||id,this.reduce=e.reduce||id,this.reuse=e.reuse||id,this.hash=e.hash||(()=>0),this.strict=e.strict!==!1}}class LRParser extends Parser{constructor(e){if(super(),this.wrappers=[],e.version!=14)throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (${14})`);let s=e.nodeNames.split(" ");this.minRepeatTerm=s.length;for(let g=0;ge.topRules[g][1]),c=[];for(let g=0;g=0)h($,_,g[b++]);else{let j=g[b+-$];for(let _e=-$;_e>0;_e--)h(g[b++],_,j);b++}}}this.nodeSet=new NodeSet(s.map((g,_)=>NodeType.define({name:_>=this.minRepeatTerm?void 0:g,id:_,props:c[_],top:a.indexOf(_)>-1,error:_==0,skipped:e.skippedNodes&&e.skippedNodes.indexOf(_)>-1}))),e.propSources&&(this.nodeSet=this.nodeSet.extend(...e.propSources)),this.strict=!1,this.bufferLength=DefaultBufferLength;let d=decodeArray(e.tokenData);this.context=e.context,this.specializerSpecs=e.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let g=0;gtypeof g=="number"?new TokenGroup(d,g):g),this.topRules=e.topRules,this.dialects=e.dialects||{},this.dynamicPrecedences=e.dynamicPrecedences||null,this.tokenPrecTable=e.tokenPrec,this.termNames=e.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(e,s,a){let c=new Parse(this,e,s,a);for(let h of this.wrappers)c=h(c,e,s,a);return c}getGoto(e,s,a=!1){let c=this.goto;if(s>=c[0])return-1;for(let h=c[s+1];;){let d=c[h++],g=d&1,_=c[h++];if(g&&a)return _;for(let b=h+(d>>1);h0}validAction(e,s){if(s==this.stateSlot(e,4))return!0;for(let a=this.stateSlot(e,1);;a+=3){if(this.data[a]==65535)if(this.data[a+1]==1)a=pair(this.data,a+2);else return!1;if(s==pair(this.data,a+1))return!0}}nextStates(e){let s=[];for(let a=this.stateSlot(e,1);;a+=3){if(this.data[a]==65535)if(this.data[a+1]==1)a=pair(this.data,a+2);else break;if((this.data[a+2]&1)==0){let c=this.data[a+1];s.some((h,d)=>d&1&&h==c)||s.push(this.data[a],c)}}return s}overrides(e,s){let a=findOffset(this.data,this.tokenPrecTable,s);return a<0||findOffset(this.data,this.tokenPrecTable,e){let c=e.tokenizers.find(h=>h.from==a);return c?c.to:a})),e.specializers&&(s.specializers=this.specializers.slice(),s.specializerSpecs=this.specializerSpecs.map((a,c)=>{let h=e.specializers.find(g=>g.from==a.external);if(!h)return a;let d=Object.assign(Object.assign({},a),{external:h.to});return s.specializers[c]=getSpecializer(d),d})),e.contextTracker&&(s.context=e.contextTracker),e.dialect&&(s.dialect=this.parseDialect(e.dialect)),e.strict!=null&&(s.strict=e.strict),e.wrap&&(s.wrappers=s.wrappers.concat(e.wrap)),e.bufferLength!=null&&(s.bufferLength=e.bufferLength),s}hasWrappers(){return this.wrappers.length>0}getName(e){return this.termNames?this.termNames[e]:String(e<=this.maxNode&&this.nodeSet.types[e].name||e)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(e){let s=this.dynamicPrecedences;return s==null?0:s[e]||0}parseDialect(e){let s=Object.keys(this.dialects),a=s.map(()=>!1);if(e)for(let h of e.split(" ")){let d=s.indexOf(h);d>=0&&(a[d]=!0)}let c=null;for(let h=0;ha)&&s.p.parser.stateFlag(s.state,2)&&(!e||e.scoreo.external(s,a)<<1|e}return o.get}const TSExtends=1,noSemi=281,incdec=2,incdecPrefix=3,templateContent=282,InterpolationStart=4,templateEnd=283,insertSemi=284,spaces=286,newline=287,LineComment=5,BlockComment=6,Dialect_ts=1,space=[9,10,11,12,13,32,133,160,5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8232,8233,8239,8287,12288],braceR=125,braceL=123,semicolon=59,slash=47,star=42,plus=43,minus=45,dollar=36,backtick=96,backslash=92,trackNewline=new ContextTracker({start:!1,shift(o,e){return e==LineComment||e==BlockComment||e==spaces?o:e==newline},strict:!1}),insertSemicolon=new ExternalTokenizer((o,e)=>{let{next:s}=o;(s==braceR||s==-1||e.context)&&e.canShift(insertSemi)&&o.acceptToken(insertSemi)},{contextual:!0,fallback:!0}),noSemicolon=new ExternalTokenizer((o,e)=>{let{next:s}=o,a;space.indexOf(s)>-1||s==slash&&((a=o.peek(1))==slash||a==star)||s!=braceR&&s!=semicolon&&s!=-1&&!e.context&&e.canShift(noSemi)&&o.acceptToken(noSemi)},{contextual:!0}),incdecToken=new ExternalTokenizer((o,e)=>{let{next:s}=o;if((s==plus||s==minus)&&(o.advance(),s==o.next)){o.advance();let a=!e.context&&e.canShift(incdec);o.acceptToken(a?incdec:incdecPrefix)}},{contextual:!0}),template=new ExternalTokenizer(o=>{for(let e=!1,s=0;;s++){let{next:a}=o;if(a<0){s&&o.acceptToken(templateContent);break}else if(a==backtick){s?o.acceptToken(templateContent):o.acceptToken(templateEnd,1);break}else if(a==braceL&&e){s==1?o.acceptToken(InterpolationStart,1):o.acceptToken(templateContent,-1);break}else if(a==10&&s){o.advance(),o.acceptToken(templateContent);break}else a==backslash&&o.advance();e=a==dollar,o.advance()}}),tsExtends=new ExternalTokenizer((o,e)=>{if(!(o.next!=101||!e.dialectEnabled(Dialect_ts))){o.advance();for(let s=0;s<6;s++){if(o.next!="xtends".charCodeAt(s))return;o.advance()}o.next>=57&&o.next<=65||o.next>=48&&o.next<=90||o.next==95||o.next>=97&&o.next<=122||o.next>160||o.acceptToken(TSExtends)}}),jsHighlight=styleTags({"get set async static":tags.modifier,"for while do if else switch try catch finally return throw break continue default case":tags.controlKeyword,"in of await yield void typeof delete instanceof":tags.operatorKeyword,"let var const function class extends":tags.definitionKeyword,"import export from":tags.moduleKeyword,"with debugger as new":tags.keyword,TemplateString:tags.special(tags.string),super:tags.atom,BooleanLiteral:tags.bool,this:tags.self,null:tags.null,Star:tags.modifier,VariableName:tags.variableName,"CallExpression/VariableName TaggedTemplateExpression/VariableName":tags.function(tags.variableName),VariableDefinition:tags.definition(tags.variableName),Label:tags.labelName,PropertyName:tags.propertyName,PrivatePropertyName:tags.special(tags.propertyName),"CallExpression/MemberExpression/PropertyName":tags.function(tags.propertyName),"FunctionDeclaration/VariableDefinition":tags.function(tags.definition(tags.variableName)),"ClassDeclaration/VariableDefinition":tags.definition(tags.className),PropertyDefinition:tags.definition(tags.propertyName),PrivatePropertyDefinition:tags.definition(tags.special(tags.propertyName)),UpdateOp:tags.updateOperator,LineComment:tags.lineComment,BlockComment:tags.blockComment,Number:tags.number,String:tags.string,ArithOp:tags.arithmeticOperator,LogicOp:tags.logicOperator,BitOp:tags.bitwiseOperator,CompareOp:tags.compareOperator,RegExp:tags.regexp,Equals:tags.definitionOperator,Arrow:tags.function(tags.punctuation),": Spread":tags.punctuation,"( )":tags.paren,"[ ]":tags.squareBracket,"{ }":tags.brace,"InterpolationStart InterpolationEnd":tags.special(tags.brace),".":tags.derefOperator,", ;":tags.separator,TypeName:tags.typeName,TypeDefinition:tags.definition(tags.typeName),"type enum interface implements namespace module declare":tags.definitionKeyword,"abstract global Privacy readonly override":tags.modifier,"is keyof unique infer":tags.operatorKeyword,JSXAttributeValue:tags.attributeValue,JSXText:tags.content,"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag":tags.angleBracket,"JSXIdentifier JSXNameSpacedName":tags.tagName,"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName":tags.attributeName}),spec_identifier={__proto__:null,export:18,as:23,from:29,default:32,async:37,function:38,this:48,true:56,false:56,void:66,typeof:70,null:86,super:88,new:122,await:139,yield:141,delete:142,class:152,extends:154,public:197,private:197,protected:197,readonly:199,instanceof:220,in:222,const:224,import:256,keyof:307,unique:311,infer:317,is:351,abstract:371,implements:373,type:375,let:378,var:380,interface:387,enum:391,namespace:397,module:399,declare:403,global:407,for:428,of:437,while:440,with:444,do:448,if:452,else:454,switch:458,case:464,try:470,catch:474,finally:478,return:482,throw:486,break:490,continue:494,debugger:498},spec_word={__proto__:null,async:109,get:111,set:113,public:161,private:161,protected:161,static:163,abstract:165,override:167,readonly:173,new:355},spec_LessThan={__proto__:null,"<":129},parser=LRParser.deserialize({version:14,states:"$8SO`QdOOO'QQ(C|O'#ChO'XOWO'#DVO)dQdO'#D]O)tQdO'#DhO){QdO'#DrO-xQdO'#DxOOQO'#E]'#E]O.]Q`O'#E[O.bQ`O'#E[OOQ(C['#Ef'#EfO0aQ(C|O'#ItO2wQ(C|O'#IuO3eQ`O'#EzO3jQ!bO'#FaOOQ(C['#FS'#FSO3rO#tO'#FSO4QQ&jO'#FhO5bQ`O'#FgOOQ(C['#Iu'#IuOOQ(CW'#It'#ItOOQS'#J^'#J^O5gQ`O'#HpO5lQ(ChO'#HqOOQS'#Ih'#IhOOQS'#Hr'#HrQ`QdOOO){QdO'#DjO5tQ`O'#G[O5yQ&jO'#CmO6XQ`O'#EZO6dQ`O'#EgO6iQ,UO'#FRO7TQ`O'#G[O7YQ`O'#G`O7eQ`O'#G`O7sQ`O'#GcO7sQ`O'#GdO7sQ`O'#GfO5tQ`O'#GiO8dQ`O'#GlO9rQ`O'#CdO:SQ`O'#GyO:[Q`O'#HPO:[Q`O'#HRO`QdO'#HTO:[Q`O'#HVO:[Q`O'#HYO:aQ`O'#H`O:fQ(CjO'#HfO){QdO'#HhO:qQ(CjO'#HjO:|Q(CjO'#HlO5lQ(ChO'#HnO){QdO'#DWOOOW'#Ht'#HtO;XOWO,59qOOQ(C[,59q,59qO=jQtO'#ChO=tQdO'#HuO>XQ`O'#IvO@WQtO'#IvO'dQdO'#IvO@_Q`O,59wO@uQ7[O'#DbOAnQ`O'#E]OA{Q`O'#JROBWQ`O'#JQOBWQ`O'#JQOB`Q`O,5:yOBeQ`O'#JPOBlQaO'#DyO5yQ&jO'#EZOBzQ`O'#EZOCVQpO'#FROOQ(C[,5:S,5:SOC_QdO,5:SOE]Q(C|O,5:^OEyQ`O,5:dOFdQ(ChO'#JOO7YQ`O'#I}OFkQ`O'#I}OFsQ`O,5:xOFxQ`O'#I}OGWQdO,5:vOIWQ&jO'#EWOJeQ`O,5:vOKwQ&jO'#DlOLOQdO'#DqOLYQ7[O,5;PO){QdO,5;POOQS'#Er'#ErOOQS'#Et'#EtO){QdO,5;RO){QdO,5;RO){QdO,5;RO){QdO,5;RO){QdO,5;RO){QdO,5;RO){QdO,5;RO){QdO,5;RO){QdO,5;RO){QdO,5;RO){QdO,5;ROOQS'#Ex'#ExOLbQdO,5;cOOQ(C[,5;h,5;hOOQ(C[,5;i,5;iONbQ`O,5;iOOQ(C[,5;j,5;jO){QdO'#IPONgQ(ChO,5[OOQS'#Ik'#IkOOQS,5>],5>]OOQS-E;p-E;pO!+kQ(C|O,5:UOOQ(CX'#Cp'#CpO!,[Q&kO,5Q,5>QO){QdO,5>QO5lQ(ChO,5>SOOQS,5>U,5>UO!8cQ`O,5>UOOQS,5>W,5>WO!8cQ`O,5>WOOQS,5>Y,5>YO!8hQpO,59rOOOW-E;r-E;rOOQ(C[1G/]1G/]O!8mQtO,5>aO'dQdO,5>aOOQO,5>f,5>fO!8wQdO'#HuOOQO-E;s-E;sO!9UQ`O,5?bO!9^QtO,5?bO!9eQ`O,5?lOOQ(C[1G/c1G/cO!9mQ!bO'#DTOOQO'#Ix'#IxO){QdO'#IxO!:[Q!bO'#IxO!:yQ!bO'#DcO!;[Q7[O'#DcO!=gQdO'#DcO!=nQ`O'#IwO!=vQ`O,59|O!={Q`O'#EaO!>ZQ`O'#JSO!>cQ`O,5:zO!>yQ7[O'#DcO){QdO,5?mO!?TQ`O'#HzOOQO-E;x-E;xO!9eQ`O,5?lOOQ(CW1G0e1G0eO!@aQ7[O'#D|OOQ(C[,5:e,5:eO){QdO,5:eOIWQ&jO,5:eO!@hQaO,5:eO:aQ`O,5:uO!-OQ!bO,5:uO!-WQ&jO,5:uO5yQ&jO,5:uOOQ(C[1G/n1G/nOOQ(C[1G0O1G0OOOQ(CW'#EV'#EVO){QdO,5?jO!@sQ(ChO,5?jO!AUQ(ChO,5?jO!A]Q`O,5?iO!AeQ`O'#H|O!A]Q`O,5?iOOQ(CW1G0d1G0dO7YQ`O,5?iOOQ(C[1G0b1G0bO!BPQ(C|O1G0bO!CRQ(CyO,5:rOOQ(C]'#Fq'#FqO!CoQ(C}O'#IqOGWQdO1G0bO!EqQ,VO'#IyO!E{Q`O,5:WO!FQQtO'#IzO){QdO'#IzO!F[Q`O,5:]OOQ(C]'#DT'#DTOOQ(C[1G0k1G0kO!FaQ`O1G0kO!HrQ(C|O1G0mO!HyQ(C|O1G0mO!K^Q(C|O1G0mO!KeQ(C|O1G0mO!MlQ(C|O1G0mO!NPQ(C|O1G0mO#!pQ(C|O1G0mO#!wQ(C|O1G0mO#%[Q(C|O1G0mO#%cQ(C|O1G0mO#'WQ(C|O1G0mO#*QQMlO'#ChO#+{QMlO1G0}O#-vQMlO'#IuOOQ(C[1G1T1G1TO#.ZQ(C|O,5>kOOQ(CW-E;}-E;}O#.zQ(C}O1G0mOOQ(C[1G0m1G0mO#1PQ(C|O1G1QO#1pQ!bO,5;sO#1uQ!bO,5;tO#1zQ!bO'#F[O#2`Q`O'#FZOOQO'#JW'#JWOOQO'#H}'#H}O#2eQ!bO1G1]OOQ(C[1G1]1G1]OOOO1G1f1G1fO#2sQMlO'#ItO#2}Q`O,5;}OLbQdO,5;}OOOO-E;|-E;|OOQ(C[1G1Y1G1YOOQ(C[,5PQtO1G1VOOQ(C[1G1X1G1XO5tQ`O1G2}O#>WQ`O1G2}O#>]Q`O1G2}O#>bQ`O1G2}OOQS1G2}1G2}O#>gQ&kO1G2bO7YQ`O'#JQO7YQ`O'#EaO7YQ`O'#IWO#>xQ(ChO,5?yOOQS1G2f1G2fO!0VQ`O1G2lOIWQ&jO1G2iO#?TQ`O1G2iOOQS1G2j1G2jOIWQ&jO1G2jO#?YQaO1G2jO#?bQ7[O'#GhOOQS1G2l1G2lO!'VQ7[O'#IYO!0[QpO1G2oOOQS1G2o1G2oOOQS,5=Y,5=YO#?jQ&kO,5=[O5tQ`O,5=[O#6SQ`O,5=_O5bQ`O,5=_O!-OQ!bO,5=_O!-WQ&jO,5=_O5yQ&jO,5=_O#?{Q`O'#JaO#@WQ`O,5=`OOQS1G.j1G.jO#@]Q(ChO1G.jO#@hQ`O1G.jO#@mQ`O1G.jO5lQ(ChO1G.jO#@uQtO,5@OO#APQ`O,5@OO#A[QdO,5=gO#AcQ`O,5=gO7YQ`O,5@OOOQS1G3P1G3PO`QdO1G3POOQS1G3V1G3VOOQS1G3X1G3XO:[Q`O1G3ZO#AhQdO1G3]O#EcQdO'#H[OOQS1G3`1G3`O#EpQ`O'#HbO:aQ`O'#HdOOQS1G3f1G3fO#ExQdO1G3fO5lQ(ChO1G3lOOQS1G3n1G3nOOQ(CW'#Fx'#FxO5lQ(ChO1G3pO5lQ(ChO1G3rOOOW1G/^1G/^O#IvQpO,5aO#JYQ`O1G4|O#JbQ`O1G5WO#JjQ`O,5?dOLbQdO,5:{O7YQ`O,5:{O:aQ`O,59}OLbQdO,59}O!-OQ!bO,59}O#JoQMlO,59}OOQO,5:{,5:{O#JyQ7[O'#HvO#KaQ`O,5?cOOQ(C[1G/h1G/hO#KiQ7[O'#H{O#K}Q`O,5?nOOQ(CW1G0f1G0fO!;[Q7[O,59}O#LVQtO1G5XO7YQ`O,5>fOOQ(CW'#ES'#ESO#LaQ(DjO'#ETO!@XQ7[O'#D}OOQO'#Hy'#HyO#L{Q7[O,5:hOOQ(C[,5:h,5:hO#MSQ7[O'#D}O#MeQ7[O'#D}O#MlQ7[O'#EYO#MoQ7[O'#ETO#M|Q7[O'#ETO!@XQ7[O'#ETO#NaQ`O1G0PO#NfQqO1G0POOQ(C[1G0P1G0PO){QdO1G0POIWQ&jO1G0POOQ(C[1G0a1G0aO:aQ`O1G0aO!-OQ!bO1G0aO!-WQ&jO1G0aO#NmQ(C|O1G5UO){QdO1G5UO#N}Q(ChO1G5UO$ `Q`O1G5TO7YQ`O,5>hOOQO,5>h,5>hO$ hQ`O,5>hOOQO-E;z-E;zO$ `Q`O1G5TO$ vQ(C}O,59jO$#xQ(C}O,5m,5>mO$-rQ`O,5>mOOQ(C]1G2P1G2PP$-wQ`O'#IRPOQ(C]-Eo,5>oOOQO-Ep,5>pOOQO-Ex,5>xOOQO-E<[-E<[OOQ(C[7+&q7+&qO$6OQ`O7+(iO5lQ(ChO7+(iO5tQ`O7+(iO$6TQ`O7+(iO$6YQaO7+'|OOQ(CW,5>r,5>rOOQ(CW-Et,5>tOOQO-EO,5>OOOQS7+)Q7+)QOOQS7+)W7+)WOOQS7+)[7+)[OOQS7+)^7+)^OOQO1G5O1G5OO$:nQMlO1G0gO$:xQ`O1G0gOOQO1G/i1G/iO$;TQMlO1G/iO:aQ`O1G/iOLbQdO'#DcOOQO,5>b,5>bOOQO-E;t-E;tOOQO,5>g,5>gOOQO-E;y-E;yO!-OQ!bO1G/iO:aQ`O,5:iOOQO,5:o,5:oO){QdO,5:oO$;_Q(ChO,5:oO$;jQ(ChO,5:oO!-OQ!bO,5:iOOQO-E;w-E;wOOQ(C[1G0S1G0SO!@XQ7[O,5:iO$;xQ7[O,5:iO$PQ`O7+*oO$>XQ(C}O1G2[O$@^Q(C}O1G2^O$BcQ(C}O1G1yO$DnQ,VO,5>cOOQO-E;u-E;uO$DxQtO,5>dO){QdO,5>dOOQO-E;v-E;vO$ESQ`O1G5QO$E[QMlO1G0bO$GcQMlO1G0mO$GjQMlO1G0mO$IkQMlO1G0mO$IrQMlO1G0mO$KgQMlO1G0mO$KzQMlO1G0mO$NXQMlO1G0mO$N`QMlO1G0mO%!aQMlO1G0mO%!hQMlO1G0mO%$]QMlO1G0mO%$pQ(C|O<kOOOO7+'T7+'TOOOW1G/R1G/ROOQ(C]1G4X1G4XOJjQ&jO7+'zO%*VQ`O,5>lO5tQ`O,5>lOOQO-EnO%+dQ`O,5>nOIWQ&jO,5>nOOQO-Ew,5>wO%.vQ`O,5>wO%.{Q`O,5>wOOQO-EvOOQO-EqOOQO-EsOOQO-E{AN>{OOQOAN>uAN>uO%3rQ(C|OAN>{O:aQ`OAN>uO){QdOAN>{O!-OQ!bOAN>uO&)wQ(ChOAN>{O&*SQ(C}OG26lOOQ(CWG26bG26bOOQS!$( t!$( tOOQO<QQ`O'#E[O&>YQ`O'#EzO&>_Q`O'#EgO&>dQ`O'#JRO&>oQ`O'#JPO&>zQ`O,5:vO&?PQ,VO,5aO!O&PO~Ox&SO!W&^O!X&VO!Y&VO'^$dO~O]&TOk&TO!Q&WO'g&QO!S'kP!S'vP~P@dO!O'sX!R'sX!]'sX!c'sX'p'sX~O!{'sX#W#PX!S'sX~PA]O!{&_O!O'uX!R'uX~O!R&`O!O'tX~O!O&cO~O!{#eO~PA]OP&gO!T&dO!o&fO']$bO~Oc&lO!d$ZO']$bO~Ou$oO!d$nO~O!S&mO~P`Ou!{Ov!{Ox!|O!b!yO!d!zO'fQOQ!faZ!faj!fa!R!fa!a!fa!j!fa#[!fa#]!fa#^!fa#_!fa#`!fa#a!fa#b!fa#c!fa#e!fa#g!fa#i!fa#j!fa'p!fa'w!fa'x!fa~O_!fa'W!fa!O!fa!c!fan!fa!T!fa%Q!fa!]!fa~PCfO!c&nO~O!]!wO!{&pO'p&oO!R'rX_'rX'W'rX~O!c'rX~PFOO!R&tO!c'qX~O!c&vO~Ox$uO!T$vO#V&wO']$bO~OQTORTO]cOb!kOc!jOhcOjTOkcOlcOqTOsTOxRO{cO|cO}cO!TSO!_kO!dUO!gTO!hTO!iTO!jTO!kTO!n!iO#t!lO#x^O']9aO'fQO'oYO'|aO~O]#qOh$QOj#rOk#qOl#qOq$ROs9tOx#yO!T#zO!_;eO!d#vO#V9}O#t$VO$_9wO$a9zO$d$WO']&{O'b$PO'f#sO~O#W&}O~O]#qOh$QOj#rOk#qOl#qOq$ROs$SOx#yO!T#zO!_$XO!d#vO#V$YO#t$VO$_$TO$a$UO$d$WO']&{O'b$PO'f#sO~O'a'mP~PJjO!Q'RO!c'nP~P){O'g'TO'oYO~OQ9^OR9^O]cOb;`Oc!jOhcOj9^OkcOlcOq9^Os9^OxRO{cO|cO}cO!T!bO!_9`O!dUO!g9^O!h9^O!i9^O!j9^O!k9^O!n!iO#t!lO#x^O']'cO'fQO'oYO'|;^O~O!d!zO~O!R#bO_$]a'W$]a!c$]a!O$]a!T$]a%Q$]a!]$]a~O#d'jO~PIWO!]'lO!T'yX#w'yX#z'yX$R'yX~Ou'mO~P! YOu'mO!T'yX#w'yX#z'yX$R'yX~O!T'oO#w'sO#z'nO$R'tO~O!Q'wO~PLbO#z#fO$R'zO~OP$eXu$eXx$eX!b$eX'w$eX'x$eX~OPfX!RfX!{fX'afX'a$eX~P!!rOk'|O~OS'}O'U(OO'V(QO~OP(ZOu(SOx(TO'w(VO'x(XO~O'a(RO~P!#{O'a([O~O]#qOh$QOj#rOk#qOl#qOq$ROs9tOx#yO!T#zO!_;eO!d#vO#V9}O#t$VO$_9wO$a9zO$d$WO'b$PO'f#sO~O!Q(`O'](]O!c'}P~P!$jO#W(bO~O!d(cO~O!Q(hO'](eO!O(OP~P!$jOj(uOx(mO!W(sO!X(lO!Y(lO!d(cO!x(tO$w(oO'^$dO'g(jO~O!S(rO~P!&jO!b!yOP'eXu'eXx'eX'w'eX'x'eX!R'eX!{'eX~O'a'eX#m'eX~P!'cOP(xO!{(wO!R'dX'a'dX~O!R(yO'a'cX~O']${O'a'cP~O'](|O~O!d)RO~O']&{O~Ox$uO!Q!rO!T$vO#U!uO#V!rO']$bO!c'qP~O!]!wO#W)VO~OQ#^OZ#dOj#ROu!{Ov!{Ox!|O!a#TO!b!yO!d!zO!j#^O#[#PO#]#QO#^#QO#_#QO#`#SO#a#TO#b#TO#c#TO#e#UO#g#WO#i#YO#j#ZO'fQO'p#[O'w!}O'x#OO~O_!^a!R!^a'W!^a!O!^a!c!^an!^a!T!^a%Q!^a!]!^a~P!)wOP)_O!T&dO!o)^O%Q)]O'b$PO~O!])aO!T'`X_'`X!R'`X'W'`X~O!d$ZO'b$PO~O!d$ZO']$bO'b$PO~O!]!wO#W&}O~O])lO%R)mO'])iO!S(VP~O!R)nO^(UX~O'g'TO~OZ)rO~O^)sO~O!T$lO']$bO'^$dO^(UP~Ox$uO!Q)xO!R&`O!T$vO']$bO!O'tP~O]&ZOk&ZO!Q)yO'g'TO!S'vP~O!R)zO_(RX'W(RX~O!{*OO'b$PO~OP*RO!T#zO'b$PO~O!T*TO~Ou*VO!TSO~O!n*[O~Oc*aO~O'](|O!S(TP~Oc$jO~O%RtO']${O~P8wOZ*gO^*fO~OQTORTO]cObnOcmOhcOjTOkcOlcOqTOsTOxRO{cO|cO}cO!_kO!dUO!gTO!hTO!iTO!jTO!kTO!nlO#x^O%PqO'fQO'oYO'|aO~O!T!bO#t!lO']9aO~P!1_O^*fO_$^O'W$^O~O_*kO#d*mO%T*mO%U*mO~P){O!d%`O~O%t*rO~O!T*tO~O&V*vO&X*wOQ&SaR&SaX&Sa]&Sa_&Sab&Sac&Sah&Saj&Sak&Sal&Saq&Sas&Sax&Sa{&Sa|&Sa}&Sa!T&Sa!_&Sa!d&Sa!g&Sa!h&Sa!i&Sa!j&Sa!k&Sa!n&Sa#d&Sa#t&Sa#x&Sa%P&Sa%R&Sa%T&Sa%U&Sa%X&Sa%Z&Sa%^&Sa%_&Sa%a&Sa%n&Sa%t&Sa%v&Sa%x&Sa%z&Sa%}&Sa&T&Sa&Z&Sa&]&Sa&_&Sa&a&Sa&c&Sa'S&Sa']&Sa'f&Sa'o&Sa'|&Sa!S&Sa%{&Sa`&Sa&Q&Sa~O']*|O~On+PO~O!O&ia!R&ia~P!)wO!Q+TO!O&iX!R&iX~P){O!R%zO!O'ja~O!O'ja~P>aO!R&`O!O'ta~O!RwX!R!ZX!SwX!S!ZX!]wX!]!ZX!d!ZX!{wX'b!ZX~O!]+YO!{+XO!R#TX!R'lX!S#TX!S'lX!]'lX!d'lX'b'lX~O!]+[O!d$ZO'b$PO!R!VX!S!VX~O]&ROk&ROx&SO'g(jO~OQ9^OR9^O]cOb;`Oc!jOhcOj9^OkcOlcOq9^Os9^OxRO{cO|cO}cO!T!bO!_9`O!dUO!g9^O!h9^O!i9^O!j9^O!k9^O!n!iO#t!lO#x^O'fQO'oYO'|;^O~O']:SO~P!;jO!R+`O!S'kX~O!S+bO~O!]+YO!{+XO!R#TX!S#TX~O!R+cO!S'vX~O!S+eO~O]&ROk&ROx&SO'^$dO'g(jO~O!X+fO!Y+fO~P!>hOx$uO!Q+hO!T$vO']$bO!O&nX!R&nX~O_+lO!W+oO!X+kO!Y+kO!r+sO!s+qO!t+rO!u+pO!x+tO'^$dO'g(jO'o+iO~O!S+nO~P!?iOP+yO!T&dO!o+xO~O!{,PO!R'ra!c'ra_'ra'W'ra~O!]!wO~P!@sO!R&tO!c'qa~Ox$uO!Q,SO!T$vO#U,UO#V,SO']$bO!R&pX!c&pX~O_#Oi!R#Oi'W#Oi!O#Oi!c#Oin#Oi!T#Oi%Q#Oi!]#Oi~P!)wOP;tOu(SOx(TO'w(VO'x(XO~O#W!za!R!za!c!za!{!za!T!za_!za'W!za!O!za~P!BpO#W'eXQ'eXZ'eX_'eXj'eXv'eX!a'eX!d'eX!j'eX#['eX#]'eX#^'eX#_'eX#`'eX#a'eX#b'eX#c'eX#e'eX#g'eX#i'eX#j'eX'W'eX'f'eX'p'eX!c'eX!O'eX!T'eXn'eX%Q'eX!]'eX~P!'cO!R,_O'a'mX~P!#{O'a,aO~O!R,bO!c'nX~P!)wO!c,eO~O!O,fO~OQ#^Ou!{Ov!{Ox!|O!b!yO!d!zO!j#^O'fQOZ#Zi_#Zij#Zi!R#Zi!a#Zi#]#Zi#^#Zi#_#Zi#`#Zi#a#Zi#b#Zi#c#Zi#e#Zi#g#Zi#i#Zi#j#Zi'W#Zi'p#Zi'w#Zi'x#Zi!O#Zi!c#Zin#Zi!T#Zi%Q#Zi!]#Zi~O#[#Zi~P!FfO#[#PO~P!FfOQ#^Ou!{Ov!{Ox!|O!b!yO!d!zO!j#^O#[#PO#]#QO#^#QO#_#QO'fQOZ#Zi_#Zi!R#Zi!a#Zi#`#Zi#a#Zi#b#Zi#c#Zi#e#Zi#g#Zi#i#Zi#j#Zi'W#Zi'p#Zi'w#Zi'x#Zi!O#Zi!c#Zin#Zi!T#Zi%Q#Zi!]#Zi~Oj#Zi~P!IQOj#RO~P!IQOQ#^Oj#ROu!{Ov!{Ox!|O!b!yO!d!zO!j#^O#[#PO#]#QO#^#QO#_#QO#`#SO'fQO_#Zi!R#Zi#e#Zi#g#Zi#i#Zi#j#Zi'W#Zi'p#Zi'w#Zi'x#Zi!O#Zi!c#Zin#Zi!T#Zi%Q#Zi!]#Zi~OZ#Zi!a#Zi#a#Zi#b#Zi#c#Zi~P!KlOZ#dO!a#TO#a#TO#b#TO#c#TO~P!KlOQ#^OZ#dOj#ROu!{Ov!{Ox!|O!a#TO!b!yO!d!zO!j#^O#[#PO#]#QO#^#QO#_#QO#`#SO#a#TO#b#TO#c#TO#e#UO'fQO_#Zi!R#Zi#g#Zi#i#Zi#j#Zi'W#Zi'p#Zi'x#Zi!O#Zi!c#Zin#Zi!T#Zi%Q#Zi!]#Zi~O'w#Zi~P!NdO'w!}O~P!NdOQ#^OZ#dOj#ROu!{Ov!{Ox!|O!a#TO!b!yO!d!zO!j#^O#[#PO#]#QO#^#QO#_#QO#`#SO#a#TO#b#TO#c#TO#e#UO#g#WO'fQO'w!}O_#Zi!R#Zi#i#Zi#j#Zi'W#Zi'p#Zi!O#Zi!c#Zin#Zi!T#Zi%Q#Zi!]#Zi~O'x#Zi~P##OO'x#OO~P##OOQ#^OZ#dOj#ROu!{Ov!{Ox!|O!a#TO!b!yO!d!zO!j#^O#[#PO#]#QO#^#QO#_#QO#`#SO#a#TO#b#TO#c#TO#e#UO#g#WO#i#YO'fQO'w!}O'x#OO~O_#Zi!R#Zi#j#Zi'W#Zi'p#Zi!O#Zi!c#Zin#Zi!T#Zi%Q#Zi!]#Zi~P#%jOQ[XZ[Xj[Xu[Xv[Xx[X!a[X!b[X!d[X!j[X!{[X#WdX#[[X#][X#^[X#_[X#`[X#a[X#b[X#c[X#e[X#g[X#i[X#j[X#o[X'f[X'p[X'w[X'x[X!R[X!S[X~O#m[X~P#'}OQ#^OZ9rOj9gOu!{Ov!{Ox!|O!a9iO!b!yO!d!zO!j#^O#[9eO#]9fO#^9fO#_9fO#`9hO#a9iO#b9iO#c9iO#e9jO#g9lO#i9nO#j9oO'fQO'p#[O'w!}O'x#OO~O#m,hO~P#*XOQ'iXZ'iXj'iXu'iXv'iXx'iX!a'iX!b'iX!d'iX!j'iX#['iX#]'iX#^'iX#_'iX#`'iX#a'iX#b'iX#e'iX#g'iX#i'iX#j'iX'f'iX'p'iX'w'iX'x'iX!R'iX~O!{9sO#o9sO#c'iX#m'iX!S'iX~P#,SO_&sa!R&sa'W&sa!c&san&sa!O&sa!T&sa%Q&sa!]&sa~P!)wOQ#ZiZ#Zi_#Zij#Ziv#Zi!R#Zi!a#Zi!b#Zi!d#Zi!j#Zi#[#Zi#]#Zi#^#Zi#_#Zi#`#Zi#a#Zi#b#Zi#c#Zi#e#Zi#g#Zi#i#Zi#j#Zi'W#Zi'f#Zi'p#Zi!O#Zi!c#Zin#Zi!T#Zi%Q#Zi!]#Zi~P!BpO_#ni!R#ni'W#ni!O#ni!c#nin#ni!T#ni%Q#ni!]#ni~P!)wO#z,jO~O#z,kO~O!]'lO!{,lO!T$OX#w$OX#z$OX$R$OX~O!Q,mO~O!T'oO#w,oO#z'nO$R,pO~O!R9pO!S'hX~P#*XO!S,qO~O$R,sO~OS'}O'U(OO'V,vO~O],yOk,yO!O,zO~O!RdX!]dX!cdX!c$eX'pdX~P!!rO!c-QO~P!BpO!R-RO!]!wO'p&oO!c'}X~O!c-WO~O!Q(`O']$bO!c'}P~O#W-YO~O!O$eX!R$eX!]$lX~P!!rO!R-ZO!O(OX~P!BpO!]-]O~O!O-_O~Oj-cO!]!wO!d$ZO'b$PO'p&oO~O!])aO~O_$^O!R-hO'W$^O~O!S-jO~P!&jO!X-kO!Y-kO'^$dO'g(jO~Ox-mO'g(jO~O!x-nO~O']${O!R&xX'a&xX~O!R(yO'a'ca~O'a-sO~Ou-tOv-tOx-uOPra'wra'xra!Rra!{ra~O'ara#mra~P#7pOu(SOx(TOP$^a'w$^a'x$^a!R$^a!{$^a~O'a$^a#m$^a~P#8fOu(SOx(TOP$`a'w$`a'x$`a!R$`a!{$`a~O'a$`a#m$`a~P#9XO]-vO~O#W-wO~O'a$na!R$na!{$na#m$na~P!#{O#W-zO~OP.TO!T&dO!o.SO%Q.RO~O]#qOj#rOk#qOl#qOq$ROs9tOx#yO!T#zO!_;eO!d#vO#V9}O#t$VO$_9wO$a9zO$d$WO'b$PO'f#sO~Oh.VO'].UO~P#:yO!])aO!T'`a_'`a!R'`a'W'`a~O#W.]O~OZ[X!RdX!SdX~O!R.^O!S(VX~O!S.`O~OZ.aO~O].cO'])iO~O!T$lO']$bO^'QX!R'QX~O!R)nO^(Ua~O!c.fO~P!)wO].hO~OZ.iO~O^.jO~OP.TO!T&dO!o.SO%Q.RO'b$PO~O!R)zO_(Ra'W(Ra~O!{.pO~OP.sO!T#zO~O'g'TO!S(SP~OP.}O!T.yO!o.|O%Q.{O'b$PO~OZ/XO!R/VO!S(TX~O!S/YO~O^/[O_$^O'W$^O~O]/]O~O]/^O'](|O~O#c/_O%r/`O~P0zO!{#eO#c/_O%r/`O~O_/aO~P){O_/cO~O%{/gOQ%yiR%yiX%yi]%yi_%yib%yic%yih%yij%yik%yil%yiq%yis%yix%yi{%yi|%yi}%yi!T%yi!_%yi!d%yi!g%yi!h%yi!i%yi!j%yi!k%yi!n%yi#d%yi#t%yi#x%yi%P%yi%R%yi%T%yi%U%yi%X%yi%Z%yi%^%yi%_%yi%a%yi%n%yi%t%yi%v%yi%x%yi%z%yi%}%yi&T%yi&Z%yi&]%yi&_%yi&a%yi&c%yi'S%yi']%yi'f%yi'o%yi'|%yi!S%yi`%yi&Q%yi~O`/mO!S/kO&Q/lO~P`O!TSO!d/oO~O&X*wOQ&SiR&SiX&Si]&Si_&Sib&Sic&Sih&Sij&Sik&Sil&Siq&Sis&Six&Si{&Si|&Si}&Si!T&Si!_&Si!d&Si!g&Si!h&Si!i&Si!j&Si!k&Si!n&Si#d&Si#t&Si#x&Si%P&Si%R&Si%T&Si%U&Si%X&Si%Z&Si%^&Si%_&Si%a&Si%n&Si%t&Si%v&Si%x&Si%z&Si%}&Si&T&Si&Z&Si&]&Si&_&Si&a&Si&c&Si'S&Si']&Si'f&Si'o&Si'|&Si!S&Si%{&Si`&Si&Q&Si~O!R#bOn$]a~O!O&ii!R&ii~P!)wO!R%zO!O'ji~O!R&`O!O'ti~O!O/uO~O!R!Va!S!Va~P#*XO]&ROk&RO!Q/{O'g(jO!R&jX!S&jX~P@dO!R+`O!S'ka~O]&ZOk&ZO!Q)yO'g'TO!R&oX!S&oX~O!R+cO!S'va~O!O'ui!R'ui~P!)wO_$^O!]!wO!d$ZO!j0VO!{0TO'W$^O'b$PO'p&oO~O!S0YO~P!?iO!X0ZO!Y0ZO'^$dO'g(jO'o+iO~O!W0[O~P#MSO!TSO!W0[O!u0^O!x0_O~P#MSO!W0[O!s0aO!t0aO!u0^O!x0_O~P#MSO!T&dO~O!T&dO~P!BpO!R'ri!c'ri_'ri'W'ri~P!)wO!{0jO!R'ri!c'ri_'ri'W'ri~O!R&tO!c'qi~Ox$uO!T$vO#V0lO']$bO~O#WraQraZra_rajra!ara!bra!dra!jra#[ra#]ra#^ra#_ra#`ra#ara#bra#cra#era#gra#ira#jra'Wra'fra'pra!cra!Ora!Tranra%Qra!]ra~P#7pO#W$^aQ$^aZ$^a_$^aj$^av$^a!a$^a!b$^a!d$^a!j$^a#[$^a#]$^a#^$^a#_$^a#`$^a#a$^a#b$^a#c$^a#e$^a#g$^a#i$^a#j$^a'W$^a'f$^a'p$^a!c$^a!O$^a!T$^an$^a%Q$^a!]$^a~P#8fO#W$`aQ$`aZ$`a_$`aj$`av$`a!a$`a!b$`a!d$`a!j$`a#[$`a#]$`a#^$`a#_$`a#`$`a#a$`a#b$`a#c$`a#e$`a#g$`a#i$`a#j$`a'W$`a'f$`a'p$`a!c$`a!O$`a!T$`an$`a%Q$`a!]$`a~P#9XO#W$naQ$naZ$na_$naj$nav$na!R$na!a$na!b$na!d$na!j$na#[$na#]$na#^$na#_$na#`$na#a$na#b$na#c$na#e$na#g$na#i$na#j$na'W$na'f$na'p$na!c$na!O$na!T$na!{$nan$na%Q$na!]$na~P!BpO_#Oq!R#Oq'W#Oq!O#Oq!c#Oqn#Oq!T#Oq%Q#Oq!]#Oq~P!)wO!R&kX'a&kX~PJjO!R,_O'a'ma~O!Q0tO!R&lX!c&lX~P){O!R,bO!c'na~O!R,bO!c'na~P!)wO#m!fa!S!fa~PCfO#m!^a!R!^a!S!^a~P#*XO!T1XO#x^O$P1YO~O!S1^O~On1_O~P!BpO_$Yq!R$Yq'W$Yq!O$Yq!c$Yqn$Yq!T$Yq%Q$Yq!]$Yq~P!)wO!O1`O~O],yOk,yO~Ou(SOx(TO'x(XOP$xi'w$xi!R$xi!{$xi~O'a$xi#m$xi~P$.POu(SOx(TOP$zi'w$zi'x$zi!R$zi!{$zi~O'a$zi#m$zi~P$.rO'p#[O~P!BpO!Q1cO']$bO!R&tX!c&tX~O!R-RO!c'}a~O!R-RO!]!wO!c'}a~O!R-RO!]!wO'p&oO!c'}a~O'a$gi!R$gi!{$gi#m$gi~P!#{O!Q1kO'](eO!O&vX!R&vX~P!$jO!R-ZO!O(Oa~O!R-ZO!O(Oa~P!BpO!]!wO~O!]!wO#c1sO~Oj1vO!]!wO'p&oO~O!R'di'a'di~P!#{O!{1yO!R'di'a'di~P!#{O!c1|O~O_$Zq!R$Zq'W$Zq!O$Zq!c$Zqn$Zq!T$Zq%Q$Zq!]$Zq~P!)wO!R2QO!T(PX~P!BpO!T&dO%Q2TO~O!T&dO%Q2TO~P!BpO!T$eX$u[X_$eX!R$eX'W$eX~P!!rO$u2XOPgXugXxgX!TgX'wgX'xgX_gX!RgX'WgX~O$u2XO~O]2_O%R2`O'])iO!R'PX!S'PX~O!R.^O!S(Va~OZ2dO~O^2eO~O]2hO~OP2jO!T&dO!o2iO%Q2TO~O_$^O'W$^O~P!BpO!T#zO~P!BpO!R2oO!{2qO!S(SX~O!S2rO~Ox;oO!W2{O!X2tO!Y2tO!r2zO!s2yO!t2yO!x2xO'^$dO'g(jO'o+iO~O!S2wO~P$7ZOP3SO!T.yO!o3RO%Q3QO~OP3SO!T.yO!o3RO%Q3QO'b$PO~O'](|O!R'OX!S'OX~O!R/VO!S(Ta~O]3^O'g3]O~O]3_O~O^3aO~O!c3dO~P){O_3fO~O_3fO~P){O#c3hO%r3iO~PFOO`/mO!S3mO&Q/lO~P`O!]3oO~O!R#Ti!S#Ti~P#*XO!{3qO!R#Ti!S#Ti~O!R!Vi!S!Vi~P#*XO_$^O!{3xO'W$^O~O_$^O!]!wO!{3xO'W$^O~O!X3|O!Y3|O'^$dO'g(jO'o+iO~O_$^O!]!wO!d$ZO!j3}O!{3xO'W$^O'b$PO'p&oO~O!W4OO~P$;xO!W4OO!u4RO!x4SO~P$;xO_$^O!]!wO!j3}O!{3xO'W$^O'p&oO~O!R'rq!c'rq_'rq'W'rq~P!)wO!R&tO!c'qq~O#W$xiQ$xiZ$xi_$xij$xiv$xi!a$xi!b$xi!d$xi!j$xi#[$xi#]$xi#^$xi#_$xi#`$xi#a$xi#b$xi#c$xi#e$xi#g$xi#i$xi#j$xi'W$xi'f$xi'p$xi!c$xi!O$xi!T$xin$xi%Q$xi!]$xi~P$.PO#W$ziQ$ziZ$zi_$zij$ziv$zi!a$zi!b$zi!d$zi!j$zi#[$zi#]$zi#^$zi#_$zi#`$zi#a$zi#b$zi#c$zi#e$zi#g$zi#i$zi#j$zi'W$zi'f$zi'p$zi!c$zi!O$zi!T$zin$zi%Q$zi!]$zi~P$.rO#W$giQ$giZ$gi_$gij$giv$gi!R$gi!a$gi!b$gi!d$gi!j$gi#[$gi#]$gi#^$gi#_$gi#`$gi#a$gi#b$gi#c$gi#e$gi#g$gi#i$gi#j$gi'W$gi'f$gi'p$gi!c$gi!O$gi!T$gi!{$gin$gi%Q$gi!]$gi~P!BpO!R&ka'a&ka~P!#{O!R&la!c&la~P!)wO!R,bO!c'ni~O#m#Oi!R#Oi!S#Oi~P#*XOQ#^Ou!{Ov!{Ox!|O!b!yO!d!zO!j#^O'fQOZ#Zij#Zi!a#Zi#]#Zi#^#Zi#_#Zi#`#Zi#a#Zi#b#Zi#c#Zi#e#Zi#g#Zi#i#Zi#j#Zi#m#Zi'p#Zi'w#Zi'x#Zi!R#Zi!S#Zi~O#[#Zi~P$EiO#[9eO~P$EiOQ#^Ou!{Ov!{Ox!|O!b!yO!d!zO!j#^O#[9eO#]9fO#^9fO#_9fO'fQOZ#Zi!a#Zi#`#Zi#a#Zi#b#Zi#c#Zi#e#Zi#g#Zi#i#Zi#j#Zi#m#Zi'p#Zi'w#Zi'x#Zi!R#Zi!S#Zi~Oj#Zi~P$GqOj9gO~P$GqOQ#^Oj9gOu!{Ov!{Ox!|O!b!yO!d!zO!j#^O#[9eO#]9fO#^9fO#_9fO#`9hO'fQO#e#Zi#g#Zi#i#Zi#j#Zi#m#Zi'p#Zi'w#Zi'x#Zi!R#Zi!S#Zi~OZ#Zi!a#Zi#a#Zi#b#Zi#c#Zi~P$IyOZ9rO!a9iO#a9iO#b9iO#c9iO~P$IyOQ#^OZ9rOj9gOu!{Ov!{Ox!|O!a9iO!b!yO!d!zO!j#^O#[9eO#]9fO#^9fO#_9fO#`9hO#a9iO#b9iO#c9iO#e9jO'fQO#g#Zi#i#Zi#j#Zi#m#Zi'p#Zi'x#Zi!R#Zi!S#Zi~O'w#Zi~P$L_O'w!}O~P$L_OQ#^OZ9rOj9gOu!{Ov!{Ox!|O!a9iO!b!yO!d!zO!j#^O#[9eO#]9fO#^9fO#_9fO#`9hO#a9iO#b9iO#c9iO#e9jO#g9lO'fQO'w!}O#i#Zi#j#Zi#m#Zi'p#Zi!R#Zi!S#Zi~O'x#Zi~P$NgO'x#OO~P$NgOQ#^OZ9rOj9gOu!{Ov!{Ox!|O!a9iO!b!yO!d!zO!j#^O#[9eO#]9fO#^9fO#_9fO#`9hO#a9iO#b9iO#c9iO#e9jO#g9lO#i9nO'fQO'w!}O'x#OO~O#j#Zi#m#Zi'p#Zi!R#Zi!S#Zi~P%!oO_#ky!R#ky'W#ky!O#ky!c#kyn#ky!T#ky%Q#ky!]#ky~P!)wOP;vOu(SOx(TO'w(VO'x(XO~OQ#ZiZ#Zij#Ziv#Zi!a#Zi!b#Zi!d#Zi!j#Zi#[#Zi#]#Zi#^#Zi#_#Zi#`#Zi#a#Zi#b#Zi#c#Zi#e#Zi#g#Zi#i#Zi#j#Zi#m#Zi'f#Zi'p#Zi!R#Zi!S#Zi~P%%aO!b!yOP'eXu'eXx'eX'w'eX'x'eX!S'eX~OQ'eXZ'eXj'eXv'eX!a'eX!d'eX!j'eX#['eX#]'eX#^'eX#_'eX#`'eX#a'eX#b'eX#c'eX#e'eX#g'eX#i'eX#j'eX#m'eX'f'eX'p'eX!R'eX~P%'eO#m#ni!R#ni!S#ni~P#*XO!S4eO~O!R&sa!S&sa~P#*XO!]!wO'p&oO!R&ta!c&ta~O!R-RO!c'}i~O!R-RO!]!wO!c'}i~O'a$gq!R$gq!{$gq#m$gq~P!#{O!O&va!R&va~P!BpO!]4lO~O!R-ZO!O(Oi~P!BpO!R-ZO!O(Oi~O!O4pO~O!]!wO#c4uO~Oj4vO!]!wO'p&oO~O!O4xO~O'a$iq!R$iq!{$iq#m$iq~P!#{O_$Zy!R$Zy'W$Zy!O$Zy!c$Zyn$Zy!T$Zy%Q$Zy!]$Zy~P!)wO!R2QO!T(Pa~O!T&dO%Q4}O~O!T&dO%Q4}O~P!BpO_#Oy!R#Oy'W#Oy!O#Oy!c#Oyn#Oy!T#Oy%Q#Oy!]#Oy~P!)wOZ5QO~O]5SO'])iO~O!R.^O!S(Vi~O]5VO~O^5WO~O'g'TO!R&{X!S&{X~O!R2oO!S(Sa~O!S5eO~P$7ZOx;sO'g(jO'o+iO~O!W5hO!X5gO!Y5gO!x0_O'^$dO'g(jO'o+iO~O!s5iO!t5iO~P%0^O!X5gO!Y5gO'^$dO'g(jO'o+iO~O!T.yO~O!T.yO%Q5kO~O!T.yO%Q5kO~P!BpOP5pO!T.yO!o5oO%Q5kO~OZ5uO!R'Oa!S'Oa~O!R/VO!S(Ti~O]5xO~O!c5yO~O!c5zO~O!c5{O~O!c5{O~P){O_5}O~O!]6QO~O!c6RO~O!R'ui!S'ui~P#*XO_$^O'W$^O~P!)wO_$^O!{6WO'W$^O~O_$^O!]!wO!{6WO'W$^O~O!X6]O!Y6]O'^$dO'g(jO'o+iO~O_$^O!]!wO!j6^O!{6WO'W$^O'p&oO~O!d$ZO'b$PO~P%4xO!W6_O~P%4gO!R'ry!c'ry_'ry'W'ry~P!)wO#W$gqQ$gqZ$gq_$gqj$gqv$gq!R$gq!a$gq!b$gq!d$gq!j$gq#[$gq#]$gq#^$gq#_$gq#`$gq#a$gq#b$gq#c$gq#e$gq#g$gq#i$gq#j$gq'W$gq'f$gq'p$gq!c$gq!O$gq!T$gq!{$gqn$gq%Q$gq!]$gq~P!BpO#W$iqQ$iqZ$iq_$iqj$iqv$iq!R$iq!a$iq!b$iq!d$iq!j$iq#[$iq#]$iq#^$iq#_$iq#`$iq#a$iq#b$iq#c$iq#e$iq#g$iq#i$iq#j$iq'W$iq'f$iq'p$iq!c$iq!O$iq!T$iq!{$iqn$iq%Q$iq!]$iq~P!BpO!R&li!c&li~P!)wO#m#Oq!R#Oq!S#Oq~P#*XOu-tOv-tOx-uOPra'wra'xra!Sra~OQraZrajra!ara!bra!dra!jra#[ra#]ra#^ra#_ra#`ra#ara#bra#cra#era#gra#ira#jra#mra'fra'pra!Rra~P%;OOu(SOx(TOP$^a'w$^a'x$^a!S$^a~OQ$^aZ$^aj$^av$^a!a$^a!b$^a!d$^a!j$^a#[$^a#]$^a#^$^a#_$^a#`$^a#a$^a#b$^a#c$^a#e$^a#g$^a#i$^a#j$^a#m$^a'f$^a'p$^a!R$^a~P%=SOu(SOx(TOP$`a'w$`a'x$`a!S$`a~OQ$`aZ$`aj$`av$`a!a$`a!b$`a!d$`a!j$`a#[$`a#]$`a#^$`a#_$`a#`$`a#a$`a#b$`a#c$`a#e$`a#g$`a#i$`a#j$`a#m$`a'f$`a'p$`a!R$`a~P%?WOQ$naZ$naj$nav$na!a$na!b$na!d$na!j$na#[$na#]$na#^$na#_$na#`$na#a$na#b$na#c$na#e$na#g$na#i$na#j$na#m$na'f$na'p$na!R$na!S$na~P%%aO#m$Yq!R$Yq!S$Yq~P#*XO#m$Zq!R$Zq!S$Zq~P#*XO!S6hO~O#m6iO~P!#{O!]!wO!R&ti!c&ti~O!]!wO'p&oO!R&ti!c&ti~O!R-RO!c'}q~O!O&vi!R&vi~P!BpO!R-ZO!O(Oq~O!O6oO~P!BpO!O6oO~O!R'dy'a'dy~P!#{O!R&ya!T&ya~P!BpO!T$tq_$tq!R$tq'W$tq~P!BpOZ6vO~O!R.^O!S(Vq~O]6yO~O!T&dO%Q6zO~O!T&dO%Q6zO~P!BpO!{6{O!R&{a!S&{a~O!R2oO!S(Si~P#*XO!X7RO!Y7RO'^$dO'g(jO'o+iO~O!W7TO!x4SO~P%GXO!T.yO%Q7WO~O!T.yO%Q7WO~P!BpO]7_O'g7^O~O!R/VO!S(Tq~O!c7aO~O!c7aO~P){O!c7cO~O!c7dO~O!R#Ty!S#Ty~P#*XO_$^O!{7jO'W$^O~O_$^O!]!wO!{7jO'W$^O~O!X7mO!Y7mO'^$dO'g(jO'o+iO~O_$^O!]!wO!j7nO!{7jO'W$^O'p&oO~O#m#ky!R#ky!S#ky~P#*XOQ$giZ$gij$giv$gi!a$gi!b$gi!d$gi!j$gi#[$gi#]$gi#^$gi#_$gi#`$gi#a$gi#b$gi#c$gi#e$gi#g$gi#i$gi#j$gi#m$gi'f$gi'p$gi!R$gi!S$gi~P%%aOu(SOx(TO'x(XOP$xi'w$xi!S$xi~OQ$xiZ$xij$xiv$xi!a$xi!b$xi!d$xi!j$xi#[$xi#]$xi#^$xi#_$xi#`$xi#a$xi#b$xi#c$xi#e$xi#g$xi#i$xi#j$xi#m$xi'f$xi'p$xi!R$xi~P%LjOu(SOx(TOP$zi'w$zi'x$zi!S$zi~OQ$ziZ$zij$ziv$zi!a$zi!b$zi!d$zi!j$zi#[$zi#]$zi#^$zi#_$zi#`$zi#a$zi#b$zi#c$zi#e$zi#g$zi#i$zi#j$zi#m$zi'f$zi'p$zi!R$zi~P%NnO#m$Zy!R$Zy!S$Zy~P#*XO#m#Oy!R#Oy!S#Oy~P#*XO!]!wO!R&tq!c&tq~O!R-RO!c'}y~O!O&vq!R&vq~P!BpO!O7tO~P!BpO!R.^O!S(Vy~O!R2oO!S(Sq~O!X8QO!Y8QO'^$dO'g(jO'o+iO~O!T.yO%Q8TO~O!T.yO%Q8TO~P!BpO!c8WO~O_$^O!{8]O'W$^O~O_$^O!]!wO!{8]O'W$^O~OQ$gqZ$gqj$gqv$gq!a$gq!b$gq!d$gq!j$gq#[$gq#]$gq#^$gq#_$gq#`$gq#a$gq#b$gq#c$gq#e$gq#g$gq#i$gq#j$gq#m$gq'f$gq'p$gq!R$gq!S$gq~P%%aOQ$iqZ$iqj$iqv$iq!a$iq!b$iq!d$iq!j$iq#[$iq#]$iq#^$iq#_$iq#`$iq#a$iq#b$iq#c$iq#e$iq#g$iq#i$iq#j$iq#m$iq'f$iq'p$iq!R$iq!S$iq~P%%aO'a$|!Z!R$|!Z!{$|!Z#m$|!Z~P!#{O!R&{q!S&{q~P#*XO_$^O!{8oO'W$^O~O#W$|!ZQ$|!ZZ$|!Z_$|!Zj$|!Zv$|!Z!R$|!Z!a$|!Z!b$|!Z!d$|!Z!j$|!Z#[$|!Z#]$|!Z#^$|!Z#_$|!Z#`$|!Z#a$|!Z#b$|!Z#c$|!Z#e$|!Z#g$|!Z#i$|!Z#j$|!Z'W$|!Z'f$|!Z'p$|!Z!c$|!Z!O$|!Z!T$|!Z!{$|!Zn$|!Z%Q$|!Z!]$|!Z~P!BpOP;uOu(SOx(TO'w(VO'x(XO~O!S!za!W!za!X!za!Y!za!r!za!s!za!t!za!x!za'^!za'g!za'o!za~P&,_O!W'eX!X'eX!Y'eX!r'eX!s'eX!t'eX!x'eX'^'eX'g'eX'o'eX~P%'eOQ$|!ZZ$|!Zj$|!Zv$|!Z!a$|!Z!b$|!Z!d$|!Z!j$|!Z#[$|!Z#]$|!Z#^$|!Z#_$|!Z#`$|!Z#a$|!Z#b$|!Z#c$|!Z#e$|!Z#g$|!Z#i$|!Z#j$|!Z#m$|!Z'f$|!Z'p$|!Z!R$|!Z!S$|!Z~P%%aO!Wra!Xra!Yra!rra!sra!tra!xra'^ra'gra'ora~P%;OO!W$^a!X$^a!Y$^a!r$^a!s$^a!t$^a!x$^a'^$^a'g$^a'o$^a~P%=SO!W$`a!X$`a!Y$`a!r$`a!s$`a!t$`a!x$`a'^$`a'g$`a'o$`a~P%?WO!S$na!W$na!X$na!Y$na!r$na!s$na!t$na!x$na'^$na'g$na'o$na~P&,_O!W$xi!X$xi!Y$xi!r$xi!s$xi!t$xi!x$xi'^$xi'g$xi'o$xi~P%LjO!W$zi!X$zi!Y$zi!r$zi!s$zi!t$zi!x$zi'^$zi'g$zi'o$zi~P%NnO!S$gi!W$gi!X$gi!Y$gi!r$gi!s$gi!t$gi!x$gi'^$gi'g$gi'o$gi~P&,_O!S$gq!W$gq!X$gq!Y$gq!r$gq!s$gq!t$gq!x$gq'^$gq'g$gq'o$gq~P&,_O!S$iq!W$iq!X$iq!Y$iq!r$iq!s$iq!t$iq!x$iq'^$iq'g$iq'o$iq~P&,_O!S$|!Z!W$|!Z!X$|!Z!Y$|!Z!r$|!Z!s$|!Z!t$|!Z!x$|!Z'^$|!Z'g$|!Z'o$|!Z~P&,_On'hX~P.jOn[X!O[X!c[X%r[X!T[X%Q[X!][X~P$zO!]dX!c[X!cdX'pdX~P;dOQ9^OR9^O]cOb;`Oc!jOhcOj9^OkcOlcOq9^Os9^OxRO{cO|cO}cO!TSO!_9`O!dUO!g9^O!h9^O!i9^O!j9^O!k9^O!n!iO#t!lO#x^O']'cO'fQO'oYO'|;^O~O]#qOh$QOj#rOk#qOl#qOq$ROs9uOx#yO!T#zO!_;fO!d#vO#V:OO#t$VO$_9xO$a9{O$d$WO']&{O'b$PO'f#sO~O!R9pO!S$]a~O]#qOh$QOj#rOk#qOl#qOq$ROs9vOx#yO!T#zO!_;gO!d#vO#V:PO#t$VO$_9yO$a9|O$d$WO']&{O'b$PO'f#sO~O#d'jO~P&]P!AQ!AY!A^!A^P!>YP!Ab!AbP!DVP!DZ?Z?Z!Da!GT8SP8SP8S8SP!HW8S8S!Jf8S!M_8S# g8S8S#!T#$c#$c#$g#$c#$oP#$cP8S#%k8S#'X8S8S-zPPP#(yPP#)c#)cP#)cP#)x#)cPP#*OP#)uP#)u#*b!!X#)u#+P#+V#+Y([#+]([P#+d#+d#+dP([P([P([P([PP([P#+j#+mP#+m([P#+qP#+tP([P([P([P([P([P([([#+z#,U#,[#,b#,p#,v#,|#-W#-^#-m#-s#.R#.X#._#.m#/S#0z#1Y#1`#1f#1l#1r#1|#2S#2Y#2d#2v#2|PPPPPPPP#3SPP#3v#7OPP#8f#8m#8uPP#>a#@t#Fp#Fs#Fv#GR#GUPP#GX#G]#Gz#Hq#Hu#IZPP#I_#Ie#IiP#Il#Ip#Is#Jc#Jy#KO#KR#KU#K[#K_#Kc#KgmhOSj}!n$]%c%f%g%i*o*t/g/jQ$imQ$ppQ%ZyS&V!b+`Q&k!jS(l#z(qQ)g$jQ)t$rQ*`%TQ+f&^S+k&d+mQ+}&lQ-k(sQ/U*aY0Z+o+p+q+r+sS2t.y2vU3|0[0^0aU5g2y2z2{S6]4O4RS7R5h5iQ7m6_R8Q7T$p[ORSTUjk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#b#e$]$n%[%_%c%e%f%g%i%m%x%z&S&_&f&p&}'R(R)V)^*k*o*t+T+x,P,b,h-u-z.S.].|/_/`/a/c/g/j/l0T0j0t2i3R3f3h3i3x5o5}6W7j8]8o!j'e#]#k&W'w+X+[,m/{1X2q3q6{9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;aQ(}$SQ)l$lQ*b%WQ*i%`Q,X9tQ.W)aQ.c)mQ/^*gQ2_.^Q3Z/VQ4^9vQ5S2`R8{9upeOSjy}!n$]%Y%c%f%g%i*o*t/g/jR*d%[&WVOSTjkn}!S!W!k!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#]#b#e#k$]$n%[%_%`%c%e%f%g%i%m%z&S&_&f&p&}'R'w(R)V)^*k*o*t+T+X+[+x,P,b,h,m-u-z.S.].|/_/`/a/c/g/j/l/{0T0j0t1X2i2q3R3f3h3i3q3x5o5}6W6{7j8]8o9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;`;a[!cRU!]!`%x&WQ$clQ$hmS$mp$rv$wrs!r!u$Z$u&`&t&w)x)y)z*m+Y+h,S,U/o0lQ%PwQ&h!iQ&j!jS(_#v(cS)f$i$jQ)j$lQ)w$tQ*Z%RQ*_%TS+|&k&lQ-V(`Q.[)gQ.b)mQ.d)nQ.g)rQ/P*[S/T*`*aQ0h+}Q1b-RQ2^.^Q2b.aQ2g.iQ3Y/UQ4i1cQ5R2`Q5U2dQ6u5QR7w6vx#xa!y$T$U$Y(W(Y(b(w(x,_-Y-w1a1y6i;^;i;j;k!Y$fm!j$h$i$j&U&j&k&l(k)f)g+]+j+|+}-d.[0Q0W0]0h1u3{4Q6Z7k8^Q)`$cQ*P$|Q*S$}Q*^%TQ.k)wQ/O*ZU/S*_*`*aQ3T/PS3X/T/UQ5b2sQ5t3YS7P5c5fS8O7Q7SQ8f8PQ8u8g#[;b!w#d#v#y&g'}(Z(h)])_)a*O*R+y-Z-].R.T.p.s.{.}1k1s2Q2T2X2j3Q3S4l4u4}5k5p6z7W8T9w9z9}:U:X:[:a:d:j;l;n;t;u;vd;c9d9x9{:O:V:Y:]:b:e:ke;d9r9y9|:P:W:Z:^:c:f:lW#}a$P(y;^S$|t%YQ$}uQ%OvR)}$z%P#|a!w!y#d#v#y$T$U$Y&g'}(W(Y(Z(b(h(w(x)])_)a*O*R+y,_-Y-Z-]-w.R.T.p.s.{.}1a1k1s1y2Q2T2X2j3Q3S4l4u4}5k5p6i6z7W8T9d9r9w9x9y9z9{9|9}:O:P:U:V:W:X:Y:Z:[:]:^:a:b:c:d:e:f:j:k:l;^;i;j;k;l;n;t;u;vT(O#s(PX)O$S9t9u9vU&Z!b$v+cQ'U!{Q)q$oQ.t*TQ1z-tR5^2o&^cORSTUjk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#]#b#e#k$]$n%[%_%`%c%e%f%g%i%m%x%z&S&W&_&f&p&}'R'w(R)V)^*k*o*t+T+X+[+x,P,b,h,m-u-z.S.].|/_/`/a/c/g/j/l/{0T0j0t1X2i2q3R3f3h3i3q3x5o5}6W6{7j8]8o9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;a$]#aZ!_!o$a%w%}&y'Q'W'X'Y'Z'[']'^'_'`'a'b'd'g'k'u)p+R+^+g,O,^,d,g,i,w-x/v/y0i0s0w0x0y0z0{0|0}1O1P1Q1R1S1T1W1]2O2[3s3v4W4[4]4b4c5`6S6V6b6f6g7g7z8Z8m8y9_:|T!XQ!Y&_cORSTUjk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#]#b#e#k$]$n%[%_%`%c%e%f%g%i%m%x%z&S&W&_&f&p&}'R'w(R)V)^*k*o*t+T+X+[+x,P,b,h,m-u-z.S.].|/_/`/a/c/g/j/l/{0T0j0t1X2i2q3R3f3h3i3q3x5o5}6W6{7j8]8o9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;aQ&X!bR/|+`Y&R!b&V&^+`+fS(k#z(qS+j&d+mS-d(l(sQ-e(mQ-l(tQ.v*VU0W+k+o+pU0]+q+r+sS0b+t2xQ1u-kQ1w-mQ1x-nS2s.y2vU3{0Z0[0^Q4P0_Q4Q0aS5c2t2{S5f2y2zU6Z3|4O4RQ6`4SS7Q5g5hQ7S5iS7k6]6_S8P7R7TQ8^7mQ8g8QQ;h;oR;m;slhOSj}!n$]%c%f%g%i*o*t/g/jQ%k!QS&x!v9cQ)d$gQ*X%PQ*Y%QQ+z&iS,]&}:RS-y)V:_Q.Y)eQ.x*WQ/n*vQ/p*wQ/x+ZQ0`+qQ0f+{S2P-z:gQ2Y.ZS2].]:hQ3r/zQ3u0RQ4U0gQ5P2ZQ6T3tQ6X3zQ6a4VQ7e6RQ7h6YQ8Y7iQ8l8[R8x8n$W#`Z!_!o%w%}&y'Q'W'X'Y'Z'[']'^'_'`'a'b'd'g'k'u)p+R+^+g,O,^,d,g,w-x/v/y0i0s0w0x0y0z0{0|0}1O1P1Q1R1S1T1W1]2O2[3s3v4W4[4]4b4c5`6S6V6b6f6g7g7z8Z8m8y9_:|W(v#{&|1V8qT)Z$a,i$W#_Z!_!o%w%}&y'Q'W'X'Y'Z'[']'^'_'`'a'b'd'g'k'u)p+R+^+g,O,^,d,g,w-x/v/y0i0s0w0x0y0z0{0|0}1O1P1Q1R1S1T1W1]2O2[3s3v4W4[4]4b4c5`6S6V6b6f6g7g7z8Z8m8y9_:|Q'f#`S)Y$a,iR-{)Z&^cORSTUjk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#]#b#e#k$]$n%[%_%`%c%e%f%g%i%m%x%z&S&W&_&f&p&}'R'w(R)V)^*k*o*t+T+X+[+x,P,b,h,m-u-z.S.].|/_/`/a/c/g/j/l/{0T0j0t1X2i2q3R3f3h3i3q3x5o5}6W6{7j8]8o9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;aQ%f{Q%g|Q%i!OQ%j!PR/f*rQ&e!iQ)[$cQ+w&hS.Q)`)wS0c+u+vW2S-}.O.P.kS4T0d0eU4|2U2V2WU6s4{5Y5ZQ7v6tR8b7yT+l&d+mS+j&d+mU0W+k+o+pU0]+q+r+sS0b+t2xS2s.y2vU3{0Z0[0^Q4P0_Q4Q0aS5c2t2{S5f2y2zU6Z3|4O4RQ6`4SS7Q5g5hQ7S5iS7k6]6_S8P7R7TQ8^7mR8g8QS+l&d+mT2u.y2vS&r!q/dQ-U(_Q-b(kS0V+j2sQ1g-VS1p-c-lU3}0]0b5fQ4h1bS4s1v1xU6^4P4Q7SQ6k4iQ6r4vR7n6`Q!xXS&q!q/dQ)W$[Q)b$eQ)h$kQ,Q&rQ-T(_Q-a(kQ-f(nQ.X)cQ/Q*]S0U+j2sS1f-U-VS1o-b-lQ1r-eQ1t-gQ3V/RW3y0V0]0b5fQ4g1bQ4k1gS4o1p1xQ4t1wQ5r3WW6[3}4P4Q7SS6j4h4iS6n4p:iQ6p4sQ6}5aQ7[5sS7l6^6`Q7r6kS7s6o:mQ7u6rQ7|7OQ8V7]Q8_7nS8a7t:nQ8d7}Q8s8eQ9Q8tQ9X9RQ:u:pQ;T:zQ;U:{Q;V;hR;[;m$rWORSTUjk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#b#e$]$n%[%_%`%c%e%f%g%i%m%x%z&S&_&f&p&}'R(R)V)^*k*o*t+T+x,P,b,h-u-z.S.].|/_/`/a/c/g/j/l0T0j0t2i3R3f3h3i3x5o5}6W7j8]8oS!xn!k!j:o#]#k&W'w+X+[,m/{1X2q3q6{9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;aR:u;`$rXORSTUjk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#b#e$]$n%[%_%`%c%e%f%g%i%m%x%z&S&_&f&p&}'R(R)V)^*k*o*t+T+x,P,b,h-u-z.S.].|/_/`/a/c/g/j/l0T0j0t2i3R3f3h3i3x5o5}6W7j8]8oQ$[b!Y$em!j$h$i$j&U&j&k&l(k)f)g+]+j+|+}-d.[0Q0W0]0h1u3{4Q6Z7k8^S$kn!kQ)c$fQ*]%TW/R*^*_*`*aU3W/S/T/UQ5a2sS5s3X3YU7O5b5c5fQ7]5tU7}7P7Q7SS8e8O8PS8t8f8gQ9R8u!j:p#]#k&W'w+X+[,m/{1X2q3q6{9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;aQ:z;_R:{;`$f]OSTjk}!S!W!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#b#e$]$n%[%_%c%e%f%g%i%m%z&S&_&f&p&}'R(R)V)^*k*o*t+T+x,P,b,h-u-z.S.].|/_/`/a/c/g/j/l0T0j0t2i3R3f3h3i3x5o5}6W7j8]8oY!hRU!]!`%xv$wrs!r!u$Z$u&`&t&w)x)y)z*m+Y+h,S,U/o0lQ*j%`!h:q#]#k'w+X+[,m/{1X2q3q6{9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;aR:t&WS&[!b$vR0O+c$p[ORSTUjk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#b#e$]$n%[%_%c%e%f%g%i%m%x%z&S&_&f&p&}'R(R)V)^*k*o*t+T+x,P,b,h-u-z.S.].|/_/`/a/c/g/j/l0T0j0t2i3R3f3h3i3x5o5}6W7j8]8o!j'e#]#k&W'w+X+[,m/{1X2q3q6{9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;aR*i%`$roORSTUjk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#b#e$]$n%[%_%`%c%e%f%g%i%m%x%z&S&_&f&p&}'R(R)V)^*k*o*t+T+x,P,b,h-u-z.S.].|/_/`/a/c/g/j/l0T0j0t2i3R3f3h3i3x5o5}6W7j8]8oQ'U!{!k:r#]#k&W'w+X+[,m/{1X2q3q6{9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;a!h#VZ!_$a%w%}&y'Q'_'`'a'b'g'k)p+R+g,O,^,d,w-x0i0s1T2O2[3v4W4[6V7g8Z8m8y9_!R9k'd'u+^,i/v/y0w1P1Q1R1S1W1]3s4]4b4c5`6S6b6f6g7z:|!d#XZ!_$a%w%}&y'Q'a'b'g'k)p+R+g,O,^,d,w-x0i0s1T2O2[3v4W4[6V7g8Z8m8y9_}9m'd'u+^,i/v/y0w1R1S1W1]3s4]4b4c5`6S6b6f6g7z:|!`#]Z!_$a%w%}&y'Q'g'k)p+R+g,O,^,d,w-x0i0s1T2O2[3v4W4[6V7g8Z8m8y9_Q1a-Px;a'd'u+^,i/v/y0w1W1]3s4]4b4c5`6S6b6f6g7z:|Q;i;pQ;j;qR;k;r&^cORSTUjk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#]#b#e#k$]$n%[%_%`%c%e%f%g%i%m%x%z&S&W&_&f&p&}'R'w(R)V)^*k*o*t+T+X+[+x,P,b,h,m-u-z.S.].|/_/`/a/c/g/j/l/{0T0j0t1X2i2q3R3f3h3i3q3x5o5}6W6{7j8]8o9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;aS#l`#mR1Y,l&e_ORSTU`jk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#]#b#e#k#m$]$n%[%_%`%c%e%f%g%i%m%x%z&S&W&_&f&p&}'R'w(R)V)^*k*o*t+T+X+[+x,P,b,h,l,m-u-z.S.].|/_/`/a/c/g/j/l/{0T0j0t1X2i2q3R3f3h3i3q3x5o5}6W6{7j8]8o9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;aS#g^#nT'n#i'rT#h^#nT'p#i'r&e`ORSTU`jk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#]#b#e#k#m$]$n%[%_%`%c%e%f%g%i%m%x%z&S&W&_&f&p&}'R'w(R)V)^*k*o*t+T+X+[+x,P,b,h,l,m-u-z.S.].|/_/`/a/c/g/j/l/{0T0j0t1X2i2q3R3f3h3i3q3x5o5}6W6{7j8]8o9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;aT#l`#mQ#o`R'y#m$rbORSTUjk}!S!W!]!`!n!v!z!|#P#Q#R#S#T#U#V#W#X#Y#Z#b#e$]$n%[%_%`%c%e%f%g%i%m%x%z&S&_&f&p&}'R(R)V)^*k*o*t+T+x,P,b,h-u-z.S.].|/_/`/a/c/g/j/l0T0j0t2i3R3f3h3i3x5o5}6W7j8]8o!k;_#]#k&W'w+X+[,m/{1X2q3q6{9^9`9c9e9f9g9h9i9j9k9l9m9n9o9p9s:Q:R:T:_:`:g:h;a#RdOSUj}!S!W!n!|#k$]%[%_%`%c%e%f%g%i%m&S&f'w)^*k*o*t+x,m-u.S.|/_/`/a/c/g/j/l1X2i3R3f3h3i5o5}x#{a!y$T$U$Y(W(Y(b(w(x,_-Y-w1a1y6i;^;i;j;k#[&|!w#d#v#y&g'}(Z(h)])_)a*O*R+y-Z-].R.T.p.s.{.}1k1s2Q2T2X2j3Q3S4l4u4}5k5p6z7W8T9w9z9}:U:X:[:a:d:j;l;n;t;u;vQ)S$WQ,x(Sd1V9r9y9|:P:W:Z:^:c:f:le8q9d9x9{:O:V:Y:]:b:e:kx#wa!y$T$U$Y(W(Y(b(w(x,_-Y-w1a1y6i;^;i;j;kQ(d#xS(n#z(qQ)T$XQ-g(o#[:w!w#d#v#y&g'}(Z(h)])_)a*O*R+y-Z-].R.T.p.s.{.}1k1s2Q2T2X2j3Q3S4l4u4}5k5p6z7W8T9w9z9}:U:X:[:a:d:j;l;n;t;u;vd:x9d9x9{:O:V:Y:]:b:e:kd:y9r9y9|:P:W:Z:^:c:f:lQ:};bQ;O;cQ;P;dQ;Q;eQ;R;fR;S;gx#{a!y$T$U$Y(W(Y(b(w(x,_-Y-w1a1y6i;^;i;j;k#[&|!w#d#v#y&g'}(Z(h)])_)a*O*R+y-Z-].R.T.p.s.{.}1k1s2Q2T2X2j3Q3S4l4u4}5k5p6z7W8T9w9z9}:U:X:[:a:d:j;l;n;t;u;vd1V9r9y9|:P:W:Z:^:c:f:le8q9d9x9{:O:V:Y:]:b:e:klfOSj}!n$]%c%f%g%i*o*t/g/jQ(g#yQ*}%pQ+O%rR1j-Z%O#|a!w!y#d#v#y$T$U$Y&g'}(W(Y(Z(b(h(w(x)])_)a*O*R+y,_-Y-Z-]-w.R.T.p.s.{.}1a1k1s1y2Q2T2X2j3Q3S4l4u4}5k5p6i6z7W8T9d9r9w9x9y9z9{9|9}:O:P:U:V:W:X:Y:Z:[:]:^:a:b:c:d:e:f:j:k:l;^;i;j;k;l;n;t;u;vQ*Q$}Q.r*SQ2m.qR5]2nT(p#z(qS(p#z(qT2u.y2vQ)b$eQ-f(nQ.X)cQ/Q*]Q3V/RQ5r3WQ6}5aQ7[5sQ7|7OQ8V7]Q8d7}Q8s8eQ9Q8tR9X9Rp(W#t'O)U-X-o-p0q1h1}4f4w7q:v;W;X;Y!n:U&z'i(^(f+v,[,t-P-^-|.P.o.q0e0p1i1m2W2l2n3O4Y4Z4m4q4y5O5Z5n6m6q7Y8`;Z;];p;q;r[:V8p9O9V9Y9Z9]]:W1U4a6c7o7p8zr(Y#t'O)U,}-X-o-p0q1h1}4f4w7q:v;W;X;Y!p:X&z'i(^(f+v,[,t-P-^-|.P.o.q0e0n0p1i1m2W2l2n3O4Y4Z4m4q4y5O5Z5n6m6q7Y8`;Z;];p;q;r^:Y8p9O9T9V9Y9Z9]_:Z1U4a6c6d7o7p8zpeOSjy}!n$]%Y%c%f%g%i*o*t/g/jQ%VxR*k%`peOSjy}!n$]%Y%c%f%g%i*o*t/g/jR%VxQ*U%OR.n)}qeOSjy}!n$]%Y%c%f%g%i*o*t/g/jQ.z*ZS3P/O/PW5j2|2}3O3TU7V5l5m5nU8R7U7X7YQ8h8SR8v8iQ%^yR*e%YR3^/XR7_5uS$mp$rR.d)nQ%czR*o%dR*u%jT/h*t/jR*y%kQ*x%kR/q*yQjOQ!nST$`j!nQ(P#sR,u(PQ!YQR%u!YQ!^RU%{!^%|+UQ%|!_R+U%}Q+a&XR/}+aQ,`'OR0r,`Q,c'QS0u,c0vR0v,dQ+m&dR0X+mS!eR$uU&a!e&b+VQ&b!fR+V&OQ+d&[R0P+dQ&u!sQ,R&sU,V&u,R0mR0m,WQ'r#iR,n'rQ#m`R'x#mQ#cZU'h#c+Q9qQ+Q9_R9q'uQ-S(_W1d-S1e4j6lU1e-T-U-VS4j1f1gR6l4k$k(U#t&z'O'i(^(f)P)Q)U+v,Y,Z,[,t,}-O-P-X-^-o-p-|.P.o.q0e0n0o0p0q1U1h1i1m1}2W2l2n3O4Y4Z4_4`4a4f4m4q4w4y5O5Z5n6c6d6e6m6q7Y7o7p7q8`8p8z8|8}9O9T9U9V9Y9Z9]:v;W;X;Y;Z;];p;q;rQ-[(fU1l-[1n4nQ1n-^R4n1mQ(q#zR-i(qQ(z$OR-r(zQ2R-|R4z2RQ){$xR.m){Q2p.tS5_2p6|R6|5`Q*W%PR.w*WQ2v.yR5d2vQ/W*bS3[/W5vR5v3^Q._)jW2a._2c5T6wQ2c.bQ5T2bR6w5UQ)o$mR.e)oQ/j*tR3l/jWiOSj!nQ%h}Q)X$]Q*n%cQ*p%fQ*q%gQ*s%iQ/e*oS/h*t/jR3k/gQ$_gQ%l!RQ%o!TQ%q!UQ%s!VQ)v$sQ)|$yQ*d%^Q*{%nQ-h(pS/Z*e*hQ/r*zQ/s*}Q/t+OS0S+j2sQ2f.hQ2k.oQ3U/QQ3`/]Q3j/fY3w0U0V0]0b5fQ5X2hQ5[2lQ5q3VQ5w3_[6U3v3y3}4P4Q7SQ6x5VQ7Z5rQ7`5xW7f6V6[6^6`Q7x6yQ7{6}Q8U7[U8X7g7l7nQ8c7|Q8j8VS8k8Z8_Q8r8dQ8w8mQ9P8sQ9S8yQ9W9QR9[9XQ$gmQ&i!jU)e$h$i$jQ+Z&UU+{&j&k&lQ-`(kS.Z)f)gQ/z+]Q0R+jS0g+|+}Q1q-dQ2Z.[Q3t0QS3z0W0]Q4V0hQ4r1uS6Y3{4QQ7i6ZQ8[7kR8n8^S#ua;^R({$PU$Oa$P;^R-q(yQ#taS&z!w)aQ'O!yQ'i#dQ(^#vQ(f#yQ)P$TQ)Q$UQ)U$YQ+v&gQ,Y9wQ,Z9zQ,[9}Q,t'}Q,}(WQ-O(YQ-P(ZQ-X(bQ-^(hQ-o(wQ-p(xd-|)].R.{2T3Q4}5k6z7W8TQ.P)_Q.o*OQ.q*RQ0e+yQ0n:UQ0o:XQ0p:[Q0q,_Q1U9rQ1h-YQ1i-ZQ1m-]Q1}-wQ2W.TQ2l.pQ2n.sQ3O.}Q4Y:aQ4Z:dQ4_9yQ4`9|Q4a:PQ4f1aQ4m1kQ4q1sQ4w1yQ4y2QQ5O2XQ5Z2jQ5n3SQ6c:^Q6d:WQ6e:ZQ6m4lQ6q4uQ7Y5pQ7o:cQ7p:fQ7q6iQ8`:jQ8p9dQ8z:lQ8|9xQ8}9{Q9O:OQ9T:VQ9U:YQ9V:]Q9Y:bQ9Z:eQ9]:kQ:v;^Q;W;iQ;X;jQ;Y;kQ;Z;lQ;];nQ;p;tQ;q;uR;r;vlgOSj}!n$]%c%f%g%i*o*t/g/jS!pU%eQ%n!SQ%t!WQ'V!|Q'v#kS*h%[%_Q*l%`Q*z%mQ+W&SQ+u&fQ,r'wQ.O)^Q/b*kQ0d+xQ1[,mQ1{-uQ2V.SQ2}.|Q3b/_Q3c/`Q3e/aQ3g/cQ3n/lQ4d1XQ5Y2iQ5m3RQ5|3fQ6O3hQ6P3iQ7X5oR7b5}!vZOSUj}!S!n!|$]%[%_%`%c%e%f%g%i%m&S&f)^*k*o*t+x-u.S.|/_/`/a/c/g/j/l2i3R3f3h3i5o5}Q!_RQ!oTQ$akS%w!]%zQ%}!`Q&y!vQ'Q!zQ'W#PQ'X#QQ'Y#RQ'Z#SQ'[#TQ']#UQ'^#VQ'_#WQ'`#XQ'a#YQ'b#ZQ'd#]Q'g#bQ'k#eW'u#k'w,m1XQ)p$nS+R%x+TS+^&W/{Q+g&_Q,O&pQ,^&}Q,d'RQ,g9^Q,i9`Q,w(RQ-x)VQ/v+XQ/y+[Q0i,PQ0s,bQ0w9cQ0x9eQ0y9fQ0z9gQ0{9hQ0|9iQ0}9jQ1O9kQ1P9lQ1Q9mQ1R9nQ1S9oQ1T,hQ1W9sQ1]9pQ2O-zQ2[.]Q3s:QQ3v0TQ4W0jQ4[0tQ4]:RQ4b:TQ4c:_Q5`2qQ6S3qQ6V3xQ6b:`Q6f:gQ6g:hQ7g6WQ7z6{Q8Z7jQ8m8]Q8y8oQ9_!WR:|;aR!aRR&Y!bS&U!b+`S+]&V&^R0Q+fR'P!yR'S!zT!tU$ZS!sU$ZU$xrs*mS&s!r!uQ,T&tQ,W&wQ.l)zS0k,S,UR4X0l`!dR!]!`$u%x&`)x+hh!qUrs!r!u$Z&t&w)z,S,U0lQ/d*mQ/w+YQ3p/oT:s&W)yT!gR$uS!fR$uS%y!]&`S&O!`)xS+S%x+hT+_&W)yT&]!b$vQ#i^R'{#nT'q#i'rR1Z,lT(a#v(cR(i#yQ-})]Q2U.RQ2|.{Q4{2TQ5l3QQ6t4}Q7U5kQ7y6zQ8S7WR8i8TlhOSj}!n$]%c%f%g%i*o*t/g/jQ%]yR*d%YV$yrs*mR.u*TR*c%WQ$qpR)u$rR)k$lT%az%dT%bz%dT/i*t/j",nodeNames:"\u26A0 extends ArithOp ArithOp InterpolationStart LineComment BlockComment Script ExportDeclaration export Star as VariableName String from ; default FunctionDeclaration async function VariableDefinition TypeParamList TypeDefinition ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation VoidType void TypeofType typeof MemberExpression . ?. PropertyName [ TemplateString Interpolation null super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewExpression new TypeArgList CompareOp < ) ( ArgList UnaryExpression await yield delete LogicOp BitOp ParenthesizedExpression ClassExpression class extends ClassBody MethodDeclaration Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression PrivatePropertyName BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof in const CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXStartTag JSXSelfClosingTag JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast ArrowFunction TypeParamList SequenceExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature CallSignature TypePredicate is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody MethodDeclaration AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement",maxTerm:332,context:trackNewline,nodeProps:[["closedBy",4,"InterpolationEnd",40,"]",51,"}",66,")",132,"JSXSelfCloseEndTag JSXEndTag",146,"JSXEndTag"],["group",-26,8,15,17,58,184,188,191,192,194,197,200,211,213,219,221,223,225,228,234,240,242,244,246,248,250,251,"Statement",-30,12,13,24,27,28,41,43,44,45,47,52,60,68,74,75,91,92,101,103,119,122,124,125,126,127,129,130,148,149,151,"Expression",-22,23,25,29,32,34,152,154,156,157,159,160,161,163,164,165,167,168,169,178,180,182,183,"Type",-3,79,85,90,"ClassItem"],["openedBy",30,"InterpolationStart",46,"[",50,"{",65,"(",131,"JSXStartTag",141,"JSXStartTag JSXStartCloseTag"]],propSources:[jsHighlight],skippedNodes:[0,5,6],repeatNodeCount:28,tokenData:"!C}~R!`OX%TXY%cYZ'RZ[%c[]%T]^'R^p%Tpq%cqr'crs(kst0htu2`uv4pvw5ewx6cxyk|}?O}!O>k!O!P?`!P!QCl!Q!R!0[!R![!1q![!]!7s!]!^!8V!^!_!8g!_!`!9d!`!a!:[!a!b!U#R#S2`#S#T!>i#T#o2`#o#p!>y#p#q!?O#q#r!?f#r#s!?x#s$f%T$f$g%c$g#BY2`#BY#BZ!@Y#BZ$IS2`$IS$I_!@Y$I_$I|2`$I|$I}!Bq$I}$JO!Bq$JO$JT2`$JT$JU!@Y$JU$KV2`$KV$KW!@Y$KW&FU2`&FU&FV!@Y&FV?HT2`?HT?HU!@Y?HU~2`W%YR$UWO!^%T!_#o%T#p~%T7Z%jg$UW'Y7ROX%TXY%cYZ%TZ[%c[p%Tpq%cq!^%T!_#o%T#p$f%T$f$g%c$g#BY%T#BY#BZ%c#BZ$IS%T$IS$I_%c$I_$JT%T$JT$JU%c$JU$KV%T$KV$KW%c$KW&FU%T&FU&FV%c&FV?HT%T?HT?HU%c?HU~%T7Z'YR$UW'Z7RO!^%T!_#o%T#p~%T$T'jS$UW!j#{O!^%T!_!`'v!`#o%T#p~%T$O'}S#e#v$UWO!^%T!_!`(Z!`#o%T#p~%T$O(bR#e#v$UWO!^%T!_#o%T#p~%T)X(rZ$UW]#eOY(kYZ)eZr(krs*rs!^(k!^!_+U!_#O(k#O#P-b#P#o(k#o#p+U#p~(k&r)jV$UWOr)ers*Ps!^)e!^!_*a!_#o)e#o#p*a#p~)e&r*WR$P&j$UWO!^%T!_#o%T#p~%T&j*dROr*ars*ms~*a&j*rO$P&j)X*{R$P&j$UW]#eO!^%T!_#o%T#p~%T)P+ZV]#eOY+UYZ*aZr+Urs+ps#O+U#O#P+w#P~+U)P+wO$P&j]#e)P+zROr+Urs,Ts~+U)P,[U$P&j]#eOY,nZr,nrs-Vs#O,n#O#P-[#P~,n#e,sU]#eOY,nZr,nrs-Vs#O,n#O#P-[#P~,n#e-[O]#e#e-_PO~,n)X-gV$UWOr(krs-|s!^(k!^!_+U!_#o(k#o#p+U#p~(k)X.VZ$P&j$UW]#eOY.xYZ%TZr.xrs/rs!^.x!^!_,n!_#O.x#O#P0S#P#o.x#o#p,n#p~.x#m/PZ$UW]#eOY.xYZ%TZr.xrs/rs!^.x!^!_,n!_#O.x#O#P0S#P#o.x#o#p,n#p~.x#m/yR$UW]#eO!^%T!_#o%T#p~%T#m0XT$UWO!^.x!^!_,n!_#o.x#o#p,n#p~.x3]0mZ$UWOt%Ttu1`u!^%T!_!c%T!c!}1`!}#R%T#R#S1`#S#T%T#T#o1`#p$g%T$g~1`3]1g]$UW'o3TOt%Ttu1`u!Q%T!Q![1`![!^%T!_!c%T!c!}1`!}#R%T#R#S1`#S#T%T#T#o1`#p$g%T$g~1`7Z2k_$UW#zS']$y'g3SOt%Ttu2`u}%T}!O3j!O!Q%T!Q![2`![!^%T!_!c%T!c!}2`!}#R%T#R#S2`#S#T%T#T#o2`#p$g%T$g~2`[3q_$UW#zSOt%Ttu3ju}%T}!O3j!O!Q%T!Q![3j![!^%T!_!c%T!c!}3j!}#R%T#R#S3j#S#T%T#T#o3j#p$g%T$g~3j$O4wS#^#v$UWO!^%T!_!`5T!`#o%T#p~%T$O5[R$UW#o#vO!^%T!_#o%T#p~%T5b5lU'x5Y$UWOv%Tvw6Ow!^%T!_!`5T!`#o%T#p~%T$O6VS$UW#i#vO!^%T!_!`5T!`#o%T#p~%T)X6jZ$UW]#eOY6cYZ7]Zw6cwx*rx!^6c!^!_8T!_#O6c#O#P:T#P#o6c#o#p8T#p~6c&r7bV$UWOw7]wx*Px!^7]!^!_7w!_#o7]#o#p7w#p~7]&j7zROw7wwx*mx~7w)P8YV]#eOY8TYZ7wZw8Twx+px#O8T#O#P8o#P~8T)P8rROw8Twx8{x~8T)P9SU$P&j]#eOY9fZw9fwx-Vx#O9f#O#P9}#P~9f#e9kU]#eOY9fZw9fwx-Vx#O9f#O#P9}#P~9f#e:QPO~9f)X:YV$UWOw6cwx:ox!^6c!^!_8T!_#o6c#o#p8T#p~6c)X:xZ$P&j$UW]#eOY;kYZ%TZw;kwx/rx!^;k!^!_9f!_#O;k#O#PW{!^%T!_!`5T!`#o%T#p~%T$O>_S#[#v$UWO!^%T!_!`5T!`#o%T#p~%T%w>rSj%o$UWO!^%T!_!`5T!`#o%T#p~%T&i?VR!R&a$UWO!^%T!_#o%T#p~%T7Z?gVu5^$UWO!O%T!O!P?|!P!Q%T!Q![@r![!^%T!_#o%T#p~%T!{@RT$UWO!O%T!O!P@b!P!^%T!_#o%T#p~%T!{@iR!Q!s$UWO!^%T!_#o%T#p~%T!{@yZ$UWk!sO!Q%T!Q![@r![!^%T!_!g%T!g!hAl!h#R%T#R#S@r#S#X%T#X#YAl#Y#o%T#p~%T!{AqZ$UWO{%T{|Bd|}%T}!OBd!O!Q%T!Q![CO![!^%T!_#R%T#R#SCO#S#o%T#p~%T!{BiV$UWO!Q%T!Q![CO![!^%T!_#R%T#R#SCO#S#o%T#p~%T!{CVV$UWk!sO!Q%T!Q![CO![!^%T!_#R%T#R#SCO#S#o%T#p~%T7ZCs`$UW#]#vOYDuYZ%TZzDuz{Jl{!PDu!P!Q!-e!Q!^Du!^!_Fx!_!`!.^!`!a!/]!a!}Du!}#OHq#O#PJQ#P#oDu#o#pFx#p~DuXD|[$UW}POYDuYZ%TZ!PDu!P!QEr!Q!^Du!^!_Fx!_!}Du!}#OHq#O#PJQ#P#oDu#o#pFx#p~DuXEy_$UW}PO!^%T!_#Z%T#Z#[Er#[#]%T#]#^Er#^#a%T#a#bEr#b#g%T#g#hEr#h#i%T#i#jEr#j#m%T#m#nEr#n#o%T#p~%TPF}V}POYFxZ!PFx!P!QGd!Q!}Fx!}#OG{#O#PHh#P~FxPGiU}P#Z#[Gd#]#^Gd#a#bGd#g#hGd#i#jGd#m#nGdPHOTOYG{Z#OG{#O#PH_#P#QFx#Q~G{PHbQOYG{Z~G{PHkQOYFxZ~FxXHvY$UWOYHqYZ%TZ!^Hq!^!_G{!_#OHq#O#PIf#P#QDu#Q#oHq#o#pG{#p~HqXIkV$UWOYHqYZ%TZ!^Hq!^!_G{!_#oHq#o#pG{#p~HqXJVV$UWOYDuYZ%TZ!^Du!^!_Fx!_#oDu#o#pFx#p~Du7ZJs^$UW}POYJlYZKoZzJlz{NQ{!PJl!P!Q!,R!Q!^Jl!^!_!!]!_!}Jl!}#O!'|#O#P!+a#P#oJl#o#p!!]#p~Jl7ZKtV$UWOzKoz{LZ{!^Ko!^!_M]!_#oKo#o#pM]#p~Ko7ZL`X$UWOzKoz{LZ{!PKo!P!QL{!Q!^Ko!^!_M]!_#oKo#o#pM]#p~Ko7ZMSR$UWU7RO!^%T!_#o%T#p~%T7RM`ROzM]z{Mi{~M]7RMlTOzM]z{Mi{!PM]!P!QM{!Q~M]7RNQOU7R7ZNX^$UW}POYJlYZKoZzJlz{NQ{!PJl!P!Q! T!Q!^Jl!^!_!!]!_!}Jl!}#O!'|#O#P!+a#P#oJl#o#p!!]#p~Jl7Z! ^_$UWU7R}PO!^%T!_#Z%T#Z#[Er#[#]%T#]#^Er#^#a%T#a#bEr#b#g%T#g#hEr#h#i%T#i#jEr#j#m%T#m#nEr#n#o%T#p~%T7R!!bY}POY!!]YZM]Zz!!]z{!#Q{!P!!]!P!Q!&x!Q!}!!]!}#O!$`#O#P!&f#P~!!]7R!#VY}POY!!]YZM]Zz!!]z{!#Q{!P!!]!P!Q!#u!Q!}!!]!}#O!$`#O#P!&f#P~!!]7R!#|UU7R}P#Z#[Gd#]#^Gd#a#bGd#g#hGd#i#jGd#m#nGd7R!$cWOY!$`YZM]Zz!$`z{!${{#O!$`#O#P!&S#P#Q!!]#Q~!$`7R!%OYOY!$`YZM]Zz!$`z{!${{!P!$`!P!Q!%n!Q#O!$`#O#P!&S#P#Q!!]#Q~!$`7R!%sTU7ROYG{Z#OG{#O#PH_#P#QFx#Q~G{7R!&VTOY!$`YZM]Zz!$`z{!${{~!$`7R!&iTOY!!]YZM]Zz!!]z{!#Q{~!!]7R!&}_}POzM]z{Mi{#ZM]#Z#[!&x#[#]M]#]#^!&x#^#aM]#a#b!&x#b#gM]#g#h!&x#h#iM]#i#j!&x#j#mM]#m#n!&x#n~M]7Z!(R[$UWOY!'|YZKoZz!'|z{!(w{!^!'|!^!_!$`!_#O!'|#O#P!*o#P#QJl#Q#o!'|#o#p!$`#p~!'|7Z!(|^$UWOY!'|YZKoZz!'|z{!(w{!P!'|!P!Q!)x!Q!^!'|!^!_!$`!_#O!'|#O#P!*o#P#QJl#Q#o!'|#o#p!$`#p~!'|7Z!*PY$UWU7ROYHqYZ%TZ!^Hq!^!_G{!_#OHq#O#PIf#P#QDu#Q#oHq#o#pG{#p~Hq7Z!*tX$UWOY!'|YZKoZz!'|z{!(w{!^!'|!^!_!$`!_#o!'|#o#p!$`#p~!'|7Z!+fX$UWOYJlYZKoZzJlz{NQ{!^Jl!^!_!!]!_#oJl#o#p!!]#p~Jl7Z!,Yc$UW}POzKoz{LZ{!^Ko!^!_M]!_#ZKo#Z#[!,R#[#]Ko#]#^!,R#^#aKo#a#b!,R#b#gKo#g#h!,R#h#iKo#i#j!,R#j#mKo#m#n!,R#n#oKo#o#pM]#p~Ko7Z!-lV$UWT7ROY!-eYZ%TZ!^!-e!^!_!.R!_#o!-e#o#p!.R#p~!-e7R!.WQT7ROY!.RZ~!.R$P!.g[$UW#o#v}POYDuYZ%TZ!PDu!P!QEr!Q!^Du!^!_Fx!_!}Du!}#OHq#O#PJQ#P#oDu#o#pFx#p~Du]!/f[#wS$UW}POYDuYZ%TZ!PDu!P!QEr!Q!^Du!^!_Fx!_!}Du!}#OHq#O#PJQ#P#oDu#o#pFx#p~Du!{!0cd$UWk!sO!O%T!O!P@r!P!Q%T!Q![!1q![!^%T!_!g%T!g!hAl!h#R%T#R#S!1q#S#U%T#U#V!3X#V#X%T#X#YAl#Y#b%T#b#c!2w#c#d!4m#d#l%T#l#m!5{#m#o%T#p~%T!{!1x_$UWk!sO!O%T!O!P@r!P!Q%T!Q![!1q![!^%T!_!g%T!g!hAl!h#R%T#R#S!1q#S#X%T#X#YAl#Y#b%T#b#c!2w#c#o%T#p~%T!{!3OR$UWk!sO!^%T!_#o%T#p~%T!{!3^W$UWO!Q%T!Q!R!3v!R!S!3v!S!^%T!_#R%T#R#S!3v#S#o%T#p~%T!{!3}Y$UWk!sO!Q%T!Q!R!3v!R!S!3v!S!^%T!_#R%T#R#S!3v#S#b%T#b#c!2w#c#o%T#p~%T!{!4rV$UWO!Q%T!Q!Y!5X!Y!^%T!_#R%T#R#S!5X#S#o%T#p~%T!{!5`X$UWk!sO!Q%T!Q!Y!5X!Y!^%T!_#R%T#R#S!5X#S#b%T#b#c!2w#c#o%T#p~%T!{!6QZ$UWO!Q%T!Q![!6s![!^%T!_!c%T!c!i!6s!i#R%T#R#S!6s#S#T%T#T#Z!6s#Z#o%T#p~%T!{!6z]$UWk!sO!Q%T!Q![!6s![!^%T!_!c%T!c!i!6s!i#R%T#R#S!6s#S#T%T#T#Z!6s#Z#b%T#b#c!2w#c#o%T#p~%T$u!7|R!]V$UW#m$fO!^%T!_#o%T#p~%T!q!8^R_!i$UWO!^%T!_#o%T#p~%T5w!8rR'bd!a/n#x&s'|P!P!Q!8{!^!_!9Q!_!`!9_W!9QO$WW#v!9VP#`#v!_!`!9Y#v!9_O#o#v#v!9dO#a#v$u!9kT!{$m$UWO!^%T!_!`'v!`!a!9z!a#o%T#p~%T$P!:RR#W#w$UWO!^%T!_#o%T#p~%T%V!:gT'a!R#a#v$RS$UWO!^%T!_!`!:v!`!a!;W!a#o%T#p~%T$O!:}R#a#v$UWO!^%T!_#o%T#p~%T$O!;_T#`#v$UWO!^%T!_!`5T!`!a!;n!a#o%T#p~%T$O!;uS#`#v$UWO!^%T!_!`5T!`#o%T#p~%T*a!]S#g#v$UWO!^%T!_!`5T!`#o%T#p~%T$a!>pR$UW'f$XO!^%T!_#o%T#p~%T~!?OO!T~5b!?VT'w5Y$UWO!^%T!_!`5T!`#o%T#p#q!=P#q~%T6X!?oR!S5}nQ$UWO!^%T!_#o%T#p~%TX!@PR!kP$UWO!^%T!_#o%T#p~%T7Z!@gr$UW'Y7R#zS']$y'g3SOX%TXY%cYZ%TZ[%c[p%Tpq%cqt%Ttu2`u}%T}!O3j!O!Q%T!Q![2`![!^%T!_!c%T!c!}2`!}#R%T#R#S2`#S#T%T#T#o2`#p$f%T$f$g%c$g#BY2`#BY#BZ!@Y#BZ$IS2`$IS$I_!@Y$I_$JT2`$JT$JU!@Y$JU$KV2`$KV$KW!@Y$KW&FU2`&FU&FV!@Y&FV?HT2`?HT?HU!@Y?HU~2`7Z!CO_$UW'Z7R#zS']$y'g3SOt%Ttu2`u}%T}!O3j!O!Q%T!Q![2`![!^%T!_!c%T!c!}2`!}#R%T#R#S2`#S#T%T#T#o2`#p$g%T$g~2`",tokenizers:[tsExtends,noSemicolon,incdecToken,template,0,1,2,3,4,5,6,7,8,9,insertSemicolon],topRules:{Script:[0,7]},dialects:{jsx:12107,ts:12109},dynamicPrecedences:{149:1,176:1},specialized:[{term:289,get:o=>spec_identifier[o]||-1},{term:299,get:o=>spec_word[o]||-1},{term:63,get:o=>spec_LessThan[o]||-1}],tokenPrec:12130}),snippets=[snippetCompletion("function ${name}(${params}) {\n ${}\n}",{label:"function",detail:"definition",type:"keyword"}),snippetCompletion("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n ${}\n}",{label:"for",detail:"loop",type:"keyword"}),snippetCompletion("for (let ${name} of ${collection}) {\n ${}\n}",{label:"for",detail:"of loop",type:"keyword"}),snippetCompletion("do {\n ${}\n} while (${})",{label:"do",detail:"loop",type:"keyword"}),snippetCompletion("while (${}) {\n ${}\n}",{label:"while",detail:"loop",type:"keyword"}),snippetCompletion(`try { + \${} +} catch (\${error}) { + \${} +}`,{label:"try",detail:"/ catch block",type:"keyword"}),snippetCompletion("if (${}) {\n ${}\n}",{label:"if",detail:"block",type:"keyword"}),snippetCompletion(`if (\${}) { + \${} +} else { + \${} +}`,{label:"if",detail:"/ else block",type:"keyword"}),snippetCompletion(`class \${name} { + constructor(\${params}) { + \${} + } +}`,{label:"class",detail:"definition",type:"keyword"}),snippetCompletion('import {${names}} from "${module}"\n${}',{label:"import",detail:"named",type:"keyword"}),snippetCompletion('import ${name} from "${module}"\n${}',{label:"import",detail:"default",type:"keyword"})],cache=new NodeWeakMap,ScopeNodes=new Set(["Script","Block","FunctionExpression","FunctionDeclaration","ArrowFunction","MethodDeclaration","ForStatement"]);function defID(o){return(e,s)=>{let a=e.node.getChild("VariableDefinition");return a&&s(a,o),!0}}const functionContext=["FunctionDeclaration"],gatherCompletions={FunctionDeclaration:defID("function"),ClassDeclaration:defID("class"),ClassExpression:()=>!0,EnumDeclaration:defID("constant"),TypeAliasDeclaration:defID("type"),NamespaceDeclaration:defID("namespace"),VariableDefinition(o,e){o.matchContext(functionContext)||e(o,"variable")},TypeDefinition(o,e){e(o,"type")},__proto__:null};function getScope(o,e){let s=cache.get(e);if(s)return s;let a=[],c=!0;function h(d,g){let _=o.sliceString(d.from,d.to);a.push({label:_,type:g})}return e.cursor(IterMode.IncludeAnonymous).iterate(d=>{if(c)c=!1;else if(d.name){let g=gatherCompletions[d.name];if(g&&g(d,h)||ScopeNodes.has(d.name))return!1}else if(d.to-d.from>8192){for(let g of getScope(o,d.node))a.push(g);return!1}}),cache.set(e,a),a}const Identifier=/^[\w$\xa1-\uffff][\w$\d\xa1-\uffff]*$/,dontComplete=["TemplateString","String","RegExp","LineComment","BlockComment","VariableDefinition","TypeDefinition","Label","PropertyDefinition","PropertyName","PrivatePropertyDefinition","PrivatePropertyName"];function localCompletionSource(o){let e=syntaxTree(o.state).resolveInner(o.pos,-1);if(dontComplete.indexOf(e.name)>-1)return null;let s=e.to-e.from<20&&Identifier.test(o.state.sliceDoc(e.from,e.to));if(!s&&!o.explicit)return null;let a=[];for(let c=e;c;c=c.parent)ScopeNodes.has(c.name)&&(a=a.concat(getScope(o.state.doc,c)));return{options:a,from:s?e.from:o.pos,validFor:Identifier}}const javascriptLanguage=LRLanguage.define({parser:parser.configure({props:[indentNodeProp.add({IfStatement:continuedIndent({except:/^\s*({|else\b)/}),TryStatement:continuedIndent({except:/^\s*({|catch\b|finally\b)/}),LabeledStatement:flatIndent,SwitchBody:o=>{let e=o.textAfter,s=/^\s*\}/.test(e),a=/^\s*(case|default)\b/.test(e);return o.baseIndent+(s?0:a?1:2)*o.unit},Block:delimitedIndent({closing:"}"}),ArrowFunction:o=>o.baseIndent+o.unit,"TemplateString BlockComment":()=>null,"Statement Property":continuedIndent({except:/^{/}),JSXElement(o){let e=/^\s*<\//.test(o.textAfter);return o.lineIndent(o.node.from)+(e?0:o.unit)},JSXEscape(o){let e=/\s*\}/.test(o.textAfter);return o.lineIndent(o.node.from)+(e?0:o.unit)},"JSXOpenTag JSXSelfClosingTag"(o){return o.column(o.node.from)+o.unit}}),foldNodeProp.add({"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression":foldInside,BlockComment(o){return{from:o.from+2,to:o.to-2}}})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"`"]},commentTokens:{line:"//",block:{open:"/*",close:"*/"}},indentOnInput:/^\s*(?:case |default:|\{|\}|<\/)$/,wordChars:"$"}}),typescriptLanguage=javascriptLanguage.configure({dialect:"ts"}),jsxLanguage=javascriptLanguage.configure({dialect:"jsx"}),tsxLanguage=javascriptLanguage.configure({dialect:"jsx ts"}),keywords="break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield".split(" ").map(o=>({label:o,type:"keyword"}));function javascript(o={}){let e=o.jsx?o.typescript?tsxLanguage:jsxLanguage:o.typescript?typescriptLanguage:javascriptLanguage;return new LanguageSupport(e,[javascriptLanguage.data.of({autocomplete:ifNotIn(dontComplete,completeFromList(snippets.concat(keywords)))}),javascriptLanguage.data.of({autocomplete:localCompletionSource}),o.jsx?autoCloseTags:[]])}function elementName(o,e,s=o.length){if(!e)return"";let a=e.getChild("JSXIdentifier");return a?o.sliceString(a.from,Math.min(a.to,s)):""}const android=typeof navigator=="object"&&/Android\b/.test(navigator.userAgent),autoCloseTags=EditorView.inputHandler.of((o,e,s,a)=>{if((android?o.composing:o.compositionStarted)||o.state.readOnly||e!=s||a!=">"&&a!="/"||!javascriptLanguage.isActiveAt(o.state,e,-1))return!1;let{state:c}=o,h=c.changeByRange(d=>{var g,_,b;let{head:$}=d,j=syntaxTree(c).resolveInner($,-1),_e;if(j.name=="JSXStartTag"&&(j=j.parent),a==">"&&j.name=="JSXFragmentTag")return{range:EditorSelection.cursor($+1),changes:{from:$,insert:"><>"}};if(a==">"&&j.name=="JSXIdentifier"){if(((_=(g=j.parent)===null||g===void 0?void 0:g.lastChild)===null||_===void 0?void 0:_.name)!="JSXEndTag"&&(_e=elementName(c.doc,j.parent,$)))return{range:EditorSelection.cursor($+1),changes:{from:$,insert:`>`}}}else if(a=="/"&&j.name=="JSXFragmentTag"){let et=j.parent,tt=et==null?void 0:et.parent;if(et.from==$-1&&((b=tt.lastChild)===null||b===void 0?void 0:b.name)!="JSXEndTag"&&(_e=elementName(c.doc,tt==null?void 0:tt.firstChild,$))){let nt=`/${_e}>`;return{range:EditorSelection.cursor($+nt.length),changes:{from:$,insert:nt}}}}return{range:d}});return h.changes.empty?!1:(o.dispatch(h,{userEvent:"input.type",scrollIntoView:!0}),!0)});var createTheme=o=>{var{theme:e,settings:s,styles:a}=o,c={"&":{backgroundColor:s.background,color:s.foreground},".cm-gutters":{}};s.gutterBackground&&(c[".cm-gutters"].backgroundColor=s.gutterBackground),s.gutterForeground&&(c[".cm-gutters"].color=s.gutterForeground),s.gutterBorder&&(c[".cm-gutters"].borderRightColor=s.gutterBorder),s.caret&&(c[".cm-content"]={caretColor:s.caret},c[".cm-cursor, .cm-dropCursor"]={borderLeftColor:s.caret}),s.lineHighlight&&(c[".cm-activeLine"]={backgroundColor:s.lineHighlight},c[".cm-activeLineGutter"]={backgroundColor:s.lineHighlight}),s.selection&&(c["&.cm-focused .cm-selectionBackground .cm-selectionBackground, & .cm-selectionLayer .cm-selectionBackground, ::selection"]={backgroundColor:s.selection}),s.selectionMatch&&(c["& .cm-selectionMatch"]={backgroundColor:s.selectionMatch});var h=EditorView.theme(c,{dark:e==="dark"}),d=HighlightStyle.define(a),g=[h,syntaxHighlighting(d)];return g};const strudelTheme=createTheme({theme:"dark",settings:{background:"#222",foreground:"#75baff",caret:"#ffcc00",selection:"rgba(128, 203, 196, 0.5)",selectionMatch:"#036dd626",lineHighlight:"#8a91991a",gutterBackground:"transparent",gutterForeground:"#676e95"},styles:[{tag:tags.keyword,color:"#c792ea"},{tag:tags.operator,color:"#89ddff"},{tag:tags.special(tags.variableName),color:"#eeffff"},{tag:tags.typeName,color:"#f07178"},{tag:tags.atom,color:"#f78c6c"},{tag:tags.number,color:"#ff5370"},{tag:tags.definition(tags.variableName),color:"#82aaff"},{tag:tags.string,color:"#c3e88d"},{tag:tags.special(tags.string),color:"#f07178"},{tag:tags.comment,color:"#7d8799"},{tag:tags.variableName,color:"#f07178"},{tag:tags.tagName,color:"#ff5370"},{tag:tags.bracket,color:"#a2a1a4"},{tag:tags.meta,color:"#ffcb6b"},{tag:tags.attributeName,color:"#c792ea"},{tag:tags.propertyName,color:"#c792ea"},{tag:tags.className,color:"#decb6b"},{tag:tags.invalid,color:"#ffffff"}]}),style$1="",setFlash=StateEffect.define(),flashField=StateField.define({create(){return Decoration.none},update(o,e){try{for(let s of e.effects)if(s.is(setFlash))if(s.value){const a=Decoration.mark({attributes:{style:"background-color: #FFCA2880"}});o=Decoration.set([a.range(0,e.newDoc.length)])}else o=Decoration.set([]);return o}catch(s){return console.warn("flash error",s),o}},provide:o=>EditorView.decorations.from(o)}),flash=o=>{o.dispatch({effects:setFlash.of(!0)}),setTimeout(()=>{o.dispatch({effects:setFlash.of(!1)})},200)},setHighlights=StateEffect.define(),highlightField=StateField.define({create(){return Decoration.none},update(o,e){try{for(let s of e.effects)if(s.is(setHighlights)){const a=s.value.map(c=>(c.context.locations||[]).map(({start:h,end:d})=>{const g=c.context.color||"#FFCA28";let _=e.newDoc.line(h.line).from+h.column,b=e.newDoc.line(d.line).from+d.column;const $=e.newDoc.length;return _>$||b>$?void 0:Decoration.mark({attributes:{style:`outline: 1.5px solid ${g};`}}).range(_,b)})).flat().filter(Boolean)||[];o=Decoration.set(a,!0)}return o}catch{return Decoration.set([])}},provide:o=>EditorView.decorations.from(o)}),extensions=[javascript(),strudelTheme,highlightField,flashField];function CodeMirror({value:o,onChange:e,onViewChanged:s,onSelectionChange:a,options:c,editorDidMount:h}){const d=react.exports.useCallback(b=>{e==null||e(b)},[e]),g=react.exports.useCallback(b=>{s==null||s(b)},[s]),_=react.exports.useCallback(b=>{b.selectionSet&&a&&(a==null||a(b.state.selection))},[a]);return jsx(Fragment,{children:jsx(ReactCodeMirror,{value:o,onChange:d,onCreateEditor:g,onUpdate:_,extensions})})}const useKeydown=o=>react.exports.useLayoutEffect(()=>(window.addEventListener("keydown",o,!0),()=>window.removeEventListener("keydown",o,!0)),[o]);function useStrudel({defaultOutput:o,interval:e,getTime:s,code:a,evalOnMount:c=!1}){const[h,d]=react.exports.useState(),[g,_]=react.exports.useState(),[b,$]=react.exports.useState(a),[j,_e]=react.exports.useState(),et=a!==b,tt=react.exports.useMemo(()=>new Scheduler({interval:e,onTrigger:o,onError:d,getTime:s}),[o,e]),nt=react.exports.useCallback(async()=>{if(!a){console.log("no code..");return}try{const{pattern:rt}=await evaluate(a);$(a),tt==null||tt.setPattern(rt),_e(rt),_()}catch(rt){_(rt),console.warn("eval error",rt)}},[a,tt]),st=react.exports.useRef();return react.exports.useEffect(()=>{!st.current&&c&&(st.current=!0,nt())},[nt,c]),{schedulerError:h,scheduler:tt,evalError:g,evaluate:nt,activeCode:b,isDirty:et,pattern:j}}function useHighlighting({view:o,pattern:e,active:s,getTime:a}){const c=react.exports.useRef([]),h=react.exports.useRef();react.exports.useEffect(()=>{if(o)if(e&&s){let g=function(){try{const _=a(),$=[Math.max(h.current||_,_-1/10),_+1/60];h.current=_+1/60,c.current=c.current.filter(_e=>_e.whole.end>_);const j=e.queryArc(...$).filter(_e=>_e.hasOnset());c.current=c.current.concat(j),o.dispatch({effects:setHighlights.of(c.current)})}catch{o.dispatch({effects:setHighlights.of([])})}d=requestAnimationFrame(g)},d=requestAnimationFrame(g);return()=>{cancelAnimationFrame(d)}}else c.current=[],o.dispatch({effects:setHighlights.of([])})},[e,s,o])}const style="";evalScope(controls,__vitePreload(()=>Promise.resolve().then(()=>strudel),void 0),__vitePreload(()=>import("./index.fbde1114.js"),[]),__vitePreload(()=>import("./index.bb9bb2c4.js"),[]),__vitePreload(()=>import("./index.5b4bbb94.js"),[]),__vitePreload(()=>import("./index.e7ac54e9.js"),[]),__vitePreload(()=>import("./osc.c09823d8.js"),[]),__vitePreload(()=>import("./index.0dabc914.js"),[]),__vitePreload(()=>import("./serial.b42b098c.js"),[]),__vitePreload(()=>import("./index.cc0b04cf.js"),[]));const defaultTune=`samples({ + bd: ['bd/BT0AADA.wav','bd/BT0AAD0.wav','bd/BT0A0DA.wav','bd/BT0A0D3.wav','bd/BT0A0D0.wav','bd/BT0A0A7.wav'], + sd: ['sd/rytm-01-classic.wav','sd/rytm-00-hard.wav'], + hh: ['hh27/000_hh27closedhh.wav','hh/000_hh3closedhh.wav'], +}, 'github:tidalcycles/Dirt-Samples/master/'); +stack( + s("bd,[~ ],hh(3,4)") // drums + .speed(perlin.range(.7,.9)) // random sample speed variation + //.hush() + ,"" // bassline + .off(1/8,x=>x.add(12).degradeBy(.5)) // random octave jumps + .add(perlin.range(0,.5)) // random pitch variation + .superimpose(add(.05)) // add second, slightly detuned voice + .n() // wrap in "n" + .decay(.15).sustain(0) // make each note of equal length + .s('sawtooth') // waveform + .gain(.4) // turn down + .cutoff(sine.slow(7).range(300,5000)) // automate cutoff + //.hush() + ,">".voicings() // chords + .superimpose(x=>x.add(.04)) // add second, slightly detuned voice + .add(perlin.range(0,.5)) // random pitch variation + .n() // wrap in "n" + .s('square') // waveform + .gain(.16) // turn down + .cutoff(500) // fixed cutoff + .attack(1) // slowly fade in + //.hush() + ,"a4 c5 ".struct("x(5,8)") + .superimpose(x=>x.add(.04)) // add second, slightly detuned voice + .add(perlin.range(0,.5)) // random pitch variation + .n() // wrap in "n" + .decay(.1).sustain(0) // make notes short + .s('triangle') // waveform + .degradeBy(perlin.range(0,.5)) // randomly controlled random removal :) + .echoWith(4,.125,(x,n)=>x.gain(.15*1/(n+1))) // echo notes + //.hush() +) +.fast(2/3)`,ctx=getAudioContext(),getTime=()=>ctx.currentTime;function App(){const[o,e]=react.exports.useState(defaultTune),[s,a]=react.exports.useState(),{scheduler:c,evaluate:h,schedulerError:d,evalError:g,isDirty:_,activeCode:b,pattern:$}=useStrudel({code:o,defaultOutput:webaudioOutput,getTime});useHighlighting({view:s,pattern:$,active:!(b!=null&&b.includes("strudel disable-highlighting")),getTime:()=>c.phase});const j=g||d;return useKeydown(react.exports.useCallback(async _e=>{(_e.ctrlKey||_e.altKey)&&(_e.code==="Enter"?(_e.preventDefault(),flash(s),await h(),_e.shiftKey&&(panic(),c.stop(),c.start()),c.started||c.start()):_e.code==="Period"&&(c.pause(),panic(),_e.preventDefault()))},[c,h,s])),jsxs("div",{children:[jsxs("nav",{className:"z-[12] w-full flex justify-center absolute bottom-0",children:[jsxs("div",{className:"bg-slate-500 space-x-2 px-2 rounded-t-md",children:[jsx("button",{onClick:async()=>{await h(),await getAudioContext().resume(),c.start()},children:"start"}),jsx("button",{onClick:()=>c.stop(),children:"stop"}),_&&jsx("button",{onClick:()=>h(),children:"eval"})]}),j&&jsxs("p",{children:["error ",j.message]})]}),jsx(CodeMirror,{value:o,onChange:e,onViewChanged:a})]})}client.createRoot(document.getElementById("root")).render(jsx(React.StrictMode,{children:jsx(App,{})}));export{Hap as H,Pattern$3 as P,getDefaultExportFromCjs as a,chooseInWith as b,commonjsGlobal as c,rand as d,strudel as e,getAudioContext as f,getAugmentedNamespace as g,getDestination as h,getCachedBuffer as i,getLoadedBuffer as j,loadGithubSamples as k,loadBuffer as l,mod as m,samples as n,resetLoadedSamples as o,panic as p,getLoadedSamples$1 as q,reify$1 as r,stack as s,webaudioOutput as w}; diff --git a/packages/react/examples/nano-repl/dist/assets/index.fbde1114.js b/packages/react/examples/nano-repl/dist/assets/index.fbde1114.js new file mode 100644 index 00000000..16a09e8c --- /dev/null +++ b/packages/react/examples/nano-repl/dist/assets/index.fbde1114.js @@ -0,0 +1 @@ +import{P as _,m as Lt,g as Ut,c as Y,a as Xt,r as Kt,H as Qt,s as Yt}from"./index.ec9f9930.js";const C=(n,t)=>Array(Math.abs(t)+1).join(n);function g(n,t,e){return function(...o){return console.warn(`${n} is deprecated. Use ${t}.`),e.apply(this,o)}}function z(n){return n!==null&&typeof n=="object"&&typeof n.name=="string"}function q(n){return n!==null&&typeof n=="object"&&typeof n.step=="number"&&typeof n.alt=="number"}const Qn=[0,2,4,-1,1,3,5],Yn=Qn.map(n=>Math.floor(n*7/12));function en(n){const{step:t,alt:e,oct:o,dir:r=1}=n,i=Qn[t]+7*e;if(o===void 0)return[r*i];const a=o-Yn[t]-4*e;return[r*i,r*a]}const Zt=[3,0,4,1,5,2,6];function on(n){const[t,e,o]=n,r=Zt[Jt(t)],i=Math.floor((t+1)/7);if(e===void 0)return{step:r,alt:i,dir:o};const a=e+4*i+Yn[r];return{step:r,alt:i,oct:a,dir:o}}function Jt(n){const t=(n+1)%7;return t<0?7+t:t}const Zn={empty:!0,name:"",pc:"",acc:""},Dn=new Map,vn=n=>"CDEFGAB".charAt(n),E=n=>n<0?C("b",-n):C("#",n),G=n=>n[0]==="b"?-n.length:n.length;function u(n){const t=Dn.get(n);if(t)return t;const e=typeof n=="string"?te(n):q(n)?u(ee(n)):z(n)?u(n.name):Zn;return Dn.set(n,e),e}const Wt=/^([a-gA-G]?)(#{1,}|b{1,}|x{1,}|)(-?\d*)\s*(.*)$/;function rn(n){const t=Wt.exec(n);return[t[1].toUpperCase(),t[2].replace(/x/g,"##"),t[3],t[4]]}function F(n){return u(on(n))}const ne=(n,t)=>(n%t+t)%t,pn=[0,2,4,5,7,9,11];function te(n){const t=rn(n);if(t[0]===""||t[3]!=="")return Zn;const e=t[0],o=t[1],r=t[2],i=(e.charCodeAt(0)+3)%7,a=G(o),s=r.length?+r:void 0,c=en({step:i,alt:a,oct:s}),l=e+o+r,m=e+o,d=(pn[i]+a+120)%12,M=s===void 0?ne(pn[i]+a,12)-12*99:pn[i]+a+12*(s+1),h=M>=0&&M<=127?M:null,A=s===void 0?null:Math.pow(2,(M-69)/12)*440;return{empty:!1,acc:o,alt:a,chroma:d,coord:c,freq:A,height:M,letter:e,midi:h,name:l,oct:s,pc:m,step:i}}function ee(n){const{step:t,alt:e,oct:o}=n,r=vn(t);if(!r)return"";const i=r+E(e);return o||o===0?i+o:i}const yn={empty:!0,name:"",acc:""},oe="([-+]?\\d+)(d{1,4}|m|M|P|A{1,4})",re="(AA|A|P|M|m|d|dd)([-+]?\\d+)",ie=new RegExp("^"+oe+"|"+re+"$");function $n(n){const t=ie.exec(`${n}`);return t===null?["",""]:t[1]?[t[1],t[2]]:[t[4],t[3]]}const Rn={};function f(n){return typeof n=="string"?Rn[n]||(Rn[n]=ae(n)):q(n)?f(ce(n)):z(n)?f(n.name):yn}const kn=[0,2,4,5,7,9,11],Jn="PMMPPMM";function ae(n){const t=$n(n);if(t[0]==="")return yn;const e=+t[0],o=t[1],r=(Math.abs(e)-1)%7,i=Jn[r];if(i==="M"&&o==="P")return yn;const a=i==="M"?"majorable":"perfectable",s=""+e+o,c=e<0?-1:1,l=e===8||e===-8?e:c*(r+1),m=se(a,o),d=Math.floor((Math.abs(e)-1)/7),M=c*(kn[r]+m+12*d),h=(c*(kn[r]+m)%12+12)%12,A=en({step:r,alt:m,oct:d,dir:c});return{empty:!1,name:s,num:e,q:o,step:r,alt:m,dir:c,type:a,simple:l,semitones:M,chroma:h,coord:A,oct:d}}function B(n,t){const[e,o=0]=n,r=e*7+o*12<0,i=t||r?[-e,-o,-1]:[e,o,1];return f(on(i))}function se(n,t){return t==="M"&&n==="majorable"||t==="P"&&n==="perfectable"?0:t==="m"&&n==="majorable"?-1:/^A+$/.test(t)?t.length:/^d+$/.test(t)?-1*(n==="perfectable"?t.length:t.length+1):0}function ce(n){const{step:t,alt:e,oct:o=0,dir:r}=n;if(!r)return"";const i=t+1+7*o,a=i===0?t+1:i,s=r<0?"-":"",c=Jn[t]==="M"?"majorable":"perfectable";return s+a+me(c,e)}function me(n,t){return t===0?n==="majorable"?"M":"P":t===-1&&n==="majorable"?"m":t>0?C("A",t):C("d",n==="perfectable"?t:t+1)}function P(n,t){const e=u(n),o=f(t);if(e.empty||o.empty)return"";const r=e.coord,i=o.coord,a=r.length===1?[r[0]+i[0]]:[r[0]+i[0],r[1]+i[1]];return F(a).name}function D(n,t){const e=u(n),o=u(t);if(e.empty||o.empty)return"";const r=e.coord,i=o.coord,a=i[0]-r[0],s=r.length===2&&i.length===2?i[1]-r[1]:-Math.floor(a*7/12),c=o.height===e.height&&o.midi!==null&&e.midi!==null&&e.step>o.step;return B([a,s],c).name}const Wn=Object.freeze(Object.defineProperty({__proto__:null,accToAlt:G,altToAcc:E,coordToInterval:B,coordToNote:F,decode:on,deprecate:g,distance:D,encode:en,fillStr:C,interval:f,isNamed:z,isPitch:q,note:u,stepToLetter:vn,tokenizeInterval:$n,tokenizeNote:rn,transpose:P},Symbol.toStringTag,{value:"Module"})),On=(n,t)=>Array(t+1).join(n),ue=/^(_{1,}|=|\^{1,}|)([abcdefgABCDEFG])([,']*)$/;function nt(n){const t=ue.exec(n);return t?[t[1],t[2],t[3]]:["","",""]}function W(n){const[t,e,o]=nt(n);if(e==="")return"";let r=4;for(let a=0;a96?e.toUpperCase()+i+(r+1):e+i+r}function tt(n){const t=u(n);if(t.empty||!t.oct&&t.oct!==0)return"";const{letter:e,acc:o,oct:r}=t,i=o[0]==="b"?o.replace(/b/g,"_"):o.replace(/#/g,"^"),a=r>4?e.toLowerCase():e,s=r===5?"":r>4?On("'",r-5):On(",",4-r);return i+a+s}function le(n,t){return tt(P(W(n),t))}function de(n,t){return D(W(n),W(t))}var Me={abcToScientificNotation:W,scientificToAbcNotation:tt,tokenize:nt,transpose:le,distance:de};function fe(n,t){const e=[];for(;t--;e[t]=t+n);return e}function Pe(n,t){const e=[];for(;t--;e[t]=n-t);return e}function pe(n,t){return nt===0||t)}function et(n){return n.map(e=>u(e)).filter(e=>!e.empty).sort((e,o)=>e.height-o.height).map(e=>e.name)}function ge(n){return et(n).filter((t,e,o)=>e===0||t!==o[e-1])}function be(n,t=Math.random){let e,o,r=n.length;for(;r;)e=Math.floor(t()*r--),o=n[r],n[r]=n[e],n[e]=o;return n}function ot(n){return n.length===0?[[]]:ot(n.slice(1)).reduce((t,e)=>t.concat(n.map((o,r)=>{const i=e.slice();return i.splice(r,0,n[0]),i})),[])}const Ae=Object.freeze(Object.defineProperty({__proto__:null,compact:ye,permutations:ot,range:pe,rotate:he,shuffle:be,sortedNoteNames:et,sortedUniqNoteNames:ge},Symbol.toStringTag,{value:"Module"}));function ve(n,t){const e=[];for(;t--;e[t]=t+n);return e}function $e(n,t){const e=[];for(;t--;e[t]=n-t);return e}function an(n,t){return nt===0||t)}function Ne(n,t=Math.random){let e,o,r=n.length;for(;r;)e=Math.floor(t()*r--),o=n[r],n[r]=n[e],n[e]=o;return n}function rt(n){return n.length===0?[[]]:rt(n.slice(1)).reduce((t,e)=>t.concat(n.map((o,r)=>{const i=e.slice();return i.splice(r,0,n[0]),i})),[])}var Ie={compact:Nn,permutations:rt,range:an,rotate:H,shuffle:Ne};const T={empty:!0,name:"",setNum:0,chroma:"000000000000",normalized:"000000000000",intervals:[]},In=n=>Number(n).toString(2),Fn=n=>parseInt(n,2),je=/^[01]{12}$/;function it(n){return je.test(n)}const Se=n=>typeof n=="number"&&n>=0&&n<=4095,Te=n=>n&&it(n.chroma),zn={[T.chroma]:T};function p(n){const t=it(n)?n:Se(n)?In(n):Array.isArray(n)?ze(n):Te(n)?n.chroma:T.chroma;return zn[t]=zn[t]||Fe(t)}const Ve=g("Pcset.pcset","Pcset.get",p),_e=n=>p(n).chroma,Ce=n=>p(n).intervals,we=n=>p(n).setNum,xe=["1P","2m","2M","3m","3M","4P","5d","5P","6m","6M","7m","7M"];function Ee(n){const t=[];for(let e=0;e<12;e++)n.charAt(e)==="1"&&t.push(xe[e]);return t}function De(){return an(2048,4095).map(In)}function jn(n,t=!0){const o=p(n).chroma.split("");return Nn(o.map((r,i)=>{const a=H(i,o);return t&&a[0]==="0"?null:a.join("")}))}function Re(n,t){return p(n).setNum===p(t).setNum}function sn(n){const t=p(n).setNum;return e=>{const o=p(e).setNum;return t&&t!==o&&(o&t)===o}}function cn(n){const t=p(n).setNum;return e=>{const o=p(e).setNum;return t&&t!==o&&(o|t)===o}}function at(n){const t=p(n);return e=>{const o=u(e);return t&&!o.empty&&t.chroma.charAt(o.chroma)==="1"}}function ke(n){const t=at(n);return e=>e.filter(t)}var st={get:p,chroma:_e,num:we,intervals:Ce,chromas:De,isSupersetOf:cn,isSubsetOf:sn,isNoteIncludedIn:at,isEqual:Re,filter:ke,modes:jn,pcset:Ve};function Oe(n){const t=n.split("");return t.map((e,o)=>H(o,t).join(""))}function Fe(n){const t=Fn(n),e=Oe(n).map(Fn).filter(i=>i>=2048).sort()[0],o=In(e),r=Ee(n);return{empty:!1,name:"",setNum:t,chroma:n,normalized:o,intervals:r}}function ze(n){if(n.length===0)return T.chroma;let t;const e=[0,0,0,0,0,0,0,0,0,0,0,0];for(let o=0;on.name).filter(n=>n)}function Le(){return R.map(n=>n.aliases[0]).filter(n=>n)}function Ue(){return Object.keys(j)}function k(){return R.slice()}const Xe=g("ChordType.entries","ChordType.all",k);function Ke(){R=[],j={}}function ct(n,t,e){const o=Ye(n),r={...p(n),name:e||"",quality:o,intervals:n,aliases:t};R.push(r),r.name&&(j[r.name]=r),j[r.setNum]=r,j[r.chroma]=r,r.aliases.forEach(i=>Qe(r,i))}function Qe(n,t){j[t]=n}function Ye(n){const t=e=>n.indexOf(e)!==-1;return t("5A")?"Augmented":t("3M")?"Major":t("5d")?"Diminished":t("3m")?"Minor":"Unknown"}qe.forEach(([n,t,e])=>ct(n.split(" "),e.split(" "),t));R.sort((n,t)=>n.setNum-t.setNum);var mt={names:He,symbols:Le,get:Sn,all:k,add:ct,removeAll:Ke,keys:Ue,entries:Xe,chordType:Be};const Ze=n=>{const t=n.reduce((e,o)=>{const r=u(o).chroma;return r!==void 0&&(e[r]=e[r]||u(o).name),e},{});return e=>t[e]};function Je(n){const t=n.map(o=>u(o).pc).filter(o=>o);return u.length===0?[]:We(t,1).filter(o=>o.weight).sort((o,r)=>r.weight-o.weight).map(o=>o.name)}function We(n,t){const e=n[0],o=u(e).chroma,r=Ze(n),i=jn(n,!1),a=[];return i.forEach((s,c)=>{k().filter(m=>m.chroma===s).forEach(m=>{const d=m.aliases[0],M=r(c);c!==o?a.push({weight:.5*t,name:`${M}${d}/${e}`}):a.push({weight:1*t,name:`${M}${d}`})})}),a}const no=[["1P 2M 3M 5P 6M","major pentatonic","pentatonic"],["1P 3M 4P 5P 7M","ionian pentatonic"],["1P 3M 4P 5P 7m","mixolydian pentatonic","indian"],["1P 2M 4P 5P 6M","ritusen"],["1P 2M 4P 5P 7m","egyptian"],["1P 3M 4P 5d 7m","neopolitan major pentatonic"],["1P 3m 4P 5P 6m","vietnamese 1"],["1P 2m 3m 5P 6m","pelog"],["1P 2m 4P 5P 6m","kumoijoshi"],["1P 2M 3m 5P 6m","hirajoshi"],["1P 2m 4P 5d 7m","iwato"],["1P 2m 4P 5P 7m","in-sen"],["1P 3M 4A 5P 7M","lydian pentatonic","chinese"],["1P 3m 4P 6m 7m","malkos raga"],["1P 3m 4P 5d 7m","locrian pentatonic","minor seven flat five pentatonic"],["1P 3m 4P 5P 7m","minor pentatonic","vietnamese 2"],["1P 3m 4P 5P 6M","minor six pentatonic"],["1P 2M 3m 5P 6M","flat three pentatonic","kumoi"],["1P 2M 3M 5P 6m","flat six pentatonic"],["1P 2m 3M 5P 6M","scriabin"],["1P 3M 5d 6m 7m","whole tone pentatonic"],["1P 3M 4A 5A 7M","lydian #5P pentatonic"],["1P 3M 4A 5P 7m","lydian dominant pentatonic"],["1P 3m 4P 5P 7M","minor #7M pentatonic"],["1P 3m 4d 5d 7m","super locrian pentatonic"],["1P 2M 3m 4P 5P 7M","minor hexatonic"],["1P 2A 3M 5P 5A 7M","augmented"],["1P 2M 3m 3M 5P 6M","major blues"],["1P 2M 4P 5P 6M 7m","piongio"],["1P 2m 3M 4A 6M 7m","prometheus neopolitan"],["1P 2M 3M 4A 6M 7m","prometheus"],["1P 2m 3M 5d 6m 7m","mystery #1"],["1P 2m 3M 4P 5A 6M","six tone symmetric"],["1P 2M 3M 4A 5A 7m","whole tone","messiaen's mode #1"],["1P 2m 4P 4A 5P 7M","messiaen's mode #5"],["1P 3m 4P 5d 5P 7m","minor blues","blues"],["1P 2M 3M 4P 5d 6m 7m","locrian major","arabian"],["1P 2m 3M 4A 5P 6m 7M","double harmonic lydian"],["1P 2M 3m 4P 5P 6m 7M","harmonic minor"],["1P 2m 2A 3M 4A 6m 7m","altered","super locrian","diminished whole tone","pomeroy"],["1P 2M 3m 4P 5d 6m 7m","locrian #2","half-diminished","aeolian b5"],["1P 2M 3M 4P 5P 6m 7m","mixolydian b6","melodic minor fifth mode","hindu"],["1P 2M 3M 4A 5P 6M 7m","lydian dominant","lydian b7","overtone"],["1P 2M 3M 4A 5P 6M 7M","lydian"],["1P 2M 3M 4A 5A 6M 7M","lydian augmented"],["1P 2m 3m 4P 5P 6M 7m","dorian b2","phrygian #6","melodic minor second mode"],["1P 2M 3m 4P 5P 6M 7M","melodic minor"],["1P 2m 3m 4P 5d 6m 7m","locrian"],["1P 2m 3m 4d 5d 6m 7d","ultralocrian","superlocrian bb7","superlocrian diminished"],["1P 2m 3m 4P 5d 6M 7m","locrian 6","locrian natural 6","locrian sharp 6"],["1P 2A 3M 4P 5P 5A 7M","augmented heptatonic"],["1P 2M 3m 4A 5P 6M 7m","dorian #4","ukrainian dorian","romanian minor","altered dorian"],["1P 2M 3m 4A 5P 6M 7M","lydian diminished"],["1P 2m 3m 4P 5P 6m 7m","phrygian"],["1P 2M 3M 4A 5A 7m 7M","leading whole tone"],["1P 2M 3M 4A 5P 6m 7m","lydian minor"],["1P 2m 3M 4P 5P 6m 7m","phrygian dominant","spanish","phrygian major"],["1P 2m 3m 4P 5P 6m 7M","balinese"],["1P 2m 3m 4P 5P 6M 7M","neopolitan major"],["1P 2M 3m 4P 5P 6m 7m","aeolian","minor"],["1P 2M 3M 4P 5P 6m 7M","harmonic major"],["1P 2m 3M 4P 5P 6m 7M","double harmonic major","gypsy"],["1P 2M 3m 4P 5P 6M 7m","dorian"],["1P 2M 3m 4A 5P 6m 7M","hungarian minor"],["1P 2A 3M 4A 5P 6M 7m","hungarian major"],["1P 2m 3M 4P 5d 6M 7m","oriental"],["1P 2m 3m 3M 4A 5P 7m","flamenco"],["1P 2m 3m 4A 5P 6m 7M","todi raga"],["1P 2M 3M 4P 5P 6M 7m","mixolydian","dominant"],["1P 2m 3M 4P 5d 6m 7M","persian"],["1P 2M 3M 4P 5P 6M 7M","major","ionian"],["1P 2m 3M 5d 6m 7m 7M","enigmatic"],["1P 2M 3M 4P 5A 6M 7M","major augmented","major #5","ionian augmented","ionian #5"],["1P 2A 3M 4A 5P 6M 7M","lydian #9"],["1P 2m 2M 4P 4A 5P 6m 7M","messiaen's mode #4"],["1P 2m 3M 4P 4A 5P 6m 7M","purvi raga"],["1P 2m 3m 3M 4P 5P 6m 7m","spanish heptatonic"],["1P 2M 3M 4P 5P 6M 7m 7M","bebop"],["1P 2M 3m 3M 4P 5P 6M 7m","bebop minor"],["1P 2M 3M 4P 5P 5A 6M 7M","bebop major"],["1P 2m 3m 4P 5d 5P 6m 7m","bebop locrian"],["1P 2M 3m 4P 5P 6m 7m 7M","minor bebop"],["1P 2M 3m 4P 5d 6m 6M 7M","diminished","whole-half diminished"],["1P 2M 3M 4P 5d 5P 6M 7M","ichikosucho"],["1P 2M 3m 4P 5P 6m 6M 7M","minor six diminished"],["1P 2m 3m 3M 4A 5P 6M 7m","half-whole diminished","dominant diminished","messiaen's mode #2"],["1P 3m 3M 4P 5P 6M 7m 7M","kafi raga"],["1P 2M 3M 4P 4A 5A 6A 7M","messiaen's mode #6"],["1P 2M 3m 3M 4P 5d 5P 6M 7m","composite blues"],["1P 2M 3m 3M 4A 5P 6m 7m 7M","messiaen's mode #3"],["1P 2m 2M 3m 4P 4A 5P 6m 6M 7M","messiaen's mode #7"],["1P 2m 2M 3m 3M 4P 5d 5P 6m 6M 7m 7M","chromatic"]],to={...T,intervals:[],aliases:[]};let mn=[],S={};function ut(){return mn.map(n=>n.name)}function un(n){return S[n]||to}const eo=g("ScaleDictionary.scaleType","ScaleType.get",un);function L(){return mn.slice()}const oo=g("ScaleDictionary.entries","ScaleType.all",L);function ro(){return Object.keys(S)}function io(){mn=[],S={}}function lt(n,t,e=[]){const o={...p(n),name:t,intervals:n,aliases:e};return mn.push(o),S[o.name]=o,S[o.setNum]=o,S[o.chroma]=o,o.aliases.forEach(r=>ao(o,r)),o}function ao(n,t){S[t]=n}no.forEach(([n,t,...e])=>lt(n.split(" "),t,e));var dt={names:ut,get:un,all:L,add:lt,removeAll:io,keys:ro,entries:oo,scaleType:eo};const gn={empty:!0,name:"",symbol:"",root:"",rootDegree:0,type:"",tonic:null,setNum:NaN,quality:"Unknown",chroma:"",normalized:"",aliases:[],notes:[],intervals:[]},so=/^(6|64|7|9|11|13)$/;function ln(n){const[t,e,o,r]=rn(n);return t===""?["",n]:t==="A"&&r==="ug"?["","aug"]:!r&&(o==="4"||o==="5")?[t+e,o]:so.test(o)?[t+e,o+r]:[t+e+o,r]}function U(n){if(n==="")return gn;if(Array.isArray(n)&&n.length===2)return Z(n[1],n[0]);{const[t,e]=ln(n),o=Z(e,t);return o.empty?Z(n):o}}function Z(n,t,e){const o=Sn(n),r=u(t||""),i=u(e||"");if(o.empty||t&&r.empty||e&&i.empty)return gn;const a=D(r.pc,i.pc),s=o.intervals.indexOf(a)+1;if(!i.empty&&!s)return gn;const c=Array.from(o.intervals);for(let M=1;MP(r,M));n=o.aliases.indexOf(n)!==-1?n:o.aliases[0];const m=`${r.empty?"":r.pc}${n}${i.empty||s<=1?"":"/"+i.pc}`,d=`${t?r.pc+" ":""}${o.name}${s>1&&e?" over "+i.pc:""}`;return{...o,name:d,symbol:m,type:o.name,root:i.name,intervals:c,rootDegree:s,tonic:r.name,notes:l}}const co=g("Chord.chord","Chord.get",U);function mo(n,t){const[e,o]=ln(n);return e?P(e,t)+o:n}function uo(n){const t=U(n),e=cn(t.chroma);return L().filter(o=>e(o.chroma)).map(o=>o.name)}function lo(n){const t=U(n),e=cn(t.chroma);return k().filter(o=>e(o.chroma)).map(o=>t.tonic+o.aliases[0])}function Mo(n){const t=U(n),e=sn(t.chroma);return k().filter(o=>e(o.chroma)).map(o=>t.tonic+o.aliases[0])}var fo={getChord:Z,get:U,detect:Je,chordScales:uo,extended:lo,reduced:Mo,tokenize:ln,transpose:mo,chord:co};const Po=[[.125,"dl",["large","duplex longa","maxima","octuple","octuple whole"]],[.25,"l",["long","longa"]],[.5,"d",["double whole","double","breve"]],[1,"w",["whole","semibreve"]],[2,"h",["half","minim"]],[4,"q",["quarter","crotchet"]],[8,"e",["eighth","quaver"]],[16,"s",["sixteenth","semiquaver"]],[32,"t",["thirty-second","demisemiquaver"]],[64,"sf",["sixty-fourth","hemidemisemiquaver"]],[128,"h",["hundred twenty-eighth"]],[256,"th",["two hundred fifty-sixth"]]],dn=[];Po.forEach(([n,t,e])=>$o(n,t,e));const po={empty:!0,name:"",value:0,fraction:[0,0],shorthand:"",dots:"",names:[]};function ho(){return dn.reduce((n,t)=>(t.names.forEach(e=>n.push(e)),n),[])}function yo(){return dn.map(n=>n.shorthand)}const go=/^([^.]+)(\.*)$/;function Tn(n){const[t,e,o]=go.exec(n)||[],r=dn.find(s=>s.shorthand===e||s.names.includes(e));if(!r)return po;const i=No(r.fraction,o.length),a=i[0]/i[1];return{...r,name:n,dots:o,value:a,fraction:i}}const bo=n=>Tn(n).value,Ao=n=>Tn(n).fraction;var vo={names:ho,shorthands:yo,get:Tn,value:bo,fraction:Ao};function $o(n,t,e){dn.push({empty:!1,dots:"",name:"",value:1/n,fraction:n<1?[1/n,1]:[1,n],shorthand:t,names:e})}function No(n,t){const e=Math.pow(2,t);let o=n[0]*e,r=n[1]*e;const i=o;for(let a=0;af(n).name,So=n=>f(n).semitones,To=n=>f(n).q,Vo=n=>f(n).num;function ft(n){const t=f(n);return t.empty?"":t.simple+t.q}function _o(n){const t=f(n);if(t.empty)return"";const e=(7-t.step)%7,o=t.type==="perfectable"?-t.alt:-(t.alt+1);return f({step:e,alt:o,oct:t.oct,dir:t.dir}).name}const Co=[1,2,2,3,3,4,5,5,6,6,7,7],wo="P m M m M P d P m M m M".split(" ");function xo(n){const t=n<0?-1:1,e=Math.abs(n),o=e%12,r=Math.floor(e/12);return t*(Co[o]+7*r)+wo[o]}const Eo=D,Pt=ht((n,t)=>[n[0]+t[0],n[1]+t[1]]),Do=n=>t=>Pt(n,t),Ro=ht((n,t)=>[n[0]-t[0],n[1]-t[1]]);function pt(n,t){const e=Mt(n);if(e.empty)return"";const[o,r,i]=e.coord;return B([o+t,r,i]).name}var bn={names:Io,get:Mt,name:jo,num:Vo,semitones:So,quality:To,fromSemitones:xo,distance:Eo,invert:_o,simplify:ft,add:Pt,addTo:Do,substract:Ro,transposeFifths:pt};function ht(n){return(t,e)=>{const o=f(t).coord,r=f(e).coord;if(o&&r){const i=n(o,r);return B(i).name}}}function yt(n){return+n>=0&&+n<=127}function gt(n){if(yt(n))return+n;const t=u(n);return t.empty?null:t.midi}function ko(n,t=440){return Math.pow(2,(n-69)/12)*t}const Oo=Math.log(2),Fo=Math.log(440);function Vn(n){const t=12*(Math.log(n)-Fo)/Oo+69;return Math.round(t*100)/100}const zo="C C# D D# E F F# G G# A A# B".split(" "),qo="C Db D Eb E F Gb G Ab A Bb B".split(" ");function I(n,t={}){if(isNaN(n)||n===-1/0||n===1/0)return"";n=Math.round(n);const o=(t.sharps===!0?zo:qo)[n%12];if(t.pitchClass)return o;const r=Math.floor(n/12)-1;return o+r}var Go={isMidi:yt,toMidi:gt,midiToFreq:ko,midiToNoteName:I,freqToMidi:Vn};const Bo=["C","D","E","F","G","A","B"],bt=n=>n.name,At=n=>n.map(u).filter(t=>!t.empty);function Ho(n){return n===void 0?Bo.slice():Array.isArray(n)?At(n).map(bt):[]}const y=u,Lo=n=>y(n).name,Uo=n=>y(n).pc,Xo=n=>y(n).acc,Ko=n=>y(n).oct,Qo=n=>y(n).midi,Yo=n=>y(n).freq,Zo=n=>y(n).chroma;function vt(n){return I(n)}function Jo(n){return I(Vn(n))}function Wo(n){return I(Vn(n),{sharps:!0})}function nr(n){return I(n,{sharps:!0})}const _n=P,tr=P,$t=n=>t=>_n(t,n),er=$t,Nt=n=>t=>_n(n,t),or=Nt;function nn(n,t){const e=y(n);if(e.empty)return"";const[o,r]=e.coord;return F(r===void 0?[o+t]:[o+t,r]).name}const rr=nn,Cn=(n,t)=>n.height-t.height,ir=(n,t)=>t.height-n.height;function It(n,t){return t=t||Cn,At(n).sort(t).map(bt)}function jt(n){return It(n,Cn).filter((t,e,o)=>e===0||t!==o[e-1])}const ar=n=>{const t=y(n);return t.empty?"":I(t.midi||t.chroma,{sharps:t.alt>0,pitchClass:t.midi===null})};function St(n,t){const e=y(n);if(e.empty)return"";const o=y(t||I(e.midi||e.chroma,{sharps:e.alt<0,pitchClass:!0}));if(o.empty||o.chroma!==e.chroma)return"";if(e.oct===void 0)return o.pc;const r=e.chroma-e.alt,i=o.chroma-o.alt,a=r>11||i<0?-1:r<0||i>11?1:0,s=e.oct+a;return o.pc+s}var w={names:Ho,get:y,name:Lo,pitchClass:Uo,accidentals:Xo,octave:Ko,midi:Qo,ascending:Cn,descending:ir,sortedNames:It,sortedUniqNames:jt,fromMidi:vt,fromMidiSharps:nr,freq:Yo,fromFreq:Jo,fromFreqSharps:Wo,chroma:Zo,transpose:_n,tr,transposeBy:$t,trBy:er,transposeFrom:Nt,trFrom:or,transposeFifths:nn,trFifths:rr,simplify:ar,enharmonic:St};const Tt={empty:!0,name:"",chordType:""},qn={};function $(n){return typeof n=="string"?qn[n]||(qn[n]=Mr(n)):typeof n=="number"?$(Mn[n]||""):q(n)?mr(n):z(n)?$(n.name):Tt}const sr=g("RomanNumeral.romanNumeral","RomanNumeral.get",$);function cr(n=!0){return(n?Mn:dr).slice()}function mr(n){return $(E(n.alt)+Mn[n.step])}const ur=/^(#{1,}|b{1,}|x{1,}|)(IV|I{1,3}|VI{0,2}|iv|i{1,3}|vi{0,2})([^IViv]*)$/;function lr(n){return ur.exec(n)||["","","",""]}const Vt="I II III IV V VI VII",Mn=Vt.split(" "),dr=Vt.toLowerCase().split(" ");function Mr(n){const[t,e,o,r]=lr(n);if(!o)return Tt;const i=o.toUpperCase(),a=Mn.indexOf(i),s=G(e),c=1;return{empty:!1,name:t,roman:o,interval:f({step:a,alt:s,dir:c}).name,acc:e,chordType:r,alt:s,step:a,major:o===i,oct:0,dir:c}}var fr={names:cr,get:$,romanNumeral:sr};const b=Object.freeze([]),_t={type:"major",tonic:"",alteration:0,keySignature:""},J={tonic:"",grades:b,intervals:b,scale:b,chords:b,chordsHarmonicFunction:b,chordScales:b},Pr={..._t,...J,type:"major",minorRelative:"",scale:b,secondaryDominants:b,secondaryDominantsMinorRelative:b,substituteDominants:b,substituteDominantsMinorRelative:b},pr={..._t,type:"minor",relativeMajor:"",natural:J,harmonic:J,melodic:J},Gn=(n,t,e="")=>t.map((o,r)=>`${n[r]}${e}${o}`);function fn(n,t,e,o){return r=>{const i=n.map(s=>$(s).interval||""),a=i.map(s=>P(r,s));return{tonic:r,grades:n,intervals:i,scale:a,chords:Gn(a,t),chordsHarmonicFunction:e.slice(),chordScales:Gn(a,o," ")}}}const Ct=(n,t)=>{const e=u(n),o=u(t);return e.empty||o.empty?0:o.coord[0]-e.coord[0]},hr=fn("I II III IV V VI VII".split(" "),"maj7 m7 m7 maj7 7 m7 m7b5".split(" "),"T SD T SD D T D".split(" "),"major,dorian,phrygian,lydian,mixolydian,minor,locrian".split(",")),yr=fn("I II bIII IV V bVI bVII".split(" "),"m7 m7b5 maj7 m7 m7 maj7 7".split(" "),"T SD T SD D SD SD".split(" "),"minor,locrian,major,dorian,phrygian,lydian,mixolydian".split(",")),gr=fn("I II bIII IV V bVI VII".split(" "),"mMaj7 m7b5 +maj7 m7 7 maj7 o7".split(" "),"T SD T SD D SD D".split(" "),"harmonic minor,locrian 6,major augmented,lydian diminished,phrygian dominant,lydian #9,ultralocrian".split(",")),br=fn("I II bIII IV V VI VII".split(" "),"m6 m7 +maj7 7 7 m7b5 m7b5".split(" "),"T SD T SD D ".split(" "),"melodic minor,dorian b2,lydian augmented,lydian dominant,mixolydian b6,locrian #2,altered".split(","));function Ar(n){const t=u(n).pc;if(!t)return Pr;const e=hr(t),o=Ct("C",t),r=i=>{const a=$(i);return a.empty?"":P(n,a.interval)+a.chordType};return{...e,type:"major",minorRelative:P(t,"-3m"),alteration:o,keySignature:E(o),secondaryDominants:"- VI7 VII7 I7 II7 III7 -".split(" ").map(r),secondaryDominantsMinorRelative:"- IIIm7b5 IV#m7 Vm7 VIm7 VIIm7b5 -".split(" ").map(r),substituteDominants:"- bIII7 IV7 bV7 bVI7 bVII7 -".split(" ").map(r),substituteDominantsMinorRelative:"- IIIm7 Im7 IIbm7 VIm7 IVm7 -".split(" ").map(r)}}function vr(n){const t=u(n).pc;if(!t)return pr;const e=Ct("C",t)-3;return{type:"minor",tonic:t,relativeMajor:P(t,"3m"),alteration:e,keySignature:E(e),natural:yr(t),harmonic:gr(t),melodic:br(t)}}function $r(n){return typeof n=="number"?nn("C",n):typeof n=="string"&&/^b+|#+$/.test(n)?nn("C",G(n)):null}var Nr={majorKey:Ar,majorTonicFromKeySignature:$r,minorKey:vr};const wn=[[0,2773,0,"ionian","","Maj7","major"],[1,2902,2,"dorian","m","m7"],[2,3418,4,"phrygian","m","m7"],[3,2741,-1,"lydian","","Maj7"],[4,2774,1,"mixolydian","","7"],[5,2906,3,"aeolian","m","m7","minor"],[6,3434,5,"locrian","dim","m7b5"]],Bn={...T,name:"",alt:0,modeNum:NaN,triad:"",seventh:"",aliases:[]},xn=wn.map(Tr),An={};xn.forEach(n=>{An[n.name]=n,n.aliases.forEach(t=>{An[t]=n})});function V(n){return typeof n=="string"?An[n.toLowerCase()]||Bn:n&&n.name?V(n.name):Bn}const Ir=g("Mode.mode","Mode.get",V);function wt(){return xn.slice()}const jr=g("Mode.mode","Mode.all",wt);function Sr(){return xn.map(n=>n.name)}function Tr(n){const[t,e,o,r,i,a,s]=n,c=s?[s]:[],l=Number(e).toString(2),m=un(r).intervals;return{empty:!1,intervals:m,modeNum:t,chroma:l,normalized:l,name:r,setNum:e,alt:o,triad:i,seventh:a,aliases:c}}function Vr(n,t){return V(n).intervals.map(e=>P(t,e))}function xt(n){return(t,e)=>{const o=V(t);if(o.empty)return[];const r=H(o.modeNum,n),i=o.intervals.map(a=>P(e,a));return r.map((a,s)=>i[s]+a)}}const _r=xt(wn.map(n=>n[4])),Cr=xt(wn.map(n=>n[5]));function Et(n,t){const e=V(t),o=V(n);return e.empty||o.empty?"":ft(pt("1P",o.alt-e.alt))}function wr(n,t,e){return P(e,Et(n,t))}var xr={get:V,names:Sr,all:wt,distance:Et,relativeTonic:wr,notes:Vr,triads:_r,seventhChords:Cr,entries:jr,mode:Ir};function Er(n,t){return t.map($).map(o=>P(n,f(o))+o.chordType)}function Dr(n,t){return t.map(e=>{const[o,r]=ln(e),i=D(n,o);return $(f(i)).name+r})}var Rr={fromRomanNumerals:Er,toRomanNumerals:Dr};function Dt(n){const t=Nn(n.map(gt));return!n.length||t.length!==n.length?[]:t.reduce((e,o)=>{const r=e[e.length-1];return e.concat(an(r,o).slice(1))},[t[0]])}function kr(n,t){return Dt(n).map(e=>I(e,t))}var Or={numeric:Dt,chromatic:kr};const Fr={empty:!0,name:"",type:"",tonic:null,setNum:NaN,chroma:"",normalized:"",aliases:[],notes:[],intervals:[]};function Rt(n){if(typeof n!="string")return["",""];const t=n.indexOf(" "),e=u(n.substring(0,t));if(e.empty){const r=u(n);return r.empty?["",n]:[r.name,""]}const o=n.substring(e.name.length+1);return[e.name,o.length?o:""]}const zr=ut;function N(n){const t=Array.isArray(n)?n:Rt(n),e=u(t[0]).name,o=un(t[1]);if(o.empty)return Fr;const r=o.name,i=e?o.intervals.map(s=>P(e,s)):[],a=e?e+" "+r:r;return{...o,name:a,type:r,tonic:e,notes:i}}const qr=g("Scale.scale","Scale.get",N);function Gr(n){const t=N(n),e=sn(t.chroma);return k().filter(o=>e(o.chroma)).map(o=>o.aliases[0])}function Br(n){const t=N(n),e=cn(t.chroma);return L().filter(o=>e(o.chroma)).map(o=>o.name)}function Hr(n){const t=sn(N(n).chroma);return L().filter(e=>t(e.chroma)).map(e=>e.name)}function kt(n){const t=n.map(r=>u(r).pc).filter(r=>r),e=t[0],o=jt(t);return H(o.indexOf(e),o)}function Lr(n){const t=N(n);if(t.empty)return[];const e=t.tonic?t.notes:t.intervals;return jn(t.chroma).map((o,r)=>{const i=N(o).name;return i?[e[r],i]:["",""]}).filter(o=>o[0])}function Ur(n){const t=Array.isArray(n)?kt(n):N(n).notes,e=t.map(o=>u(o).chroma);return o=>{const r=u(typeof o=="number"?vt(o):o),i=r.height;if(i===void 0)return;const a=i%12,s=e.indexOf(a);if(s!==-1)return St(r.name,t[s])}}function Xr(n){const t=Ur(n);return(e,o)=>{const r=u(e).height,i=u(o).height;return r===void 0||i===void 0?[]:an(r,i).map(t).filter(a=>a)}}var tn={get:N,names:zr,extended:Br,modeNames:Lr,reduced:Hr,scaleChords:Gr,scaleNotes:kt,tokenize:Rt,rangeOf:Xr,scale:qr};const Kr={empty:!0,name:"",upper:void 0,lower:void 0,type:void 0,additive:[]},Qr=["4/4","3/4","2/4","2/2","12/8","9/8","6/8","3/8"];function Yr(){return Qr.slice()}const Zr=/^(\d?\d(?:\+\d)*)\/(\d)$/,Hn=new Map;function Jr(n){const t=Hn.get(n);if(t)return t;const e=ni(En(n));return Hn.set(n,e),e}function En(n){if(typeof n=="string"){const[i,a,s]=Zr.exec(n)||[];return En([a,s])}const[t,e]=n,o=+e;if(typeof t=="number")return[t,o];const r=t.split("+").map(i=>+i);return r.length===1?[r[0],o]:[r,o]}var Wr={names:Yr,parse:En,get:Jr};function ni([n,t]){const e=Array.isArray(n)?n.reduce((s,c)=>s+c,0):n,o=t;if(e===0||o===0)return Kr;const r=Array.isArray(n)?`${n.join("+")}/${t}`:`${n}/${t}`,i=Array.isArray(n)?n:[],a=o===4||o===2?"simple":o===8&&e%3===0?"compound":"irregular";return{empty:!1,name:r,type:a,upper:e,lower:o,additive:i}}const ti=Wn,ei=st,oi=mt,ri=dt,ii=Object.freeze(Object.defineProperty({__proto__:null,Array:Ae,Core:Wn,ChordDictionary:oi,PcSet:ei,ScaleDictionary:ri,Tonal:ti,AbcNotation:Me,Chord:fo,ChordType:mt,Collection:Ie,DurationValue:vo,Interval:bn,Key:Nr,Midi:Go,Mode:xr,Note:w,Pcset:st,Progression:Rr,Range:Or,RomanNumeral:fr,Scale:tn,ScaleType:dt,TimeSignature:Wr,accToAlt:G,altToAcc:E,coordToInterval:B,coordToNote:F,decode:on,deprecate:g,distance:D,encode:en,fillStr:C,interval:f,isNamed:z,isPitch:q,note:u,stepToLetter:vn,tokenizeInterval:$n,tokenizeNote:rn,transpose:P},Symbol.toStringTag,{value:"Module"}));function Ot(n,t,e){let[o,r]=tn.tokenize(n),{notes:i}=tn.get(`${o} ${r}`);if(i=i.map(h=>w.get(h).pc),t=Number(t),isNaN(t))throw new Error(`scale offset "${t}" not a number`);const{pc:a,oct:s=3}=w.get(e),c=i.indexOf(a);if(c===-1)throw new Error(`note "${e}" is not in scale "${n}"`);let l=c,m=s,d=a;const M=Math.sign(t);for(;Math.abs(l-c)0&&d[0]==="C"&&(m+=M)}return d+m}_.prototype._transpose=function(n){return this._withHap(t=>{const e=isNaN(Number(n))?String(n):bn.fromSemitones(n);if(typeof t.value=="number"){const o=typeof e=="string"?bn.semitones(e)||0:e;return t.withValue(()=>t.value+o)}return t.withValue(()=>w.simplify(w.transpose(t.value,e)))})};_.prototype._scaleTranspose=function(n){return this._withHap(t=>{if(!t.context.scale)throw new Error("can only use scaleTranspose after .scale");if(typeof t.value!="string")throw new Error("can only use scaleTranspose with notes");return t.withValue(()=>Ot(t.context.scale,Number(n),t.value))})};_.prototype._scale=function(n){return this._withHap(t=>{let e=t.value;const o=Number(e);if(!isNaN(o)){let[r,i]=tn.tokenize(n);const{pc:a,oct:s=3}=w.get(r);e=Ot(a+" "+i,o,a+s)}return t.withValue(()=>e).setContext({...t.context,scale:n})})};_.prototype.define("transpose",(n,t)=>t.transpose(n),{composable:!0,patternified:!0});_.prototype.define("scale",(n,t)=>t.scale(n),{composable:!0,patternified:!0});_.prototype.define("scaleTranspose",(n,t)=>t.scaleTranspose(n),{composable:!0,patternified:!0});var Ft={},hn={},X={};X.__esModule=!0;X.getBestVoicing=void 0;function ai(n){var t=n.chord,e=n.range,o=n.finder,r=n.picker,i=n.lastVoicing,a=o(t,e);return a.length?r(a,i):[]}X.getBestVoicing=ai;var O={};const zt=Ut(ii);var K={};K.__esModule=!0;K.tokenizeChord=void 0;function si(n){var t=(n||"").match(/^([A-G][b#]*)([^\/]*)[\/]?([A-G][b#]*)?$/);return t?t.slice(1):[]}K.tokenizeChord=si;var Ln;function ci(){if(Ln)return O;Ln=1,O.__esModule=!0,O.voicingsInRange=void 0;var n=zt,t=qt(),e=K;function o(r,i,a){i===void 0&&(i=t.lefthand),a===void 0&&(a=["D3","A4"]);var s=(0,e.tokenizeChord)(r),c=s[0],l=s[1];if(!i[l])return[];var m=i[l].map(function(M){return M.split(" ")}),d=n.Range.chromatic(a);return m.reduce(function(M,h){var A=h.map(function(v){return n.Interval.substract(v,h[0])}),Q=n.Note.transpose(c,h[0]),Gt=d.filter(function(v){return n.Note.chroma(v)===n.Note.chroma(Q)}).filter(function(v){return n.Note.midi(n.Note.transpose(v,A[A.length-1]))<=n.Note.midi(a[1])}).map(function(v){return n.Note.enharmonic(v,Q)}),Bt=Gt.map(function(v){return A.map(function(Ht){return n.Note.transpose(v,Ht)})});return M.concat(Bt)},[])}return O.voicingsInRange=o,O}var Un;function qt(){return Un||(Un=1,function(n){var t=Y&&Y.__assign||function(){return t=Object.assign||function(s){for(var c,l=1,m=arguments.length;lui({chord:n,dictionary:di,range:e,picker:li,lastVoicing:t}),x=_;x.prototype.fmapNested=function(n){return new x(t=>this.query(t).map(e=>Kt(n(e)).query(t).map(o=>new Qt(e.whole,e.part,o.value,o.context))).flat())};x.prototype.voicings=function(n){let t;return n!=null&&n.length||(n=["F3","A4"]),this.fmapNested(e=>(t=Mi(e.value,t,n),Yt(...t)._withContext(()=>({locations:e.context.locations||[]}))))};x.prototype._rootNotes=function(n=2){return this.fmap(t=>{const[e,o]=t.match(/^([a-gA-G][b#]?).*$/);return o+n})};x.prototype.define("voicings",(n,t)=>t.voicings(n),{composable:!0});x.prototype.define("rootNotes",(n,t)=>t.rootNotes(n),{composable:!0,patternified:!0}); diff --git a/packages/react/examples/nano-repl/dist/assets/osc.c09823d8.js b/packages/react/examples/nano-repl/dist/assets/osc.c09823d8.js new file mode 100644 index 00000000..a0200416 --- /dev/null +++ b/packages/react/examples/nano-repl/dist/assets/osc.c09823d8.js @@ -0,0 +1 @@ +import{c as x,P as et}from"./index.ec9f9930.js";var ke={exports:{}};(function(T,$){(function(B,u){T.exports=u()})(x,function(){function B(r,e){var n=Object.keys(r);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(r);e&&(t=t.filter(function(o){return Object.getOwnPropertyDescriptor(r,o).enumerable})),n.push.apply(n,t)}return n}function u(r){for(var e=1;e"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}();return function(){var n,t=h(r);if(e){var o=h(this).constructor;n=Reflect.construct(t,arguments,o)}else n=t.apply(this,arguments);return R(this,n)}}function Se(r,e){for(;!Object.prototype.hasOwnProperty.call(r,e)&&(r=h(r))!==null;);return r}function v(){return(v=typeof Reflect<"u"&&Reflect.get?Reflect.get:function(r,e,n){var t=Se(r,e);if(t){var o=Object.getOwnPropertyDescriptor(t,e);return o.get?o.get.call(arguments.length<3?r:n):o.value}}).apply(this,arguments)}function y(r){return Number(r)===r&&r%1==0}function ee(r){return Number(r)===r}function p(r){return typeof r=="string"}function te(r){return typeof r=="boolean"}function ne(r){return r===1/0}function P(r){return Object.prototype.toString.call(r)==="[object Array]"}function F(r){return Object.prototype.toString.call(r)==="[object Object]"}function A(r){return typeof r=="function"}function re(r){return r instanceof Uint8Array}function Oe(r){return r instanceof Date}function E(r){return r===void 0}function oe(r){return r===null}function N(r){return r+3&-4}function se(r){return Object.prototype.hasOwnProperty.call(typeof x<"u"?x:window,r)}function Ee(r){return r.buffer?new DataView(r.buffer):r instanceof ArrayBuffer?new DataView(r):new DataView(new Uint8Array(r))}function ie(r){if(y(r))return"i";if(e=r,Number(e)===e&&e%1!=0)return"f";if(p(r))return"s";if(re(r))return"b";if(te(r))return r?"T":"F";if(oe(r))return"N";if(ne(r))return"I";var e;throw new Error("OSC typeTag() found unknown value type")}function H(r){var e="";if(P(r))return"/".concat(r.join("/"));if(p(r))return(e=r).length>1&&e[e.length-1]==="/"&&(e=e.slice(0,e.length-1)),e.length>1&&e[0]!=="/"&&(e="/".concat(e)),e;throw new Error("OSC prepareAddress() needs addresses of type array or string")}function ae(r){if(!p(r))throw new Error("OSC prepareRegExPattern() needs strings");return r.replace(/\./g,"\\.").replace(/\(/g,"\\(").replace(/\)/g,"\\)").replace(/\{/g,"(").replace(/\}/g,")").replace(/,/g,"|").replace(/\[!/g,"[^").replace(/\?/g,".").replace(/\*/g,".*")}var ue=function(){function r(){f(this,r),this.data=[],this.byteLength=0}return l(r,[{key:"add",value:function(e){if(te(e)||ne(e)||oe(e))return this;var n=e.pack();return this.byteLength+=n.byteLength,this.data.push(n),this}},{key:"merge",value:function(){var e=new Uint8Array(this.byteLength),n=0;return this.data.forEach(function(t){e.set(t,n),n+=t.byteLength}),e}}]),r}(),S=function(){function r(e){f(this,r),this.value=e,this.offset=0}return l(r,[{key:"pack",value:function(e,n){if(!e||!n)throw new Error("OSC Atomic cant't be packed without given method or byteLength");var t=new Uint8Array(n),o=new DataView(t.buffer);if(E(this.value))throw new Error("OSC Atomic cant't be encoded with empty value");return o[e](this.offset,this.value,!1),t}},{key:"unpack",value:function(e,n,t){var o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;if(!(e&&n&&t))throw new Error("OSC Atomic cant't be unpacked without given dataView, method or byteLength");if(!(e instanceof DataView))throw new Error("OSC Atomic expects an instance of type DataView");return this.value=e[n](o,!1),this.offset=o+t,this.offset}}]),r}(),V=function(r){w(n,r);var e=g(n);function n(t){if(f(this,n),t&&!y(t))throw new Error("OSC AtomicInt32 constructor expects value of type number");return e.call(this,t)}return l(n,[{key:"pack",value:function(){return v(h(n.prototype),"pack",this).call(this,"setInt32",4)}},{key:"unpack",value:function(t){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return v(h(n.prototype),"unpack",this).call(this,t,"getInt32",4,o)}}]),n}(S),ce="utf-8";function Ce(r){if(se("Buffer"))return Buffer.from(r).toString(ce);if(se("TextDecoder"))return new TextDecoder(ce).decode(new Int8Array(r));for(var e="",n=0;n1&&arguments[1]!==void 0?arguments[1]:0;if(!(t instanceof DataView))throw new Error("OSC AtomicString expects an instance of type DataView");for(var i,s=o,a=[];s0&&arguments[0]!==void 0?arguments[0]:0,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(f(this,r),!y(e)||!y(n))throw new Error("OSC Timetag constructor expects values of type integer number");this.seconds=e,this.fractions=n}return l(r,[{key:"timestamp",value:function(e){var n;if(typeof e=="number"){n=e/1e3;var t=Math.floor(n);return this.seconds=t+fe,this.fractions=Math.round(le*(n-t)),e}return 1e3*((n=this.seconds-fe)+Math.round(this.fractions/le))}}]),r}(),D=function(r){w(n,r);var e=g(n);function n(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Date.now();f(this,n);var o=new z;return t instanceof z?o=t:y(t)?o.timestamp(t):Oe(t)&&o.timestamp(t.getTime()),e.call(this,o)}return l(n,[{key:"pack",value:function(){if(E(this.value))throw new Error("OSC AtomicTimetag can not be encoded with empty value");var t=this.value,o=t.seconds,i=t.fractions,s=new Uint8Array(8),a=new DataView(s.buffer);return a.setInt32(0,o,!1),a.setInt32(4,i,!1),s}},{key:"unpack",value:function(t){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!(t instanceof DataView))throw new Error("OSC AtomicTimetag expects an instance of type DataView");var i=t.getUint32(o,!1),s=t.getUint32(o+4,!1);return this.value=new z(i,s),this.offset=o+8,this.offset}}]),n}(S),he=function(r){w(n,r);var e=g(n);function n(t){if(f(this,n),t&&!re(t))throw new Error("OSC AtomicBlob constructor expects value of type Uint8Array");return e.call(this,t)}return l(n,[{key:"pack",value:function(){if(E(this.value))throw new Error("OSC AtomicBlob can not be encoded with empty value");var t=N(this.value.byteLength),o=new Uint8Array(t+4);return new DataView(o.buffer).setInt32(0,this.value.byteLength,!1),o.set(this.value,4),o}},{key:"unpack",value:function(t){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!(t instanceof DataView))throw new Error("OSC AtomicBlob expects an instance of type DataView");var i=t.getInt32(o,!1);return this.value=new Uint8Array(t.buffer,o+4,i),this.offset=N(o+4+i),this.offset}}]),n}(S),pe=function(r){w(n,r);var e=g(n);function n(t){if(f(this,n),t&&!ee(t))throw new Error("OSC AtomicFloat32 constructor expects value of type float");return e.call(this,t)}return l(n,[{key:"pack",value:function(){return v(h(n.prototype),"pack",this).call(this,"setFloat32",4)}},{key:"unpack",value:function(t){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return v(h(n.prototype),"unpack",this).call(this,t,"getFloat32",4,o)}}]),n}(S),de=function(r){w(n,r);var e=g(n);function n(t){if(f(this,n),t&&!ee(t))throw new Error("OSC AtomicFloat64 constructor expects value of type float");return e.call(this,t)}return l(n,[{key:"pack",value:function(){return v(h(n.prototype),"pack",this).call(this,"setFloat64",8)}},{key:"unpack",value:function(t){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return v(h(n.prototype),"unpack",this).call(this,t,"getFloat64",8,o)}}]),n}(S),Pe=BigInt("9223372036854775807"),Ae=BigInt("-9223372036854775808"),ge=function(r){w(n,r);var e=g(n);function n(t){if(f(this,n),t&&typeof t!="bigint")throw new Error("OSC AtomicInt64 constructor expects value of type BigInt");if(t&&(tPe))throw new Error("OSC AtomicInt64 value is out of bounds");var o;return t&&(o=BigInt.asIntN(64,t)),e.call(this,o)}return l(n,[{key:"pack",value:function(){return v(h(n.prototype),"pack",this).call(this,"setBigInt64",8)}},{key:"unpack",value:function(t){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return v(h(n.prototype),"unpack",this).call(this,t,"getBigInt64",8,o)}}]),n}(S),Ie=BigInt("18446744073709551615"),ve=function(r){w(n,r);var e=g(n);function n(t){if(f(this,n),t&&typeof t!="bigint")throw new Error("OSC AtomicUInt64 constructor expects value of type BigInt");if(t&&(t<0||t>Ie))throw new Error("OSC AtomicUInt64 value is out of bounds");var o;return t&&(o=BigInt.asUintN(64,t)),e.call(this,o)}return l(n,[{key:"pack",value:function(){return v(h(n.prototype),"pack",this).call(this,"setBigUint64",8)}},{key:"unpack",value:function(t){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return v(h(n.prototype),"unpack",this).call(this,t,"getBigUint64",8,o)}}]),n}(S),G=!0,Z=!1,q=null,J=1/0,K=function(){function r(e,n){var t=this;if(f(this,r),this.offset=0,this.address="",this.types="",this.args=[],!E(e)){if(!p(e)&&!P(e))throw new Error("OSC Message constructor first argument (address) must be a string or array");this.address=H(e)}if(!E(n)){if(!P(n))throw new Error("OSC Message constructor second argument (args) must be an array");n.forEach(function(o){return t.add(o.type,o.value)})}}return l(r,[{key:"add",value:function(e,n){if(E(e))throw new Error("OSC Message needs a valid OSC Atomic Data Type");e==="N"?this.args.push(q):e==="T"?this.args.push(G):e==="F"?this.args.push(Z):e==="I"?this.args.push(J):this.args.push(n),this.types+=e}},{key:"pack",value:function(){var e=this;if(this.address.length===0||this.address[0]!=="/")throw new Error("OSC Message has an invalid address");var n=new ue;if(n.add(new m(this.address)),n.add(new m(",".concat(this.types))),this.args.length>0){var t;if(this.args.length>this.types.length)throw new Error("OSC Message argument and type tag mismatch");this.args.forEach(function(o,i){var s=e.types[i];if(s==="i")t=new V(o);else if(s==="h")t=new ge(o);else if(s==="t")t=new ve(o);else if(s==="f")t=new pe(o);else if(s==="d")t=new de(o);else if(s==="s")t=new m(o);else if(s==="b")t=new he(o);else if(s==="T")t=G;else if(s==="F")t=Z;else if(s==="N")t=q;else{if(s!=="I")throw new Error("OSC Message found unknown argument type");t=J}n.add(t)})}return n.merge()}},{key:"unpack",value:function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!(e instanceof DataView))throw new Error("OSC Message expects an instance of type DataView.");var t=new m;t.unpack(e,n);var o=new m;if(o.unpack(e,t.offset),t.value.length===0||t.value[0]!=="/")throw new Error("OSC Message found malformed or missing address string");if(o.value.length===0&&o.value[0]!==",")throw new Error("OSC Message found malformed or missing type string");for(var i,s,a=o.offset,c=[],d=1;d0&&(o=a.shift()),a.length>0&&a[0]instanceof Array&&(i=a.shift()),t=e.call(this,o,i),a.length>0&&(t.types=a.map(function(d){return ie(d)}).join(""),t.args=a),t}return l(n,[{key:"add",value:function(t){v(h(n.prototype),"add",this).call(this,ie(t),t)}}]),n}(K),U="#bundle",C=function(){function r(){var e=this;f(this,r),this.offset=0,this.timetag=new D,this.bundleElements=[];for(var n=arguments.length,t=new Array(n),o=0;o0&&(t[0]instanceof Date||y(t[0])?this.timetag=new D(t[0]):P(t[0])?(t[0].forEach(function(i){e.add(i)}),t.length>1&&(t[1]instanceof Date||y(t[1]))&&(this.timetag=new D(t[1]))):t.forEach(function(i){e.add(i)}))}return l(r,[{key:"timestamp",value:function(e){if(!y(e))throw new Error("OSC Bundle needs an integer for setting the timestamp");this.timetag=new D(e)}},{key:"add",value:function(e){if(!(e instanceof b||e instanceof r))throw new Error("OSC Bundle contains only Messages and Bundles");this.bundleElements.push(e)}},{key:"pack",value:function(){var e=new ue;return e.add(new m(U)),this.timetag||(this.timetag=new D),e.add(this.timetag),this.bundleElements.forEach(function(n){e.add(new V(n.pack().byteLength)),e.add(n)}),e.merge()}},{key:"unpack",value:function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;if(!(e instanceof DataView))throw new Error("OSC Bundle expects an instance of type DataView");var t=new m;if(t.unpack(e,n),t.value!==U)throw new Error("OSC Bundle does not contain a valid #bundle head");var o=new D,i=o.unpack(e,t.offset);for(this.bundleElements=[];i1&&arguments[1]!==void 0?arguments[1]:0;if(!(e instanceof DataView))throw new Error("OSC Packet expects an instance of type DataView");if(e.byteLength%4!=0)throw new Error("OSC Packet byteLength has to be a multiple of four");var t,o=new m;return o.unpack(e,n),(t=o.value===U?new C:new b).unpack(e,n),this.offset=t.offset,this.value=t,this.offset}}]),r}(),De={discardLateMessages:!1},je=function(){function r(e){f(this,r),this.options=u(u({},De),e),this.addressHandlers=[],this.eventHandlers={open:[],error:[],close:[]},this.uuid=0}return l(r,[{key:"dispatch",value:function(e,n){var t=this;if(!(e instanceof j))throw new Error("OSC EventHander dispatch() accepts only arguments of type Packet");if(!e.value)throw new Error("OSC EventHander dispatch() can't read empty Packets");if(e.value instanceof C){var o=e.value;return o.bundleElements.forEach(function(s){if(s instanceof C){if(o.timetag.value.timestamp()1&&(s=n[1]);var a=null;if(n.length>2)if(y(n[2]))a=n[2];else{if(!(n[2]instanceof Date))throw new Error("OSC EventHandler timestamp has to be a number or Date");a=n[2].getTime()}var c=null;if(n.length>=3&&(c=n[3]),a){var d=Date.now();if(d>a&&!this.options.discardLateMessages)return this.call(i,s,c);var O=this;return setTimeout(function(){O.call(i,s,c)},a-d),!0}return this.call(i,s,c)}},{key:"on",value:function(e,n){if(!p(e)&&!P(e))throw new Error("OSC EventHandler accepts only strings or arrays for address patterns");if(!A(n))throw new Error("OSC EventHandler callback has to be a function");this.uuid+=1;var t={id:this.uuid,callback:n};if(p(e)&&e in this.eventHandlers)return this.eventHandlers[e].push(t),this.uuid;var o=H(e);return o in this.addressHandlers||(this.addressHandlers[o]=[]),this.addressHandlers[o].push(t),this.uuid}},{key:"off",value:function(e,n){if(!p(e)&&!P(e))throw new Error("OSC EventHandler accepts only strings or arrays for address patterns");if(!y(n))throw new Error("OSC EventHandler subscription id has to be a number");var t,o;return p(e)&&e in this.eventHandlers?(t=e,o=this.eventHandlers):(t=H(e),o=this.addressHandlers),t in o&&o[t].some(function(i,s){return i.id===n&&(o[t].splice(s,1),!0)})}}]),r}(),xe=0,Be=1,Me=2,He=3,Te=function(){function r(){throw f(this,r),new Error("DatagramPlugin can not be used in browser context")}return l(r,[{key:"registerNotify",value:function(e){this.notify=e}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(){var e=this,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=u(u({},this.options.open),n),o=t.port,i=t.exclusive;this.socketStatus=xe,this.socket.bind({address:t.host,port:o,exclusive:i},function(){e.socketStatus=Be,e.notify("open")})}},{key:"close",value:function(){var e=this;this.socketStatus=Me,this.socket.close(function(){e.socketStatus=He,e.notify("close")})}},{key:"send",value:function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=u(u({},this.options.send),n),o=t.port,i=t.host;this.socket.send(Buffer.from(e),0,e.byteLength,o,i)}}]),r}();typeof WebSocket<"u"?I=WebSocket:typeof MozWebSocket<"u"?I=MozWebSocket:typeof x<"u"?I=x.WebSocket||x.MozWebSocket:typeof window<"u"?I=window.WebSocket||window.MozWebSocket:typeof self<"u"&&(I=self.WebSocket||self.MozWebSocket);var Q=void 0,we=I,Le=0,Ne=1,Ve=2,Ue=3,_={udpServer:{host:"localhost",port:41234,exclusive:!1},udpClient:{host:"localhost",port:41235},wsServer:{host:"localhost",port:8080},receiver:"ws"};function ye(r,e){return u(u(u(u({},_),r),e),{},{udpServer:u(u(u({},_.udpServer),r.udpServer),e.udpServer),udpClient:u(u(u({},_.udpClient),r.udpClient),e.udpClient),wsServer:u(u(u({},_.wsServer),r.wsServer),e.wsServer)})}var _e=function(){function r(){throw f(this,r),new Error("BridgePlugin can not be used in browser context")}return l(r,[{key:"registerNotify",value:function(e){this.notify=e}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(){var e=this,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=ye(this.options,n);this.socketStatus=Le,this.socket.bind({address:t.udpServer.host,port:t.udpServer.port,exclusive:t.udpServer.exclusive},function(){var o={};t.wsServer.server?o.server=t.wsServer.server:o=t.wsServer,e.websocket=new Q(o),e.websocket.binaryType="arraybuffer",e.websocket.on("listening",function(){e.socketStatus=Ne,e.notify("open")}),e.websocket.on("error",function(i){e.notify("error",i)}),e.websocket.on("connection",function(i){i.on("message",function(s,a){e.send(s,{receiver:"udp"}),e.notify(new Uint8Array(s),a)})})})}},{key:"close",value:function(){var e=this;this.socketStatus=Ve,this.socket.close(function(){e.websocket.close(function(){e.socketStatus=Ue,e.notify("close")})})}},{key:"send",value:function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=ye(this.options,n),o=t.receiver;if(o==="udp"){var i=e instanceof Buffer?e:Buffer.from(e);this.socket.send(i,0,i.byteLength,t.udpClient.port,t.udpClient.host)}else{if(o!=="ws")throw new Error("BridgePlugin can not send message to unknown receiver");this.websocket.clients.forEach(function(s){s.send(e,{binary:!0})})}}}]),r}(),We=-1,Re=0,Fe=1,ze=2,Ge=3,Ze={host:"localhost",port:8080,secure:!1,protocol:[]},me=function(){function r(e){if(f(this,r),!we)throw new Error("WebsocketClientPlugin can't find a WebSocket class");this.options=u(u({},Ze),e),this.socket=null,this.socketStatus=We,this.notify=function(){}}return l(r,[{key:"registerNotify",value:function(e){this.notify=e}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(){var e=this,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=u(u({},this.options),n),o=t.port,i=t.host,s=t.secure,a=t.protocol;this.socket&&this.close();var c=s?"wss":"ws",d={address:i,family:c,port:o,size:0};this.socket=new we("".concat(c,"://").concat(i,":").concat(o),a),this.socket.binaryType="arraybuffer",this.socketStatus=Re,this.socket.onopen=function(){e.socketStatus=Fe,e.notify("open")},this.socket.onclose=function(){e.socketStatus=Ge,e.notify("close")},this.socket.onerror=function(O){e.notify("error",O)},this.socket.onmessage=function(O){e.notify(O.data,d)}}},{key:"close",value:function(){this.socketStatus=ze,this.socket.close()}},{key:"send",value:function(e){this.socket.send(e)}}]),r}(),qe=0,Je=1,Ke=2,Qe=3,Xe=function(){function r(e){throw f(this,r),new Error("WebsocketServerPlugin can not be used in browser context")}return l(r,[{key:"registerNotify",value:function(e){this.notify=e}},{key:"status",value:function(){return this.socketStatus}},{key:"open",value:function(){var e=this,n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=u(u({},this.options),n),o=t.port,i=t.host,s={address:i,family:"wsserver",port:o,size:0};this.socket&&this.close(),t.server?this.socket=new Q({server:t.server}):this.socket=new Q({host:i,port:o}),this.socket.binaryType="arraybuffer",this.socketStatus=qe,this.socket.on("listening",function(){e.socketStatus=Je,e.notify("open")}),this.socket.on("error",function(a){e.notify("error",a)}),this.socket.on("connection",function(a){a.on("message",function(c){e.notify(new Uint8Array(c),s)})})}},{key:"close",value:function(){var e=this;this.socketStatus=Ke,this.socket.close(function(){e.socketStatus=Qe,e.notify("close")})}},{key:"send",value:function(e){this.socket.clients.forEach(function(n){n.send(e,{binary:!0})})}}]),r}(),Ye={discardLateMessages:!1,plugin:new me},k=function(){function r(e){if(f(this,r),e&&!F(e))throw new Error("OSC options argument has to be an object.");this.options=u(u({},Ye),e),this.eventHandler=new je({discardLateMessages:this.options.discardLateMessages});var n=this.eventHandler;this.options.plugin&&this.options.plugin.registerNotify&&this.options.plugin.registerNotify(function(){return n.notify.apply(n,arguments)})}return l(r,[{key:"on",value:function(e,n){if(!p(e)||!A(n))throw new Error("OSC on() needs event- or address string and callback function");return this.eventHandler.on(e,n)}},{key:"off",value:function(e,n){if(!p(e)||!y(n))throw new Error("OSC off() needs string and number (subscriptionId) to unsubscribe");return this.eventHandler.off(e,n)}},{key:"open",value:function(e){if(e&&!F(e))throw new Error("OSC open() options argument needs to be an object");if(!this.options.plugin||!A(this.options.plugin.open))throw new Error("OSC Plugin API #open is not implemented!");return this.options.plugin.open(e)}},{key:"status",value:function(){if(!this.options.plugin||!A(this.options.plugin.status))throw new Error("OSC Plugin API #status is not implemented!");return this.options.plugin.status()}},{key:"close",value:function(){if(!this.options.plugin||!A(this.options.plugin.close))throw new Error("OSC Plugin API #close is not implemented!");return this.options.plugin.close()}},{key:"send",value:function(e,n){if(!this.options.plugin||!A(this.options.plugin.send))throw new Error("OSC Plugin API #send is not implemented!");if(!(e instanceof K||e instanceof b||e instanceof C||e instanceof j))throw new Error("OSC send() needs Messages, Bundles or Packets");if(n&&!F(n))throw new Error("OSC send() options argument has to be an object");return this.options.plugin.send(e.pack(),n)}}]),r}();return k.STATUS={IS_NOT_INITIALIZED:-1,IS_CONNECTING:0,IS_OPEN:1,IS_CLOSING:2,IS_CLOSED:3},k.Packet=j,k.Bundle=C,k.Message=b,k.TypedMessage=K,k.DatagramPlugin=Te,k.WebsocketClientPlugin=me,k.WebsocketServerPlugin=Xe,k.BridgePlugin=_e,k})})(ke);const Y=ke.exports,be=new Y;be.open();const tt=.1;let X=-1;et.prototype.osc=function(){return this._withHap(T=>{const $=(B,u,f,L)=>{const l=u.wholeOrPart().begin.valueOf(),W=u.duration.valueOf();X<0&&(X=Date.now()-f*1e3);const w=Object.assign({},{cps:L,cycle:l,delta:W},u.value),h=Object.entries(w).flat(),M=Math.floor(X+(B+tt)*1e3),R=new Y.Message("/dirt/play",...h),g=new Y.Bundle([R],M);g.timestamp(M),be.send(g)};return T.setContext({...T.context,onTrigger:$})})}; diff --git a/packages/react/examples/nano-repl/dist/assets/serial.b42b098c.js b/packages/react/examples/nano-repl/dist/assets/serial.b42b098c.js new file mode 100644 index 00000000..44214be4 --- /dev/null +++ b/packages/react/examples/nano-repl/dist/assets/serial.b42b098c.js @@ -0,0 +1 @@ +import{P as w}from"./index.ec9f9930.js";var i,f=!1;async function b(a=38400){if(!f){if(f=!0,i)return i;if("serial"in navigator){const r=await navigator.serial.requestPort();await r.open({baudRate:a});const o=new TextEncoderStream;o.readable.pipeTo(r.writable);const s=o.writable.getWriter();i=function(e){s.write(e)}}else throw"Webserial is not available in this browser."}}const g=.1;w.prototype.serial=function(...a){return this._withHap(r=>{i||b(...a);const o=(s,e,u)=>{var t="";if(typeof e.value=="object")if("action"in e.value){t+=e.value.action+"(";var c=!0;for(const[n,l]of Object.entries(e.value))n!=="action"&&(c?c=!1:t+=",",t+=`${n}:${l}`);t+=")"}else for(const[n,l]of Object.entries(e.value))t+=`${n}:${l};`;else t=e.value;const v=(s-u+g)*1e3;window.setTimeout(i,v,t)};return r.setContext({...r.context,onTrigger:o})})};export{b as getWriter}; diff --git a/packages/react/examples/nano-repl/dist/index.html b/packages/react/examples/nano-repl/dist/index.html new file mode 100644 index 00000000..a7038dd7 --- /dev/null +++ b/packages/react/examples/nano-repl/dist/index.html @@ -0,0 +1,14 @@ + + + + + + Strudel Nano REPL + + + + +
+ + + diff --git a/packages/react/examples/nano-repl/index.html b/packages/react/examples/nano-repl/index.html new file mode 100644 index 00000000..4d5e8670 --- /dev/null +++ b/packages/react/examples/nano-repl/index.html @@ -0,0 +1,12 @@ + + + + + + Strudel Nano REPL + + +
+ + + diff --git a/packages/react/examples/nano-repl/package-lock.json b/packages/react/examples/nano-repl/package-lock.json new file mode 100644 index 00000000..7c70ed9e --- /dev/null +++ b/packages/react/examples/nano-repl/package-lock.json @@ -0,0 +1,3520 @@ +{ + "name": "nano-repl", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "nano-repl", + "version": "0.0.0", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@vitejs/plugin-react": "^2.0.1", + "autoprefixer": "^10.4.8", + "postcss": "^8.4.16", + "tailwindcss": "^3.1.8", + "vite": "^3.0.7" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz", + "integrity": "sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz", + "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.0.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.17.tgz", + "integrity": "sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", + "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.0.1.tgz", + "integrity": "sha512-uINzNHmjrbunlFtyVkST6lY1ewSfz/XwLufG0PIqvLGnpk2nOIOa/1CACTDNcKi1/RwaCzJLmsXwm1NsUVV/NA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.18.10", + "@babel/plugin-transform-react-jsx": "^7.18.10", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.18.6", + "magic-string": "^0.26.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^3.0.0" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz", + "integrity": "sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.3", + "caniuse-lite": "^1.0.30001373", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001378", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz", + "integrity": "sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", + "dev": true + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.222", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.222.tgz", + "integrity": "sha512-gEM2awN5HZknWdLbngk4uQCVfhucFAfFzuchP3wM3NN6eow1eDU0dFy2kts43FB20ZfhVFF0jmFSTb1h5OhyIg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", + "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "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/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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/magic-string": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", + "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "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==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "dev": true, + "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/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.6" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "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==", + "dev": true, + "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/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "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/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "2.77.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", + "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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==", + "dev": true, + "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-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "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": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", + "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", + "dev": true, + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/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==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/vite": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.8.tgz", + "integrity": "sha512-AOZ4eN7mrkJiOLuw8IA7piS4IdOQyQCA81GxGsAQvAZzMRi9ZwGB3TOaYsj4uLAWK46T5L4AfQ6InNGlxX30IQ==", + "dev": true, + "dependencies": { + "esbuild": "^0.14.47", + "postcss": "^8.4.16", + "resolve": "^1.22.1", + "rollup": ">=2.75.6 <2.77.0 || ~2.77.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true + }, + "@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "dev": true + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz", + "integrity": "sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.10" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz", + "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "dev": true, + "optional": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@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==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@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==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@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==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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==", + "dev": true + }, + "@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==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@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==", + "dev": true + }, + "@types/react": { + "version": "18.0.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.17.tgz", + "integrity": "sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", + "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@vitejs/plugin-react": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.0.1.tgz", + "integrity": "sha512-uINzNHmjrbunlFtyVkST6lY1ewSfz/XwLufG0PIqvLGnpk2nOIOa/1CACTDNcKi1/RwaCzJLmsXwm1NsUVV/NA==", + "dev": true, + "requires": { + "@babel/core": "^7.18.10", + "@babel/plugin-transform-react-jsx": "^7.18.10", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.18.6", + "magic-string": "^0.26.2", + "react-refresh": "^0.14.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz", + "integrity": "sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==", + "dev": true, + "requires": { + "browserslist": "^4.21.3", + "caniuse-lite": "^1.0.30001373", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001378", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz", + "integrity": "sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "csstype": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", + "dev": true + }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.222", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.222.tgz", + "integrity": "sha512-gEM2awN5HZknWdLbngk4uQCVfhucFAfFzuchP3wM3NN6eow1eDU0dFy2kts43FB20ZfhVFF0jmFSTb1h5OhyIg==", + "dev": true + }, + "esbuild": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "dev": true, + "requires": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", + "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "dev": true, + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true + }, + "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==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "magic-string": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", + "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, + "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==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "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==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rollup": { + "version": "2.77.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", + "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "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==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "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==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "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==", + "dev": true + }, + "tailwindcss": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", + "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", + "dev": true, + "requires": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "vite": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.8.tgz", + "integrity": "sha512-AOZ4eN7mrkJiOLuw8IA7piS4IdOQyQCA81GxGsAQvAZzMRi9ZwGB3TOaYsj4uLAWK46T5L4AfQ6InNGlxX30IQ==", + "dev": true, + "requires": { + "esbuild": "^0.14.47", + "fsevents": "~2.3.2", + "postcss": "^8.4.16", + "resolve": "^1.22.1", + "rollup": ">=2.75.6 <2.77.0 || ~2.77.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } +} diff --git a/packages/react/examples/nano-repl/package.json b/packages/react/examples/nano-repl/package.json new file mode 100644 index 00000000..cf451aff --- /dev/null +++ b/packages/react/examples/nano-repl/package.json @@ -0,0 +1,24 @@ +{ + "name": "nano-repl", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.0.17", + "@types/react-dom": "^18.0.6", + "@vitejs/plugin-react": "^2.0.1", + "autoprefixer": "^10.4.8", + "postcss": "^8.4.16", + "tailwindcss": "^3.1.8", + "vite": "^3.0.7" + } +} diff --git a/packages/react/examples/nano-repl/src/App.jsx b/packages/react/examples/nano-repl/src/App.jsx new file mode 100644 index 00000000..f82618af --- /dev/null +++ b/packages/react/examples/nano-repl/src/App.jsx @@ -0,0 +1,139 @@ +import { evalScope, controls } from '@strudel.cycles/core'; +import { getAudioContext, panic, webaudioOutput } from '@strudel.cycles/webaudio'; +import { useCallback, useState } from 'react'; +import CodeMirror, { flash } from '../../../src/components/CodeMirror6'; +import useKeydown from '../../../src/hooks/useKeydown.mjs'; +import useStrudel from '../../../src/hooks/useStrudel'; +import useHighlighting from '../../../src/hooks/useHighlighting'; +import './style.css'; +// import { prebake } from '../../../../../repl/src/prebake.mjs'; + +// TODO: only import stuff when play is pressed? +evalScope( + controls, + import('@strudel.cycles/core'), + // import('@strudel.cycles/tone'), + // import('@strudel.cycles/midi'), // TODO: find out why midi loads tone.js + import('@strudel.cycles/tonal'), + import('@strudel.cycles/mini'), + import('@strudel.cycles/xen'), + import('@strudel.cycles/webaudio'), + import('@strudel.cycles/osc'), + import('@strudel.cycles/webdirt'), + import('@strudel.cycles/serial'), + import('@strudel.cycles/soundfonts'), +); + +const defaultTune = `samples({ + bd: ['bd/BT0AADA.wav','bd/BT0AAD0.wav','bd/BT0A0DA.wav','bd/BT0A0D3.wav','bd/BT0A0D0.wav','bd/BT0A0A7.wav'], + sd: ['sd/rytm-01-classic.wav','sd/rytm-00-hard.wav'], + hh: ['hh27/000_hh27closedhh.wav','hh/000_hh3closedhh.wav'], +}, 'github:tidalcycles/Dirt-Samples/master/'); +stack( + s("bd,[~ ],hh(3,4)") // drums + .speed(perlin.range(.7,.9)) // random sample speed variation + //.hush() + ,"" // bassline + .off(1/8,x=>x.add(12).degradeBy(.5)) // random octave jumps + .add(perlin.range(0,.5)) // random pitch variation + .superimpose(add(.05)) // add second, slightly detuned voice + .n() // wrap in "n" + .decay(.15).sustain(0) // make each note of equal length + .s('sawtooth') // waveform + .gain(.4) // turn down + .cutoff(sine.slow(7).range(300,5000)) // automate cutoff + //.hush() + ,">".voicings() // chords + .superimpose(x=>x.add(.04)) // add second, slightly detuned voice + .add(perlin.range(0,.5)) // random pitch variation + .n() // wrap in "n" + .s('square') // waveform + .gain(.16) // turn down + .cutoff(500) // fixed cutoff + .attack(1) // slowly fade in + //.hush() + ,"a4 c5 ".struct("x(5,8)") + .superimpose(x=>x.add(.04)) // add second, slightly detuned voice + .add(perlin.range(0,.5)) // random pitch variation + .n() // wrap in "n" + .decay(.1).sustain(0) // make notes short + .s('triangle') // waveform + .degradeBy(perlin.range(0,.5)) // randomly controlled random removal :) + .echoWith(4,.125,(x,n)=>x.gain(.15*1/(n+1))) // echo notes + //.hush() +) +.fast(2/3)`; + +// await prebake(); + +const ctx = getAudioContext(); +const getTime = () => ctx.currentTime; +function App() { + const [code, setCode] = useState(defaultTune); + const [view, setView] = useState(); + // const [code, setCode] = useState(`"c3".note().slow(2)`); + const { scheduler, evaluate, schedulerError, evalError, isDirty, activeCode, pattern } = useStrudel({ + code, + defaultOutput: webaudioOutput, + getTime, + }); + + useHighlighting({ + view, + pattern, + active: !activeCode?.includes('strudel disable-highlighting'), + getTime: () => scheduler.phase, + }); + + const error = evalError || schedulerError; + useKeydown( + useCallback( + async (e) => { + if (e.ctrlKey || e.altKey) { + if (e.code === 'Enter') { + e.preventDefault(); + flash(view); + await evaluate(code); + if (e.shiftKey) { + panic(); + scheduler.stop(); + scheduler.start(); + } + if (!scheduler.started) { + scheduler.start(); + } + } else if (e.code === 'Period') { + scheduler.pause(); + panic(); + e.preventDefault(); + } + } + }, + [scheduler, evaluate, view], + ), + ); + return ( +
+ {/* - diff --git a/packages/webaudio/feedbackdelay.mjs b/packages/webaudio/feedbackdelay.mjs new file mode 100644 index 00000000..c182d655 --- /dev/null +++ b/packages/webaudio/feedbackdelay.mjs @@ -0,0 +1,31 @@ +if (typeof DelayNode !== 'undefined') { + class FeedbackDelayNode extends DelayNode { + constructor(ac, wet, time, feedback) { + super(ac); + wet = Math.abs(wet); + this.delayTime.value = time; + + const feedbackGain = ac.createGain(); + feedbackGain.gain.value = Math.min(Math.abs(feedback), 0.995); + this.feedback = feedbackGain.gain; + + const delayGain = ac.createGain(); + delayGain.gain.value = wet; + this.delayGain = delayGain; + + this.connect(feedbackGain); + this.connect(delayGain); + feedbackGain.connect(this); + + this.connect = (target) => delayGain.connect(target); + return this; + } + start(t) { + this.delayGain.gain.setValueAtTime(this.delayGain.gain.value, t + this.delayTime.value); + } + } + + AudioContext.prototype.createFeedbackDelay = function (wet, time, feedback) { + return new FeedbackDelayNode(this, wet, time, feedback); + }; +} diff --git a/packages/webaudio/index.mjs b/packages/webaudio/index.mjs index 65a4b3ea..5fa1e36e 100644 --- a/packages/webaudio/index.mjs +++ b/packages/webaudio/index.mjs @@ -4,6 +4,5 @@ Copyright (C) 2022 Strudel contributors - see . */ -export * from './clockworker.mjs'; -export * from './scheduler.mjs'; export * from './webaudio.mjs'; +export * from './sampler.mjs'; diff --git a/packages/webaudio/package-lock.json b/packages/webaudio/package-lock.json index bf7928c4..eeea2c82 100644 --- a/packages/webaudio/package-lock.json +++ b/packages/webaudio/package-lock.json @@ -1,6 +1,6 @@ { "name": "@strudel.cycles/webaudio", - "version": "0.1.1", + "version": "0.3.3", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/webaudio/package.json b/packages/webaudio/package.json index ee3fece6..ba915421 100644 --- a/packages/webaudio/package.json +++ b/packages/webaudio/package.json @@ -1,14 +1,17 @@ { "name": "@strudel.cycles/webaudio", - "version": "0.1.1", + "version": "0.3.3", "description": "Web Audio helpers for Strudel", "main": "index.mjs", + "module": "dist/index.es.js", "type": "module", "directories": { "example": "examples" }, "scripts": { - "example": "npx parcel examples/repl.html" + "example": "npx parcel examples/repl.html", + "build": "vite build", + "prepublish": "npm run build" }, "repository": { "type": "git", @@ -28,6 +31,6 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.1.0" + "@strudel.cycles/core": "^0.3.2" } } diff --git a/packages/webaudio/reverb.mjs b/packages/webaudio/reverb.mjs new file mode 100644 index 00000000..e6d31f6a --- /dev/null +++ b/packages/webaudio/reverb.mjs @@ -0,0 +1,23 @@ +if (typeof AudioContext !== 'undefined') { + AudioContext.prototype.impulseResponse = function (duration, channels = 1) { + const length = this.sampleRate * duration; + const impulse = this.createBuffer(channels, length, this.sampleRate); + const IR = impulse.getChannelData(0); + for (let i = 0; i < length; i++) IR[i] = (2 * Math.random() - 1) * Math.pow(1 - i / length, duration); + return impulse; + }; + + AudioContext.prototype.createReverb = function (duration) { + const convolver = this.createConvolver(); + convolver.setDuration = (d) => { + convolver.buffer = this.impulseResponse(d); + convolver.duration = duration; + return convolver; + }; + convolver.setDuration(duration); + return convolver; + }; +} + +// TODO: make the reverb more exciting +// check out https://blog.gskinner.com/archives/2019/02/reverb-web-audio-api.html diff --git a/packages/webaudio/sampler.mjs b/packages/webaudio/sampler.mjs new file mode 100644 index 00000000..1be618c5 --- /dev/null +++ b/packages/webaudio/sampler.mjs @@ -0,0 +1,161 @@ +const bufferCache = {}; // string: Promise +const loadCache = {}; // string: Promise + +export const getCachedBuffer = (url) => bufferCache[url]; + +export const loadBuffer = (url, ac) => { + if (!loadCache[url]) { + loadCache[url] = fetch(url) + .then((res) => res.arrayBuffer()) + .then(async (res) => { + const decoded = await ac.decodeAudioData(res); + bufferCache[url] = decoded; + return decoded; + }); + } + return loadCache[url]; +}; + +export function reverseBuffer(buffer) { + const ac = getAudioContext(); + const reversed = ac.createBuffer(buffer.numberOfChannels, buffer.length, ac.sampleRate); + for (let channel = 0; channel < buffer.numberOfChannels; channel++) { + reversed.copyToChannel(buffer.getChannelData(channel).slice().reverse(), channel, channel); + } + return reversed; +} + +export const getLoadedBuffer = (url) => { + return bufferCache[url]; +}; + +/* export const playBuffer = (buffer, time = ac.currentTime, destination = ac.destination) => { + const src = ac.createBufferSource(); + src.buffer = buffer; + src.connect(destination); + src.start(time); +}; + +export const playSample = async (url) => playBuffer(await loadBuffer(url)); */ + +// https://estuary.mcmaster.ca/samples/resources.json +// Array<{ "url":string, "bank": string, "n": number}> +// ritchse/tidal-drum-machines/tree/main/machines/AkaiLinn +const githubCache = {}; +let sampleCache = { current: undefined }; +export const loadGithubSamples = async (path, nameFn) => { + const storageKey = 'loadGithubSamples ' + path; + const stored = localStorage.getItem(storageKey); + if (stored) { + console.log('[sampler]: loaded sample list from localstorage', path); + githubCache[path] = JSON.parse(stored); + } + if (githubCache[path]) { + sampleCache.current = githubCache[path]; + return githubCache[path]; + } + console.log('[sampler]: fetching sample list from github', path); + try { + const [user, repo, ...folders] = path.split('/'); + const baseUrl = `https://api.github.com/repos/${user}/${repo}/contents`; + const banks = await fetch(`${baseUrl}/${folders.join('/')}`).then((res) => res.json()); + // fetch each subfolder + githubCache[path] = ( + await Promise.all( + banks.map(async ({ name, path }) => ({ + name, + content: await fetch(`${baseUrl}/${path}`) + .then((res) => res.json()) + .catch((err) => { + console.error('could not load path', err); + }), + })), + ) + ) + .filter(({ content }) => !!content) + .reduce( + (acc, { name, content }) => ({ + ...acc, + [nameFn?.(name) || name]: content.map(({ download_url }) => download_url), + }), + {}, + ); + } catch (err) { + console.error('[sampler]: failed to fetch sample list from github', err); + return; + } + sampleCache.current = githubCache[path]; + localStorage.setItem(storageKey, JSON.stringify(sampleCache.current)); + console.log('[sampler]: loaded samples:', sampleCache.current); + return githubCache[path]; +}; + +/** + * Loads a collection of samples to use with `s` + * + * @example + * samples({ + * bd: '808bd/BD0000.WAV', + * sd: '808sd/SD0010.WAV' + * }, 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/'); + * s("[bd ~]*2, [~ hh]*2, ~ sd") + * + */ + +export const samples = async (sampleMap, baseUrl = sampleMap._base || '') => { + if (typeof sampleMap === 'string') { + if (sampleMap.startsWith('github:')) { + const [_, path] = sampleMap.split('github:'); + sampleMap = `https://raw.githubusercontent.com/${path}/strudel.json`; + } + if (typeof fetch !== 'function') { + // not a browser + return; + } + const base = sampleMap.split('/').slice(0, -1).join('/'); + if (typeof fetch === 'undefined') { + // skip fetch when in node / testing + return; + } + return fetch(sampleMap) + .then((res) => res.json()) + .then((json) => samples(json, baseUrl || json._base || base)) + .catch((error) => { + console.error(error); + throw new Error(`error loading "${sampleMap}"`); + }); + } + sampleCache.current = { + ...sampleCache.current, + ...Object.fromEntries( + Object.entries(sampleMap).map(([key, value]) => { + if (typeof value === 'string') { + value = [value]; + } + if (typeof value !== 'object') { + throw new Error('wrong sample map format for ' + key); + } + baseUrl = value._base || baseUrl; + const replaceUrl = (v) => (baseUrl + v).replace('github:', 'https://raw.githubusercontent.com/'); + if (Array.isArray(value)) { + return [key, value.map(replaceUrl)]; + } + // must be object + return [ + key, + Object.fromEntries( + Object.entries(value).map(([note, samples]) => { + return [note, (typeof samples === 'string' ? [samples] : samples).map(replaceUrl)]; + }), + ), + ]; + }), + ), + }; +}; + +export const resetLoadedSamples = () => { + sampleCache.current = undefined; +}; + +export const getLoadedSamples = () => sampleCache.current; diff --git a/packages/webaudio/scheduler.mjs b/packages/webaudio/scheduler.mjs deleted file mode 100644 index dac8c409..00000000 --- a/packages/webaudio/scheduler.mjs +++ /dev/null @@ -1,43 +0,0 @@ -/* -scheduler.mjs - -Copyright (C) 2022 Strudel contributors - see -This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . -*/ - -import { ClockWorker } from './clockworker.mjs'; -import { State, TimeSpan } from '@strudel.cycles/core'; - -export class Scheduler { - worker; - pattern; - constructor({ audioContext, interval = 0.2, onEvent }) { - this.worker = new ClockWorker( - audioContext, - (begin, end) => { - this.pattern.query(new State(new TimeSpan(begin, end))).forEach((e) => { - if (!e.part.begin.equals(e.whole.begin)) { - return; - } - if (onEvent) { - onEvent?.(e); - } else { - console.warn('unplayable event: no audio node nor onEvent callback', e); - } - }); - }, - interval, - ); - } - start() { - if (!this.pattern) { - throw new Error('Scheduler: no pattern set! call .setPattern first.'); - } - this.worker.start(); - } - stop() { - this.worker.stop(); - } - setPattern(pat) { - this.pattern = pat; - } -} diff --git a/packages/webaudio/vite.config.js b/packages/webaudio/vite.config.js new file mode 100644 index 00000000..5df3b215 --- /dev/null +++ b/packages/webaudio/vite.config.js @@ -0,0 +1,19 @@ +import { defineConfig } from 'vite'; +import { dependencies } from './package.json'; +import { resolve } from 'path'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [], + build: { + lib: { + entry: resolve(__dirname, 'index.mjs'), + formats: ['es', 'cjs'], + fileName: (ext) => `index.${ext}.js`, + }, + rollupOptions: { + external: [...Object.keys(dependencies)], + }, + target: 'esnext', + }, +}); diff --git a/packages/webaudio/vowel.mjs b/packages/webaudio/vowel.mjs new file mode 100644 index 00000000..25357642 --- /dev/null +++ b/packages/webaudio/vowel.mjs @@ -0,0 +1,38 @@ +// credits to webdirt: https://github.com/dktr0/WebDirt/blob/41342e81d6ad694a2310d491fef7b7e8b0929efe/js-src/Graph.js#L597 +export var vowelFormant = { + a: { freqs: [660, 1120, 2750, 3000, 3350], gains: [1, 0.5012, 0.0708, 0.0631, 0.0126], qs: [80, 90, 120, 130, 140] }, + e: { freqs: [440, 1800, 2700, 3000, 3300], gains: [1, 0.1995, 0.1259, 0.1, 0.1], qs: [70, 80, 100, 120, 120] }, + i: { freqs: [270, 1850, 2900, 3350, 3590], gains: [1, 0.0631, 0.0631, 0.0158, 0.0158], qs: [40, 90, 100, 120, 120] }, + o: { freqs: [430, 820, 2700, 3000, 3300], gains: [1, 0.3162, 0.0501, 0.0794, 0.01995], qs: [40, 80, 100, 120, 120] }, + u: { freqs: [370, 630, 2750, 3000, 3400], gains: [1, 0.1, 0.0708, 0.0316, 0.01995], qs: [40, 60, 100, 120, 120] }, +}; +if (typeof GainNode !== 'undefined') { + class VowelNode extends GainNode { + constructor(ac, letter) { + super(ac); + if (!vowelFormant[letter]) { + throw new Error('vowel: unknown vowel ' + letter); + } + const { gains, qs, freqs } = vowelFormant[letter]; + const makeupGain = ac.createGain(); + for (let i = 0; i < 5; i++) { + const gain = ac.createGain(); + gain.gain.value = gains[i]; + const filter = ac.createBiquadFilter(); + filter.type = 'bandpass'; + filter.Q.value = qs[i]; + filter.frequency.value = freqs[i]; + this.connect(filter); + filter.connect(gain); + gain.connect(makeupGain); + } + makeupGain.gain.value = 8; // how much makeup gain to add? + this.connect = (target) => makeupGain.connect(target); + return this; + } + } + + AudioContext.prototype.createVowelFilter = function (letter) { + return new VowelNode(this, letter); + }; +} diff --git a/packages/webaudio/webaudio.mjs b/packages/webaudio/webaudio.mjs index de24a6d7..58d6871c 100644 --- a/packages/webaudio/webaudio.mjs +++ b/packages/webaudio/webaudio.mjs @@ -6,8 +6,15 @@ This program is free software: you can redistribute it and/or modify it under th // import { Pattern, getFrequency, patternify2 } from '@strudel.cycles/core'; import * as strudel from '@strudel.cycles/core'; -import { Tone } from '@strudel.cycles/tone'; -const { Pattern, getFrequency, patternify2 } = strudel; +import { fromMidi, isNote, toMidi } from '@strudel.cycles/core'; +import './feedbackdelay.mjs'; +import './reverb.mjs'; +import { loadBuffer, reverseBuffer } from './sampler.mjs'; +const { Pattern } = strudel; +import './vowel.mjs'; +import workletsUrl from './worklets.mjs?url'; + +// export const getAudioContext = () => Tone.getContext().rawContext; let audioContext; export const getAudioContext = () => { @@ -17,9 +24,30 @@ export const getAudioContext = () => { return audioContext; }; -const lookahead = 0.2; +let destination; +const getDestination = () => { + const ctx = getAudioContext(); + if (!destination) { + destination = ctx.createGain(); + destination.connect(ctx.destination); + } + return destination; +}; -const adsr = (attack, decay, sustain, release, velocity, begin, end) => { +export const panic = () => { + getDestination().gain.linearRampToValueAtTime(0, getAudioContext().currentTime + 0.01); + destination = null; +}; + +const getFilter = (type, frequency, Q) => { + const filter = getAudioContext().createBiquadFilter(); + filter.type = type; + filter.frequency.value = frequency; + filter.Q.value = Q; + return filter; +}; + +const getADSR = (attack, decay, sustain, release, velocity, begin, end) => { const gainNode = getAudioContext().createGain(); gainNode.gain.setValueAtTime(0, begin); gainNode.gain.linearRampToValueAtTime(velocity, begin + attack); // attack @@ -27,68 +55,381 @@ const adsr = (attack, decay, sustain, release, velocity, begin, end) => { gainNode.gain.setValueAtTime(sustain * velocity, end); // sustain end gainNode.gain.linearRampToValueAtTime(0, end + release); // release // for some reason, using exponential ramping creates little cracklings + /* let t = begin; + gainNode.gain.setValueAtTime(0, t); + gainNode.gain.exponentialRampToValueAtTime(velocity, (t += attack)); + const sustainGain = Math.max(sustain * velocity, 0.001); + gainNode.gain.exponentialRampToValueAtTime(sustainGain, (t += decay)); + if (end - begin < attack + decay) { + gainNode.gain.cancelAndHoldAtTime(end); + } else { + gainNode.gain.setValueAtTime(sustainGain, end); + } + gainNode.gain.exponentialRampToValueAtTime(0.001, end + release); // release */ return gainNode; }; -Pattern.prototype.withAudioNode = function (createAudioNode) { - return this._withHap((hap) => { - return hap.setContext({ - ...hap.context, - createAudioNode: (t, e) => createAudioNode(t, e, hap.context.createAudioNode?.(t, hap)), - }); - }); +const getOscillator = ({ s, freq, t, duration, release }) => { + // make oscillator + const o = getAudioContext().createOscillator(); + o.type = s || 'triangle'; + o.frequency.value = Number(freq); + o.start(t); + o.stop(t + duration + release); + return o; }; -Pattern.prototype._wave = function (type) { - return this.withAudioNode((t, e) => { - const osc = getAudioContext().createOscillator(); - osc.type = type; - const f = getFrequency(e); - osc.frequency.value = f; // expects frequency.. - const begin = t ?? e.whole.begin.valueOf() + lookahead; - const end = begin + e.duration.valueOf(); - osc.start(begin); - osc.stop(end); // release? - return osc; - }); -}; -Pattern.prototype.adsr = function (a = 0.01, d = 0.05, s = 1, r = 0.01) { - return this.withAudioNode((t, e, node) => { - const velocity = e.context?.velocity || 1; - const begin = t ?? e.whole.begin.valueOf() + lookahead; - const end = begin + e.duration.valueOf() + lookahead; - const envelope = adsr(a, d, s, r, velocity, begin, end); - node?.connect(envelope); - return envelope; - }); -}; -Pattern.prototype._filter = function (type = 'lowpass', frequency = 1000) { - return this.withAudioNode((t, e, node) => { - const filter = getAudioContext().createBiquadFilter(); - filter.type = type; - filter.frequency.value = frequency; - node?.connect(filter); - return filter; - }); +const getSoundfontKey = (s) => { + if (!globalThis.soundfontList) { + // soundfont package not loaded + return false; + } + if (globalThis.soundfontList?.instruments?.includes(s)) { + return s; + } + // check if s is one of the soundfonts, which are loaded into globalThis, to avoid coupling both packages + const nameIndex = globalThis.soundfontList?.instrumentNames?.indexOf(s); + // convert number nameIndex (0-128) to 3 digit string (001-128) + const name = nameIndex < 10 ? `00${nameIndex}` : nameIndex < 100 ? `0${nameIndex}` : nameIndex; + if (nameIndex !== -1) { + // TODO: indices of instrumentNames do not seem to match instruments + return globalThis.soundfontList.instruments.find((instrument) => instrument.startsWith(name)); + } + return; }; -Pattern.prototype.filter = function (type, frequency) { - return patternify2(Pattern.prototype._filter)(reify(type), reify(frequency), this); +const getSampleBufferSource = async (s, n, note, speed) => { + let transpose = 0; + let midi = typeof note === 'string' ? toMidi(note) : note || 36; + transpose = midi - 36; // C3 is middle C + + const ac = getAudioContext(); + // is sample from loaded samples(..) + const samples = getLoadedSamples(); + if (!samples) { + throw new Error('no samples loaded'); + } + const bank = samples?.[s]; + if (!bank) { + throw new Error( + `sample not found: "${s}", try one of ${Object.keys(samples) + .map((s) => `"${s}"`) + .join(', ')}.`, + ); + } + if (typeof bank !== 'object') { + throw new Error('wrong format for sample bank:', s); + } + let sampleUrl; + if (Array.isArray(bank)) { + sampleUrl = bank[n % bank.length]; + } else { + const midiDiff = (noteA) => toMidi(noteA) - midi; + // object format will expect keys as notes + const closest = Object.keys(bank) + .filter((k) => !k.startsWith('_')) + .reduce( + (closest, key, j) => (!closest || Math.abs(midiDiff(key)) < Math.abs(midiDiff(closest)) ? key : closest), + null, + ); + transpose = -midiDiff(closest); // semitones to repitch + sampleUrl = bank[closest][n % bank[closest].length]; + } + let buffer = await loadBuffer(sampleUrl, ac); + if (speed < 0) { + // should this be cached? + buffer = reverseBuffer(buffer); + } + const bufferSource = ac.createBufferSource(); + bufferSource.buffer = buffer; + const playbackRate = 1.0 * Math.pow(2, transpose / 12); + // bufferSource.playbackRate.value = Math.pow(2, transpose / 12); + bufferSource.playbackRate.value = playbackRate; + return bufferSource; }; +const splitSN = (s, n) => { + if (!s.includes(':')) { + return [s, n]; + } + let [s2, n2] = s.split(':'); + if (isNaN(Number(n2))) { + return [s, n]; + } + return [s2, n2]; +}; + +let workletsLoading; +function loadWorklets() { + if (workletsLoading) { + return workletsLoading; + } + workletsLoading = getAudioContext().audioWorklet.addModule(workletsUrl); + return workletsLoading; +} + +function getWorklet(ac, processor, params) { + const node = new AudioWorkletNode(ac, processor); + Object.entries(params).forEach(([key, value]) => { + node.parameters.get(key).value = value; + }); + return node; +} + +if (typeof window !== 'undefined') { + try { + loadWorklets(); + } catch (err) { + console.warn('could not load AudioWorklet effects coarse, crush and shape', err); + } +} + +function gainNode(value) { + const node = getAudioContext().createGain(); + node.gain.value = value; + return node; +} +const cutGroups = []; + +let delays = {}; +function getDelay(orbit, delaytime, delayfeedback, t) { + if (!delays[orbit]) { + const ac = getAudioContext(); + const dly = ac.createFeedbackDelay(1, delaytime, delayfeedback); + dly.start(t); + dly.connect(getDestination()); + delays[orbit] = dly; + } + delays[orbit].delayTime.value !== delaytime && delays[orbit].delayTime.setValueAtTime(delaytime, t); + delays[orbit].feedback.value !== delayfeedback && delays[orbit].feedback.setValueAtTime(delayfeedback, t); + return delays[orbit]; +} + +let reverbs = {}; +function getReverb(orbit, duration = 2) { + if (!reverbs[orbit]) { + const ac = getAudioContext(); + const reverb = ac.createReverb(duration); + reverb.connect(getDestination()); + reverbs[orbit] = reverb; + } + if (reverbs[orbit].duration !== duration) { + reverbs[orbit] = reverbs[orbit].setDuration(duration); + reverbs[orbit].duration = duration; + } + return reverbs[orbit]; +} + +function effectSend(input, effect, wet) { + const send = gainNode(wet); + input.connect(send); + send.connect(effect); + return send; +} + +// export const webaudioOutput = async (t, hap, ct, cps) => { +export const webaudioOutput = async (hap, deadline, hapDuration) => { + try { + const ac = getAudioContext(); + /* if (isNote(hap.value)) { + // supports primitive hap values that look like notes + hap.value = { note: hap.value }; + } */ + if (typeof hap.value !== 'object') { + throw new Error( + `hap.value ${hap.value} is not supported by webaudio output. Hint: append .note() or .s() to the end`, + ); + } + // calculate correct time (tone.js workaround) + let t = ac.currentTime + deadline; + // destructure value + let { + freq, + s, + bank, + sf, + clip = 0, // if 1, samples will be cut off when the hap ends + n = 0, + note, + gain = 0.8, + cutoff, + resonance = 1, + hcutoff, + hresonance = 1, + bandf, + bandq = 1, + coarse, + crush, + shape, + pan, + speed = 1, // sample playback speed + begin = 0, + end = 1, + vowel, + delay = 0, + delayfeedback = 0.5, + delaytime = 0.25, + unit, + nudge = 0, // TODO: is this in seconds? + cut, + loop, + orbit = 1, + room, + size = 2, + roomsize = size, + } = hap.value; + const { velocity = 1 } = hap.context; + gain *= velocity; // legacy fix for velocity + // the chain will hold all audio nodes that connect to each other + const chain = []; + if (bank && s) { + s = `${bank}_${s}`; + } + if (typeof s === 'string') { + [s, n] = splitSN(s, n); + } + if (typeof note === 'string') { + [note, n] = splitSN(note, n); + } + if (!s || ['sine', 'square', 'triangle', 'sawtooth'].includes(s)) { + // destructure adsr here, because the default should be different for synths and samples + const { attack = 0.001, decay = 0.05, sustain = 0.6, release = 0.01 } = hap.value; + // with synths, n and note are the same thing + n = note || n || 36; + if (typeof n === 'string') { + n = toMidi(n); // e.g. c3 => 48 + } + // get frequency + if (!freq && typeof n === 'number') { + freq = fromMidi(n); // + 48); + } + // make oscillator + const o = getOscillator({ t, s, freq, duration: hapDuration, release }); + chain.push(o); + // level down oscillators as they are really loud compared to samples i've tested + chain.push(gainNode(0.3)); + // TODO: make adsr work with samples without pops + // envelope + const adsr = getADSR(attack, decay, sustain, release, 1, t, t + hapDuration); + chain.push(adsr); + } else { + // destructure adsr here, because the default should be different for synths and samples + const { attack = 0.001, decay = 0.001, sustain = 1, release = 0.001 } = hap.value; + // load sample + if (speed === 0) { + // no playback + return; + } + if (!s) { + console.warn('no sample specified'); + return; + } + const soundfont = getSoundfontKey(s); + let bufferSource; + + try { + if (soundfont) { + // is soundfont + bufferSource = await globalThis.getFontBufferSource(soundfont, note || n, ac); + } else { + // is sample from loaded samples(..) + bufferSource = await getSampleBufferSource(s, n, note, speed); + } + } catch (err) { + console.warn(err); + return; + } + // asny stuff above took too long? + if (ac.currentTime > t) { + console.warn('sample still loading:', s, n); + return; + } + if (!bufferSource) { + console.warn('no buffer source'); + return; + } + bufferSource.playbackRate.value = Math.abs(speed) * bufferSource.playbackRate.value; + if (unit === 'c') { + // are there other units? + bufferSource.playbackRate.value = bufferSource.playbackRate.value * bufferSource.buffer.duration; + } + let duration = soundfont || clip ? hapDuration : bufferSource.buffer.duration / bufferSource.playbackRate.value; + // "The computation of the offset into the sound is performed using the sound buffer's natural sample rate, + // rather than the current playback rate, so even if the sound is playing at twice its normal speed, + // the midway point through a 10-second audio buffer is still 5." + const offset = begin * duration * bufferSource.playbackRate.value; + duration = (end - begin) * duration; + if (loop) { + bufferSource.loop = true; + bufferSource.loopStart = offset; + bufferSource.loopEnd = offset + duration; + duration = loop * duration; + } + t += nudge; + + bufferSource.start(t, offset); + if (cut !== undefined) { + cutGroups[cut]?.stop(t); // fade out? + cutGroups[cut] = bufferSource; + } + chain.push(bufferSource); + bufferSource.stop(t + duration + release); + const adsr = getADSR(attack, decay, sustain, release, 1, t, t + duration); + chain.push(adsr); + } + + // gain stage + chain.push(gainNode(gain)); + + // filters + cutoff !== undefined && chain.push(getFilter('lowpass', cutoff, resonance)); + hcutoff !== undefined && chain.push(getFilter('highpass', hcutoff, hresonance)); + bandf !== undefined && chain.push(getFilter('bandpass', bandf, bandq)); + vowel !== undefined && chain.push(ac.createVowelFilter(vowel)); + + // effects + coarse !== undefined && chain.push(getWorklet(ac, 'coarse-processor', { coarse })); + crush !== undefined && chain.push(getWorklet(ac, 'crush-processor', { crush })); + shape !== undefined && chain.push(getWorklet(ac, 'shape-processor', { shape })); + + // panning + if (pan !== undefined) { + const panner = ac.createStereoPanner(); + panner.pan.value = 2 * pan - 1; + chain.push(panner); + } + + // last gain + const post = gainNode(1); + chain.push(post); + post.connect(getDestination()); + + // delay + let delaySend; + if (delay > 0 && delaytime > 0 && delayfeedback > 0) { + const delyNode = getDelay(orbit, delaytime, delayfeedback, t); + delaySend = effectSend(post, delyNode, delay); + } + // reverb + let reverbSend; + if (room > 0 && roomsize > 0) { + const reverbNode = getReverb(orbit, roomsize); + reverbSend = effectSend(post, reverbNode, room); + } + + // connect chain elements together + chain.slice(1).reduce((last, current) => last.connect(current), chain[0]); + + // disconnect all nodes when source node has ended: + chain[0].onended = () => chain.concat([delaySend, reverbSend]).forEach((n) => n?.disconnect()); + } catch (e) { + console.warn('.out error:', e); + } +}; + +export const webaudioOutputTrigger = (t, hap, ct, cps) => webaudioOutput(hap, t - ct, hap.duration / cps); + Pattern.prototype.out = function () { - const master = getAudioContext().createGain(); - master.gain.value = 0.1; - master.connect(getAudioContext().destination); - return this.withAudioNode((t, e, node) => { - if (!node) { - console.warn('out: no source! call .osc() first'); - } - node?.connect(master); - })._withHap((hap) => { - const onTrigger = (time, e) => e.context?.createAudioNode?.(time, e); - return hap.setContext({ ...hap.context, onTrigger }); - }); + // TODO: refactor (t, hap, ct, cps) to (hap, deadline, duration) ? + return this.onTrigger(webaudioOutputTrigger); }; - -Pattern.prototype.define('wave', (type, pat) => pat.wave(type), { patternified: true }); diff --git a/packages/webaudio/worklets.mjs b/packages/webaudio/worklets.mjs new file mode 100644 index 00000000..7bb43f87 --- /dev/null +++ b/packages/webaudio/worklets.mjs @@ -0,0 +1,108 @@ +// LICENSE GNU General Public License v3.0 see https://github.com/dktr0/WebDirt/blob/main/LICENSE +// all the credit goes to dktr0's webdirt: https://github.com/dktr0/WebDirt/blob/5ce3d698362c54d6e1b68acc47eb2955ac62c793/dist/AudioWorklets.js +// <3 + +class CoarseProcessor extends AudioWorkletProcessor { + static get parameterDescriptors() { + return [{ name: 'coarse', defaultValue: 1 }]; + } + + constructor() { + super(); + this.notStarted = true; + } + + process(inputs, outputs, parameters) { + const input = inputs[0]; + const output = outputs[0]; + const coarse = parameters.coarse; + const blockSize = 128; + const hasInput = !(input[0] === undefined); + if (hasInput) { + this.notStarted = false; + output[0][0] = input[0][0]; + for (let n = 1; n < blockSize; n++) { + for (let o = 0; o < output.length; o++) { + output[o][n] = n % coarse == 0 ? input[0][n] : output[o][n - 1]; + } + } + } + return this.notStarted || hasInput; + } +} + +registerProcessor('coarse-processor', CoarseProcessor); + +class CrushProcessor extends AudioWorkletProcessor { + static get parameterDescriptors() { + return [{ name: 'crush', defaultValue: 0 }]; + } + + constructor() { + super(); + this.notStarted = true; + } + + process(inputs, outputs, parameters) { + const input = inputs[0]; + const output = outputs[0]; + const crush = parameters.crush; + const blockSize = 128; + const hasInput = !(input[0] === undefined); + if (hasInput) { + this.notStarted = false; + if (crush.length === 1) { + const x = Math.pow(2, crush[0] - 1); + for (let n = 0; n < blockSize; n++) { + const value = Math.round(input[0][n] * x) / x; + for (let o = 0; o < output.length; o++) { + output[o][n] = value; + } + } + } else { + for (let n = 0; n < blockSize; n++) { + let x = Math.pow(2, crush[n] - 1); + const value = Math.round(input[0][n] * x) / x; + for (let o = 0; o < output.length; o++) { + output[o][n] = value; + } + } + } + } + return this.notStarted || hasInput; + } +} +registerProcessor('crush-processor', CrushProcessor); + +class ShapeProcessor extends AudioWorkletProcessor { + static get parameterDescriptors() { + return [{ name: 'shape', defaultValue: 0 }]; + } + + constructor() { + super(); + this.notStarted = true; + } + + process(inputs, outputs, parameters) { + const input = inputs[0]; + const output = outputs[0]; + const shape0 = parameters.shape[0]; + const shape1 = shape0 < 1 ? shape0 : 1.0 - 4e-10; + const shape = (2.0 * shape1) / (1.0 - shape1); + const blockSize = 128; + const hasInput = !(input[0] === undefined); + if (hasInput) { + this.notStarted = false; + for (let n = 0; n < blockSize; n++) { + const value = ((1 + shape) * input[0][n]) / (1 + shape * Math.abs(input[0][n])); + for (let o = 0; o < output.length; o++) { + output[o][n] = value; + } + } + } + return this.notStarted || hasInput; + } +} + +registerProcessor('shape-processor', ShapeProcessor); diff --git a/packages/webdirt/README.md b/packages/webdirt/README.md new file mode 100644 index 00000000..26faed99 --- /dev/null +++ b/packages/webdirt/README.md @@ -0,0 +1,11 @@ +# @strudel.cycles/webdirt + +This package adds [webdirt](https://github.com/dktr0/WebDirt) support to strudel! + +## Dev Notes + +Add default samples to repl: + +1. move samples to `repl/public` folder. the samples folder is expected to have subfolders, with samples in it. the subfolders will be the names of the samples. +2. run `./makeSampleMap.sh ../../repl/public/EmuSP12 > ../../repl/public/EmuSP12.json` +3. adapt `loadWebDirt` in App.jsx + MiniRepl.jsx to use the generated json file diff --git a/packages/webdirt/index.mjs b/packages/webdirt/index.mjs new file mode 100644 index 00000000..edafebd8 --- /dev/null +++ b/packages/webdirt/index.mjs @@ -0,0 +1 @@ +export * from './webdirt.mjs'; diff --git a/packages/webdirt/makeSampleMap.sh b/packages/webdirt/makeSampleMap.sh new file mode 100755 index 00000000..7b399b6e --- /dev/null +++ b/packages/webdirt/makeSampleMap.sh @@ -0,0 +1,32 @@ +#/bin/sh +printf "{\n" +dircount=0 +# for d in $searchRoot/*; do +find $1 -mindepth 1 -maxdepth 1 -iname "*" | sort | while read d; do + if [ -d "$d" ] + then + if [ $dircount -ne 0 ] + then + printf ",\n" + fi + (( dircount++ )) + dirname=`basename $d` + printf "\"%s\": [" "$dirname" + search2=$searchRoot/$dirname/*.WAV + filecount=0 + find "$d" -iname "*.wav" | sort | while read f; do + # for f in $search2; do + filename=$(printf %q "$f") + basename=${f##*/} + if [[ ${basename:0:1} != "." ]]; then + if [ $filecount -ne 0 ]; then + printf "," + fi + (( filecount++ )) + printf "\"%s/%s\"" "$dirname" "$basename" + fi + done + printf "]" + fi +done +printf "\n}\n" diff --git a/packages/webdirt/package-lock.json b/packages/webdirt/package-lock.json new file mode 100644 index 00000000..fa12619b --- /dev/null +++ b/packages/webdirt/package-lock.json @@ -0,0 +1,28 @@ +{ + "name": "@strudel.cycles/webdirt", + "version": "0.3.2", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@strudel.cycles/webdirt", + "version": "0.1.0", + "license": "AGPL-3.0-or-later", + "dependencies": { + "WebDirt": "github:dktr0/WebDirt" + } + }, + "node_modules/WebDirt": { + "name": "webdirt", + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/dktr0/WebDirt.git#425dc8fd023440d9c61ffdb8642e44e2710faea0", + "license": "ISC" + } + }, + "dependencies": { + "WebDirt": { + "version": "git+ssh://git@github.com/dktr0/WebDirt.git#425dc8fd023440d9c61ffdb8642e44e2710faea0", + "from": "WebDirt@github:dktr0/WebDirt" + } + } +} diff --git a/packages/webdirt/package.json b/packages/webdirt/package.json new file mode 100644 index 00000000..ffcbbe48 --- /dev/null +++ b/packages/webdirt/package.json @@ -0,0 +1,28 @@ +{ + "name": "@strudel.cycles/webdirt", + "version": "0.3.2", + "description": "WebDirt integration for Strudel", + "main": "index.mjs", + "type": "module", + "repository": { + "type": "git", + "url": "git+https://github.com/tidalcycles/strudel.git" + }, + "keywords": [ + "tidalcycles", + "strudel", + "pattern", + "livecoding", + "algorave" + ], + "author": "Felix Roos ", + "license": "AGPL-3.0-or-later", + "bugs": { + "url": "https://github.com/tidalcycles/strudel/issues" + }, + "homepage": "https://github.com/tidalcycles/strudel#readme", + "dependencies": { + "@strudel.cycles/core": "^0.3.2", + "WebDirt": "github:dktr0/WebDirt" + } +} diff --git a/packages/webdirt/webdirt.mjs b/packages/webdirt/webdirt.mjs new file mode 100644 index 00000000..467ce416 --- /dev/null +++ b/packages/webdirt/webdirt.mjs @@ -0,0 +1,98 @@ +import * as strudel from '@strudel.cycles/core'; +const { Pattern } = strudel; +import * as WebDirt from 'WebDirt'; +import { getLoadedSamples, loadBuffer, getLoadedBuffer } from '@strudel.cycles/webaudio'; + +let webDirt; + +/* +example config: +{ + sampleMapUrl: 'EmuSP12.json', + sampleFolder: 'EmuSP12', +} +*/ +export function loadWebDirt(config) { + webDirt = new WebDirt.WebDirt(config); + webDirt.initializeWebAudio(); +} + +/** + * + * Uses [webdirt](https://github.com/dktr0/WebDirt) as output. + * + *
+ * show supported Webdirt controls + * + * - s :: String, -- name of sample bank + * - n :: Int, -- number of sample within a bank + * - {@link gain} :: Number, -- clamped from 0 to 2; 1 is default and full-scale + * - overgain :: Number, -- additional gain added to gain to go past clamp at 2 + * - {@link pan} :: Number, -- range: 0 to 1 + * - nudge :: Number, -- nudge the time of the sample forwards/backwards in seconds + * - {@link speed} :: Number, -- speed / pitch of the sample + * - {@link unit} :: String + * - note :: Number, -- pitch offset in semitones + * - {@link begin} :: Number, -- cut from sample start, normalized + * - {@link end} :: Number, -- cut from sample end, normalized + * - {@link cut} :: Int, -- samples with same cut number will interupt each other + * - {@link cutoff} :: Number, -- lowpass filter frequency + * - {@link resonance} :: Number, -- lowpass filter resonance + * - {@link hcutoff} :: Number, -- highpass filter frequency + * - {@link hresonance} :: Number, -- highpass filter resonance + * - {@link bandf} :: Number, -- bandpass filter frequency + * - {@link bandq} :: Number, -- bandpass filter resonance + * - {@link vowel} :: String, -- name of vowel ('a' | 'e' | 'i' | 'o' | 'u') + * - delay :: Number, -- delay wet/dry mix + * - delaytime :: Number, -- delay time in seconds + * - delayfeedback :: Number, -- delay feedback + * - {@link loop} :: Number, -- loop sample n times (relative to sample length) + * - {@link crush} :: Number, -- bitcrusher (currently not working) + * - {@link coarse} :: Number, -- coarse effect (currently not working) + * - {@link shape} :: Number, -- (currently not working) + + * + *
+ * + * @name webdirt + * @memberof Pattern + * @returns Pattern + * @example + * s("bd*2 hh sd hh").n("<0 1>").webdirt() + */ +Pattern.prototype.webdirt = function () { + // create a WebDirt object and initialize Web Audio context + return this._withHap((hap) => { + const onTrigger = async (time, e, currentTime) => { + if (!webDirt) { + throw new Error('WebDirt not initialized!'); + } + const deadline = time - currentTime; + const { s, n = 0, ...rest } = e.value || {}; + if (!s) { + console.warn('Pattern.webdirt: no "s" was set!'); + } + const samples = getLoadedSamples(); + if (!samples?.[s]) { + // try default samples + webDirt.playSample({ s, n, ...rest }, deadline); + return; + } + if (!samples?.[s]) { + console.warn(`Pattern.webdirt: sample "${s}" not found in loaded samples`, samples); + } else { + const bank = samples[s]; + const sampleUrl = bank[n % bank.length]; + const buffer = getLoadedBuffer(sampleUrl); + if (!buffer) { + console.log(`Pattern.webdirt: load ${s}:${n} from ${sampleUrl}`); + loadBuffer(sampleUrl, webDirt.ac); + } else { + const msg = { buffer: { buffer }, ...rest }; + webDirt.playSample(msg, deadline); + } + } + }; + return hap.setContext({ ...hap.context, onTrigger }); + }); +}; diff --git a/packages/xen/package.json b/packages/xen/package.json index 948179ab..21aeec39 100644 --- a/packages/xen/package.json +++ b/packages/xen/package.json @@ -1,10 +1,10 @@ { "name": "@strudel.cycles/xen", - "version": "0.1.1", + "version": "0.3.2", "description": "Xenharmonic API for strudel", "main": "index.mjs", "scripts": { - "test": "mocha --colors" + "test": "vitest run" }, "repository": { "type": "git", @@ -24,6 +24,6 @@ }, "homepage": "https://github.com/tidalcycles/strudel#readme", "dependencies": { - "@strudel.cycles/core": "^0.1.0" + "@strudel.cycles/core": "^0.3.2" } } diff --git a/packages/xen/test/xen.test.mjs b/packages/xen/test/xen.test.mjs index f2923a0f..977b0f69 100644 --- a/packages/xen/test/xen.test.mjs +++ b/packages/xen/test/xen.test.mjs @@ -4,11 +4,11 @@ Copyright (C) 2022 Strudel contributors - see . */ -import { strict as assert } from 'assert'; import { edo } from '../xen.mjs'; +import { describe, it, expect } from 'vitest'; describe('xen', () => { it('edo', () => { - assert.deepStrictEqual(edo('3edo'), [1, Math.pow(2, 1 / 3), Math.pow(2, 2 / 3)]); + expect(edo('3edo')).toEqual([1, Math.pow(2, 1 / 3), Math.pow(2, 2 / 3)]); }); }); diff --git a/paper/citation-cache.json b/paper/citation-cache.json deleted file mode 100644 index d8cef086..00000000 --- a/paper/citation-cache.json +++ /dev/null @@ -1,636 +0,0 @@ -{ - "_info": "Auto-generated by pandoc-url2cite. Feel free to modify, keys will never be overwritten.", - "urls": { - "https://www.tandfonline.com/doi/abs/10.1080/14794713.2016.1227602?journalCode=rpdm20": { - "fetched": "2022-03-24T12:17:27.481Z", - "bibtex": [ - "", - "@article{roberts_code_2016,", - " title = {Code as information and code as spectacle},", - " volume = {12},", - " issn = {1479-4713},", - " url = {https://doi.org/10.1080/14794713.2016.1227602},", - " doi = {10.1080/14794713.2016.1227602},", - " abstract = {In this artist statement, I will discuss the tension between source code as an interactive system for performers and source code as information and entertainment for audiences in live-coding performances. I then describe augmentations I developed for the presentation of source code in the live-coding environment Gibber, including animations and annotations that visually reveal aspects of system state during performances. I briefly describe audience responses to these techniques and, more importantly, how they are critical to my own artistic practice.},", - " number = {2},", - " urldate = {2022-03-24},", - " journal = {International Journal of Performance Arts and Digital Media},", - " author = {Roberts, Charles},", - " month = jul,", - " year = {2016},", - " keywords = {Live coding, psychology of programming, notation, audiences, algorithms},", - " pages = {201--206},", - "}", - "" - ], - "csl": { - "DOI": "10.1080/14794713.2016.1227602", - "ISSN": "1479-4713", - "URL": "https://doi.org/10.1080/14794713.2016.1227602", - "abstract": "In this artist statement, I will discuss the tension between source code as an interactive system for performers and source code as information and entertainment for audiences in live-coding performances. I then describe augmentations I developed for the presentation of source code in the live-coding environment Gibber, including animations and annotations that visually reveal aspects of system state during performances. I briefly describe audience responses to these techniques and, more importantly, how they are critical to my own artistic practice.", - "accessed": { - "date-parts": [ - [ - 2022, - 3, - 24 - ] - ] - }, - "author": [ - { - "family": "Roberts", - "given": "Charles" - } - ], - "container-title": "International Journal of Performance Arts and Digital Media", - "id": "https://www.tandfonline.com/doi/abs/10.1080/14794713.2016.1227602?journalCode_x61_rpdm20", - "issue": "2", - "issued": { - "date-parts": [ - [ - 2016, - 7 - ] - ] - }, - "keyword": "Live coding, psychology of programming, notation, audiences, algorithms", - "page": "201-206", - "title": "Code as information and code as spectacle", - "type": "article-journal", - "volume": "12" - } - }, - "https://zenodo.org/record/5788732": { - "fetched": "2022-03-24T12:20:17.218Z", - "bibtex": [ - "", - "@misc{mclean_alternate_2021,", - " address = {Valdivia, Chile},", - " title = {Alternate {Timelines} for {TidalCycles}},", - " url = {https://zenodo.org/record/5788732},", - " abstract = {The TidalCycles (or Tidal for short) live coding environment has been developed since around 2009, via several rewrites of its core representation. Rather than having fixed goals, this development has been guided by use, motivated by the open aim to make music. This development process can be seen as a long-form improvisation, with insights into the nature of Tidal gained through the process of writing it, feeding back to guide the next steps of development. This brings the worrying thought that key insights will have been missed along this development journey, that would otherwise have lead to very different software. Indeed participants at beginners’ workshops that I have lead or co-lead have often asked questions without good answers, because they made deficiencies or missing features in the software clear. It is well known that a beginner’s mind is able to see much that an expert has become blind to. Running workshops are an excellent way to find new development ideas, but the present paper explores a different technique – the rewrite.},", - " urldate = {2022-03-24},", - " collaborator = {McLean, Alex},", - " month = dec,", - " year = {2021},", - " keywords = {live coding, algorithmic pattern, tidalcycles, haskell, python},", - "}", - "" - ], - "csl": { - "URL": "https://zenodo.org/record/5788732", - "abstract": "The TidalCycles (or Tidal for short) live coding environment has been developed since around 2009, via several rewrites of its core representation. Rather than having fixed goals, this development has been guided by use, motivated by the open aim to make music. This development process can be seen as a long-form improvisation, with insights into the nature of Tidal gained through the process of writing it, feeding back to guide the next steps of development. This brings the worrying thought that key insights will have been missed along this development journey, that would otherwise have lead to very different software. Indeed participants at beginners’ workshops that I have lead or co-lead have often asked questions without good answers, because they made deficiencies or missing features in the software clear. It is well known that a beginner’s mind is able to see much that an expert has become blind to. Running workshops are an excellent way to find new development ideas, but the present paper explores a different technique – the rewrite.", - "accessed": { - "date-parts": [ - [ - 2022, - 3, - 24 - ] - ] - }, - "id": "https://zenodo.org/record/5788732", - "issued": { - "date-parts": [ - [ - 2021, - 12 - ] - ] - }, - "keyword": "live coding, algorithmic pattern, tidalcycles, haskell, python", - "publisher-place": "Valdivia, Chile", - "title": "Alternate Timelines for TidalCycles", - "type": "" - } - }, - "https://www.semanticscholar.org/paper/Bringing-the-TidalCycles-Mini-Notation-to-the-Roberts/74965efadd572ae3f40d14c633a5c8581c1b9f42": { - "fetched": "2022-04-12T22:47:17.063Z", - "bibtex": [ - "", - "@misc{roberts_bringing_2019,", - " title = {Bringing the {TidalCycles} {Mini}-{Notation} to the {Browser}},", - " url = {https://www.semanticscholar.org/paper/Bringing-the-TidalCycles-Mini-Notation-to-the-Roberts/74965efadd572ae3f40d14c633a5c8581c1b9f42},", - " abstract = {A JavaScript dialect of its mini-notation for pattern is created, enabling easy integration with creative coding tools and an accompanying technique for visually annotating the playback of TidalCycles patterns over time. TidalCycles has rapidly become the most popular system for many styles of live coding performance, in particular Algoraves. We created a JavaScript dialect of its mini-notation for pattern, enabling easy integration with creative coding tools. Our research pairs a formalism describing the mini-notation with a small JavaScript library for generating events over time; this library is suitable for generating events inside of an AudioWorkletProcessor thread and for assisting with scheduling in JavaScript environments more generally. We describe integrating the library into the two live coding systems, Gibber and Hydra, and discuss an accompanying technique for visually annotating the playback of TidalCycles patterns over time.},", - " language = {en},", - " urldate = {2022-04-12},", - " journal = {www.semanticscholar.org},", - " author = {Roberts, Charles},", - " year = {2019},", - "}", - "" - ], - "csl": { - "URL": "https://www.semanticscholar.org/paper/Bringing-the-TidalCycles-Mini-Notation-to-the-Roberts/74965efadd572ae3f40d14c633a5c8581c1b9f42", - "abstract": "A JavaScript dialect of its mini-notation for pattern is created, enabling easy integration with creative coding tools and an accompanying technique for visually annotating the playback of TidalCycles patterns over time. TidalCycles has rapidly become the most popular system for many styles of live coding performance, in particular Algoraves. We created a JavaScript dialect of its mini-notation for pattern, enabling easy integration with creative coding tools. Our research pairs a formalism describing the mini-notation with a small JavaScript library for generating events over time; this library is suitable for generating events inside of an AudioWorkletProcessor thread and for assisting with scheduling in JavaScript environments more generally. We describe integrating the library into the two live coding systems, Gibber and Hydra, and discuss an accompanying technique for visually annotating the playback of TidalCycles patterns over time.", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 12 - ] - ] - }, - "author": [ - { - "family": "Roberts", - "given": "Charles" - } - ], - "container-title": "www.semanticscholar.org", - "id": "https://www.semanticscholar.org/paper/Bringing-the-TidalCycles-Mini-Notation-to-the-Roberts/74965efadd572ae3f40d14c633a5c8581c1b9f42", - "issued": { - "date-parts": [ - [ - 2019 - ] - ] - }, - "title": "Bringing the TidalCycles Mini-Notation to the Browser", - "type": "" - } - }, - "https://zenodo.org/record/6456380": { - "fetched": "2022-04-14T21:26:21.302Z", - "bibtex": [ - "", - "@misc{mclean_tidalvortex_2022,", - " address = {Limerick, Ireland},", - " title = {{TidalVortex} {Zero}},", - " url = {https://zenodo.org/record/6456380},", - " abstract = {In this paper we introduce ‘version zero’ of TidalVortex, an alternative implementation of the TidalCycles live coding system, using the Python programming language.  This is open-ended work, exploring what happens when we try to extract the 'essence' of a system like TidalCycles and translate it into another programming language, while taking advantage of the affordance of its new host. First, we review the substantial prior art in porting TidalCycles, and in representing musical patterns in Python. We then compare equivalent patterns written in Haskell (TidalCycles) and Python (TidalVortex), and relate implementation details of how functional reactive paradigms have translated from the pure functional, strongly typed Haskell to the more multi-paradigm, dynamically typed Python. Finally, we conclude with reflections and generalisable outcomes.},", - " urldate = {2022-04-14},", - " collaborator = {McLean, Alex and Forment, Raphaël and Le Beux, Sylvain and Silvani, Damián},", - " month = apr,", - " year = {2022},", - "}", - "" - ], - "csl": { - "URL": "https://zenodo.org/record/6456380", - "abstract": "In this paper we introduce “version zero” of TidalVortex, an alternative implementation of the TidalCycles live coding system, using the Python programming language.  This is open-ended work, exploring what happens when we try to extract the ’essence’ of a system like TidalCycles and translate it into another programming language, while taking advantage of the affordance of its new host. First, we review the substantial prior art in porting TidalCycles, and in representing musical patterns in Python. We then compare equivalent patterns written in Haskell (TidalCycles) and Python (TidalVortex), and relate implementation details of how functional reactive paradigms have translated from the pure functional, strongly typed Haskell to the more multi-paradigm, dynamically typed Python. Finally, we conclude with reflections and generalisable outcomes.", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 14 - ] - ] - }, - "id": "https://zenodo.org/record/6456380", - "issued": { - "date-parts": [ - [ - 2022, - 4 - ] - ] - }, - "publisher-place": "Limerick, Ireland", - "title": "TidalVortex Zero", - "type": "" - } - }, - "https://zenodo.org/record/4299661": { - "fetched": "2022-04-15T07:40:08.702Z", - "bibtex": [ - "", - "@misc{mclean_algorithmic_2020,", - " address = {Birmingham UK},", - " title = {Algorithmic {Pattern}},", - " url = {https://zenodo.org/record/4299661},", - " abstract = {This paper brings together two main perspectives on algorithmic pattern. First, the writing of musical patterns in live coding performance, and second, the weaving of patterns in textiles. In both cases, algorithmic pattern is an interface between the human and the outcome, where small changes have far-reaching impact on the results. By bringing contemporary live coding and ancient textile approaches together, we reach a common view of pattern as algorithmic movement (e.g. looping, shifting, reflecting, interfering) in the making of things. This works beyond the usual definition of pattern used in musical interfaces, of mere repeating sequences. We conclude by considering the place of algorithmic pattern in a wider activity of making.},", - " urldate = {2022-04-15},", - " collaborator = {McLean, Alex},", - " month = jul,", - " year = {2020},", - " keywords = {pattern, tidalcycles, algorithmic music, textiles, live coding, algorave},", - "}", - "" - ], - "csl": { - "URL": "https://zenodo.org/record/4299661", - "abstract": "This paper brings together two main perspectives on algorithmic pattern. First, the writing of musical patterns in live coding performance, and second, the weaving of patterns in textiles. In both cases, algorithmic pattern is an interface between the human and the outcome, where small changes have far-reaching impact on the results. By bringing contemporary live coding and ancient textile approaches together, we reach a common view of pattern as algorithmic movement (e.g. looping, shifting, reflecting, interfering) in the making of things. This works beyond the usual definition of pattern used in musical interfaces, of mere repeating sequences. We conclude by considering the place of algorithmic pattern in a wider activity of making.", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 15 - ] - ] - }, - "id": "https://zenodo.org/record/4299661", - "issued": { - "date-parts": [ - [ - 2020, - 7 - ] - ] - }, - "keyword": "pattern, tidalcycles, algorithmic music, textiles, live coding, algorave", - "publisher-place": "Birmingham UK", - "title": "Algorithmic Pattern", - "type": "" - } - }, - "https://quod.lib.umich.edu/i/icmc/bbp2372.2012.011/2/–gibber-live-coding-audio-in-the-browser?page=root;size=150;view=text": { - "fetched": "2022-04-15T07:40:15.037Z", - "bibtex": [ - "", - "@article{charlie_gibber:_2012,", - " title = {{GIBBER}: {LIVE} {CODING} {AUDIO} {IN} {THE} {BROWSER}},", - " volume = {2012},", - " issn = {2223-3881},", - " url = {https://quod.lib.umich.edu/i/icmc/bbp2372.2012.011/2/%E2%80%93gibber-live-coding-audio-in-the-browser?page=root;size=150;view=text},", - " language = {en},", - " urldate = {2022-04-15},", - " journal = {International Computer Music Conference Proceedings},", - " author = {Charlie, , Roberts and Joann, , Kuchera-Morin},", - " year = {2012},", - "}", - "" - ], - "csl": { - "ISSN": "2223-3881", - "URL": "https://quod.lib.umich.edu/i/icmc/bbp2372.2012.011/2/%E2%80%93gibber-live-coding-audio-in-the-browser?page=root;size=150;view=text", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 15 - ] - ] - }, - "author": [ - { - "family": "Charlie", - "given": "Roberts" - }, - { - "family": "Joann", - "given": "Kuchera-Morin" - } - ], - "container-title": "International Computer Music Conference Proceedings", - "id": "https://quod.lib.umich.edu/i/icmc/bbp2372.2012.011/2/–gibber-live-coding-audio-in-the-browser?page_x61_root;size_x61_150;view_x61_text", - "issued": { - "date-parts": [ - [ - 2012 - ] - ] - }, - "title": "GIBBER: LIVE CODING AUDIO IN THE BROWSER", - "title-short": "GIBBER", - "type": "article-journal", - "volume": "2012" - } - }, - "https://www.semanticscholar.org/paper/Estuary%3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b": { - "fetched": "2022-04-15T07:40:17.179Z", - "bibtex": [ - "", - "@misc{ogborn_estuary:_2017,", - " title = {Estuary: {Browser}-based {Collaborative} {Projectional} {Live} {Coding} of {Musical} {Patterns}},", - " shorttitle = {Estuary},", - " url = {https://www.semanticscholar.org/paper/Estuary%3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b},", - " abstract = {Estuary is a browser-based collaborative projectional editing environment built on top of the popular TidalCycles language for the live coding of musical pattern that includes a strict form of structure editing, a click-only border-free approach to interface design, and explicit notations to modulate the liveness of different parts of the code. This paper describes the initial design and development of Estuary, a browser-based collaborative projectional editing environment built on top of the popular TidalCycles language for the live coding of musical pattern. Key features of Estuary include a strict form of structure editing (making syntactical errors impossible), a click-only border-free approach to interface design, explicit notations to modulate the liveness of different parts of the code, and a server-based network collaboration system that can be used for many simultaneous collaborative live coding performances, as well as to present different views of the same live coding activity. Estuary has been developed using Reflex-DOM, a Haskell-based framework for web development whose strictness promises robustness and security advantages.},", - " language = {en},", - " urldate = {2022-04-15},", - " journal = {www.semanticscholar.org},", - " author = {Ogborn, David and Beverley, J.},", - " year = {2017},", - "}", - "" - ], - "csl": { - "URL": "https://www.semanticscholar.org/paper/Estuary%3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b", - "abstract": "Estuary is a browser-based collaborative projectional editing environment built on top of the popular TidalCycles language for the live coding of musical pattern that includes a strict form of structure editing, a click-only border-free approach to interface design, and explicit notations to modulate the liveness of different parts of the code. This paper describes the initial design and development of Estuary, a browser-based collaborative projectional editing environment built on top of the popular TidalCycles language for the live coding of musical pattern. Key features of Estuary include a strict form of structure editing (making syntactical errors impossible), a click-only border-free approach to interface design, explicit notations to modulate the liveness of different parts of the code, and a server-based network collaboration system that can be used for many simultaneous collaborative live coding performances, as well as to present different views of the same live coding activity. Estuary has been developed using Reflex-DOM, a Haskell-based framework for web development whose strictness promises robustness and security advantages.", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 15 - ] - ] - }, - "author": [ - { - "family": "Ogborn", - "given": "David" - }, - { - "family": "Beverley", - "given": "J." - } - ], - "container-title": "www.semanticscholar.org", - "id": "https://www.semanticscholar.org/paper/Estuary_x37_3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b", - "issued": { - "date-parts": [ - [ - 2017 - ] - ] - }, - "title": "Estuary: Browser-based Collaborative Projectional Live Coding of Musical Patterns", - "title-short": "Estuary", - "type": "" - } - }, - "https://zenodo.org/record/6353969": { - "fetched": "2022-04-15T07:40:20.966Z", - "bibtex": [ - "", - "@misc{mclean_feedforward_2020,", - " address = {Birmingham},", - " title = {Feedforward},", - " url = {https://zenodo.org/record/6353969},", - " abstract = {This is an improvised, from-scratch live coding performance. The NIME interface which this performance showcases is the new Feedfoward editor for the TidalCycles live coding environment. Feedforward is written in Haskell using the ncurses library for terminal-based user interfaces. It runs on low-powered hardware including the Raspberry Pi Zero, with formative testing of prototypes conducted with several groups of children between the ages of 8 and 14. Feedforward has a number of features designed to support improvised, multi-pattern live coding. Individual Tidal patterns are addressable with hotkeys for fast mute and unmuting. Each pattern has a stereo VU meter, to aid the quick matching of sound to pattern within a mix. In addition, TidalCycles has been extended to store context with each event, so that source code positions in its polyrhythmic sequence mini-notation are tracked. This allows steps to be highlighted in the source code when- ever they are active. This works even when Tidal combinators have been applied to manipulate the timeline. Formal evaluation has yet to take place, but this feature appears to support learning of how pattern manipulations work in Tidal. Feedforward and TidalCycles is free/open source software under a GPL licence version 3.0.},", - " urldate = {2022-04-15},", - " collaborator = {McLean, Alex},", - " month = jul,", - " year = {2020},", - "}", - "" - ], - "csl": { - "URL": "https://zenodo.org/record/6353969", - "abstract": "This is an improvised, from-scratch live coding performance. The NIME interface which this performance showcases is the new Feedfoward editor for the TidalCycles live coding environment. Feedforward is written in Haskell using the ncurses library for terminal-based user interfaces. It runs on low-powered hardware including the Raspberry Pi Zero, with formative testing of prototypes conducted with several groups of children between the ages of 8 and 14. Feedforward has a number of features designed to support improvised, multi-pattern live coding. Individual Tidal patterns are addressable with hotkeys for fast mute and unmuting. Each pattern has a stereo VU meter, to aid the quick matching of sound to pattern within a mix. In addition, TidalCycles has been extended to store context with each event, so that source code positions in its polyrhythmic sequence mini-notation are tracked. This allows steps to be highlighted in the source code when- ever they are active. This works even when Tidal combinators have been applied to manipulate the timeline. Formal evaluation has yet to take place, but this feature appears to support learning of how pattern manipulations work in Tidal. Feedforward and TidalCycles is free/open source software under a GPL licence version 3.0.", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 15 - ] - ] - }, - "id": "https://zenodo.org/record/6353969", - "issued": { - "date-parts": [ - [ - 2020, - 7 - ] - ] - }, - "publisher-place": "Birmingham", - "title": "Feedforward", - "type": "" - } - }, - "https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.72.1340": { - "fetched": "2022-04-24T21:09:16.724Z", - "bibtex": [ - "", - "@inproceedings{toussaint_euclidean_2005,", - " title = {The {Euclidean} algorithm generates traditional musical rhythms},", - " url = {https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.72.1340},", - " abstract = {The Euclidean algorithm (which comes down to us from Euclid’s Elements) computes the greatest common divisor of two given integers. It is shown here that the structure of the Euclidean algorithm may be used to automatically generate, very efficiently, a large family of rhythms used as timelines (rhythmic ostinatos), in traditional world music. These rhythms, here dubbed Euclidean rhythms, have the property that their onset patterns are distributed as evenly as possible in a mathematically precise sense, and optimal manner. Euclidean rhythms are closely related to the family of Aksak rhythms studied by ethnomusicologists, and occur in a wide variety of other disciplines as well. For example they characterize algorithms for drawing digital straight lines in computer graphics, as well as algorithms for calculating leap years in calendar design. Euclidean rhythms also find application in nuclear physics accelerators and in computer science, and are closely related to several families of words and sequences of interest in the study of the combinatorics of words, such as mechanical words, Sturmian words, two-distance sequences, and Euclidean strings, to which the Euclidean rhythms are compared. 1.},", - " urldate = {2022-04-24},", - " booktitle = {In {Proceedings} of {BRIDGES}: {Mathematical} {Connections} in {Art}, {Music} and {Science}},", - " author = {Toussaint, Godfried},", - " year = {2005},", - " pages = {47--56},", - "}", - "" - ], - "csl": { - "URL": "https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.72.1340", - "abstract": "The Euclidean algorithm (which comes down to us from Euclid’s Elements) computes the greatest common divisor of two given integers. It is shown here that the structure of the Euclidean algorithm may be used to automatically generate, very efficiently, a large family of rhythms used as timelines (rhythmic ostinatos), in traditional world music. These rhythms, here dubbed Euclidean rhythms, have the property that their onset patterns are distributed as evenly as possible in a mathematically precise sense, and optimal manner. Euclidean rhythms are closely related to the family of Aksak rhythms studied by ethnomusicologists, and occur in a wide variety of other disciplines as well. For example they characterize algorithms for drawing digital straight lines in computer graphics, as well as algorithms for calculating leap years in calendar design. Euclidean rhythms also find application in nuclear physics accelerators and in computer science, and are closely related to several families of words and sequences of interest in the study of the combinatorics of words, such as mechanical words, Sturmian words, two-distance sequences, and Euclidean strings, to which the Euclidean rhythms are compared. 1.", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 24 - ] - ] - }, - "author": [ - { - "family": "Toussaint", - "given": "Godfried" - } - ], - "container-title": "In Proceedings of BRIDGES: Mathematical Connections in Art, Music and Science", - "id": "https://citeseerx.ist.psu.edu/viewdoc/summary?doi_x61_10.1.1.72.1340", - "issued": { - "date-parts": [ - [ - 2005 - ] - ] - }, - "page": "47-56", - "title": "The Euclidean algorithm generates traditional musical rhythms", - "type": "paper-conference" - } - }, - "https://webaudioconf.com/posts/2021_8/": { - "fetched": "2022-04-24T21:14:10.409Z", - "bibtex": [ - "", - "@misc{noauthor_wac_nodate,", - " title = {{WAC} {\\textbar} {Glicol}: {A} {Graph}-oriented {Live} {Coding} {Language} {Developed} with {Rust}, {WebAssembly} and {AudioWorklet}},", - " url = {https://webaudioconf.com/posts/2021_8/},", - " urldate = {2022-04-24},", - " journal = {webaudioconf.com},", - "}", - "" - ], - "csl": { - "URL": "https://webaudioconf.com/posts/2021_8/", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 24 - ] - ] - }, - "container-title": "webaudioconf.com", - "id": "https://webaudioconf.com/posts/2021_8/", - "title": "WAC Glicol: A Graph-oriented Live Coding Language Developed with Rust, WebAssembly and AudioWorklet", - "title-short": "WAC Glicol", - "type": "" - } - }, - "https://webaudioconf.com/posts/2019_38/": { - "fetched": "2022-04-24T21:14:46.954Z", - "bibtex": [ - "", - "@misc{noauthor_wac_nodate,", - " title = {{WAC} {\\textbar} {FAUST} online {IDE}: dynamically compile and publish {FAUST} code as {WebAudio} {Plugins}},", - " url = {https://webaudioconf.com/posts/2019_38/},", - " urldate = {2022-04-24},", - " journal = {webaudioconf.com},", - "}", - "" - ], - "csl": { - "URL": "https://webaudioconf.com/posts/2019_38/", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 24 - ] - ] - }, - "container-title": "webaudioconf.com", - "id": "https://webaudioconf.com/posts/2019_38/", - "title": "WAC FAUST online IDE: Dynamically compile and publish FAUST code as WebAudio Plugins", - "title-short": "WAC FAUST online IDE", - "type": "" - } - }, - "https://strudel.tidalcycles.org": { - "fetched": "2022-04-24T21:14:47.822Z", - "bibtex": [ - "", - "@misc{noauthor_strudel_nodate,", - " title = {Strudel {REPL}},", - " url = {https://strudel.tidalcycles.org/},", - " abstract = {Strudel REPL},", - " urldate = {2022-04-24},", - " journal = {strudel.tidalcycles.org},", - "}", - "" - ], - "csl": { - "URL": "https://strudel.tidalcycles.org/", - "abstract": "Strudel REPL", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 24 - ] - ] - }, - "container-title": "strudel.tidalcycles.org", - "id": "https://strudel.tidalcycles.org", - "title": "Strudel REPL", - "type": "" - } - }, - "https://hydra.ojack.xyz/docs/#/": { - "fetched": "2022-04-25T09:03:25.132Z", - "bibtex": [ - "", - "@misc{noauthor_hydra_nodate,", - " title = {Hydra},", - " url = {https://hydra.ojack.xyz/docs/#/},", - " abstract = {Description},", - " urldate = {2022-04-25},", - " journal = {hydra.ojack.xyz},", - "}", - "" - ], - "csl": { - "URL": "https://hydra.ojack.xyz/docs/#/", - "abstract": "Description", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 25 - ] - ] - }, - "container-title": "hydra.ojack.xyz", - "id": "https://hydra.ojack.xyz/docs/_x35_/", - "title": "Hydra", - "type": "" - } - }, - "https://mikesol.github.io/purescript-wags/": { - "fetched": "2022-04-25T09:03:26.456Z", - "bibtex": [ - "", - "@misc{noauthor_wags_nodate,", - " title = {Wags documentation},", - " url = {https://mikesol.github.io/purescript-wags/},", - " urldate = {2022-04-25},", - " journal = {mikesol.github.io},", - "}", - "" - ], - "csl": { - "URL": "https://mikesol.github.io/purescript-wags/", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 25 - ] - ] - }, - "container-title": "mikesol.github.io", - "id": "https://mikesol.github.io/purescript-wags/", - "title": "Wags documentation", - "type": "" - } - }, - "https://github.com/tidalcycles/strudel": { - "fetched": "2022-04-25T09:15:32.518Z", - "bibtex": [ - "", - "@misc{noauthor_strudel_2022,", - " title = {strudel},", - " copyright = {GPL-3.0},", - " url = {https://github.com/tidalcycles/strudel},", - " abstract = {Experimental port of tidalcycles to Javascript},", - " urldate = {2022-04-25},", - " publisher = {TidalCycles},", - " month = apr,", - " year = {2022},", - " note = {original-date: 2022-01-22T20:24:35Z},", - " keywords = {javascript, livecoding, tidal, tidalcycles, algorave, algorithmic-patterns},", - "}", - "" - ], - "csl": { - "URL": "https://github.com/tidalcycles/strudel", - "abstract": "Experimental port of tidalcycles to Javascript", - "accessed": { - "date-parts": [ - [ - 2022, - 4, - 25 - ] - ] - }, - "id": "https://github.com/tidalcycles/strudel", - "issued": { - "date-parts": [ - [ - 2022, - 4 - ] - ] - }, - "keyword": "javascript, livecoding, tidal, tidalcycles, algorave, algorithmic-patterns", - "note": "original-date: 2022-01-22T20:24:35Z", - "publisher": "TidalCycles", - "title": "Strudel", - "type": "" - } - } - } -} \ No newline at end of file diff --git a/paper/citations.json b/paper/citations.json new file mode 100644 index 00000000..1fd923ee --- /dev/null +++ b/paper/citations.json @@ -0,0 +1,930 @@ +[ + {"id":"17PDFCommon","abstract":"ResearchGate is a network dedicated to science and research. Connect, collaborate and discover scientific publications, jobs and conferences. All for free.","accessed":{"date-parts":[[2020,6,29]]},"citation-key":"17PDFCommon","container-title":"ResearchGate","language":"en","source":"www.researchgate.net","title":"(17) (PDF) Common Cause Research Building Research Collaborations between Universities and Black and Minority Ethnic communities","type":"webpage","URL":"https://www.researchgate.net/publication/331873757_Common_Cause_Research_Building_Research_Collaborations_between_Universities_and_Black_and_Minority_Ethnic_communities"}, + {"id":"aaronPrincipledApproachDeveloping2011","abstract":"This paper introduces Improcess, a novel cross-disciplinary collaborative project focussed on the design and development of tools to structure the communication between performer and musical process. We describe a 3-tiered architecture centering around the notion of a Common Music Runtime, a shared platform on top of which inter-operating client interfaces may be combined to form new musical instruments. This approach allows hardware devices such as the monome to act as an extended hardware interface with the same power to initiate and control musical processes as a bespoke programming language. Finally, we reflect on the structure of the collaborative project itself, which of- fers an opportunity to discuss general research strategy for conducting highly sophisticated technical research within a performing arts environment such as the development of a personal regime of preparation for performance.","author":[{"family":"Aaron","given":"Samuel"},{"family":"Blackwell","given":"Alan F."},{"family":"Hoadley","given":"Richard"},{"family":"Regan","given":"Tim"}],"citation-key":"aaronPrincipledApproachDeveloping2011","container-title":"Proceedings of New Interfaces for Musical Expression 2011","issued":{"date-parts":[[2011]]},"page":"381–386","title":"A principled approach to developing new languages for live coding","type":"paper-conference"}, + {"id":"abdullahImpactAgileMethodology2006","abstract":"This paper describes an empirical study, which addresses the aspect of well being amongst members of the software development teams. The question of interest is whether an agile methodology has any distinct effect on the well being of the software developers. Both quantitative and qualitative methods were utilised, including the participative observation, focus group interviews, close-ended questionnaires and simple statistical tests such as Spearman Correlation and Mann—Whitney test. Initial results showed that an agile methodology (XP) has a positive effect on the level of enthusiasm of the software developers in the most dynamic project. To understand why XP can increase enthusiasm, results are interpreted with references to cognitive, affective and managerial properties of the practices studied. This result needs further investigation on the individual effects of each practice on the wellbeing and attitudes of Software Engineering (SE) teams.","author":[{"family":"Abdullah","given":"Sharifah S."},{"family":"Holcombe","given":"Mike"},{"family":"Gheorge","given":"Marian"}],"citation-key":"abdullahImpactAgileMethodology2006","container-title":"Empirical Softw. Engg.","ISSN":"1382-3256","issued":{"date-parts":[[2006,3]]},"page":"143–167","title":"The Impact of an Agile Methodology on the Well Being of Development Teams","type":"article-journal","URL":"http://portal.acm.org/citation.cfm?id=1116160","volume":"11"}, + {"id":"abelsonStructureInterpretationComputer1996","abstract":"Abelson and Sussman's classic Structure and Interpretation of Computer Programs teaches readers how to program by employing the tools of abstraction and modularity. The authors' central philosophy is that programming is the task of breaking large problems into small ones. The book spends a great deal of time considering both this decomposition and the process of knitting the smaller pieces back together.

The authors employ this philosophy in their writing technique. The text asks the broad question \"What is programming?\" Having come to the conclusion that programming consists of procedures and data, the authors set off to explore the related questions of \"What is data?\" and \"What is a procedure?\"

The authors build up the simple notion of a procedure to dizzying complexity. The discussion culminates in the description of the code behind the programming language Scheme. The authors finish with examples of how to implement some of the book's concepts on a register machine. Through this journey, the reader not only learns how to program, but also how to think about programming. This edition available only OUTSIDE the U.S. and Canada","author":[{"family":"Abelson","given":"Harold"},{"family":"Sussman","given":"Gerald J."}],"citation-key":"abelsonStructureInterpretationComputer1996","edition":"Second","ISBN":"0-262-51087-1","issued":{"date-parts":[[1996,9]]},"note":"Published: Paperback","publisher":"The MIT Press","title":"Structure and Interpretation of Computer Programs","type":"book","URL":"http://www.worldcat.org/isbn/0262510871"}, + {"id":"adkinsPostAcousmaticPracticeReevaluating2016","abstract":"This paper posits the notion of the post-acousmatic. The authors consider the work of contemporary practitioners who are indebted to the Schaefferian heritage, but pursue alternative trajectories from the established canonical discourse of acousmatic music. The paper will outline the authors’ definition of the term and outline a network of elements such as time, rhythm, pitch, dynamics, noise and performance to discuss work that the authors’ consider to be a critique, an augmentation and an outgrowth of acousmatic music and thinking.","accessed":{"date-parts":[[2022,1,20]]},"author":[{"family":"Adkins","given":"Monty"},{"family":"Scott","given":"Richard"},{"family":"Tremblay","given":"Pierre Alexandre"}],"citation-key":"adkinsPostAcousmaticPracticeReevaluating2016","container-title":"Organised Sound","ISSN":"1355-7718","issue":"02","issued":{"date-parts":[[2016,8,1]]},"language":"en","number":"02","page":"106-116","publisher":"Cambridge University Press","source":"eprints.hud.ac.uk","title":"Post-Acousmatic Practice: Re-evaluating Schaeffer’s heritage","title-short":"Post-Acousmatic Practice","type":"article-journal","URL":"http://dx.doi.org/10.1017/S1355771816000030","volume":"21"}, + {"id":"administrationStaff2010","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Administration","given":"C. P. R."}],"citation-key":"administrationStaff2010","issued":{"date-parts":[[2010,3,16]]},"language":"en","publisher":"University of Copenhagen","title":"Staff","type":"webpage","URL":"https://research.ku.dk/search/result/?pure=da/publications/borders-in-ancient-weaving-and-archaic-greek-poetry(0d8814da-959c-40cc-80cf-ac0b2d5d1612)/export.html"}, + {"id":"adminSearch2007","accessed":{"date-parts":[[2017,3,21]]},"author":[{"family":"Admin","given":""}],"citation-key":"adminSearch2007","issued":{"date-parts":[[2007,4,26]]},"language":"en","title":"Search","type":"webpage","URL":"http://research.ku.dk/search/?pure=en/publications/borders-in-ancient-weaving-and-archaic-greek-poetry(0d8814da-959c-40cc-80cf-ac0b2d5d1612)/export.html"}, + {"id":"agawuRepresentingAfricanMusic2003","author":[{"family":"Agawu","given":"Kofi"}],"citation-key":"agawuRepresentingAfricanMusic2003","edition":"First","ISBN":"0-415-94390-6","issued":{"date-parts":[[2003,5]]},"note":"Published: Paperback","publisher":"Routledge","title":"Representing African Music: Postcolonial Notes, Queries, Positions","type":"book","URL":"http://www.worldcat.org/isbn/0415943906"}, + {"id":"agawuStructuralAnalysisCultural2006","abstract":"Abstract. Polyrhythmic dance compositions from West Africa typically feature an ostinato bell pattern known as a time line. Timbrally distinct, asymmetrical in structure, and aurally prominent, time lines have drawn comment from scholars as keys to understanding African rhythm. This article focuses on the best known and most widely distributed of these, the so-called standard pattern, a seven-stroke figure spanning twelve eighth notes and disposed durationally as <2212221>. Observations about structure (including its internal dynamic, metrical potential, and rotational properties) are juxtaposed with a putative African-cultural understanding (inferred from the firm place of dance in the culture, patterns of verbal discourse, and a broad set of social values) in order to further illuminate the nature of African rhythm, foster dialogue between structural and cultural perspectives, and thereby contribute implicitly to the methodology of cross-cultural analysis.","accessed":{"date-parts":[[2021,1,25]]},"author":[{"family":"Agawu","given":"Kofi"}],"citation-key":"agawuStructuralAnalysisCultural2006","container-title":"Journal of the American Musicological Society","container-title-short":"Journal of the American Musicological Society","DOI":"10.1525/jams.2006.59.1.1","ISSN":"0003-0139","issue":"1","issued":{"date-parts":[[2006,4,1]]},"language":"en","page":"1-46","publisher":"University of California Press","source":"online.ucpress.edu","title":"Structural Analysis or Cultural Analysis? Competing Perspectives on the “Standard Pattern” of West African Rhythm","title-short":"Structural Analysis or Cultural Analysis?","type":"article-journal","URL":"/jams/article/59/1/1/50100/Structural-Analysis-or-Cultural-Analysis-Competing","volume":"59"}, + {"id":"agreCriticalTechnicalPractice1997","author":[{"family":"Agre","given":"Philip E."}],"citation-key":"agreCriticalTechnicalPractice1997","container-title":"Social Science, Technical Systems, and Cooperative Work: Beyond the Great Divide (Computers, Cognition and Work Series)","editor":[{"family":"Bowker","given":"Geoffrey"},{"family":"Star","given":"Susan L."},{"family":"Gasser","given":"Les"},{"family":"Turner","given":"William"}],"ISBN":"0-8058-2403-0","issued":{"date-parts":[[1997,7]]},"note":"Published: Paperback","publisher":"Psychology Press","title":"Toward a Critical Technical Practice: Lessons Learned in Trying to Reform AI","type":"chapter","URL":"http://www.worldcat.org/isbn/0805824030"}, + {"id":"agrellVoronoibasedCoding1997","author":[{"family":"Agrell","given":"Erik"}],"citation-key":"agrellVoronoibasedCoding1997","issued":{"date-parts":[[1997]]},"title":"Voronoi-based coding","type":"thesis"}, + {"id":"ahujaExtractionEarlyPerceptual1989","author":[{"family":"Ahuja","given":"N."},{"family":"Tuceryan","given":"M."}],"citation-key":"ahujaExtractionEarlyPerceptual1989","container-title":"Comput. Vision Graph. Image Process.","issue":"3","issued":{"date-parts":[[1989]]},"page":"304–356","title":"Extraction of early perceptual structure in dot patterns: integrating region, boundary, and component gestalt","type":"article-journal","volume":"48"}, + {"id":"al-jazariBookKnowledgeIngenious850","author":[{"family":"Jazari","given":"Ismail","non-dropping-particle":"al-"}],"citation-key":"al-jazariBookKnowledgeIngenious850","event-place":"Baghdad, Iraq","issued":{"date-parts":[[850]]},"number-of-pages":"311","publisher":"House of Wisdom","publisher-place":"Baghdad, Iraq","title":"The Book of Knowledge of Ingenious Mechanical Devices","type":"book"}, + {"id":"albersWeavingNewExpanded2017","abstract":"The classic book on the art and history of weaving—now expanded and in full colorWritten by one of the twentieth century’s leading textile artists, this splendidly illustrated book is a luminous meditation on the art of weaving, its history, its tools and techniques, and its implications for modern design. First published in 1965, On Weaving bridges the transition between handcraft and the machine-made, highlighting the essential importance of material awareness and the creative leaps that can occur when design problems are tackled by hand.With her focus on materials and handlooms, Anni Albers discusses how technology and mass production place limits on creativity and problem solving, and makes the case for a renewed embrace of human ingenuity that is particularly important today. Her lucid and engaging prose is illustrated with a wealth of rare and extraordinary images showing the history of the medium, from hand-drawn diagrams and close-ups of pre-Columbian textiles to material studies with corn, paper, and the typewriter, as well as illuminating examples of her own work.Now available for a new generation of readers, this expanded edition of On Weaving updates the book’s original black-and-white illustrations with full-color photos, and features an afterword by Nicholas Fox Weber and essays by Manuel Cirauqui and T’ai Smith that shed critical light on Albers and her career.","author":[{"family":"Albers","given":"Anni"}],"citation-key":"albersWeavingNewExpanded2017","ISBN":"978-1-4008-8904-4","issued":{"date-parts":[[2017,10,24]]},"language":"en","number-of-pages":"273","publisher":"Princeton University Press","source":"Google Books","title":"On Weaving: New Expanded Edition","title-short":"On Weaving","type":"book"}, + {"id":"alexanderPatternLanguageTowns1977","abstract":"The second of three books published by the Center for Environmental Structureto provide a \"working alternative to our present ideas about architecture,building, and planning,\" _A Pattern Language_ offers a practical language forbuilding and planning based on natural considerations. The reader is given anoverview of some 250 patterns that are the units of this language, eachconsisting of a design problem, discussion, illustration, and solution. Byunderstanding recurrent design problems in our environment, readers canidentify extant patterns in their own design projects and use these patternsto create a language of their own. Extraordinarily thorough, coherent, andaccessible, this book has become a bible for homebuilders, contractors, anddevelopers who care about creating healthy, high-level design.","author":[{"family":"Alexander","given":"Christopher"},{"family":"Ishikawa","given":"Sara"},{"family":"Silverstein","given":"Murray"}],"citation-key":"alexanderPatternLanguageTowns1977","edition":"First","ISBN":"0-19-501919-9","issued":{"date-parts":[[1977,8]]},"note":"Published: Hardcover","publisher":"Oxford University Press","title":"A Pattern Language: Towns, Buildings, Construction","type":"book","URL":"http://www.worldcat.org/isbn/0195019199"}, + {"id":"alexanderQuickviewSoftwareArt2003","author":[{"family":"Alexander","given":"Amy"},{"family":"Cramer","given":"Florian"},{"family":"Fuller","given":"Matthew"},{"family":"Kaulmann","given":"Thomax"},{"family":"McLean","given":"Alex"},{"family":"Schultz","given":"Pit"},{"family":"Men","given":"The Yes"}],"citation-key":"alexanderQuickviewSoftwareArt2003","container-title":"read_me 2.3 reader","editor":[{"family":"Goriunova","given":"Olga"},{"family":"Shulgin","given":"Alexei"}],"issued":{"date-parts":[[2003]]},"publisher":"NIFCA","title":"Quickview on Software Art","type":"chapter"}, + {"id":"allanMethodologicalConsiderationsStudies2007","author":[{"family":"Allan","given":"Hamish"},{"family":"Mullensiefen","given":"Daniel"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"allanMethodologicalConsiderationsStudies2007","container-title":"8th International Conference on Music Information Retrieval","issued":{"date-parts":[[2007]]},"title":"Methodological considerations in studies of musical similarity","type":"paper-conference"}, + {"id":"allenGettingThingsDone2002","abstract":"With first-chapter allusions to martial arts, \"flow,\" \"mind like water,\" and other concepts borrowed from the East (and usually mangled), you'd almost think this self-helper from David Allen should have been called Zen and the Art of Schedule Maintenance.

Not quite. Yes, Getting Things Done offers a complete system for downloading all those free-floating gotta-do's clogging your brain into a sophisticated framework of files and action lists–all purportedly to free your mind to focus on whatever you're working on. However, it still operates from the decidedly Western notion that if we could just get really, really organized, we could turn ourselves into 24/7 productivity machines. (To wit, Allen, whom the New Economy bible Fast Company has dubbed \"the personal productivity guru,\" suggests that instead of meditating on crouching tigers and hidden dragons while you wait for a plane, you should unsheathe that high-tech saber known as the cell phone and attack that list of calls you need to return.)

As whole-life-organizing systems go, Allen's is pretty good, even fun and therapeutic. It starts with the exhortation to take every unaccounted-for scrap of paper in your workstation that you can't junk, The next step is to write down every unaccounted-for gotta-do cramming your head onto its own scrap of paper. Finally, throw the whole stew into a giant \"in-basket\"

That's where the processing and prioritizing begin; in Allen's system, it get a little convoluted at times, rife as it is with fancy terms, subterms, and sub-subterms for even the simplest concepts. Thank goodness the spine of his system is captured on a straightforward, one-page flowchart that you can pin over your desk and repeatedly consult without having to refer back to the book. That alone is worth the purchase price. Also of value is Allen's ingenious Two-Minute Rule: if there's anything you absolutely must do that you can do right now in two minutes or less, then do it now, thus freeing up your time and mind tenfold over the long term. It's commonsense advice so obvious that most of us completely overlook it, much to our detriment; Allen excels at dispensing such wisdom in this useful, if somewhat belabored, self-improver aimed at everyone from CEOs to soccer moms (who we all know are more organized than most CEOs to start with). –Timothy Murphy

In today's world of exponentially increased communication and responsibility, yesterday's methods for staying on top just don't work.

Veteran management consultant and trainer David Allen recognizes that \"time management\" is useless the minute your schedule is interrupted; \"setting priorities\" isn't relevant when your email is down; \"procrastination solutions\" won't help if your goals aren't clear.

Allen's premise is simple: our ability to be productive is directly proportional to our ability to relax. Only when our minds are clear and our thoughts are organized can we achieve stress-free productivity and unleash our creative potential. He teaches us how to:

  • Apply the \"do it, delegate it, defer it, drop it\" rule to get your in-box empty
  • Reassess goals and stay focused in changing situations
  • Overcome feelings of confusion, anxiety, and being overwhelmed
  • Feel fine about what you're not doing

From core principles to proven tricks, Getting Things Done has the potential to transform the way you work – and the way you experience work. At any level of implementation, David Allen's entertaining and thought-provoking advice shows you how to pick up the pace without wearing yourself down. \"\"\"The personal productivity guru\"\" (Fast Company) delivers powerful methods that vastly increase your efficiency and creative results-at work and in life In today's world, yesterday's methods just don't work. In Getting Things Done, veteran coach and management consultant David Allen shares the breakthrough methods for stress-free performance that he has introduced to tens of thousands of people across the country. Allen's premise is simple: our productivity is directly proportional to our ability to relax. Only when our minds are clear and our thoughts are organized can we achieve effective productivity and unleash our creative potential. In Getting Things Done Allen shows how to: Apply the \"\"do it, delegate it, defer it, drop it\"\" rule to get your in-box to empty Reassess goals and stay focused in changing situations Plan projects as well as get them unstuck Overcome feelings of confusion, anxiety, and being overwhelmed Feel fine about what you're not doing From core principles to proven tricks, Getting Things Done can transform the way you work, showing you how to pick up the pace without wearing yourself down.\"","author":[{"family":"Allen","given":"David"}],"citation-key":"allenGettingThingsDone2002","ISBN":"0-7499-2264-8","issued":{"date-parts":[[2002,1]]},"note":"Published: Paperback","publisher":"Piatkus Books","title":"Getting Things Done: The Art of Stress-free Productivity","type":"book","URL":"http://www.worldcat.org/isbn/0749922648"}, + {"id":"allenTextSpeechMITalk1987","author":[{"family":"Allen","given":"Jonathan"},{"family":"Hunnicutt","given":"Sharon M."},{"family":"Klatt","given":"Dennis"}],"citation-key":"allenTextSpeechMITalk1987","issued":{"date-parts":[[1987]]},"publisher":"Cambridge","title":"From Text to Speech: The MITalk System","type":"book"}, + {"id":"allisonLazyDynamicprogrammingCan1992","author":[{"family":"Allison","given":"L."}],"citation-key":"allisonLazyDynamicprogrammingCan1992","container-title":"Inf. Process. Lett.","issue":"4","issued":{"date-parts":[[1992]]},"page":"207–212","title":"Lazy dynamic-programming can be eager","type":"article-journal","URL":"http://portal.acm.org/citation.cfm?id=144268.144290","volume":"43"}, + {"id":"amabileCreativityContext1996","author":[{"family":"Amabile","given":"Teresa M."}],"citation-key":"amabileCreativityContext1996","ISBN":"0-8133-3034-3","issued":{"date-parts":[[1996,6]]},"note":"Published: Paperback","publisher":"Westview Press","title":"Creativity In Context","type":"book","URL":"http://www.worldcat.org/isbn/0813330343"}, + {"id":"andersenInterfaceCriticismAesthetics2011","citation-key":"andersenInterfaceCriticismAesthetics2011","editor":[{"family":"Andersen","given":"Christian U."},{"family":"Pold","given":"Søren B."}],"ISBN":"87-7934-504-2","issued":{"date-parts":[[2011,5]]},"note":"Published: Paperback","publisher":"Aarhus University Press","title":"Interface Criticism: Aesthetics Beyond Buttons","type":"book","URL":"http://www.worldcat.org/isbn/8779345042"}, + {"id":"andersenLiveCodingSlub2007","author":[{"family":"Andersen","given":"Christian U."}],"citation-key":"andersenLiveCodingSlub2007","container-title":"Proceedings of Society for Literature, Science and the Arts (SLSA) 2007","issued":{"date-parts":[[2007]]},"title":"The Live Coding of Slub - Art Oriented Programming as Media Critique","type":"paper-conference"}, + {"id":"andersonFormulaProgrammingLanguage1991","author":[{"family":"Anderson","given":"David P."},{"family":"Kuivila","given":"Ron"}],"citation-key":"andersonFormulaProgrammingLanguage1991","container-title":"Computer","issue":"7","issued":{"date-parts":[[1991]]},"page":"12–21","title":"Formula: A Programming Language for Expressive Computer Music","type":"article-journal","volume":"24"}, + {"id":"andrewsRealDJsCode2006","author":[{"family":"Andrews","given":"Robert"}],"citation-key":"andrewsRealDJsCode2006","issued":{"date-parts":[[2006]]},"title":"Real DJs Code Live","type":"book","URL":"http://wired.com/"}, + {"id":"angelovaDesignWeavePatterns2017","abstract":"This study aims to present a novel approach in creation of new patterns for woven textiles, which is based on musical scores. Such a design method has not been presented in the literature. It is based on the similarity between the music notation and the 2D coding of woven patterns. Theoretical and practical details on application of the design method are discussed. Weave patterns, based on famous musical pieces, are presented together with exemplary color designs. The four ‘musical’ patterns and their color designs could be considered as successful first attempts that open up additional opportunities for design and production of original, unique fabrics.","accessed":{"date-parts":[[2020,3,3]]},"author":[{"family":"Angelova","given":"Radostina A."}],"citation-key":"angelovaDesignWeavePatterns2017","container-title":"The Journal of The Textile Institute","DOI":"10.1080/00405000.2016.1195541","ISSN":"0040-5000","issue":"5","issued":{"date-parts":[[2017,5,4]]},"note":"_eprint: https://doi.org/10.1080/00405000.2016.1195541","page":"870-876","publisher":"Taylor & Francis","source":"Taylor and Francis+NEJM","title":"Design of weave patterns: when engineering textiles meets music","title-short":"Design of weave patterns","type":"article-journal","URL":"https://doi.org/10.1080/00405000.2016.1195541","volume":"108"}, + {"id":"antoniolAnalyzingCloningEvolution2002","abstract":"Identifying code duplication in large multi-platform software systems is a challenging problem. This is due to a variety of reasons including the presence of high-level programming languages and structures interleaved with hardware-dependent low-level resources and assembler code, the use of GUI-based configuration scripts generating commands to compile the system, and the extremely high number of possible different configurations. This paper studies the extent and the evolution of code duplications in the Linux kernel. Linux is a large, multi-platform software system; it is based on the Open Source concept, and so there are no obstacles in discussing its implementation. In addition, it is decidedly too large to be examined manually: the current Linux kernel release (2.4.18) is about three million LOCs. Nineteen releases, from 2.4.0 to 2.4.18, were processed and analyzed, identifying code duplication among Linux subsystems by means of a metric-based approach. The obtained results support the hypothesis that the Linux system does not contain a relevant fraction of code duplication. Furthermore, code duplication tends to remain stable across releases, thus suggesting a fairly stable structure, evolving smoothly without any evidence of degradation.","author":[{"family":"Antoniol","given":"G."}],"citation-key":"antoniolAnalyzingCloningEvolution2002","container-title":"Information and Software Technology","DOI":"10.1016/s0950-5849(02)00123-4","ISSN":"09505849","issue":"13","issued":{"date-parts":[[2002,10]]},"page":"755–765","title":"Analyzing cloning evolution in the Linux kernel","type":"article-journal","URL":"http://dx.doi.org/10.1016/s0950-5849(02)00123-4","volume":"44"}, + {"id":"argyrisOrganizationalLearningTheory","author":[{"family":"Argyris","given":"Chris"},{"family":"Schon","given":"Donald A."}],"citation-key":"argyrisOrganizationalLearningTheory","ISBN":"0-201-00174-8","note":"Published: Paperback","publisher":"Addison-Wesley","title":"Organizational Learning: A Theory of Action Perspective (Addison-Wesley Series on Organization Development.)","type":"book","URL":"http://www.worldcat.org/isbn/0201001748"}, + {"id":"armitageSilentMetronome2015","author":[{"family":"Armitage","given":"Joanne"},{"family":"Ng","given":"Kia"},{"family":"McLean","given":"Alex"}],"citation-key":"armitageSilentMetronome2015","container-title":"Proceedings of the 1st International Conference on Live Coding","issued":{"date-parts":[[2015]]},"title":"Silent Metronome","type":"paper-conference"}, + {"id":"armitageSpacesFailNegotiating2018","abstract":"Algorave presents itself as a community that is open and accessible to all, yet historically, there has been a lack of diversity on both the stage and dance floor. Through womenonly workshops, mentoring and other efforts at widening participation, the number of women performing at algorave events has increased. Grounded in existing research in feminist technology studies, computing education and gender and electronic music, this article unpacks how techno, social and cultural structures have gendered algorave. These ideas will be elucidated through a series of interviews with women participating in the algorave community, to centrally argue that gender significantly impacts an individual’s ability to engage and interact within the algorave community. I will also consider how live coding, as an embodied techno-social form, is represented at events and hypothesise as to how it could grow further as an inclusive and feminist practice.","author":[{"family":"Armitage","given":"Joanne"}],"citation-key":"armitageSpacesFailNegotiating2018","container-title":"Dancecult","container-title-short":"Dancecult","DOI":"10.12801/1947-5403.2018.10.01.02","issued":{"date-parts":[[2018,11,22]]},"page":"31-45","source":"ResearchGate","title":"Spaces to Fail in: Negotiating Gender, Community and Technology in Algorave","title-short":"Spaces to Fail in","type":"article-journal","volume":"10"}, + {"id":"arnsReadMeRun2004","author":[{"family":"Arns","given":"Inke"}],"citation-key":"arnsReadMeRun2004","container-title":"Read_me Software Art and Cultures","editor":[{"family":"Goriunova","given":"Olga"},{"family":"Shulgin","given":"Alexei"}],"issued":{"date-parts":[[2004]]},"page":"177–188","title":"Read_me, run_me, execute_me. Code as Executable Text: Software Art and its Focus on Program Code as Performative Text","type":"paper-conference"}, + {"id":"atkinsonExploringPerceptualCharacteristics2007","abstract":"Introduction. Previous research has not taken account of the possibility that deaf people will show greater heterogeneity in how they experience voice-hallucinations due to individual differences in experience with language and residual hearing. This study aims to explore how deaf participants perceive voice-hallucinations and whether the perceptual characteristics reported reflect individual experience with language and sensory input. Method. A statement-sorting task generated data about perceptual characteristics of voice-hallucinations for exploratory factor analysis. The sample included 27 deaf participants with experience of voice-hallucinations, and a range of hearing loss and language backgrounds. Results. Perceptual characteristics of voice-hallucinations map closely onto individual auditory experience. People born profoundly deaf loaded onto nonauditory factors. Deaf people with experience of hearing speech, through residual hearing, hearing aids, or predeafness experience, reported auditory features or uncertainty about mode of perception. Conclusions. This is the first study to systematically explore voice-hallucinations in deaf people and to advance a model of subvocal articulation to account for such counterintuitive phenomena.","author":[{"family":"Atkinson","given":"Joanna R."},{"family":"Gleeson","given":"Kate"},{"family":"Cromwell","given":"Jim"},{"family":"O'Rourke","given":"Sue"}],"citation-key":"atkinsonExploringPerceptualCharacteristics2007","container-title":"Cognitive Neuropsychiatry","DOI":"10.1080/13546800701238229","issue":"4","issued":{"date-parts":[[2007]]},"page":"339–361","title":"Exploring the perceptual characteristics of voice-hallucinations in deaf people","type":"article-journal","URL":"http://dx.doi.org/10.1080/13546800701238229","volume":"12"}, + {"id":"atwoodRevisitingProgrammingFonts2007","author":[{"family":"Atwood","given":"Jeff"}],"citation-key":"atwoodRevisitingProgrammingFonts2007","issued":{"date-parts":[[2007,10]]},"title":"Revisiting programming fonts","type":"book","URL":"http://www.codinghorror.com/blog/2007/10/revisiting-programming-fonts.html"}, + {"id":"aucouturierTenExperimentsModelling2006","abstract":"The majority of systems extracting high-level music descriptions from audio signals rely on a common, implicit model of the global sound or polyphonic timbre of a musical signal. This model represents the timbre of a texture as the long-term distribution of its local spectral features. The underlying assumption is rarely made explicit: the perception of the timbre of a texture is assumed to result from the most statistically significant feature windows. This thesis questions the validity of this assumption. To do so, we construct an explicit measure of the timbre similarity between polyphonic music textures, and variants thereof inspired by previous work in Music Information Retrieval. We show that the precision of such measures is bounded, and that the remaining error rate is not incidental. Notably, this class of algorithms tends to create false positives - which we call hubs - which are mostly always the same songs regardless of the query. Their study shows that the perceptual saliency of feature observations is not necessarily correlated with their statistical significance with respect to the global distribution. In other words, music listeners routinely \"hear\" things that are not statistically significant in musical signals, but rather are the result of high-level cognitive reasoning, which depends on cultural expectations, a priori knowledge, and context. Much of the music we hear as being \"piano music\" is really music that we expect to be piano music. Such statistical/perceptual paradoxes are instrumental in the observed discrepancy between human perception of timbre and the models studied here.","author":[{"family":"Aucouturier","given":"Jean J."}],"citation-key":"aucouturierTenExperimentsModelling2006","event-place":"Paris, France","issued":{"date-parts":[[2006]]},"publisher":"University of Paris 6","publisher-place":"Paris, France","title":"Ten Experiments on the Modelling of Polyphonic Timbre","type":"thesis","URL":"http://www.jj-aucouturier.info/papers/PHD-2006.pdf"}, + {"id":"aurenhammerVoronoiDiagramsSurvey1991","author":[{"family":"Aurenhammer","given":"Franz"}],"citation-key":"aurenhammerVoronoiDiagramsSurvey1991","container-title":"ACM Comput. Surv.","issue":"3","issued":{"date-parts":[[1991]]},"page":"345–405","title":"Voronoi diagrams — a survey of a fundamental geometric data structure","type":"article-journal","volume":"23"}, + {"id":"auslanderLivePerformanceMediatized2008","author":[{"family":"Auslander","given":"Philip"}],"citation-key":"auslanderLivePerformanceMediatized2008","container-title":"Liveness: Performance in a mediatized culture","edition":"Second","issued":{"date-parts":[[2008]]},"page":"10–72","title":"Live Performance in a Mediatized Culture","type":"chapter"}, + {"id":"bach-y-ritaLateHumanBrain2005","abstract":"The brain is capable of major reorganization even many years after an injury, with appropriate rehabilitation.The highly plastic brain responds best when the therapy is motivating and has a benefit that is recognized by the patient.The major objective of this study was to estimate feasibility and efficacy of an electro-tactile vestibular substitution system (ETVSS) in aiding recovery of posture control in patients with bilateral vestibular loss (BVL) during sitting and standing. Subjects used the BrainPort balance device for a period from 3 to 5 days. Subjects readily perceived both position and motion of a small 'target' stimulus on the tongue display, and interpreted this information to make corrective postural adjustments, causing the target stimulus to become centred.","author":[{"family":"Bach-Y-Rita","given":"Paul"},{"family":"Danilov","given":"Yuri"},{"family":"Tyler","given":"Mitchell"},{"family":"Grimm","given":"Robert J."}],"citation-key":"bach-y-ritaLateHumanBrain2005","container-title":"Plasticidad y Restauración Neurológica","issue":"1","issued":{"date-parts":[[2005]]},"page":"31–34","title":"Late Human Brain Plasticity: Vestibular Substitution with a Tongue BrainPort Human-Machine Interface","type":"article-journal","volume":"4"}, + {"id":"bailesWhenNoiseSpeech2009","abstract":"Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.","author":[{"family":"Bailes","given":"Freya"},{"family":"Dean","given":"Roger T."}],"citation-key":"bailesWhenNoiseSpeech2009","container-title":"Comput. Music J.","DOI":"10.1162/comj.2009.33.1.57","ISSN":"0148-9267","issue":"1","issued":{"date-parts":[[2009]]},"page":"57–67","title":"When is noise speech? a survey in sonic ambiguity","type":"article-journal","URL":"http://dx.doi.org/10.1162/comj.2009.33.1.57","volume":"33"}, + {"id":"balzerVoronoiTreemaps2005","author":[{"family":"Balzer","given":"Michael"},{"family":"Deussen","given":"Oliver"}],"citation-key":"balzerVoronoiTreemaps2005","container-title":"INFOVIS '05: Proceedings of the Proceedings of the 2005 IEEE Symposium on Information Visualization","event-place":"Washington, DC, USA","issued":{"date-parts":[[2005]]},"publisher":"IEEE Computer Society","publisher-place":"Washington, DC, USA","title":"Voronoi Treemaps","type":"paper-conference"}, + {"id":"balzerVoronoiTreemapsVisualization2005","author":[{"family":"Balzer","given":"Michael"},{"family":"Deussen","given":"Oliver"},{"family":"Lewerentz","given":"Claus"}],"citation-key":"balzerVoronoiTreemapsVisualization2005","container-title":"SoftVis '05: Proceedings of the 2005 ACM symposium on Software visualization","event-place":"New York, NY, USA","issued":{"date-parts":[[2005]]},"page":"165–172","publisher":"ACM Press","publisher-place":"New York, NY, USA","title":"Voronoi treemaps for the visualization of software metrics","type":"paper-conference"}, + {"id":"bangertSharedNetworksAuditory2006","abstract":"To investigate cortical auditory and motor coupling in professional musicians, we compared the functional magnetic resonance imaging (fMRI) activity of seven pianists to seven non-musicians utilizing a passive task paradigm established in a previous learning study. The tasks involved either passively listening to short piano melodies or pressing keys on a mute MRI-compliant piano keyboard. Both groups were matched with respect to age and gender, and did not exhibit any overt performance differences in the keypressing task. The professional pianists showed increased activity compared to the non-musicians in a distributed cortical network during both the acoustic and the mute motion-related task. A conjunction analysis revealed a distinct musicianship-specific network being co-activated during either task type, indicating areas involved in auditory-sensorimotor integration. This network is comprised of dorsolateral and inferior frontal cortex (including Broca's area), the superior temporal gyrus (Wernicke's area), the supramarginal gyrus, and supplementary motor and premotor areas.","author":[{"family":"Bangert","given":"M."},{"family":"Peschel","given":"T."},{"family":"Schlaug","given":"G."},{"family":"Rotte","given":"M."},{"family":"Drescher","given":"D."},{"family":"Hinrichs","given":"H."},{"family":"Heinze","given":"H."},{"family":"Altenmuller","given":"E."}],"citation-key":"bangertSharedNetworksAuditory2006","container-title":"NeuroImage","DOI":"10.1016/j.neuroimage.2005.10.044","ISSN":"10538119","issue":"3","issued":{"date-parts":[[2006,4]]},"page":"917–926","title":"Shared networks for auditory and motor processing in professional pianists: Evidence from fMRI conjunction","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.neuroimage.2005.10.044","volume":"30"}, + {"id":"banissyEnhancedSensoryPerception2009","abstract":"Previous findings imply that synaesthetic experience may have consequences for sensory processing of stimuli that do not themselves trigger synaesthesia. For example, synaesthetes who experience colour show enhanced perceptual processing of colour compared to non-synaesthetes. This study aimed to investigate whether enhanced perceptual processing was a core property of synaesthesia by contrasting tactile and colour sensitivity in synaesthetes who experience either colour, touch, or both touch and colour as evoked sensations. For comparison the performance of non-synaesthetic control subjects was also assessed. There was a relationship between the modality of synaesthetic experience and the modality of sensory enhancement. Synaesthetes who experience colour have enhanced colour sensitivity and synaesthetes who experience touch have enhanced tactile sensitivity. These findings suggest the possibility that a hyper-sensitive concurrent perceptual system is a general property of synaesthesia and are discussed in relation to theories of the condition.","author":[{"family":"Banissy","given":"Michael J."},{"family":"Walsh","given":"Vincent"},{"family":"Ward","given":"Jamie"}],"citation-key":"banissyEnhancedSensoryPerception2009","container-title":"Experimental Brain Research","DOI":"10.1007/s00221-009-1888-0","ISSN":"0014-4819","issue":"4","issued":{"date-parts":[[2009,7]]},"page":"565–571","PMID":"19533108","title":"Enhanced sensory perception in synaesthesia","type":"article-journal","URL":"http://dx.doi.org/10.1007/s00221-009-1888-0","volume":"196"}, + {"id":"barberPrehistoricTextilesDevelopment1992","abstract":"This pioneering work revises our notions of the origins and early development of textiles in Europe and the Near East. Using innovative linguistic techniques, along with methods from palaeobiology and other fields, it shows that spinning and pattern weaving began far earlier than has been supposed.This pioneering work revises our notions of the origins and early development of textiles in Europe and the Near East. Using innovative linguistic techniques, along with methods from palaeobiology and other fields, it shows that spinning and pattern weaving began far earlier than has been supposed.","author":[{"family":"Barber","given":"E. J. W."}],"citation-key":"barberPrehistoricTextilesDevelopment1992","edition":"Reprint edition","event-place":"Princeton, N.J.","ISBN":"978-0-691-00224-8","issued":{"date-parts":[[1992,12,14]]},"language":"English","number-of-pages":"508","publisher":"Princeton University Press","publisher-place":"Princeton, N.J.","source":"Amazon","title":"Prehistoric Textiles: The Development Of Cloth In The Neolithic And Bronze Ages With Special Reference To The Aegean","title-short":"Prehistoric Textiles","type":"book"}, + {"id":"bargaryColoredspeechSynaesthesiaTriggered2009","abstract":"Although it is estimated that as many as 4% of people experience some form of enhanced cross talk between (or within) the senses, known as synaesthesia, very little is understood about the level of information processing required to induce a synaesthetic experience. In work presented here, we used a well-known multisensory illusion called the McGurk effect to show that synaesthesia is driven by late, perceptual processing, rather than early, unisensory processing. Specifically, we tested 9 linguistic-color synaesthetes and found that the colors induced by spoken words are related to what is perceived (i.e., the illusory combination of audio and visual inputs) and not to the auditory component alone. Our findings indicate that color-speech synaesthesia is triggered only when a significant amount of information processing has occurred and that early sensory activation is not directly linked to the synaesthetic experience.","author":[{"family":"Bargary","given":"Gary"},{"family":"Barnett","given":"Kylie J."},{"family":"Mitchell","given":"Kevin J."},{"family":"Newell","given":"Fiona N."}],"citation-key":"bargaryColoredspeechSynaesthesiaTriggered2009","container-title":"Psychological science : a journal of the American Psychological Society / APS","DOI":"10.1111/j.1467-9280.2009.02338.x","ISSN":"1467-9280","issue":"5","issued":{"date-parts":[[2009,5]]},"page":"529–533","PMID":"19476587","title":"Colored-speech synaesthesia is triggered by multisensory, not unisensory, perception.","type":"article-journal","URL":"http://dx.doi.org/10.1111/j.1467-9280.2009.02338.x","volume":"20"}, + {"id":"barkerWhatCanComputer2005","abstract":"This paper compares two curricular information technology programs, one that graduates a much higher percentage of women than the other. Although the two programs center on IT, they are quite different in how they are structured and how students are assessed. This paper compares the programs on two dimensions, knowledge sharing and assessment techniques, then suggests ways that CS instruction might borrow from the other in order to increase retention of women in CS. These include ⢠allow students to hear each other articulate what they are learning; ⢠begin lectures by telling students about the practical application of what will later be described at the abstract level; and ⢠require that students display their solutions to the class and require that their classmates give them feedback. 1","author":[{"family":"Barker","given":"Lecia J."},{"family":"Garvin-doxas","given":"Kathy"},{"family":"Sieber","given":"Diane"}],"citation-key":"barkerWhatCanComputer2005","container-title":"36th SIGCSE Technical Symposium on Computer Science Education","issued":{"date-parts":[[2005]]},"page":"23–27","title":"What can computer science learn from a fine arts approach to teaching?","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.84.4464"}, + {"id":"barsalouGroundedCognitionPresent2010","abstract":"Abstract Thirty years ago, grounded cognition had roots in philosophy, perception, cognitive linguistics, psycholinguistics, cognitive psychology, and cognitive neuropsychology. During the next 20 years, grounded cognition continued developing in these areas, and it also took new forms in robotics, cognitive ecology, cognitive neuroscience, and developmental psychology. In the past 10 years, research on grounded cognition has grown rapidly, especially in cognitive neuroscience, social neuroscience, cognitive psychology, social psychology, and developmental psychology. Currently, grounded cognition appears to be achieving increased acceptance throughout cognitive science, shifting from relatively minor status to increasing importance. Nevertheless, researchers wonder whether grounded mechanisms lie at the heart of the cognitive system or are peripheral to classic symbolic mechanisms. Although grounded cognition is currently dominated by demonstration experiments in the absence of well-developed theories, the area is likely to become increasingly theory driven over the next 30 years. Another likely development is the increased incorporation of grounding mechanisms into cognitive architectures and into accounts of classic cognitive phenomena. As this incorporation occurs, much functionality of these architectures and phenomena is likely to remain, along with many original mechanisms. Future theories of grounded cognition are likely to be heavily influenced by both cognitive neuroscience and social neuroscience, and also by developmental science and robotics. Aspects from the three major perspectives in cognitive science—classic symbolic architectures, statistical/dynamical systems, and grounded cognition—will probably be integrated increasingly in future theories, each capturing indispensable aspects of intelligence.","author":[{"family":"Barsalou","given":"Lawrence W."}],"citation-key":"barsalouGroundedCognitionPresent2010","container-title":"Topics in Cognitive Science","DOI":"10.1111/j.1756-8765.2010.01115.x","issue":"4","issued":{"date-parts":[[2010]]},"page":"716–724","title":"Grounded Cognition: Past, Present, and Future","type":"article-journal","URL":"http://dx.doi.org/10.1111/j.1756-8765.2010.01115.x","volume":"2"}, + {"id":"barsalouGroundingConceptualKnowledge2003","author":[{"family":"Barsalou","given":"Lawrence W."},{"family":"Kyle Simmons","given":"W."},{"family":"Barbey","given":"Aron K."},{"family":"Wilson","given":"Christine D."}],"citation-key":"barsalouGroundingConceptualKnowledge2003","container-title":"Trends in Cognitive Sciences","ISSN":"1364-6613","issue":"2","issued":{"date-parts":[[2003,2]]},"page":"84–91","title":"Grounding conceptual knowledge in modality-specific systems","type":"article-journal","URL":"http://linkinghub.elsevier.com/retrieve/pii/S1364661302000293","volume":"7"}, + {"id":"barsalouLanguageSimulationConceptual2008","author":[{"family":"Barsalou","given":"L. W."},{"family":"Santos","given":"A."},{"family":"Simmons","given":"W. K."},{"family":"Wilson","given":"C. D."}],"citation-key":"barsalouLanguageSimulationConceptual2008","container-title":"Symbols and Embodiment: Debates on meaning and cognition","edition":"First","ISBN":"0-19-921727-0","issued":{"date-parts":[[2008,12]]},"note":"Published: Hardcover","page":"245–283","publisher":"Oxford University Press, USA","title":"Language and Simulation in Conceptual Processing","type":"chapter","URL":"http://www.worldcat.org/isbn/0199217270"}, + {"id":"barsalouPerceptualSymbolSystems1999","abstract":"Prior to the twentieth century, theories of knowledge were inherently perceptual. Since then, developments in logic, statistics, and programming languages have inspired amodal theories that rest on principles fundamentally different from those underlying perception. In addition, perceptual approaches have become widely viewed as untenable because they are assumed to implement recording systems, not conceptual systems. A perceptual theory of knowledge is developed here in the context of current cognitive science and neuroscience. During perceptual experience, association areas in the brain capture bottom-up patterns of activation in sensory-motor areas. Later, in a top-down manner, association areas partially reactivate sensory-motor areas to implement perceptual symbols. The storage and reactivation of perceptual symbols operates at the level of perceptual components–not at the level of holistic perceptual experiences. Through the use of selective attention, schematic representations of perceptual components are extracted from experience and stored in memory (e.g., individual memories of green, purr, hot). As memories of the same component become organized around a common frame, they implement a simulator that produces limitless simulations of the component (e.g., simulations of purr). Not only do such simulators develop for aspects of sensory experience, they also develop for aspects of proprioception (e.g., lift, run) and introspection (e.g., compare, memory, happy, hungry). Once established, these simulators implement a basic conceptual system that represents types, supports categorization, and produces categorical inferences. These simulators further support productivity, propositions, and abstract concepts, thereby implementing a fully functional conceptual system. Productivity results from integrating simulators combinatorially and recursively to produce complex simulations. Propositions result from binding simulators to perceived individuals to represent type-token relations. Abstract concepts are grounded in complex simulations of combined physical and introspective events. Thus, a perceptual theory of knowledge can implement a fully functional conceptual system while avoiding problems associated with amodal symbol systems. Implications for cognition, neuroscience, evolution, development, and artificial intelligence are explored.","author":[{"family":"Barsalou","given":"L. W."}],"citation-key":"barsalouPerceptualSymbolSystems1999","container-title":"The Behavioral and brain sciences","ISSN":"0140-525X","issue":"4","issued":{"date-parts":[[1999,8]]},"PMID":"11301525","title":"Perceptual symbol systems.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/11301525","volume":"22"}, + {"id":"barsalouSimulationSituatedConceptualization2009","abstract":"Based on accumulating evidence, simulation appears to be a basic computational mechanism in the brain that supports a broad spectrum of processes from perception to social cognition. Further evidence suggests that simulation is typically situated, with the situated character of experience in the environment being reflected in the situated character of the representations that underlie simulation. A basic architecture is sketched of how the brain implements situated simulation. Within this framework, simulators implement the concepts that underlie knowledge, and situated conceptualizations capture patterns of multi-modal simulation associated with frequently experienced situations. A pattern completion inference mechanism uses current perception to activate situated conceptualizations that produce predictions via simulations on relevant modalities. Empirical findings from perception, action, working memory, conceptual processing, language and social cognition illustrate how this framework produces the extensive prediction that characterizes natural intelligence.","author":[{"family":"Barsalou","given":"Lawrence W."}],"citation-key":"barsalouSimulationSituatedConceptualization2009","container-title":"Philosophical Transactions of the Royal Society of London B: Biological Sciences","DOI":"10.1098/rstb.2008.0319","ISSN":"1471-2970","issue":"1521","issued":{"date-parts":[[2009,5]]},"page":"1281–1289","PMCID":"PMC2666716","PMID":"19528009","title":"Simulation, situated conceptualization, and prediction","type":"article-journal","URL":"http://dx.doi.org/10.1098/rstb.2008.0319","volume":"364"}, + {"id":"barthesDeathAuthor1978","abstract":"Roland Barthes, the French critic and semiotician, was one of the most important critics and essayists of this century. His work continues to influence contemporary literary theory and cultural studies. Image-Music-Text collects Barthes's best writings on photography and the cinema, as well as fascinating articles on the relationship between images and sound. Two of Barthes's most important essays, \"Introduction to the Structural Analysis of Narrative\" and \"The Death of the Author\" are also included in this fine anthology, an excellent introduction to his thought.

These essays, as selected and translated by Stephen Heath, are among the finest writings Barthes ever published on film and photography, and on the phenomena of sound and image. The classic pieces \"Introduction to the Structural Analysis of Narrative\" and \"The Death of the Author\" are also included.
","author":[{"family":"Barthes","given":"Roland"}],"citation-key":"barthesDeathAuthor1978","container-title":"Image-Music-Text","issued":{"date-parts":[[1978,7]]},"page":"142–148","title":"Death of the Author","type":"chapter","URL":"http://www.worldcat.org/isbn/0374521360"}, + {"id":"bartonEthnomathematicsExploringCultural1996","abstract":"This thesis provides a new conceptualisation of ethnomathematics which avoids some of the difficulties which emerge in the literature. In particular, work has been started on a philosophic basis for the field. There is no consistent view of ethnomathematics in the literature. The relationship with mathematics itself has been ignored, and the philosophical and theoretical background is missing. The literature also reveals the ethnocentricity implied by ethnomathematics as a field of study based in a culture which has mathematics as a knowledge category. Two strategies to over come this problem are identified: universalising the referent of ‘mathematics’ so that it is the same as “knowledge-making”; or using methodological techniques to minimise it. The position of ethnomathematics in relationship to anthropology, sociology, history, and politics is characterised on a matrix. A place for ethnomathematics is found close the anthropology of mathematics, but the aim of anthropology is to better understand culture in general, while ethnomathematics aims to better understand mathematics. Anthropology, however, contributes its well-established methodologies for overcoming ethnocentricity. The search for a philosophical base finds a Wittgensteinian orientation which enables culturally based ‘systems of meaning’ to gain credibility in mathematics. A definition is proposed for ethnomathematics as the study of mathematical practices within context. Four types of ethnomathematical activity are identified: descriptive, archaeological, mathematising, and analytical activity. The definition also gives rise to a categorisation of ethnomathematical work along three dimensions: the closeness to conventional mathematics; the historical time; and the type of host culture. The mechanisms of interaction between mathematical practices are identified, and the imperialistic growth of mathematics is explained. Particular features of ethnomathematical theory are brought out in a four examples. By admitting the legitimacy of other viewpoints, ethnomathematics opens mathematics to new creative forces. Within education, ethnomathematics provides new choices, and turns cultural conflict into a useful tool for teaching. Mathematical activity exists in a variety of contexts. Learning mathematics involves being aware of, and integrating, diverse concepts. Ethnomathematics expands mathematical horizons, so that cultural diversity becomes a richer contributor to the cultural structures which humans use to understand their world.","accessed":{"date-parts":[[2019,12,16]]},"author":[{"family":"Barton","given":"Bill"}],"citation-key":"bartonEthnomathematicsExploringCultural1996","genre":"Thesis","issued":{"date-parts":[[1996]]},"language":"en","publisher":"ResearchSpace@Auckland","source":"researchspace.auckland.ac.nz","title":"Ethnomathematics: Exploring Cultural Diversity in Mathematics","title-short":"Ethnomathematics","type":"thesis","URL":"https://researchspace.auckland.ac.nz/handle/2292/2332"}, + {"id":"basbaumConsciousnessPerceptionPoint2006","author":[{"family":"Basbaum","given":"Sérgio R."}],"citation-key":"basbaumConsciousnessPerceptionPoint2006","container-title":"Revista Eletrônica Informação e Cognição","issue":"1","issued":{"date-parts":[[2006]]},"page":"181–203","title":"Consciousness and Perception: The Point of Experience and the Meaning of the World We Inhabit","type":"article-journal","volume":"5"}, + {"id":"beckwithGenderImportantFactor2004","abstract":"A human-centric issue that has not been considered in the design of end-user programming environments is whether gender differences exist that are important to the design of these environments. Ignoring this issue would miss the opportunity of enhancing the effectiveness of end-user programmers by incorporating appropriate mechanisms to support gender-associated differences in decision making, learning, and problem solving. This paper takes a first step toward building a foundation for investigating this issue by surveying gender difference literature from five domains with an eye toward possible implications for end-user programming. We present a taxonomy of this literature, and derive a number of specific issues for each element of the taxonomy (stated as hypotheses). This foundation provides a starting point for organized investigations into issues that may be important for making breakthroughs in the effectiveness of end-user programmers","author":[{"family":"Beckwith","given":"L."},{"family":"Burnett","given":"M."}],"citation-key":"beckwithGenderImportantFactor2004","container-title":"Proceedings of IEEE Symposium on Visual Languages and Human Centric Computing 2004","DOI":"10.1109/vlhcc.2004.28","event-place":"Rome","issued":{"date-parts":[[2004]]},"page":"107–114","publisher-place":"Rome","title":"Gender: An Important Factor in End-User Programming Environments?","type":"paper-conference","URL":"http://dx.doi.org/10.1109/vlhcc.2004.28"}, + {"id":"bednarikAnalysingInterpretingQuantitative2007","author":[{"family":"Bednarik","given":"Roman"},{"family":"Tukiainen","given":"Markku"}],"citation-key":"bednarikAnalysingInterpretingQuantitative2007","container-title":"Proceedings of Psychology of Programming Interest Group 2007","issued":{"date-parts":[[2007]]},"title":"Analysing and Interpreting Quantitative Eye-Tracking Data in Studies of Programming: Phases of Debugging with Multiple Representations","type":"paper-conference"}, + {"id":"bellemareVerbalDescriptionPiano2005","author":[{"family":"Bellemare","given":"Madeleine"},{"family":"Traube","given":"Caroline"}],"citation-key":"bellemareVerbalDescriptionPiano2005","container-title":"Conference on Interdisciplinary Musicology (CIM05)","event-place":"Montréal, QC, Canada","issued":{"date-parts":[[2005]]},"publisher-place":"Montréal, QC, Canada","title":"Verbal description of piano timbre: Exploring performer-dependent dimensions","type":"paper-conference"}, + {"id":"bellingerPerceptionTimeMusic2017","abstract":"Objective: Perception of time as well as rhythm in musical structures rely on complex brain mechanisms and require an extended network of multiple neural sources. They are therefore sensitive to impairment. Several psychophysical studies have shown that patients with Parkinson´s disease (PD) have deficits in perceiving time and rhythms due to a malfunction of the basal ganglia (BG) network. Method: In this study we investigated the time perception of PD patients during music perception by assessing their just noticeable difference (JND) in the time perception of a complex musical Gestalt. We applied a temporal discrimination task using a short melody with a clear beat-based rhythm. Among the subjects, 26 patients under L-Dopa administration and 21 age-matched controls had to detect an artificially delayed time interval in the range between 80 and 300 milliseconds in the middle of the musical period. We analyzed the data by a) calculating the detection threshold directly, b) by extrapolating the JNDs, c.) relating it to musical expertise. Results: Patients differed from controls in the detection of time-intervals between 220-300ms (*p = 0.0200, n = 47). Furthermore, this deficit depended on the severity of the disease (*p = 0.0452; n = 47). Surprisingly, PD patients did not show any deficit of their JND compared to healthy controls, although the results showed a trend (*p = 0.0565, n = 40). Furthermore, no significant difference of the JND was found according to the severity of the disease. Additionally, musically trained persons seemed to have lower thresholds in detecting deviations in time and syntactic structures of music (*p = 0.0343, n = 39). Conclusion: As an explanation of these results, we would like to propose the hypothesis of a time-syntax-congruency in music perception suggesting that processing of time and rhythm is a Gestalt process and that cortical areas involved in processing of musical syntax may compensate for impaired BG circuits that are responsible for time processing and rhythm perception. This mechanism may emerge more strongly as the deficits in time processing and rhythm perception progress. Furthermore, we presume that top-down-bottom-up-processes interfere additionally and interact in this context of compensation.","accessed":{"date-parts":[[2017,8,3]]},"author":[{"family":"Bellinger","given":"Daniel"},{"family":"Altenmüller","given":"Eckart"},{"family":"Volkmann","given":"Jens"}],"citation-key":"bellingerPerceptionTimeMusic2017","container-title":"Frontiers in Neuroscience","container-title-short":"Front. Neurosci.","DOI":"10.3389/fnins.2017.00068","ISSN":"1662-453X","issued":{"date-parts":[[2017]]},"language":"English","source":"Frontiers","title":"Perception of Time in Music in Patients with Parkinson's Disease–The Processing of Musical Syntax Compensates for Rhythmic Deficits","type":"article-journal","URL":"http://journal.frontiersin.org/article/10.3389/fnins.2017.00068/full","volume":"11"}, + {"id":"bellInterfaceRealtimeMusic2011","abstract":"Graphical sequencers have limits in their use as live performance tools. It is hypothesized that those limits can be ovecome through live coding or text-based interfaces. Using a general purpose programming language has advantages over that of a domain-specific language. However, a barrier for a musician wanting to use a general purpose language for computer music has been the lack of high-level music-specific abstractions designed for realtime manipulation, such as those for time. A library for Haskell was developed to give computer musicians a high-level interface for a heterogenous output enviroment.","author":[{"family":"Bell","given":"Renick"}],"citation-key":"bellInterfaceRealtimeMusic2011","container-title":"Proceedings of LAC 2011","issued":{"date-parts":[[2011]]},"title":"An Interface for Realtime Music Using Interpreted Haskell","type":"paper-conference"}, + {"id":"belRationalizingMusicalTime2001","author":[{"family":"Bel","given":"Bernard"}],"citation-key":"belRationalizingMusicalTime2001","container-title":"The Ratio Book","editor":[{"family":"Barlow","given":"Clarence"}],"issued":{"date-parts":[[2001]]},"page":"86–101","publisher":"Feedback Studio","title":"Rationalizing musical time: syntactic and symbolic-numeric approaches","type":"chapter"}, + {"id":"bencinaMetasurfaceApplyingNatural2004","author":[{"family":"Bencina","given":"Ross"}],"citation-key":"bencinaMetasurfaceApplyingNatural2004","container-title":"NIME '05: Proceedings of the 2005 conference on New interfaces for musical expression","issued":{"date-parts":[[2004]]},"page":"101–104","publisher":"National University of Singapore","title":"The metasurface: applying natural neighbour interpolation to two-to-many mapping","type":"paper-conference"}, + {"id":"benediktCyberspaceFirstSteps1991","author":[{"family":"Benedikt","given":"Michael"}],"citation-key":"benediktCyberspaceFirstSteps1991","ISBN":"0-262-02327-X","issued":{"date-parts":[[1991,11]]},"note":"Published: Hardcover","publisher":"MIT Press","title":"Cyberspace: First Steps","type":"book","URL":"http://www.worldcat.org/isbn/026202327X"}, + {"id":"bennettEthnocomputationalCreativitySTEAM2016","abstract":"Autoría: Audrey Grace Bennett.\nLocalización: Teknokultura. Nº. 2, 2016.\nArtículo de Revista en Dialnet.","accessed":{"date-parts":[[2020,6,22]]},"author":[{"family":"Bennett","given":"Audrey Grace"}],"citation-key":"bennettEthnocomputationalCreativitySTEAM2016","container-title":"Teknokultura","ISSN":"1549-2230","issue":"2","issued":{"date-parts":[[2016]]},"language":"eng","page":"587-612","publisher":"Grupo de Investigación Cibersomosaguas","section":"Teknokultura","source":"dialnet.unirioja.es","title":"Ethnocomputational creativity in STEAM education: A cultural framework for generative justice","title-short":"Ethnocomputational creativity in STEAM education","type":"article-journal","URL":"https://dialnet.unirioja.es/servlet/articulo?codigo=5764111","volume":"13"}, + {"id":"berryDoesNotCompute2014","author":[{"family":"Berry","given":"Miles"}],"citation-key":"berryDoesNotCompute2014","container-title":"Teach Primary","issued":{"date-parts":[[2014,3]]},"title":"Does not Compute","type":"article-newspaper","URL":"http://milesberry.net/2014/03/computational-thinking-in-primary-schools/"}, + {"id":"bertinSemiologyGraphicsDiagrams1984","author":[{"family":"Bertin","given":"Jacques"}],"citation-key":"bertinSemiologyGraphicsDiagrams1984","ISBN":"0-299-09060-4","issued":{"date-parts":[[1984]]},"note":"Published: Hardcover","publisher":"University of Wisconsin Press","title":"Semiology of Graphics: Diagrams, Networks, Maps","type":"book","URL":"http://www.worldcat.org/isbn/0299090604"}, + {"id":"bertranProsodicTypologyDichotomy1999","author":[{"family":"Bertrán","given":"Antonio P."}],"citation-key":"bertranProsodicTypologyDichotomy1999","container-title":"Language Design: Journal of Theoretical and Experimental Linguistics","issue":"2","issued":{"date-parts":[[1999]]},"page":"101–131","title":"Prosodic Typology: on the Dichotomy between Stress-Timed and Syllable-Timed Languages","type":"article-journal"}, + {"id":"beyerAnimatedVisualizationSoftware2006","abstract":"The understanding of the structure of a software system can be improved by analyzing the system's evolution during development. Visualizations of software history that provide only static views do not capture the dynamic nature of software evolution. We present a new visualization technique, the Evolution Storyboard, which provides dynamic views of the evolution of a software's structure. An evolution storyboard consists of a sequence of animated panels, which highlight the structural changes in the system; one panel for each considered time period. Using storyboards, engineers can spot good design, signs of structural decay, or the spread of cross cutting concerns in the code. We implemented our concepts in a tool, which automatically extracts software dependency graphs from version control repositories and computes storyboards based on panels for different time periods. For applying our approach in practice, we provide a step by step guide that others can follow along the storyboard visualizations, in order to study the evolution of large systems. We have applied our method to several large open source software systems. In this paper, we demonstrate that our method provides additional information (compared to static views) on the ArgoUML project, an open source UML modeling tool.","author":[{"family":"Beyer","given":"Dirk"},{"family":"Hassan","given":"Ahmed E."}],"citation-key":"beyerAnimatedVisualizationSoftware2006","container-title":"Proceedings of the 13th Working Conference on Reverse Engineering","DOI":"10.1109/wcre.2006.14","event-place":"Washington, DC, USA","ISBN":"0-7695-2719-1","issued":{"date-parts":[[2006]]},"page":"199–210","publisher":"IEEE Computer Society","publisher-place":"Washington, DC, USA","title":"Animated Visualization of Software History using Evolution Storyboards","type":"paper-conference","URL":"http://dx.doi.org/10.1109/wcre.2006.14"}, + {"id":"bijmoltEffectsAlternativeMethods1995","author":[{"family":"Bijmolt","given":"T. H. A."},{"family":"Wedel","given":"M."}],"citation-key":"bijmoltEffectsAlternativeMethods1995","container-title":"Research in Marketing","issue":"4","issued":{"date-parts":[[1995,11]]},"title":"The effects of alternative methods of collecting similarity data for multidimensional scaling","type":"article-journal","URL":"http://dbiref.uvt.nl/iPort?request=full_record&db=wo&language=eng&query=86393","volume":"12"}, + {"id":"bilkeyNEUROSCIENCEPlaceSpace2004","abstract":"10.1126/science.1102895","author":[{"family":"Bilkey","given":"David K."}],"citation-key":"bilkeyNEUROSCIENCEPlaceSpace2004","container-title":"Science","DOI":"10.1126/science.1102895","issue":"5688","issued":{"date-parts":[[2004,8]]},"page":"1245–1246","PMID":"15333826","title":"NEUROSCIENCE: In the Place Space","type":"article-journal","URL":"http://dx.doi.org/10.1126/science.1102895","volume":"305"}, + {"id":"binderNewNeuroanatomySpeech2000","abstract":"10.1093/brain/123.12.2371","author":[{"family":"Binder","given":"Jeffrey"}],"citation-key":"binderNewNeuroanatomySpeech2000","container-title":"Brain","DOI":"10.1093/brain/123.12.2371","issue":"12","issued":{"date-parts":[[2000,12]]},"page":"2371–2372","PMID":"11099441","title":"The new neuroanatomy of speech perception","type":"article-journal","URL":"http://dx.doi.org/10.1093/brain/123.12.2371","volume":"123"}, + {"id":"birdPromisesPerilsMining2009","abstract":"We are now witnessing the rapid growth of decentralized source code management (DSCM) systems, in which every developer has her own repository. DSCMs facilitate a style of collaboration in which work output can flow sideways (and privately) between collaborators, rather than always up and down (and publicly) via a central repository. Decentralization comes with both the promise of new data and the peril of its misinterpretation. We focus on git, a very popular DSCM used in high-profile projects. Decentralization, and other features of git, such as automatically recorded contributor attribution, lead to richer content histories, giving rise to new questions such as ” How do contributions flow between developers to the official project repository?” However, there are pitfalls. Commits may be reordered, deleted, or edited as they move between repositories. The semantics of terms common to SCMs and DSCMs sometimes differ markedly, potentially creating confusion. For example, a commit is immediately visible to all developers in centralized SCMs, but not in DSCMs. Our goal is to help researchers interested in DSCMs avoid these and other perils when mining and analyzing git data.","author":[{"family":"Bird","given":"Christian"},{"family":"Rigby","given":"Peter C."},{"family":"Barr","given":"Earl T."},{"family":"Hamilton","given":"David J."},{"family":"German","given":"Daniel M."},{"family":"Devanbu","given":"Prem"}],"citation-key":"birdPromisesPerilsMining2009","collection-title":"MSR '09","container-title":"Proceedings of the 2009 6th IEEE International Working Conference on Mining Software Repositories","DOI":"10.1109/msr.2009.5069475","event-place":"Washington, DC, USA","ISBN":"978-1-4244-3493-0","issued":{"date-parts":[[2009]]},"page":"1–10","publisher":"IEEE Computer Society","publisher-place":"Washington, DC, USA","title":"The promises and perils of mining git","type":"paper-conference","URL":"http://dx.doi.org/10.1109/msr.2009.5069475","volume":"0"}, + {"id":"bjerregaardPreColumbianTextilesEthnological2017","author":[{"family":"Bjerregaard","given":"Lena"},{"family":"Huss","given":"Torben"}],"citation-key":"bjerregaardPreColumbianTextilesEthnological2017","container-title":"Zea E-Books","issued":{"date-parts":[[2017,2,14]]},"title":"PreColumbian Textiles in the Ethnological Museum in Berlin","type":"article-journal","URL":"http://digitalcommons.unl.edu/zeabook/52"}, + {"id":"blackFestivalSpeechSynthesis1997","author":[{"family":"Black","given":"Alan W."},{"family":"Taylor","given":"Paul A."}],"citation-key":"blackFestivalSpeechSynthesis1997","event-place":"Scotland, UK","issued":{"date-parts":[[1997]]},"number":"HCRC/TR-83","publisher":"Human Communciation Research Centre, University of Edinburgh","publisher-place":"Scotland, UK","title":"The Festival Speech Synthesis System: System Documentation","type":"report"}, + {"id":"blackwellCognitiveDimensionsMusical2000","author":[{"family":"Blackwell","given":"A. F."},{"family":"Green","given":"T."},{"family":"Nunn","given":"Dje"}],"citation-key":"blackwellCognitiveDimensionsMusical2000","container-title":"Workshop on Notation and Music Information Retrieval","issued":{"date-parts":[[2000]]},"title":"Cognitive Dimensions and Musical Notation Systems","type":"article-journal","URL":"http://scholar.google.com/scholar?hl=en&btnG=Search&q=intitle:Cognitive+Dimensions+and+Musical+Notation+Systems#0"}, + {"id":"blackwellCognitiveDimensionsNotations2001","abstract":"The Cognitive Dimensions of Notations framework has been created to assist the designers of notational systems and information artifacts to evaluate their designs with respect to the impact that they will have on the users of those designs. The framework emphasizes the design choices available to such designers, including characterization of the user's activity, and the inevitable tradeoffs that will occur between potential design options. The resuliing framework has been under development for over 10 years, and now has an active community of researchers devoted to it. This paper first introduces Cognitive Dimensions. It then summarizes the current activity, especially the results of a one-day workshop devoted to Cognitive Dimensions in December 2000, and reviews the ways in which it applies to the field of Cognitive Technology.","author":[{"family":"Blackwell","given":"Alan F."},{"family":"Britton","given":"Carol"},{"family":"Cox","given":"Anna L."},{"family":"Green","given":"Thomas R. G."},{"family":"Gurr","given":"Corin A."},{"family":"Kadoda","given":"Gada F."},{"family":"Kutar","given":"Maria"},{"family":"Loomes","given":"Martin"},{"family":"Nehaniv","given":"Chrystopher L."},{"family":"Petre","given":"Marian"},{"family":"Roast","given":"Chris"},{"family":"Roe","given":"Chris"},{"family":"Wong","given":"Allan"},{"family":"Young","given":"Richard M."}],"citation-key":"blackwellCognitiveDimensionsNotations2001","collection-title":"CT '01","container-title":"Proceedings of the 4th International Conference on Cognitive Technology: Instruments of Mind","event-place":"London, UK, UK","ISBN":"3-540-42406-7","issued":{"date-parts":[[2001]]},"page":"325–341","publisher":"Springer-Verlag","publisher-place":"London, UK, UK","title":"Cognitive Dimensions of Notations: Design Tools for Cognitive Technology","type":"paper-conference","URL":"http://portal.acm.org/citation.cfm?id=727492"}, + {"id":"blackwellCollaborationLearningLive2014","author":[{"family":"Blackwell","given":"Alan"},{"family":"McLean","given":"Alex"},{"family":"Noble","given":"James"},{"family":"Rohrhuber","given":"Julian"}],"citation-key":"blackwellCollaborationLearningLive2014","container-title":"Dagstuhl Reports","DOI":"http://dx.doi.org/10.4230/DagRep.3.9.130","editor":[{"family":"Blackwell","given":"Alan"},{"family":"McLean","given":"Alex"},{"family":"Noble","given":"James"},{"family":"Rohrhuber","given":"Julian"}],"issue":"9","issued":{"date-parts":[[2014]]},"page":"130–168","title":"Collaboration and learning through live coding (Dagstuhl Seminar 13382)","type":"article-journal","URL":"http://drops.dagstuhl.de/opus/volltexte/2014/4420","volume":"3"}, + {"id":"blackwellCreatingValueBoundaries2010","author":[{"family":"Blackwell","given":"A."},{"family":"Wilson","given":"L."},{"family":"Boulton","given":"C."},{"family":"Knell","given":"J."}],"citation-key":"blackwellCreatingValueBoundaries2010","issued":{"date-parts":[[2010,5]]},"title":"Creating value across boundaries: Maximising the return from interdisciplinary innovation. NESTA Research Report CVAB/48","type":"book"}, + {"id":"blackwellGenderDomesticProgramming2006","author":[{"family":"Blackwell","given":"Alan"}],"citation-key":"blackwellGenderDomesticProgramming2006","container-title":"CHI Workshop on End User Software Engineering 2006","issued":{"date-parts":[[2006]]},"title":"Gender in domestic programming: From bricolage to séances d'essayage","type":"paper-conference"}, + {"id":"blackwellMetacognitiveTheoriesVisual2006","abstract":"The research involved a qualitative and quantitative study ofstatements made by computer scientists about the ways in which theythink that visual programming assists the thought processes of theprogrammer. This type of metacognitive knowledge has been shown inpsychological experiments to have significant effects on performance incognitive tasks. It is particularly important in the design ofprogramming environments, where HCI factors of the environment constrainthe programmer's design behaviour according to the beliefs of theenvironment designer. The metacognitive knowledge expressed in thevisual programming literature is categorised in the paper into a rangeof micro-theories, the frequency of statements found in each categoryare compared, and the theoretical assumptions are evaluated in terms ofrelevant research in cognitive psychology","author":[{"family":"Blackwell","given":"A. F."}],"citation-key":"blackwellMetacognitiveTheoriesVisual2006","container-title":"Proceedings of IEEE Symposium on Visual Languages","DOI":"10.1109/vl.1996.545293","event-place":"Boulder, CO, USA","issued":{"date-parts":[[2006]]},"page":"240–246","publisher-place":"Boulder, CO, USA","title":"Metacognitive theories of visual programming: what do we think we are doing?","type":"paper-conference","URL":"http://dx.doi.org/10.1109/vl.1996.545293"}, + {"id":"blackwellMetaphorsWeProgram2006","abstract":"Abstract. A corpus analysis of the standard Java documentation revealed the range of conceptual metaphors shared by library authors and users of packages such as java.util and java.bean. These metaphors included the expected mental models of internal program behaviour, but also consistent references to a spatial image-world with material properties and flows. More surprisingly, program components are metaphorically understood as actors with beliefs and intentions, working together according to social relationships. Rather than mechanical imperative models or mathematical declarative ones, it seems that one of the most widespread bases for conceptual models of programming is of social entities that act as proxies for their developers. This may have significant implications for the design of new programming languages and environments. 1.","author":[{"family":"Blackwell","given":"Alan F."}],"citation-key":"blackwellMetaphorsWeProgram2006","container-title":"Proceedings of the 18th Psychology of Programming Interest Group 2006","issued":{"date-parts":[[2006]]},"title":"Metaphors we Program By: Space, Action and Society in Java","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.77.7039"}, + {"id":"blackwellNotationalSystemsCognitive2002","author":[{"family":"Blackwell","given":"Alan"},{"family":"Green","given":"Thomas"}],"citation-key":"blackwellNotationalSystemsCognitive2002","container-title":"HCI Models, Theories, and Frameworks: Toward a Multidisciplinary Science","editor":[{"family":"Carroll","given":"J. M."}],"issued":{"date-parts":[[2002]]},"page":"103–134","publisher":"Morgan Kaufmann","title":"Notational Systems – the Cognitive Dimensions of Notations framework","type":"chapter","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.13.2023"}, + {"id":"blackwellPictorialRepresentationMetaphor2001","abstract":"This paper reports the results of seven different experiments, assessing the benefit that users gain from the inclusion of pictorial features such as pictorial metaphor, visual mnemonics or support for visual imagery in visual languages. The experiments are based on typical programming tasks such as problem solving, construction and interpretation. They employed a number of experimental languages, including both implicit pictorial representations and explicitly verbal metaphorical explanations. The results of these experiments indicate that special design considerations apply to visual languages. Direct application of Graphical User Interface metaphors does not result in automatic improvements in usability of visual languages for typical programming tasks. Visual languages can benefit from pictorial mnemonics, but systematic explanatory metaphors (whether visual or verbal) are less useful than consistent presentation of language abstractions.","author":[{"family":"Blackwell","given":"Alan F."}],"citation-key":"blackwellPictorialRepresentationMetaphor2001","container-title":"Journal of Visual Languages and Computing","issued":{"date-parts":[[2001]]},"page":"223–252","title":"Pictorial Representation and Metaphor in Visual Language Design","type":"article-journal","volume":"12"}, + {"id":"blackwellProgrammingLanguageMusical2005","author":[{"family":"Blackwell","given":"Alan"},{"family":"Collins","given":"Nick"}],"citation-key":"blackwellProgrammingLanguageMusical2005","container-title":"Proceedings of 17th Psychology of Programming Interest Group 2005","issued":{"date-parts":[[2005]]},"publisher":"University of Sussex","title":"The Programming Language as a Musical Instrument","type":"chapter"}, + {"id":"blackwellPsychologicalIssuesEndUser2006","abstract":"Psychological research into the usability of programming languages and environments, and the cognitive processes that must be supported to improve their usability, has been conducted for over 30 years [dating at least to Weinberg's (1971) book ” The Psychology of Computer Programming”]. For the past 15 years, there have been two permanent research communities devoted to this topic: the Psychology of Programming Interest Group in Europe (www.ppig.org) and the Empirical Studies of Programmers Foundation in America. This chapter presents a survey of the research that has been conducted in those communities, the relationship between that research and end-user development, case studies of shared research themes, and design approaches that have arisen from these themes. In this chapter, I will refer to the work of both communities under the generic term ” psychology of programming,” although as will become clear later, this term is not completely adequate. Key words. psychology, programming, end-users, education, spreadsheets, scripting, design models","author":[{"family":"Blackwell","given":"Alan F."}],"citation-key":"blackwellPsychologicalIssuesEndUser2006","collection-title":"Human-Computer Interaction Series","container-title":"End User Development","DOI":"10.1007/1-4020-5386-x_2","editor":[{"family":"Lieberman","given":"Henry"},{"family":"Paternò","given":"Fabio"},{"family":"Wulf","given":"Volker"}],"event-place":"Dordrecht","ISBN":"978-1-4020-4220-1","issued":{"date-parts":[[2006]]},"page":"9–30","publisher":"Springer Netherlands","publisher-place":"Dordrecht","title":"Psychological Issues in End-User Programming","type":"chapter","URL":"http://dx.doi.org/10.1007/1-4020-5386-x_2","volume":"9"}, + {"id":"blackwellPUXPatternsUser2010","abstract":"An abstract is not available.","author":[{"family":"Blackwell","given":"Alan F."},{"family":"Fincher","given":"Sally"}],"citation-key":"blackwellPUXPatternsUser2010","container-title":"interactions","DOI":"10.1145/1699775.1699782","ISSN":"1072-5520","issued":{"date-parts":[[2010,3]]},"page":"27–31","title":"PUX: patterns of user experience","type":"article-journal","URL":"http://dx.doi.org/10.1145/1699775.1699782","volume":"17"}, + {"id":"blackwellReificationMetaphorDesign2006","abstract":"Despite causing many debates in human-computer interaction (HCI), the term ” metaphor” remains a central element of design practice. This article investigates the history of ideas behind user-interface (UI) metaphor, not only technical developments, but also less familiar perspectives from education, philosophy, and the sociology of science. The historical analysis is complemented by a study of attitudes toward metaphor among HCI researchers 30 years later. Working from these two streams of evidence, we find new insights into the way that theories in HCI are related to interface design, and offer recommendations regarding approaches to future UI design research.","author":[{"family":"Blackwell","given":"Alan F."}],"citation-key":"blackwellReificationMetaphorDesign2006","container-title":"ACM Transactions on Computer-Human Interaction","DOI":"10.1145/1188816.1188820","ISSN":"1073-0516","issue":"4","issued":{"date-parts":[[2006,12]]},"page":"490–530","title":"The reification of metaphor as a design tool","type":"article-journal","URL":"http://dx.doi.org/10.1145/1188816.1188820","volume":"13"}, + {"id":"blackwellSeeWhatYou2001","abstract":"It has been argued that most end-users would not want to write programs, no matter what kind of tools they had to help them. This paper analyzes the reasons for that situation, and addresses them with a new approach to programming. There is a large class of users who are very reluctant to create any kind of abstraction within a computer (they will not create a new directory, let alone a Word macro). But these people do create abstractions in their everyday lives outside the computer. The reason for their computer habits can be explained in terms of a simple investment and risk model. See What You Need (SWYN) is a system intended to deliver the capabilities—not just of Word macros, but of Perl—to end-users. The techniques it adopts are those of programming by example, visual program representation and direct manipulation. SWYN is not intended to be a complete system, and is unlikely to develop into a complete Perl replacement. It is a research vehicle, supporting the evaluation of specific features aimed at reducing the perceived risk of abstraction in programming. This paper describes two elements of the SWYN project, both of them related to the regular expressions that are central to pattern matching in Perl. The first is a prototype system that acquires regular expressions from the type of examples required in direct manipulation of data for programming. The second is an experimental evaluation of alternative notations for visualizing regular expressions. This experiment demonstrated a clear advantage for graphical notations in typical end-user tasks, both over conventional regular expressions, and over a tutorial-style textual notation. The overall effect is a reduction both in programming investment and in perceived risk.","author":[{"family":"Blackwell","given":"A."}],"citation-key":"blackwellSeeWhatYou2001","container-title":"Journal of Visual Languages & Computing","DOI":"10.1006/jvlc.2001.0216","ISSN":"1045926X","issue":"5","issued":{"date-parts":[[2001,10]]},"page":"475–499","title":"See What You Need: Helping End-users to Build Abstractions","type":"article-journal","URL":"http://dx.doi.org/10.1006/jvlc.2001.0216","volume":"12"}, + {"id":"blackwellTenYearsCognitive2006","author":[{"family":"Blackwell","given":"A."}],"citation-key":"blackwellTenYearsCognitive2006","container-title":"Journal of Visual Languages & Computing","DOI":"10.1016/j.jvlc.2006.04.001","ISSN":"1045926X","issue":"4","issued":{"date-parts":[[2006,8]]},"page":"285–287","title":"Ten years of cognitive dimensions in visual languages and computing","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.jvlc.2006.04.001","volume":"17"}, + {"id":"blombergReflections25Years2013","abstract":"In this article we focus attention on ethnography's place in CSCW by reflecting on how ethnography in the context of CSCW has contributed to our understanding of the sociality and materiality of work and by exploring how the notion of the 'field site' as a construct in ethnography provides new ways of conceptualizing 'work' that extends beyond the workplace. We argue that the well known challenges of drawing design implications from ethnographic research have led to useful strategies for tightly coupling ethnography and design. We also offer some thoughts on recent controversies over what constitutes useful and proper ethnographic research in the context of CSCW. Finally, we argue that as the temporal and spatial horizons of inquiry have expanded, along with new domains of collaborative activity, ethnography continues to provide invaluable perspectives.","author":[{"family":"Blomberg","given":"Jeanette"},{"family":"Karasti","given":"Helena"}],"citation-key":"blombergReflections25Years2013","container-title":"Computer Supported Cooperative Work (CSCW)","DOI":"10.1007/s10606-012-9183-1","issue":"4-6","issued":{"date-parts":[[2013]]},"page":"373–423","title":"Reflections on 25 Years of Ethnography in CSCW","type":"article-journal","URL":"http://dx.doi.org/10.1007/s10606-012-9183-1","volume":"22"}, + {"id":"bodenCreativeMind1990","author":[{"family":"Boden","given":"Margaret"}],"citation-key":"bodenCreativeMind1990","issued":{"date-parts":[[1990]]},"publisher":"Abacus","title":"The Creative Mind","type":"book"}, + {"id":"bodenCreativeMindMyths2003","abstract":"

How is it possible to think new thoughts? What is creativity and can science explain it?

When The Creative Mind: Myths and Mechanisms was first published, Margaret A. Boden's bold and provocative exploration of creativity broke new ground. Boden uses examples such as jazz improvisation, chess, story writing, physics, and the music of Mozart, together with computing models from the field of artificial intelligence to uncover the nature of human creativity in the arts, science and everyday life.
The Second Edition of The Creative Mind has been updated to include recent developments in artificial intelligence, with a new preface, introduction and conclusion by the author. It is an essential work for anyone interested in the creativity of the human mind.

","author":[{"family":"Boden","given":"Margaret A."}],"citation-key":"bodenCreativeMindMyths2003","edition":"Second","ISBN":"0-415-31453-4","issued":{"date-parts":[[2003,11]]},"note":"Published: Paperback","publisher":"Routledge","title":"The Creative Mind: Myths and Mechanisms","type":"book","URL":"http://www.worldcat.org/isbn/0415314534"}, + {"id":"boerModellingVocalAnatomy2010","abstract":"This paper investigates the effect of larynx position on the articulatory abilities of a human-like vocal tract. Previous work has investigated models that were built to resemble the anatomy of existing species or fossil ancestors. This has led to conflicting conclusions about the relation between the evolution of anatomy and the evolution of speech. Here a model is proposed to systematically investigate the relation between larynx height and articulatory abilities. It is a simplified model of primate vocal anatomy that nevertheless preserves the essential articulatory constraints due to limitations of muscular control. It is found that there is an optimal larynx height at which the largest range of signals can be produced and that at this height, the vertical and horizontal parts are approximately equally long. This has been a conjecture for a long time by those researchers of the evolution of speech who propose that the human vocal tract has evolved for speech. A short recapitulation of acoustic theory of speech production is presented to explain the reason for why this configuration is optimal.The optimal configuration corresponds closely to human female anatomy, while in the human male the larynx is slightly lower than optimal. These results agree with the hypothesis that modern human vocal anatomy has evolved because of speech, and that male larynx position might have been lowered further for reasons of size exaggeration.","author":[{"family":"Boer","given":"Bart"}],"citation-key":"boerModellingVocalAnatomy2010","container-title":"Journal of Evolutionary Psychology","DOI":"10.1556/jep.8.2010.4.1","issue":"4","issued":{"date-parts":[[2010,12]]},"page":"351–366","title":"Modelling vocal anatomy's significant effect on speech","type":"article-journal","URL":"http://dx.doi.org/10.1556/jep.8.2010.4.1","volume":"8"}, + {"id":"bolgerMultidimensionalTimbreAnalysis2005","abstract":"A method of analysing timbre in melody that takes account of its multidimensional characteristic is described. The aim of this analysis technique is to uncover the role of timbre as a structural element in melody. Gaining an understanding of how an abstract, multidimensional sound phenomenon such as timbre is used in a structured manner can lead to important insights into potential cognitive abilities; our ability to form mental representations of abstract phenomena so that they can be conserved and, subsequently, used in an organised or structured manner. This method of analysis comprises two main components, a first which carries out a time-frequency analysis of the melodic signal and processes the signal data using DSP techniques that model aspects of auditory processing before calculating the timbre descriptors, and a second that represents the melody in terms of its timbral changes rather than its absolute timbral values. A self-organising feature map is used to reduce the timbral detail and the dimensionality of the timbral representation, and to contrast-enhance the timbral changes. An example of the implementation of this analysis technique is presented using an extract from a Japanese shakuhachi honkyoku melody, chosen because of its accepted exploitation of timbre.","author":[{"family":"Bolger","given":"Deirdre"},{"family":"Griffith","given":"Niall"}],"citation-key":"bolgerMultidimensionalTimbreAnalysis2005","container-title":"Proceedings of the Conference on Interdisciplinary Musicology 2005","issued":{"date-parts":[[2005]]},"title":"Multidimensional timbre analysis of shakuhachi honkyoku","type":"paper-conference"}, + {"id":"boreDSPMathBrief2014","author":[{"family":"Bore","given":"Chris"}],"citation-key":"boreDSPMathBrief2014","edition":"1","issued":{"date-parts":[[2014,9]]},"note":"Published: Kindle Edition","publisher":"BORES Signal Processing","title":"DSP without math: A brief introduction to DSP","type":"book"}, + {"id":"borgModernMultidimensionalScaling2005","abstract":"The book provides a comprehensive treatment of multidimensional scaling (MDS), a family of statistical techniques for analyzing the structure of (dis)similarity data. Such data are widespread, including, for example, intercorrelations of survey items, direct ratings on the similarity on choice objects, or trade indices for a set of countries. MDS represents the data as distances among points in a geometric space of low dimensionality. This map can help to see patterns in the data that are not obvious from the data matrices. MDS is also used as a psychological model for judgments of similarity and preference. This book may be used as an introduction to MDS for students in psychology, sociology, and marketing. The prerequisite is an elementary background in statistics. The book is also well suited for a variety of advanced courses on MDS topics. All the mathematics required for more advanced topics is developed systematically. This second edition is not only a complete overhaul of its predecessor, but also adds some 140 pages of new material. Many chapters are revised or have sections reflecting new insights and developments in MDS. There are two new chapters, one on asymmetric models and the other on unfolding. There are also numerous exercises that help the reader to practice what he or she has learned, and to delve deeper into the models and its intricacies. These exercises make it easier to use this edition in a course. All data sets used in the book can be downloaded from the web. The appendix on computer programs has also been updated and enlarged to reflect the state of the art.","author":[{"family":"Borg","given":"I."},{"family":"Groenen","given":"P. J. F."}],"citation-key":"borgModernMultidimensionalScaling2005","edition":"2nd","ISBN":"0-387-25150-2","issued":{"date-parts":[[2005,8]]},"note":"Published: Hardcover","publisher":"Springer","title":"Modern Multidimensional Scaling: Theory and Applications (Springer Series in Statistics)","type":"book","URL":"http://www.worldcat.org/isbn/0387251502"}, + {"id":"boringSensationPerceptionHistory1942","author":[{"literal":"Boring"}],"citation-key":"boringSensationPerceptionHistory1942","issued":{"date-parts":[[1942]]},"title":"Sensation and Perception in the History of Experimental Psychology","type":"book","URL":"http://www.amazon.com/Sensation-Perception-History-Experimental-Psychology/dp/B000GQSKFK"}, + {"id":"bornModernMusicCulture1987","author":[{"family":"Born","given":"Georgina"}],"citation-key":"bornModernMusicCulture1987","container-title":"New Formations","issued":{"date-parts":[[1987]]},"page":"51–78","title":"Modern music culture: on shock, pop and synthesis","type":"article-journal"}, + {"id":"boulezOrientationsCollectedWritings1990","author":[{"family":"Boulez","given":"Pierre"}],"citation-key":"boulezOrientationsCollectedWritings1990","ISBN":"0-674-64376-3","issued":{"date-parts":[[1990,3]]},"note":"Published: Paperback","publisher":"Harvard University Press","title":"Orientations: Collected Writings","type":"book","URL":"http://www.worldcat.org/isbn/0674643763"}, + {"id":"bovermannComputationMaterialLive2014","abstract":"What does computation sound like, and how can computational processing be integrated into live-coding practice along with code? This article gives insights into three years of artistic research and performance practice with Betablocker, an imaginary central processing unit architecture, specifically designed and implemented for live-coding purposes. It covers the themes of algorithmic composition, sound generation, genetic programming, and autonomous coding in the light of self-manipulating code and artistic research practice.","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Bovermann","given":"Till"},{"family":"Griffiths","given":"Dave"}],"citation-key":"bovermannComputationMaterialLive2014","container-title":"Computer Music Journal","ISSN":"0148-9267","issue":"1","issued":{"date-parts":[[2014]]},"page":"40-53","publisher":"The MIT Press","source":"JSTOR","title":"Computation as Material in Live Coding","type":"article-journal","URL":"https://www.jstor.org/stable/24265531","volume":"38"}, + {"id":"BraidingTechnologyTextiles","accessed":{"date-parts":[[2017,3,20]]},"citation-key":"BraidingTechnologyTextiles","title":"Braiding Technology for Textiles - 1st Edition","type":"webpage","URL":"https://www.elsevier.com/books/braiding-technology-for-textiles/kyosev/978-0-85709-135-2"}, + {"id":"brakhageMetaphorsVision1976","author":[{"family":"Brakhage","given":"Stan"}],"citation-key":"brakhageMetaphorsVision1976","edition":"2nd","ISBN":"0-317-55956-7","issued":{"date-parts":[[1976]]},"note":"Published: Paperback","publisher":"Anthology Film Archives","title":"Metaphors on Vision","type":"book","URL":"http://www.worldcat.org/isbn/0317559567"}, + {"id":"bregmanAuditorySceneAnalysis1994","abstract":"\"Bregman has written a major book, a unique and important contribution to the rapidly expanding field of complex auditory perception. This is a big, rich, and fulfilling piece of work that deserves the wide audience it is sure to attract.\" – Stewart H. Hulse, Science

Auditory Scene Analysis addresses the problem of hearing complex auditory environments, using a series of creative analogies to describe the process required of the human auditory system as it analyzes mixtures of sounds to recover descriptions of individual sounds. In a unified and comprehensive way, Bregman establishes a theoretical framework that integrates his findings with an unusually wide range of previous research in psychoacoustics, speech perception, music theory and composition, and computer modeling.","author":[{"family":"Bregman","given":"Albert S."}],"citation-key":"bregmanAuditorySceneAnalysis1994","ISBN":"0-262-52195-4","issued":{"date-parts":[[1994,9]]},"note":"Published: Paperback","publisher":"The MIT Press","title":"Auditory Scene Analysis: The Perceptual Organization of Sound","type":"book","URL":"http://www.worldcat.org/isbn/0262521954"}, + {"id":"brescianiCollaborativeDimensionsFramework2008","abstract":"Facilitating collaborative knowledge work is a crucial issue in management: knowledge is a key corporate asset, but it is typically spread across various people in different organizational functions. In this paper we explore how conceptual visualizations (such as diagrams, visual metaphors, charts, sketches) can be constructed and used as cognitive artefacts that support collaborative knowledge work. In order to facilitate tasks such as the creation and sharing of knowledge in teams, we propose a collaborative dimensions framework as a tool for understanding how visual artefacts can facilitate collaboration in circumstances that involve distributed knowledge. The framework is based on the widespread Cognitive Dimensions of Notation framework and is enriched with criteria from the boundary object paradigm discussed in organization science. The dimensions of the framework are described and then applied to three different visualizations that are used in collaborative knowledge work. A discussion of future research needs concludes the paper.","author":[{"family":"Bresciani","given":"Sabrina"},{"family":"Blackwell","given":"Alan F."},{"family":"Eppler","given":"Martin"}],"citation-key":"brescianiCollaborativeDimensionsFramework2008","container-title":"Hawaii International Conference on System Sciences","DOI":"10.1109/hicss.2008.7","ISSN":"1530-1605","issued":{"date-parts":[[2008]]},"page":"364+","title":"A Collaborative Dimensions Framework: Understanding the Mediating Role of Conceptual Visualizations in Collaborative Knowledge Work","type":"article-journal","URL":"http://dx.doi.org/10.1109/hicss.2008.7","volume":"0"}, + {"id":"brewerScientistsAreNot2006","abstract":"In 1880, Galton carried out an investigation of imagery in a sample of distinguished men and a sample of nonscientists (adolescent male students). He concluded that scientists were either totally lacking in visual imagery or had ” feeble” powers of mental imagery. This finding has been widely accepted in the secondary literature in psychology. A replication of Galton's study with modern scientists and modern university undergraduates found no scientists totally lacking in visual imagery and very few with feeble visual imagery. Examination of Galton's published data shows that his own published data do not support his claims about deficient visual imagery in scientists. The modern data for scientists and nonscientists and the 1880 data for scientists and nonscientists are in agreement in showing that all groups report substantial imagery on recollective memory tasks such as Galton's breakfast questionnaire. We conclude that Galton's conclusions were an example of theory-laden interpretation of data based on the initial responses from several very salient scientists who reported little or no visual imagery on Galton's imagery questionnaire.","author":[{"family":"Brewer","given":"William F."},{"family":"Schommer-Aikins","given":"Marlene"}],"citation-key":"brewerScientistsAreNot2006","container-title":"Review of General Psychology","DOI":"10.1037/1089-2680.10.2.130","ISSN":"1089-2680","issue":"2","issued":{"date-parts":[[2006]]},"page":"130–146","title":"Scientists Are Not Deficient in Mental Imagery: Galton Revised.","type":"article-journal","URL":"http://dx.doi.org/10.1037/1089-2680.10.2.130","volume":"10"}, + {"id":"brewsterUsingNonspeechSound1997","abstract":"With ever increasing amounts of visual information to take in when interacting with computers, users can become overloaded. One reason is that computers communicate solely by graphical output. This paper suggests the use of non-speech sound output to enhance the graphical display of information to overcome overload. The question is how to integrate the display of sound and graphics to capitalise on the advantages each offers. The approach described here is to integrate sound into the basic components of the human-computer interface. Two experiments are described where non-speech sounds were added to buttons and scrollbars. Results showed sound improved usability by increasing performance and reducing time to recover from errors. Subjective workload measures also showed a significant reduction. Results from this work show that the integrated display of graphical and auditory information can overcome information overload. \\copyright 1997 Elsevier Science B.V.","author":[{"family":"Brewster","given":"S. A."}],"citation-key":"brewsterUsingNonspeechSound1997","container-title":"Displays","issue":"3-4","issued":{"date-parts":[[1997]]},"page":"179–189","title":"Using non-speech sound to overcome information overload","type":"article-journal","volume":"17"}, + {"id":"brezineAlgorithmsAutomationProduction2011","abstract":"This Handbook explores the history of mathematics under a series of themes which raise new questions about what mathematics has been and what it has meant to practice it. It addresses questions of who creates mathematics, who uses it, and how. A broader understanding of mathematical practitioners naturally leads to a new appreciation of what counts as a historical source. Material and oral evidence is drawn upon as well as an unusual array of textual sources. Further, the ways in which people have chosen to express themselves are as historically meaningful as the contents of the mathematics they have produced. Mathematics is not a fixed and unchanging entity. New questions, contexts, and applications all influence what counts as productive ways of thinking. Because the history of mathematics should interact constructively with other ways of studying the past, the contributors to this book come from a diverse range of intellectual backgrounds in anthropology, archaeology, art history, philosophy, and literature, as well as history of mathematics more traditionally understood.The thirty-six self-contained, multifaceted chapters, each written by a specialist, are arranged under three main headings: 'Geographies and Cultures', 'Peoples and Practices', and 'Interactions and Interpretations'. Together they deal with the mathematics of 5000 years, but without privileging the past three centuries, and an impressive range of periods and places with many points of cross-reference between chapters. The key mathematical cultures of North America, Europe, the Middle East, India, and China are all represented here as well as areas which are not often treated in mainstream history of mathematics, such as Russia, the Balkans, Vietnam, and South America. This Handbook will be a vital reference for graduates and researchers in mathematics, historians of science, and general historians.","author":[{"family":"Brezine","given":"Carrie"}],"citation-key":"brezineAlgorithmsAutomationProduction2011","collection-title":"Oxford Handbooks","container-title":"The Oxford Handbook of the History of Mathematics","editor":[{"family":"Robson","given":"E"},{"family":"Stedall","given":"J"}],"event-place":"Oxford, New York","ISBN":"978-0-19-960319-0","issued":{"date-parts":[[2011,4,1]]},"page":"468-492","publisher":"Oxford University Press","publisher-place":"Oxford, New York","source":"Oxford University Press","title":"Algorithms and automation: the production of mathematics and textiles","type":"chapter"}, + {"id":"brezinecarrieCreatingSymmetryLoom2004","abstract":"This is the companion volume to the authors' groundbreaking Symmetries of Culture, the classic reference for symmetry analysis of pattern for anthropologists, archaeologists, art historians, mathematicians, and designers. Central to symmetry analysis is the use of symmetry in the more precise sense of its geometrical isometries in contrast to its everyday meaning of balance. For this volume, Donald Crowe and Dorothy Washburn invited colleagues from several disciplines to apply the method of symmetry analysis to actual case studies from cultures around the world. The essays compiled here explore how cultural information is embedded in the symmetrical structure of pattern. From descriptions of patterns on objects as diverse as Nasca embroideries, Ica Valley ceramics, Quechua textiles, Yombe mats, and Zulu beadwork, as well as from Amazonian shamanic therapy, ceramic design among the Shipibo, and Turkish Yörük weaving, the contributors reveal how the symmetrical structures in the patterns describe aspects of each culture's fundamental principles for living in the world. This approach offers a profoundly fresh way to read the meaning in pattern by arguing that pattern communicates through the structural metaphors embedded in the symmetrical relationship of the pattern parts. The two volumes together offer readers a revolutionary new window into the communicative importance of design.","author":[{"family":"Brezine, Carrie","given":""}],"citation-key":"brezinecarrieCreatingSymmetryLoom2004","container-title":"Symmetry Comes of Age: The Role of Pattern in Culture","editor":[{"family":"Washburn","given":"Dorothy Koster"},{"family":"Crowe","given":"Donald Warren"}],"ISBN":"978-0-295-98366-0","issued":{"date-parts":[[2004]]},"language":"en","page":"65-80","publisher":"University of Washington Press","source":"Google Books","title":"Creating Symmetry on the Loom","type":"chapter"}, + {"id":"bridleNewDarkAge2018","abstract":"We live in times of increasing inscrutability. Our news feeds are filled with unverified, unverifiable speculation, much of it automatically generated by anonymous software. As a result, we no longer understand what is happening around us. Underlying all of these trends is a single idea: the belief that quantitative data can provide a coherent model of the world, and the efficacy of computable information to provide us with ways of acting within it. Yet the sheer volume of information available to us today reveals less than we hope. Rather, it heralds a new Dark Age: a world of ever-increasing incomprehension. In his brilliant new work, leading artist and writer James Bridle offers us a warning against the future in which the contemporary promise of a new technologically assisted Enlightenment may just deliver its opposite: an age of complex uncertainty, predictive algorithms, surveillance, and the hollowing out of empathy. Surveying the history of art, technology and information systems he reveals the dark clouds that gather over discussions of the digital sublime.","author":[{"family":"Bridle","given":"James"}],"citation-key":"bridleNewDarkAge2018","edition":"Illustrated edition","event-place":"London ; Brooklyn, NY","ISBN":"978-1-78663-547-1","issued":{"date-parts":[[2018,7,17]]},"language":"English","number-of-pages":"304","publisher":"Verso Books","publisher-place":"London ; Brooklyn, NY","source":"Amazon","title":"New Dark Age: Technology and the End of the Future","title-short":"New Dark Age","type":"book"}, + {"id":"bringhurstElementsTypographicStyle2004","author":[{"family":"Bringhurst","given":"Robert"}],"citation-key":"bringhurstElementsTypographicStyle2004","edition":"Third","ISBN":"0-88179-132-6","issued":{"date-parts":[[2004]]},"note":"Published: Paperback","publisher":"Hartley & Marks Publishers","title":"The Elements of Typographic Style","type":"book","URL":"http://www.worldcat.org/isbn/0881791326"}, + {"id":"bromleyLISPLoreGuide1987","author":[{"family":"Bromley","given":"H."},{"family":"Lamson","given":"Richard"}],"citation-key":"bromleyLISPLoreGuide1987","edition":"2nd","ISBN":"0-89838-228-9","issued":{"date-parts":[[1987,6]]},"note":"Published: Hardcover","publisher":"Springer","title":"LISP Lore: A Guide to Programming the LISP Machine","type":"book","URL":"http://www.worldcat.org/isbn/0898382289"}, + {"id":"brooksIntelligenceRepresentation1991","abstract":"Artificial intelligence research has foundered on the issue of representation. When intelligence is approached in an incremental manner, with strict reliance on interfacing to the real world through perception and action, reliance on representation disappears. In this paper we outline our approach to incrementally building complete intelligent Creatures. The fundamental decomposition of the intelligent system is not into independent information processing units which must interface with each other via representations. Instead, the intelligent system is decomposed into independent and parallel activity producers which all interface directly to the world through perception and action, rather than interface to each other particularly much. The notions of central and peripheral systems evaporateeverything is both central and peripheral. Based on these principles we have built a very successful series of mobile robots which operate without supervision as Creatures in standard office environ...","author":[{"family":"Brooks","given":"Rodney"}],"citation-key":"brooksIntelligenceRepresentation1991","container-title":"Artificial Intelligence","issued":{"date-parts":[[1991]]},"page":"139–159","title":"Intelligence Without Representation","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.12.1680","volume":"47"}, + {"id":"broudyBookLoomsHistory1993","abstract":"The handloom--often no more than a bundle of sticks and a few lengths of cordage--has been known to almost all cultures for thousands of years. Eric Broduy places the wide variety of handlooms in historical context. What influenced their development? How did they travel from one geographic area to another? Were they invented independently by different cultures? How have modern cultures improved on ancient weaving skills and methods? Broudy shows how virtually every culture, no matter how primitive, has woven on handlooms. He highlights the incredible technical achievement of primitive cultures that created magnificent textiles with the crudest of tools and demonstrates that modern technology has done nothing to surpass their skill or inventiveness.","author":[{"family":"Broudy","given":"Eric"}],"citation-key":"broudyBookLoomsHistory1993","ISBN":"978-0-87451-649-4","issued":{"date-parts":[[1993]]},"language":"en","number-of-pages":"182","publisher":"UPNE","source":"Google Books","title":"The Book of Looms: A History of the Handloom from Ancient Times to the Present","title-short":"The Book of Looms","type":"book"}, + {"id":"brownWhiteHeatCold2009","citation-key":"brownWhiteHeatCold2009","editor":[{"family":"Brown","given":"Paul"},{"family":"Gere","given":"Charlie"},{"family":"Lambert","given":"Nicholas"},{"family":"Mason","given":"Catherine"}],"ISBN":"0-262-02653-8","issued":{"date-parts":[[2009,2]]},"note":"Published: Hardcover","publisher":"The MIT Press","title":"White Heat Cold Logic: British Computer Art 1960-1980 (Leonardo Books)","type":"book","URL":"http://www.worldcat.org/isbn/0262026538"}, + {"id":"bruunSkalViDanse2013","author":[{"family":"Bruun","given":"Kirstine"}],"citation-key":"bruunSkalViDanse2013","issued":{"date-parts":[[2013,11]]},"note":"Published: Online; http://www.kunsten.nu/artikler/artikel.php?slub+livekodning+performance+kunsthal+aarhus+dave+griffiths+alex+mclean+algorave","title":"Skal vi danse til koden?","type":"manuscript"}, + {"id":"burgLIVE13Proceedings2013","citation-key":"burgLIVE13Proceedings2013","editor":[{"family":"Burg","given":"Brian"},{"family":"Kuhn","given":"Adrian"},{"family":"Parnin","given":"Chris"}],"event-place":"San Francisco, California","issued":{"date-parts":[[2013]]},"publisher":"IEEE Press","publisher-place":"San Francisco, California","title":"LIVE '13: Proceedings of the 1st International Workshop on Live Programming","type":"book"}, + {"id":"burgoyneNonlinearScalingTechniques2007","author":[{"family":"Burgoyne","given":"John A."},{"family":"McAdams","given":"Stephen"}],"citation-key":"burgoyneNonlinearScalingTechniques2007","container-title":"International Computer Music Conference (ICMC 2007)","issued":{"date-parts":[[2007]]},"page":"73–76","title":"Non-linear scaling techniques for uncovering the perceptual dimensions of timbre","type":"paper-conference"}, + {"id":"burlandUnderstandingLiveCoding2016","author":[{"family":"Burland","given":"Karen"},{"family":"McLean","given":"Alex"}],"citation-key":"burlandUnderstandingLiveCoding2016","container-title":"International Journal of Performance Arts and Digital Media","DOI":"10.1080/14794713.2016.1227596","issue":"2","issued":{"date-parts":[[2016]]},"page":"139–151","title":"Understanding live coding events","type":"article-journal","URL":"http://dx.doi.org/10.1080/14794713.2016.1227596","volume":"12"}, + {"id":"burnettImplementingLevelLiveness1998","abstract":"An increasingly common characteristic in visual programming languages (VPLs) is level 4 liveness—the constant monitoring of the system state with continuous redisplay as events arrive and computations progress. However, level 4 liveness can be expensive. In this paper, we present an implementation method that supports level 4 liveness in declarative VPLs, ensuring without \"unreasonable\" cost that all values on the screen are correctly updated as computations progress. The method is especially well-suited for the growing class of declarative VPLs that display continuously time-varying calculations and graphics, such as GUI specification VPLs, event-based or reactive VPLs, scientific visualization VPLs, or graphical simulation VPLs. 1. Introduction Many declarative visual programming languages (VPLs) today employ immediate visual feedback to support programming. To categorize the immediacy of feedback provided, Tanimoto coined the term \"liveness,\" which categorizes the immediacy of s...","author":[{"family":"Burnett","given":"Margaret"},{"family":"Atwood","given":"John W."},{"family":"Welch","given":"Zachary T."}],"citation-key":"burnettImplementingLevelLiveness1998","container-title":"In 1998 IEEE Symposium on Visual Languages","issued":{"date-parts":[[1998]]},"page":"1–4","title":"Implementing Level 4 Liveness in Declarative Visual Programming Languages","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.55.8303"}, + {"id":"butlerUnlockingGrooveRhythm2006","author":[{"family":"Butler","given":"Mark J."}],"citation-key":"butlerUnlockingGrooveRhythm2006","ISBN":"0-253-21804-7","issued":{"date-parts":[[2006,2]]},"note":"Published: Paperback","publisher":"Indiana University Press","title":"Unlocking the Groove: Rhythm, Meter, and Musical Design in Electronic Dance Music (Profiles in Popular Music)","type":"book","URL":"http://www.worldcat.org/isbn/0253218047"}, + {"id":"buzsakiRhythmsBrain2006","abstract":"Studies of mechanisms in the brain that allow complicated things to happen in a coordinated fashion have produced some of the most spectacular discoveries in neuroscience. This book provides eloquent support for the idea that spontaneous neuron activity, far from being mere noise, is actually the source of our cognitive abilities. It takes a fresh look at the co-evolution of structure and function in the mammalian brain, illustrating how self-emerged oscillatory timing is the brains fundamental organizer of neuronal information. The small world-like connectivity of the cerebral cortex allows for global computation on multiple spatial and temporal scales. The perpetual interactions among the multiple network oscillators keep cortical systems in a highly sensitive metastable state and provide energy-efficient synchronizing mechanisms via weak links. In a sequence of cycles, Gyorgy Buzsaki guides the reader from the physics of oscillations through neuronal assembly organization to complex cognitive processing and memory storage. His clear, fluid writing accessible to any reader with some scientific knowledge is supplemented by extensive footnotes and references that make it just as gratifying and instructive a read for the specialist. The coherent view of a single author who has been at the forefront of research in this exciting field, this volume is essential reading for anyone interested in our rapidly evolving understanding of the brain.","author":[{"family":"Buzsaki","given":"Gyorgy"}],"citation-key":"buzsakiRhythmsBrain2006","edition":"First","ISBN":"0-19-530106-4","issued":{"date-parts":[[2006,8]]},"note":"Published: Hardcover","publisher":"Oxford University Press","title":"Rhythms of the Brain","type":"book","URL":"http://www.worldcat.org/isbn/0195301064"}, + {"id":"caclinAcousticCorrelatesTimbre2005","author":[{"family":"Caclin","given":"Anne"},{"family":"McAdams","given":"Stephen"},{"family":"Smith","given":"Bennett K."},{"family":"Winsberg","given":"Suzanne"}],"citation-key":"caclinAcousticCorrelatesTimbre2005","container-title":"The Journal of the Acoustical Society of America","issue":"1","issued":{"date-parts":[[2005]]},"page":"471–482","title":"Acoustic correlates of timbre space dimensions: A confirmatory study using synthetic tones","type":"article-journal","URL":"http://scitation.aip.org/getabs/servlet/GetabsServlet?prog=normal&id=JASMAN000118000001000471000001&idtype=cvips&gifs=yes","volume":"118"}, + {"id":"cageArtTechnology1969","author":[{"family":"Cage","given":"John"}],"citation-key":"cageArtTechnology1969","container-title":"John Cage: Writer","issued":{"date-parts":[[1969]]},"publisher":"Cooper Square Press","title":"Art and Technology","type":"chapter"}, + {"id":"calvo-merinoActionObservationAcquired2005","abstract":"When we observe someone performing an action, do our brains simulate making that action? Acquired motor skills offer a unique way to test this question, since people differ widely in the actions they have learned to perform. We used functional magnetic resonance imaging to study differences in brain activity between watching an action that one has learned to do and an action that one has not, in order to assess whether the brain processes of action observation are modulated by the expertise and motor repertoire of the observer. Experts in classical ballet, experts in capoeira and inexpert control subjects viewed videos of ballet or capoeira actions. Comparing the brain activity when dancers watched their own dance style versus the other style therefore reveals the influence of motor expertise on action observation. We found greater bilateral activations in premotor cortex and intraparietal sulcus, right superior parietal lobe and left posterior superior temporal sulcus when expert dancers viewed movements that they had been trained to perform compared to movements they had not. Our results show that this 'mirror system' integrates observed actions of others with an individual's personal motor repertoire, and suggest that the human brain understands actions by motor simulation.","author":[{"family":"Calvo-Merino","given":"B."},{"family":"Glaser","given":"D. E."},{"family":"Grèzes","given":"J."},{"family":"Passingham","given":"R. E."},{"family":"Haggard","given":"P."}],"citation-key":"calvo-merinoActionObservationAcquired2005","container-title":"Cerebral cortex (New York, N.Y. : 1991)","DOI":"10.1093/cercor/bhi007","ISSN":"1047-3211","issue":"8","issued":{"date-parts":[[2005,8]]},"page":"1243–1249","PMID":"15616133","title":"Action observation and acquired motor skills: an FMRI study with expert dancers.","type":"article-journal","URL":"http://dx.doi.org/10.1093/cercor/bhi007","volume":"15"}, + {"id":"campbellCanntaireachdArticulateMusic1880","author":[{"family":"Campbell","given":"John F."}],"citation-key":"campbellCanntaireachdArticulateMusic1880","issued":{"date-parts":[[1880]]},"publisher":"Archibald Sinclair","title":"Canntaireachd : articulate music","type":"book"}, + {"id":"campbellTimbre2008","author":[{"family":"Campbell","given":"Murray"}],"citation-key":"campbellTimbre2008","container-title":"Grove Music Online","issued":{"date-parts":[[2008]]},"title":"Timbre (i)","type":"article-journal"}, + {"id":"carelloPerceptionObjectLength1998","abstract":"Although hearing is classically considered a temporal sense, everyday listening suggests that subtle spatial properties constitute an important part of what people know about the world through sound. Typically neglected in psychoacoustics research, the ability to perceive the precise sizes of objects on the basis of sound was investigated during the routine event of dropping wooden dowels of different lengths onto a hard surface. In two experiments, the ordinal and metrical success of naive listeners was related to length but not to the simple acoustic variables (duration, amplitude, frequency) likely to be related to it. Additional analysis suggests the potential relevance of an object's inertia tensor in constraining perception of that object's length, analogous to the case that has been made for perceiving length by effortful touch.","author":[{"family":"Carello","given":"Claudia"},{"family":"Anderson","given":"Krista L."},{"family":"Kunkler-Peck","given":"Andrew J."}],"citation-key":"carelloPerceptionObjectLength1998","container-title":"Psychological Science","DOI":"10.1111/1467-9280.00040","issue":"3","issued":{"date-parts":[[1998,5]]},"page":"211–214","title":"Perception of Object Length by Sound","type":"article-journal","URL":"http://dx.doi.org/10.1111/1467-9280.00040","volume":"9"}, + {"id":"carpenterOpenSourceEmbroidery2006","author":[{"family":"Carpenter","given":"Ele"},{"family":"Laccetti","given":"Jess"}],"citation-key":"carpenterOpenSourceEmbroidery2006","issued":{"date-parts":[[2006]]},"title":"Open Source Embroidery (interview)","type":"manuscript"}, + {"id":"carpenterPoliticisedSociallyEngaged2008","author":[{"family":"Carpenter","given":"Eleanor J."}],"citation-key":"carpenterPoliticisedSociallyEngaged2008","issued":{"date-parts":[[2008]]},"publisher":"University of Sunderland","title":"Politicised Socially Engaged Art and New Media Art","type":"thesis"}, + {"id":"carringtonTalkingDrumsAfrica1969","abstract":"In this study, Carrington explains how the drum can be used so skillfully as to convey, not merely a signal, but a language.","author":[{"family":"Carrington","given":"John F."}],"citation-key":"carringtonTalkingDrumsAfrica1969","ISBN":"0-8371-1292-3","issued":{"date-parts":[[1969,5]]},"note":"Published: Hardcover","publisher":"Greenwood Press Reprint","title":"Talking Drums of Africa","type":"book","URL":"http://www.worldcat.org/isbn/0837112923"}, + {"id":"carterWordpainting2009","author":[{"family":"Carter","given":"Tim"}],"citation-key":"carterWordpainting2009","container-title":"Grove Music Online","issued":{"date-parts":[[2009]]},"title":"Word-painting","type":"article-journal"}, + {"id":"casconeAestheticsFailurePostDigital2000","author":[{"family":"Cascone","given":"Kim"}],"citation-key":"casconeAestheticsFailurePostDigital2000","container-title":"Computer Music Journal","issue":"4","issued":{"date-parts":[[2000]]},"page":"12–18","title":"The Aesthetics of Failure: \"Post-Digital\" Tendencies in Contemporary Computer Music","type":"article-journal","volume":"24"}, + {"id":"casconeGrainSequenceSystem2003","author":[{"family":"Cascone","given":"K."}],"citation-key":"casconeGrainSequenceSystem2003","container-title":"Soundcultures","editor":[{"family":"Kleiner","given":"M. S."},{"family":"Szepanski","given":"A."}],"issued":{"date-parts":[[2003]]},"publisher":"Suhrkamp","title":"Grain, Sequence, System (three levels of reception in the performance of laptop music)","type":"chapter"}, + {"id":"casconeLaptopMusicCounterfeiting2002","author":[{"family":"Cascone","given":"Kim"}],"citation-key":"casconeLaptopMusicCounterfeiting2002","container-title":"Parachute Contemporary Art","issue":"107","issued":{"date-parts":[[2002,6]]},"page":"52–60","title":"Laptop Music - counterfeiting aura in the age of infinite reproduction","type":"article-journal","URL":"http://www.parachute.ca/public/+100/107.htm"}, + {"id":"castagne10CriteriaEvaluating2003","abstract":"The success recently encountered by physically-based modeling (or model-based approaches) for music should not mask the deep challenges that remain in this area. This article first proposes an overview of the various goals that researchers and musicians, respectively operating from scientific and end-user perspectives, may pursue. Among these goals, those recently proposed or particularly critical for the coming years of research are highlighted. The article then introduces ten criteria that...","author":[{"family":"Castagne","given":"Nicolas"},{"family":"Cadoz","given":"Claude"}],"citation-key":"castagne10CriteriaEvaluating2003","container-title":"International Conference on Digital Audio Effects","issued":{"date-parts":[[2003]]},"title":"10 Criteria for Evaluating Physical Modeling Schemes for Music Creation","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.5.3087"}, + {"id":"centerforhistoryandnewmediaZoteroQuickStart","author":[{"literal":"Center for History and New Media"}],"citation-key":"centerforhistoryandnewmediaZoteroQuickStart","title":"Zotero Quick Start Guide","type":"webpage","URL":"http://zotero.org/support/quick_start_guide"}, + {"id":"chabertAlgorithmsArithmetic1999","abstract":"Does a procedure exist for finding all the prime numbers? This question is, without doubt, as old as the science of Arithmetic itself and, as we shall see, leads on to other algorithmic problems. In this chapter we shall look at several famous algorithms in the history of Arithmetic.","accessed":{"date-parts":[[2020,2,13]]},"author":[{"family":"Chabert","given":"Jean-Luc"}],"citation-key":"chabertAlgorithmsArithmetic1999","container-title":"A History of Algorithms: From the Pebble to the Microchip","DOI":"10.1007/978-3-642-18192-4_9","editor":[{"family":"Chabert","given":"Jean-Luc"}],"event-place":"Berlin, Heidelberg","ISBN":"978-3-642-18192-4","issued":{"date-parts":[[1999]]},"language":"en","page":"239-281","publisher":"Springer","publisher-place":"Berlin, Heidelberg","source":"Springer Link","title":"Algorithms in Arithmetic","type":"chapter","URL":"https://doi.org/10.1007/978-3-642-18192-4_9"}, + {"id":"chabertAlgorithmsArithmeticOperations1999","abstract":"The basic arithmetic operations of the elementary school, multiplying and dividing, appear to have derived from extremely early economic needs, certainly earlier than the emergence of civilisations using writing. One of the earliest pieces of evidence of an algorithm of this type is to be found on a clay tablet found at Shuruppak, near Baghdad which concerns a problem of sharing. Engraved by a Sumerian at about 2500 BC, this tablet (see Section 1.1) illustrates the first of the ten episodes which we have chosen to illustrate a history which would occupy several volumes if it were to be written up in detail.","accessed":{"date-parts":[[2020,2,13]]},"author":[{"family":"Chabert","given":"Jean-Luc"}],"citation-key":"chabertAlgorithmsArithmeticOperations1999","container-title":"A History of Algorithms: From the Pebble to the Microchip","DOI":"10.1007/978-3-642-18192-4_2","editor":[{"family":"Chabert","given":"Jean-Luc"}],"event-place":"Berlin, Heidelberg","ISBN":"978-3-642-18192-4","issued":{"date-parts":[[1999]]},"language":"en","page":"7-47","publisher":"Springer","publisher-place":"Berlin, Heidelberg","source":"Springer Link","title":"Algorithms for Arithmetic Operations","type":"chapter","URL":"https://doi.org/10.1007/978-3-642-18192-4_2"}, + {"id":"chabertConceptAlgorithm1999","abstract":"So far we have looked at algorithms designed to solve particular problems. For the most part, algorithms were in use long before it was felt necessary to give a clear definition of what is meant by an algorithm. Today, an algorithm is defined as a finite and organised set of instructions, intended to provide the solution to a problem, and which must satisfy certain conditions. An example would be [10]: 1. The algorithm must be capable of being written in a certain language: a language is a set of words written using a defined alphabet. 2. The question that is posed is determined by some given data, called enter, for which the algorithm will be executed. 3. The algorithm is a procedure which is carried out step by step. 4. The action at each step is strictly determined by the algorithm, the entry data and the results obtained at previous steps. 5. The answer, called exit, is clearly specified. 6. Whatever the entry data, the execution of the algorithm will terminate after a finite number of steps.","accessed":{"date-parts":[[2020,2,13]]},"author":[{"family":"Chabert","given":"Jean-Luc"}],"citation-key":"chabertConceptAlgorithm1999","container-title":"A History of Algorithms: From the Pebble to the Microchip","DOI":"10.1007/978-3-642-18192-4_16","editor":[{"family":"Chabert","given":"Jean-Luc"}],"event-place":"Berlin, Heidelberg","ISBN":"978-3-642-18192-4","issued":{"date-parts":[[1999]]},"language":"en","page":"455-480","publisher":"Springer","publisher-place":"Berlin, Heidelberg","source":"Springer Link","title":"Towards the Concept of Algorithm","type":"chapter","URL":"https://doi.org/10.1007/978-3-642-18192-4_16"}, + {"id":"chabertEuclidAlgorithm1999","abstract":"We have already remarked in the introduction to this book, that Euclid’s algorithm often represents for the mathematician the prototype of algorithmic procedure, and that it has relevance right up to today. It can be of use, not only in the search for the greatest common divisor, as described by Euclid himself (Section 4.1), but also, by adapting the procedure, in the solution of indeterminate equations, leading to Bézout’s identity (Section 4.3). It allowed al-Khayyam to compare two ratios, or to show that they were equal (Section 4.2); this appears even more clearly in the writing of continued fractions which were systematically studied by Euler (Section 4.4). Finally, what may appear surprising, the algorithm can be used in Sturm’s method for determining the number of real roots of an algebraic equation (Section 4.5).","accessed":{"date-parts":[[2020,2,13]]},"author":[{"family":"Chabert","given":"Jean-Luc"}],"citation-key":"chabertEuclidAlgorithm1999","container-title":"A History of Algorithms: From the Pebble to the Microchip","DOI":"10.1007/978-3-642-18192-4_5","editor":[{"family":"Chabert","given":"Jean-Luc"}],"event-place":"Berlin, Heidelberg","ISBN":"978-3-642-18192-4","issued":{"date-parts":[[1999]]},"language":"en","page":"113-138","publisher":"Springer","publisher-place":"Berlin, Heidelberg","source":"Springer Link","title":"Euclid’s Algorithm","type":"chapter","URL":"https://doi.org/10.1007/978-3-642-18192-4_5"}, + {"id":"chabertIntroduction1999","abstract":"As for squares and roots equal to a number, it is as when you say this: a square and ten of its roots equal thirty-nine dirhams.","accessed":{"date-parts":[[2020,2,13]]},"author":[{"family":"Chabert","given":"Jean-Luc"}],"citation-key":"chabertIntroduction1999","container-title":"A History of Algorithms: From the Pebble to the Microchip","DOI":"10.1007/978-3-642-18192-4_1","editor":[{"family":"Chabert","given":"Jean-Luc"}],"event-place":"Berlin, Heidelberg","ISBN":"978-3-642-18192-4","issued":{"date-parts":[[1999]]},"language":"en","page":"1-6","publisher":"Springer","publisher-place":"Berlin, Heidelberg","source":"Springer Link","title":"Introduction","type":"chapter","URL":"https://doi.org/10.1007/978-3-642-18192-4_1"}, + {"id":"chaigneNumericalSimulationsPiano1994","author":[{"family":"Chaigne","given":"A."},{"family":"Askenfelt","given":"A."}],"citation-key":"chaigneNumericalSimulationsPiano1994","container-title":"Journal of the Acoustical Society of America","issue":"2","issued":{"date-parts":[[1994]]},"page":"1112–1118","title":"Numerical simulations of piano strings. Part 1: A physical model for a struck string using finite difference methods","type":"article-journal","volume":"95"}, + {"id":"chambersNonlexicalVocablesScottish1980","author":[{"family":"Chambers","given":"Christine K."}],"citation-key":"chambersNonlexicalVocablesScottish1980","issued":{"date-parts":[[1980]]},"publisher":"University of Edinburgh","title":"Non-lexical vocables in Scottish traditional music.","type":"thesis"}, + {"id":"changKaleidoIndividualisticVisual2009","author":[{"family":"Chang","given":"Agnes"}],"citation-key":"changKaleidoIndividualisticVisual2009","issued":{"date-parts":[[2009]]},"publisher":"Massachusetts Institute of Technology","title":"Kaleido: Individualistic Visual Interfaces for Software Development Environments","type":"thesis"}, + {"id":"chenOpenSourceChangeLogs2004","abstract":"A recent editorial in Empirical Software Engineering suggested that open-source software projects offer a great deal of data that can be used for experimentation. These data not only include source code, but also artifacts such as defect reports and update logs. A common type of update log that experimenters may wish to investigate is the ChangeLog, which lists changes and the reasons for which they were made. ChangeLog files are created to support the development of software rather than for the needs of researchers, so questions need to be asked about the limitations of using them to support research. This paper presents evidence that the ChangeLog files provided at three open-source web sites were incomplete. We examined at least three ChangeLog files for each of three different open-source software products, namely, GNUJSP, GCC-g++, and Jikes. We developed a method for counting changes that ensures that, as far as possible, each individual ChangeLog entry is treated as a single change. For each ChangeLog file, we compared the actual changes in the source code to the entries in the ChangeLog> file and discovered significant omissions. For example, using our change-counting method, only 35 of the 93 changes in version 1.11 of Jikes appear in the ChangeLog file—that is, over 62% of the changes were not recorded there. The percentage of omissions we found ranged from 3.7 to 78.6%. These are significant omissions that should be taken into account when using ChangeLog files for research. Before using ChangeLog files as a basis for research into the development and maintenance of open-source software, experimenters should carefully check for omissions and inaccuracies.","author":[{"family":"Chen","given":"Kai"},{"family":"Schach","given":"Stephen R."},{"family":"Yu","given":"Liguo"},{"family":"Offutt","given":"Jeff"},{"family":"Heller","given":"Gillian Z."}],"citation-key":"chenOpenSourceChangeLogs2004","container-title":"Empirical Softw. Engg.","ISSN":"1382-3256","issued":{"date-parts":[[2004,9]]},"page":"197–210","title":"Open-Source Change Logs","type":"article-journal","URL":"http://portal.acm.org/citation.cfm?id=990391","volume":"9"}, + {"id":"cheshireHackingMeetsClubbing2013","author":[{"family":"Cheshire","given":"Tom"}],"citation-key":"cheshireHackingMeetsClubbing2013","container-title":"Wired magazine (UK)","issued":{"date-parts":[[2013,9]]},"page":"85+","title":"Hacking meets clubbing with the 'algorave'","type":"article-journal"}, + {"id":"chewSpiralArrayAlgorithm2002","abstract":"Computer models for determining key boundaries are important tools for computer analysis of music, computational modeling of music cognition, content-based categorization and retrieval of music information and automatic generating of expressive performance. This paper proposes a Boundary Search Algorithm (BSA) for determining points of modulation in a piece of music using a geometric model for tonality called the Spiral Array. For a given number of key changes, the computational complexity of the algorithm is polynomial in the number of pitch events. We present and discuss computational results for two selections from J.S. Bach's ” A Little Notebook for Anna Magdalena”. Comparisons between the choices of an expert listener and the algorithm indicates that in human cognition, a dynamic interplay exists between memory and present knowledge, thus maximizing the opportunity for the information to coalesce into meaningful patterns.","author":[{"family":"Chew","given":"Elaine"}],"citation-key":"chewSpiralArrayAlgorithm2002","collection-title":"Lecture Notes in Computer Science","container-title":"Music and Artificial Intelligence","DOI":"10.1007/3-540-45722-4_4","editor":[{"family":"Anagnostopoulou","given":"Christina"},{"family":"Ferrand","given":"Miguel"},{"family":"Smaill","given":"Alan"},{"family":"Anagnostopoulou","given":"Christina"},{"family":"Ferrand","given":"Miguel"},{"family":"Smaill","given":"Alan"}],"event-place":"Berlin, Heidelberg","ISBN":"978-3-540-44145-8","issued":{"date-parts":[[2002,8]]},"page":"51–53","publisher":"Springer Berlin / Heidelberg","publisher-place":"Berlin, Heidelberg","title":"The Spiral Array: An Algorithm for Determining Key Boundaries","type":"chapter","URL":"http://dx.doi.org/10.1007/3-540-45722-4_4","volume":"2445"}, + {"id":"chienVisualLambdaCalculatorUsing2008","abstract":"Lambda calculus is an influential and extensively-used notation for describing computable functions, and Mind-Mapping is widely used as an expression of radiant thinking via a powerful graphical technique. In this paper, we introduce a completely visual representation based on typed Mind Maps to represent steps of calculation for a pure untyped lambda calculator, VLM. This visual representation has serveral advantages over traditional textual and visual calculators. VLM uses typed Mind Maps for both the lambda calculator input and ouput. Although VLM is designed as a computable typed Mind Maps node of our Typed Mind Maps API project [1], it can also be applied to learning and teaching the concepts of lambda calculus as a visualization of traditional textual rewrite steps. Moreover, the lambda calculus queries and the results of queries are both represented as FreeMind files, and that allows them to be organized and deployed easily. However, the Mind-Mapping of lambda calculus is interesting and elegant in its own right.","author":[{"family":"Chien","given":"Li R."},{"family":"Buehre","given":"Daniel J."}],"citation-key":"chienVisualLambdaCalculatorUsing2008","container-title":"Computer and Electrical Engineering, International Conference on","DOI":"10.1109/iccee.2008.124","issued":{"date-parts":[[2008]]},"page":"250–255","title":"A Visual Lambda-Calculator Using Typed Mind-Maps","type":"article-journal","URL":"http://dx.doi.org/10.1109/iccee.2008.124","volume":"0"}, + {"id":"chomskyThreeModelsDescription1956","abstract":"We investigate several conceptions of linguistic structure to determine whether or not they can provide simple and \"revealing\" grammars that generate all of the sentences of English and only these. We find that no finite-state Markov process that produces symbols with transition from state to state can serve as an English grammar. Furthermore, the particular subclass of such processes that produce","author":[{"family":"Chomsky","given":"N."}],"citation-key":"chomskyThreeModelsDescription1956","container-title":"IRE Transactions on Information Theory","DOI":"10.1109/tit.1956.1056813","ISSN":"0096-1000","issue":"3","issued":{"date-parts":[[1956,9]]},"page":"113–124","title":"Three models for the description of language","type":"article-journal","URL":"http://dx.doi.org/10.1109/tit.1956.1056813","volume":"2"}, + {"id":"chongFMRIAdaptationReveals2008","abstract":"Mirror neurons, as originally described in the macaque, have two defining properties [1, 2]: They respond specifically to a particular action (e.g., bringing an object to the mouth), and they produce their action-specific responses independent of whether the monkey executes the action or passively observes a conspecific performing the same action. In humans, action observation and action execution engage a network of frontal, parietal, and temporal areas. However, it is unclear whether these responses reflect the activity of a single population that represents both observed and executed actions in a common neural code or the activity of distinct but overlapping populations of exclusively perceptual and motor neurons [3]. Here, we used fMRI adaptation to show that the right inferior parietal lobe (IPL) responds independently to specific actions regardless of whether they are observed or executed. Specifically, responses in the right IPL were attenuated when participants observed a recently executed action relative to one that had not previously been performed. This adaptation across action and perception demonstrates that the right IPL responds selectively to the motoric and perceptual representations of actions and is the first evidence for a neural response in humans that shows both defining properties of mirror neurons.","author":[{"family":"Chong","given":"Trevor T. J."},{"family":"Cunnington","given":"Ross"},{"family":"Williams","given":"Mark A."},{"family":"Kanwisher","given":"Nancy"},{"family":"Mattingley","given":"Jason B."}],"citation-key":"chongFMRIAdaptationReveals2008","container-title":"Current biology : CB","DOI":"10.1016/j.cub.2008.08.068","ISSN":"0960-9822","issue":"20","issued":{"date-parts":[[2008,10]]},"page":"1576–1580","PMCID":"PMC2766090","PMID":"18948009","title":"fMRI adaptation reveals mirror neurons in human inferior parietal cortex.","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.cub.2008.08.068","volume":"18"}, + {"id":"choTakelumaExplorationSound2005","abstract":"Modern linguistic theory suggests that the sign is arbitrary, that the relationship between signifier and signified has no discernible pattern. ( ” Dog” could mean cat, and vice versa.) Marketing experts and advertisers, those who create names for new products, think otherwise, that the sounds of words and neologisms can evoke images which elicit an emotional impact. Different sounds can ” feel” sharp or dull, for example; they can give a phenomenological response. Poets, of course, realize that the sounds words make can be used towards expressive means. While morphemes—roots, prefixes and suffixes—have generally been considered the base level of meaning, some studies suggest that phonemes can influence meaning on a subconscious level, perhaps resulting from the physiology of how we produce different sounds in speech. In this paper and accompanying project, I am interested in the relationship between spoken and written language and will look at examples in which meaning plays a integral role in how speech and writing are represented. I will be looking at cases in which the signifier and signified connect in ways Saussure would not have expected. I am especially interested in what might be considered a synaesthetic result: sound and vision are tightly coupled, tied together through meaning. This paper will explore the relationships among issues of sound, writing, meaning, the machine, the line, and the body, by considering previous explorations including invented alphabets, phonetic writing systems, machines for automatic transcription of speech, among others.","author":[{"family":"Cho","given":"Peter"}],"citation-key":"choTakelumaExplorationSound2005","issued":{"date-parts":[[2005]]},"publisher":"University of California, Los Angeles","title":"Takeluma: An Exploration of Sound, Meaning, and Writing","type":"thesis"}, + {"id":"churchCalculiLambdaConversion1941","abstract":"An abstract is not available.","author":[{"family":"Church","given":"Alonzo"}],"citation-key":"churchCalculiLambdaConversion1941","event-place":"Princeton, NJ, USA","ISBN":"0-691-08394-0","issued":{"date-parts":[[1941]]},"publisher":"Princeton University Press","publisher-place":"Princeton, NJ, USA","title":"The Calculi of Lambda Conversion.","type":"book","URL":"http://portal.acm.org/citation.cfm?id=1096495"}, + {"id":"churchCognitiveDimensionsShort2008","author":[{"family":"Church","given":"Luke"},{"family":"Green","given":"Thomas"}],"citation-key":"churchCognitiveDimensionsShort2008","container-title":"Proceedings of 20th Psychology of Programming Interest Group 2008","issued":{"date-parts":[[2008]]},"title":"Cognitive Dimensions - a short tutorial","type":"paper-conference"}, + {"id":"churchLivenessNotationUse2010","author":[{"family":"Church","given":"L."},{"family":"Nash","given":"C."},{"family":"Blackwell","given":"A. F."}],"citation-key":"churchLivenessNotationUse2010","container-title":"Proceedings of the 22nd Annual Workshop of the Psychology of Programming Interest Group (PPIG 2010)","issued":{"date-parts":[[2010]]},"page":"2–11","title":"Liveness in notation use: From music to programming","type":"paper-conference"}, + {"id":"cienkiWhyStudyMetaphor2008","author":[{"family":"Cienki","given":"Alan"}],"citation-key":"cienkiWhyStudyMetaphor2008","container-title":"Metaphor and Gesture","editor":[{"family":"Cienki","given":"Alan"},{"family":"Müller","given":"Cornelia"}],"ISBN":"90-272-2843-4","issued":{"date-parts":[[2008,6]]},"note":"Published: Hardcover","publisher":"John Benjamins Publishing Company","title":"Why study metaphor and gesture?","type":"chapter","URL":"http://www.worldcat.org/isbn/9027228434"}, + {"id":"claphamWhenFabricHangs1980","abstract":"C. R. J. Clapham; When a Fabric Hangs together, Bulletin of the London Mathematical Society, Volume 12, Issue 3, 1 May 1980, Pages 161–164, https://doi.org/10.","accessed":{"date-parts":[[2020,4,9]]},"author":[{"family":"Clapham","given":"C. R. J."}],"citation-key":"claphamWhenFabricHangs1980","container-title":"Bulletin of the London Mathematical Society","container-title-short":"Bull London Math Soc","DOI":"10.1112/blms/12.3.161","ISSN":"0024-6093","issue":"3","issued":{"date-parts":[[1980,5,1]]},"language":"en","page":"161-164","publisher":"Oxford Academic","source":"academic.oup.com","title":"When a Fabric Hangs together","type":"article-journal","URL":"https://academic.oup.com/blms/article/12/3/161/320142","volume":"12"}, + {"id":"claphamWhenFabricHangs1980a","accessed":{"date-parts":[[2019,12,16]]},"author":[{"family":"Clapham","given":"C. R. J."}],"citation-key":"claphamWhenFabricHangs1980a","container-title":"Bulletin of the London Mathematical Society","DOI":"10.1112/blms/12.3.161","ISSN":"1469-2120","issue":"3","issued":{"date-parts":[[1980]]},"language":"en","page":"161-164","source":"Wiley Online Library","title":"When a Fabric Hangs together","type":"article-journal","URL":"https://londmathsoc.onlinelibrary.wiley.com/doi/abs/10.1112/blms/12.3.161","volume":"12"}, + {"id":"clarkeMusicMindEveryday2009","author":[{"family":"Clarke","given":"Eric"},{"family":"Dibben","given":"Nicola"},{"family":"Pitts","given":"Stephanie"}],"citation-key":"clarkeMusicMindEveryday2009","ISBN":"0-19-852557-5","issued":{"date-parts":[[2009,12]]},"note":"Published: Paperback","publisher":"Oxford University Press, USA","title":"Music and mind in everyday life","type":"book","URL":"http://www.worldcat.org/isbn/0198525575"}, + {"id":"clarkSupersizingMindEmbodiment2008","abstract":"When historian Charles Weiner found pages of Nobel Prize-winning physicist Richard Feynman's notes, he saw it as a \"record\" of Feynman's work. Feynman himself, however, insisted that the notes were not a record but the work itself. In Supersizing the Mind, Andy Clark argues that our thinking doesn't happen only in our heads but that \"certain forms of human cognizing include inextricable tangles of feedback, feed-forward and feed-around loops: loops that promiscuously criss-cross the boundaries of brain, body and world.\" The pen and paper of Feynman's thought are just such feedback loops, physical machinery that shape the flow of thought and enlarge the boundaries of mind. Drawing upon recent work in psychology, linguistics, neuroscience, artificial intelligence, robotics, human-computer systems, and beyond, Supersizing the Mind offers both a tour of the emerging cognitive landscape and a sustained argument in favor of a conception of mind that is extended rather than \"brain- bound.\" The importance of this new perspective is profound. If our minds themselves can include aspects of our social and physical environments, then the kinds of social and physical environments we create can reconfigure our minds and our capacity for thought and reason.","author":[{"family":"Clark","given":"Andy"}],"citation-key":"clarkSupersizingMindEmbodiment2008","ISBN":"0-19-533321-7","issued":{"date-parts":[[2008,11]]},"note":"Published: Hardcover","publisher":"Oxford University Press, USA","title":"Supersizing the Mind: Embodiment, Action, and Cognitive Extension (Philosophy of Mind Series)","type":"book","URL":"http://www.worldcat.org/isbn/0195333217"}, + {"id":"claytonTimeIndianMusic2008","author":[{"family":"Clayton","given":"Martin"}],"citation-key":"claytonTimeIndianMusic2008","ISBN":"0-19-533968-1","issued":{"date-parts":[[2008,8]]},"note":"Published: Paperback","publisher":"Oxford University Press, USA","title":"Time in Indian Music: Rhythm, Metre, and Form in North Indian Rag Performance (Oxford Monographs on Music)","type":"book","URL":"http://www.worldcat.org/isbn/0195339681"}, + {"id":"ClubRuins2016","abstract":"This past summer, during Atonal, a yearly festival for experimental electronic music held in a former power plant in Berlin, my friend Daniel Fisher, the DJ Physical Therapy, posed a ...","accessed":{"date-parts":[[2017,4,6]]},"citation-key":"ClubRuins2016","container-title":"Flash Art","issued":{"date-parts":[[2016,11,16]]},"title":"Club Ruins","type":"post-weblog","URL":"http://www.flashartonline.com/article/club-ruins/"}, + {"id":"cockerLiveNotationReflections2014","author":[{"family":"Cocker","given":"Emma"}],"citation-key":"cockerLiveNotationReflections2014","container-title":"Performance Research Journal","editor":[{"family":"Fletcher","given":"Jerome"},{"family":"Allsopp","given":"Ric"}],"issue":"5","issued":{"date-parts":[[2014,1]]},"title":"Live Notation - Reflections on a Kairotic Practice","type":"article-journal","volume":"18"}, + {"id":"cockerPerformingThinkingAction2016","abstract":"Within this article, live coding is conceived as a meletē, an Ancient Greek term used to describe a meditative thought experiment or exercise in thought, especially understood as a preparatory practice supporting other forms of critical – even ethical – action. Underpinned by the principle of performing its thinking through ‘showing the screen’, live coding involves ‘making visible’ the process of its own unfolding through the public sharing of live decision-making within improvisatory performance practice. Live coding can also be conceived as the performing of ‘thinking-in-action’, a live and embodied navigation of various critical thresholds, affordances and restraints, where its thinking-knowing cannot be easily transmitted nor is it strictly a latent knowledge or ‘know-how’ activated through action. Live coding involves the live negotiation between receptivity and spontaneity, between the embodied and intuitive, between an immersive flow experience and split-attention, between human and machine, the known and not yet known. Moreover, in performing ‘thinking-in-action’, live coding emerges as an experimental site for reflecting on different perceptions and possibilities of temporal experience within live performance: for attending to the threshold between the live and mediated, between present and future–present, proposing even a quality of atemporality or aliveness.","author":[{"family":"Cocker","given":"Emma"}],"citation-key":"cockerPerformingThinkingAction2016","container-title":"International Journal of Performance Arts and Digital Media","DOI":"10.1080/14794713.2016.1227597","ISSN":"1479-4713","issue":"2","issued":{"date-parts":[[2016,7,2]]},"page":"102-116","source":"Taylor and Francis+NEJM","title":"Performing thinking in action: the meletē of live coding","title-short":"Performing thinking in action","type":"article-journal","URL":"http://dx.doi.org/10.1080/14794713.2016.1227597","volume":"12"}, + {"id":"cockerWeavingCodesCoding2017","abstract":"Drawing on her experience as “critical interlocutor” within the research project Weaving Codes/Coding Weaves, in this article Emma Cocker reflects on the human qualities of attention, cognitive agility and tactical intelligence activated within live coding and ancient weaving with reference to the Ancient Greek concepts of technē, kairos and mêtis. The article explores how the specificity of “thinking-in-action” cultivated within improvisatory live coding relates to the embodied “thought-in-motion” activated whilst working on the loom. Echoing the wider concerns of Weaving Codes/Coding Weaves, an attempt is made to redefine the relation between weave and code by dislodging the dominant utilitarian histories that connect computer and the loom, instead placing emphasis on the potentially resistant and subversive forms of live thinking-and-knowing cultivated within live coding and ancient weaving. Cocker addresses the Penelopean poetics of both practices, proposing how the combination of kairotic timing and timeliness with the mêtic act of “doing-undoing-redoing” therein offers a subversive alternative to—even critique of—certain utilitarian technological developments (within both coding and weaving) which in privileging efficiency and optimization can delimit creative possibilities, reducing the potential of human intervention and invention in the seizing of opportunity, accident, chance and contingency.","author":[{"family":"Cocker","given":"Emma"}],"citation-key":"cockerWeavingCodesCoding2017","container-title":"TEXTILE","DOI":"10.1080/14759756.2017.1298233","ISSN":"1475-9756","issue":"2","issued":{"date-parts":[[2017,4,3]]},"page":"124-141","source":"Taylor and Francis+NEJM","title":"Weaving Codes/Coding Weaves: Penelopean Mêtis and the Weaver-Coder’s Kairos","title-short":"Weaving Codes/Coding Weaves","type":"article-journal","URL":"https://doi.org/10.1080/14759756.2017.1298233","volume":"15"}, + {"id":"cockerWhatNowWhat2018","abstract":"Drawing on my experience as a critical interlocutor within the AHRC research projects Live Notation: Transforming Matters of Performance (2012) and Weaving Codes | Coding Weaves (2014–2016), in this article, I propose a conceptual framework for considering the challenges and opportunities for kairotic improvisation within live coding, conceived as an embodied mode of imminent and immanent intervention and invention-in-the-middle, a practice of radical timing and timeliness. Expanding my previous reflections on kairotic coding [Cocker, Emma. (2014). “Live Notation: Reflections on a Kairotic Practice.” In Performance Research Journal, on Writing and Digital Media, edited by Jerome Fletcher and Ric Allsopp, 18 (5), 69–76. London: Routledge; Cocker, Emma. (2016). “Performing Thinking in Action: The Meletē of Live Coding.” International Journal of Performance Arts and Digital Media 12 (2): 102–116. Cocker, Emma. (2017). “Weaving Codes/Coding Weaves: Penelopean Mêtis and the Weaver-Coder’s Kairos.” Textile 15 (2): 124–141], in this article, I address the kairotic liveness within live coding’s improvisational performance by identifying two seemingly contradictory tendencies within this burgeoning genre. On the one hand, there is a call for improved media technologies enabling greater immediacy of semantic feedback supporting a faster, more fluid—perhaps even virtuoso—approach to improvisation. Alongside, there remains interest within the live coding community for a mode of improvisational performativity that harnesses the unpredictable, the unexpected or as-yet-unknown. Rather than regard these two tendencies in antagonistic relation, my intent is to invite further debate on how the development of intelligent machines might better facilitate improvisatory flow, without eradicating the critical intervals and in-between spaces necessary for creative invention and intervention, without smoothing away the points of technical resistance and intransigence which arguably form a part of live coding’s performative texture.","accessed":{"date-parts":[[2022,2,7]]},"author":[{"family":"Cocker","given":"Emma"}],"citation-key":"cockerWhatNowWhat2018","container-title":"Digital Creativity","DOI":"10.1080/14626268.2017.1419978","ISSN":"1462-6268","issue":"1","issued":{"date-parts":[[2018,1,2]]},"note":"_eprint: https://doi.org/10.1080/14626268.2017.1419978","page":"82-95","publisher":"Routledge","source":"Taylor and Francis+NEJM","title":"What now, what next—kairotic coding and the unfolding future seized","type":"article-journal","URL":"https://doi.org/10.1080/14626268.2017.1419978","volume":"29"}, + {"id":"cohenHowDrawThree1988","author":[{"family":"Cohen","given":"H."}],"citation-key":"cohenHowDrawThree1988","container-title":"AAAI","issued":{"date-parts":[[1988]]},"page":"846–855","title":"How To Draw Three People In A Botanical Garden","type":"article-journal","volume":"89"}, + {"id":"colacoMiningSoftwareChange2009","abstract":"Version control systems are among the type of repositories that are frequently explored as sources of software change history. They can be mined to identify associations between software module modifications. This information is useful to support software modification activities, indicating to software engineers which modules are usually modified together during software maintenance or evolution. Previous works published on the subject focused on mining associations from open source software projects. This article presents the use of association mining in an industrial environment. The study was set up as a formal experiment and studied 18 systems developed in a large Brazilian beverage company. The results show that the precision of the rules obtained in this environment are even higher than its counterpart obtained in open source projects. This suggests that this approach is very useful in this type of environment.","author":[{"family":"Colaco","given":"M."},{"family":"Mendonca","given":"M."},{"family":"Rodrigues","given":"F."}],"citation-key":"colacoMiningSoftwareChange2009","container-title":"Software Engineering, 2009. SBES '09. XXIII Brazilian Symposium on","DOI":"10.1109/sbes.2009.8","issued":{"date-parts":[[2009,10]]},"page":"54–61","title":"Mining Software Change History in an Industrial Environment","type":"article-journal","URL":"http://dx.doi.org/10.1109/sbes.2009.8"}, + {"id":"coleSoundsSignsAspects1974","author":[{"family":"Cole","given":"Hugo"}],"citation-key":"coleSoundsSignsAspects1974","issued":{"date-parts":[[1974]]},"publisher":"Oxford University Press, London ; New York :","title":"Sounds and signs : aspects of musical notation / by Hugh Cole","type":"book"}, + {"id":"collingeMOXIELanguageComputer1984","author":[{"family":"Collinge","given":"D. J."}],"citation-key":"collingeMOXIELanguageComputer1984","container-title":"Proceedings of the International Computer Music Conference","issued":{"date-parts":[[1984]]},"page":"217–220","title":"MOXIE: A Language for Computer Music Performance","type":"paper-conference"}, + {"id":"collingwoodTechniquesTabletWeaving2015","abstract":"\"RECOMMENDED NEW EDITION ISBN: 978-1626542143\" When Techniques of Tablet Weaving was first published in 1982 it sold out almost immediately. Weavers, fiber artists, and collectors, hungry for the vast and carefully organized repository of information it contained, have spent years excitedly sharing dog-eared paperback editions and roughly photocopied excerpts of this one-of-a-kind volume. No commercially published book, before or since, has captured the amount and quality of information and research on the art of tablet weaving (also known as card weaving). Finally, long-deprived cardweaving enthusiasts can own their very own copy of Peter Collingwood's landmark book thanks to this high-quality 2015 reprint, complete with dozens of detailed photographs, pattern examples, and step-by-step instructions for each of the techniques presented. In addition to instructional information, Techniques of Tablet Weaving contains pages of historical context for a variety of weaving techniques with clear and helpful tips on reproducing them precisely, as well as modern variations on the classics.","author":[{"family":"Collingwood","given":"Peter"}],"citation-key":"collingwoodTechniquesTabletWeaving2015","edition":"Illustrated edition","ISBN":"978-1-62654-214-3","issued":{"date-parts":[[2015,9,4]]},"language":"English","number-of-pages":"324","publisher":"Echo Point Books & Media","source":"Amazon","title":"The Techniques of Tablet Weaving","type":"book"}, + {"id":"collinsAlgoraveSurveyHistory2014","author":[{"family":"Collins","given":"Nick"},{"family":"McLean","given":"Alex"}],"citation-key":"collinsAlgoraveSurveyHistory2014","container-title":"Proceedings of the International Conference on New Interfaces for Musical Expression","issued":{"date-parts":[[2014]]},"title":"Algorave: A survey of the history, aesthetics and technology of live performance of algorithmic electronic dance music","type":"paper-conference"}, + {"id":"collinsAutonomousAgentsLive2006","author":[{"family":"Collins","given":"Nick"}],"citation-key":"collinsAutonomousAgentsLive2006","issued":{"date-parts":[[2006]]},"publisher":"Centre for Science and Music, Faculty of Music, University of Cambridge","title":"Towards Autonomous Agents for Live Computer Music: Realtime Machine Listening and Interactive Music Systems","type":"thesis"}, + {"id":"collinsBBCut2IntegratingBeat2006","abstract":"Abstract BBCut2 is the latest manifestation of a software library for realtime algorithmic audio splicing. Machine listening capabilities are supported for realtime beat tracking and audio event analysis, such that splicing manipulations respect component events, and their micro-timing with respect to an inferred metrical structure. The architecture, whilst currently most effective for transient rich percussive signals, is modular enough to be extensible to new observation models. A scheduling system is described that can cope with splicing driven from an external clock, empowering realtime beat tracking led segmentation and other processing effects.","author":[{"family":"Collins","given":"Nick"}],"citation-key":"collinsBBCut2IntegratingBeat2006","container-title":"Journal of New Music Research","DOI":"10.1080/09298210600696600","issue":"1","issued":{"date-parts":[[2006,3]]},"page":"63–70","title":"BBCut2: Integrating beat tracking and on-the-fly event analysis","type":"article-journal","URL":"http://dx.doi.org/10.1080/09298210600696600","volume":"35"}, + {"id":"collinsCambridgeCompanionElectronic2008","citation-key":"collinsCambridgeCompanionElectronic2008","edition":"1","editor":[{"family":"Collins","given":"Nick"},{"family":"Escrivan","given":"Julio","non-dropping-particle":"d'"}],"ISBN":"0-521-68865-5","issued":{"date-parts":[[2008,1]]},"note":"Published: Paperback","publisher":"Cambridge University Press","title":"The Cambridge Companion to Electronic Music (Cambridge Companions to Music)","type":"book","URL":"http://www.worldcat.org/isbn/0521688655"}, + {"id":"collinsGenerativeMusicLaptop2003","abstract":"Live computer music is the perfect medium for generative music systems, for non-linear compositional constructions and for interactive manipulation of sound processing. Unfortunately, much of the complexity of these real-time systems is lost on a potential audience, excepting those few connoisseurs who sneak round the back to check the laptop screen. An artist using powerful software like SuperCollider or PD cannot be readily distinguished from someone checking their e-mail whilst DJ-ing with iTunes. Without a culture of understanding of both the laptop performer and current generation graphical and text-programming languages for audio, audiences tend to respond most to often gimmicky controllers, or to the tools they have had more exposure to - the (yawn) superstar DJs and their decks. This article attempts to convey the exciting things that are being explored with algorithmic composition and interactive synthesis techniques in live performance. The reasons for building generative music systems and the forms of control attainable over algorithmic processes are investigated. Direct manual control is set against the use of autonomous software agents. In line with this, four techniques for software control during live performance are introduced, namely presets, previewing, autopilot, and the powerful method of live coding. Finally, audio-visual collaboration is discussed.","author":[{"family":"Collins","given":"Nick"}],"citation-key":"collinsGenerativeMusicLaptop2003","container-title":"Contemporary Music Review","issue":"4","issued":{"date-parts":[[2003]]},"page":"67–79","title":"Generative Music and Laptop Performance","type":"article-journal","URL":"http://www.ingentaconnect.com/content/routledg/gcmr/2003/00000022/00000004/art00009","volume":"22"}, + {"id":"collinsIntroductionComputerMusic2010","author":[{"family":"Collins","given":"Nick"}],"citation-key":"collinsIntroductionComputerMusic2010","edition":"Desktop Edition","ISBN":"0-470-71455-7","issued":{"date-parts":[[2010,3]]},"note":"Published: Paperback","publisher":"Wiley","title":"Introduction to Computer Music","type":"book","URL":"http://www.worldcat.org/isbn/0470714557"}, + {"id":"collinsLiveCodingConsequence2011","author":[{"family":"Collins","given":"Nick"}],"citation-key":"collinsLiveCodingConsequence2011","container-title":"Leonardo","issue":"3","issued":{"date-parts":[[2011]]},"page":"207–211","title":"Live Coding of Consequence","type":"article-journal","URL":"http://muse.jhu.edu/journals/leonardo/v044/44.3.collins.html","volume":"44"}, + {"id":"collinsLiveCodingLaptop2003","abstract":"Seeking new forms of expression in computer music, a small number of laptop composers are braving the challenges of coding music on the fly. Not content to submit meekly to the rigid interfaces of performance software like Ableton Live or Reason, they work with programming languages, building their own custom software, tweaking or writing the programs themselves as they perform. Often this activity takes place within some established language for computer music like SuperCollider, but there is no reason to stop errant minds pursuing their innovations in general scripting languages like Perl. This paper presents an introduction to the field of live coding, of real-time scripting during laptop music performance, and the improvisatory power and risks involved. We look at two test cases, the command-line music of slub utilising, amongst a grab-bag of technologies, Perl and REALbasic, and Julian Rohrhuber's Just In Time library for SuperCollider. We try to give a flavour of an exciting but hazardous world at the forefront of live laptop performance.","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Collins","given":"Nick"},{"family":"McLEAN","given":"Alex"},{"family":"Rohrhuber","given":"Julian"},{"family":"Ward","given":"Adrian"}],"citation-key":"collinsLiveCodingLaptop2003","container-title":"Organised Sound","DOI":"10.1017/S135577180300030X","ISSN":"1469-8153, 1355-7718","issue":"3","issued":{"date-parts":[[2003,12]]},"language":"en","page":"321-330","publisher":"Cambridge University Press","source":"Cambridge University Press","title":"Live coding in laptop performance","type":"article-journal","URL":"https://www.cambridge.org/core/journals/organised-sound/article/abs/live-coding-in-laptop-performance/08F42B84BBCA427C345030481A3DDA0D","volume":"8"}, + {"id":"collinsLiveCodingLaptop2003a","abstract":"Seeking new forms of expression in computer music, a small number of laptop composers are braving the challenges of coding music on the fly. Not content to submit meekly to the rigid interfaces of performance software like Ableton Live or Reason, they work with programming languages, building their own custom software, tweaking or writing the programs themselves as they perform. Often this activity takes place within some established language for computer music like SuperCollider, but there is no reason to stop errant minds pursuing their innovations in general scripting languages like Perl. This paper presents an introduction to the field of live coding, of real-time scripting during laptop music performance, and the improvisatory power and risks involved. We look at two test cases, the command-line music of slub utilising, amongst a grab-bag of technologies, Perl and REALbasic, and Julian Rohrhuber's Just In Time library for SuperCollider. We try to give a flavour of an exciting but hazardous world at the forefront of live laptop performance.","author":[{"family":"Collins","given":"Nick"},{"family":"McLean","given":"Alex"},{"family":"Rohrhuber","given":"Julian"},{"family":"Ward","given":"Adrian"}],"citation-key":"collinsLiveCodingLaptop2003a","container-title":"Organised Sound","DOI":"10.1017/s135577180300030x","issue":"03","issued":{"date-parts":[[2003]]},"page":"321–330","title":"Live coding in laptop performance","type":"article-journal","URL":"http://dx.doi.org/10.1017/s135577180300030x","volume":"8"}, + {"id":"collinsLiveCodingPractice2007","author":[{"family":"Collins","given":"Nick"}],"citation-key":"collinsLiveCodingPractice2007","container-title":"Proceedings of New Interfaces for Musical Expression 2007","issued":{"date-parts":[[2007]]},"title":"Live Coding Practice","type":"paper-conference"}, + {"id":"collinsLLListeningLearning2011","author":[{"family":"Collins","given":"Nick"}],"citation-key":"collinsLLListeningLearning2011","issued":{"date-parts":[[2011]]},"publisher":"University of Sussex","title":"LL: Listening and Learning in an Interactive Improvisation System","type":"report"}, + {"id":"cookeLivenessMachineImprovisation2011","author":[{"family":"Cooke","given":"Grayson"}],"citation-key":"cookeLivenessMachineImprovisation2011","container-title":"Screen Sound","issued":{"date-parts":[[2011]]},"page":"9–26","title":"Liveness and the machine: improvisation in live audio-visual performance","type":"article-journal","volume":"2"}, + {"id":"cookIdentificationControlParameters1991","author":[{"family":"Cook","given":"Perry R."}],"citation-key":"cookIdentificationControlParameters1991","event-place":"Stanford, CA, USA","issued":{"date-parts":[[1991]]},"publisher":"Stanford Center for Computer Research in Music and Acoustics","publisher-place":"Stanford, CA, USA","title":"Identification of control parameters in an articulatory vocal tract model, with applications to the synthesis of singing","type":"thesis"}, + {"id":"cookInteractiveDynamicGraphics2007","abstract":"This richly illustrated book describes the use of interactive and dynamicgraphics as part of multidimensional data analysis. Chapters includeclustering, supervised classification, and working with missing values. Avariety of plots and interaction methods are used in each analysis, oftenstarting with brushing linked low-dimensional views and working up to manualmanipulation of tours of several variables. The role of graphical methods isshown at each step of the analysis, not only in the early exploratory phase,but in the later stages, too, when comparing and evaluating models.All examples are based on freely available software: GGobi for interactivegraphics and R for static graphics, modeling, and programming. The printedbook is augmented by a wealth of material on the web, encouraging readersfollow the examples themselves. The web site has all the data and codenecessary to reproduce the analyses in the book, along with moviesdemonstrating the examples.The book may be used as a text in a class on statistical graphics orexploratory data analysis, for example, or as a guide for the independentlearner. Each chapter ends with a set of exercises.The authors are both Fellows of the American Statistical Association, pastchairs of the Section on Statistical Graphics, and co-authors of the GGobisoftware. Dianne Cook is Professor of Statistics at Iowa State University.Deborah Swayne is a member of the Statistics Research Department at AT&T Labs.","author":[{"family":"Cook","given":"Dianne"},{"family":"Swayne","given":"Deborah F."}],"citation-key":"cookInteractiveDynamicGraphics2007","edition":"2007","ISBN":"0-387-71761-7","issued":{"date-parts":[[2007,12]]},"note":"Published: Paperback","publisher":"Springer","title":"Interactive and Dynamic Graphics for Data Analysis: With R and GGobi (Use R!)","type":"book","URL":"http://www.worldcat.org/isbn/0387717617"}, + {"id":"cookSynthesisToolKitSTK1999","abstract":"This paper presents a cross-platform C++ programming environment designed for rapid prototyping of music synthesis and audio processing programs. The Synthesis ToolKit offers an array of unit generators for filtering, input/output, etc., as well as examples of new and classic synthesis and effects algorithms for research, teaching, performance, and composition purposes.","author":[{"family":"Cook","given":"P."},{"family":"Scavone","given":"G."}],"citation-key":"cookSynthesisToolKitSTK1999","issued":{"date-parts":[[1999]]},"title":"The Synthesis ToolKit (STK","type":"book","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.27.4878"}, + {"id":"coxAestheticsGenerativeCode2000","author":[{"family":"Cox","given":"Geoff"},{"family":"McLean","given":"Alex"},{"family":"Ward","given":"Adrian"}],"citation-key":"coxAestheticsGenerativeCode2000","container-title":"International Conference on Generative Art","issued":{"date-parts":[[2000]]},"title":"The Aesthetics of Generative Code","type":"paper-conference"}, + {"id":"coxCodingPraxisReconsidering2004","author":[{"family":"Cox","given":"Geoff"},{"family":"McLean","given":"Alex"},{"family":"Ward","given":"Adrian"}],"citation-key":"coxCodingPraxisReconsidering2004","container-title":"read_me Software Art and Cultures","editor":[{"family":"Goriunova","given":"Olga"},{"family":"Shulgin","given":"Alexei"}],"issued":{"date-parts":[[2004]]},"page":"161–174","publisher":"Aarhus University Press","title":"Coding praxis: Reconsidering the aesthetics of code","type":"chapter"}, + {"id":"coxNotJustFun2014","author":[{"family":"Cox","given":"Geoff"},{"family":"McLean","given":"Alex"}],"citation-key":"coxNotJustFun2014","container-title":"Fun and Software: Exploring Pleasure, Paradox and Pain in Computing","editor":[{"family":"Goriunova","given":"Olga"}],"issued":{"date-parts":[[2014]]},"page":"157–173","publisher":"Bloomsbury","title":"Not Just For Fun","type":"chapter"}, + {"id":"coxPraxisProgrammationReconsiderer2011","author":[{"family":"Cox","given":"Geoff"},{"family":"McLean","given":"Alex"},{"family":"Ward","given":"Adrian"}],"citation-key":"coxPraxisProgrammationReconsiderer2011","container-title":"Art++","editor":[{"family":"Lartigaud","given":"David-Olivier"}],"issued":{"date-parts":[[2011]]},"page":"77–87","publisher":"HYX Editions","title":"Praxis de la programmation : reconsidérer L'esthétique do code généneratif","type":"chapter"}, + {"id":"coxSpeakingCodeCoding2012","author":[{"family":"Cox","given":"Geoff"},{"family":"McLean","given":"Alex"}],"citation-key":"coxSpeakingCodeCoding2012","collection-title":"Software Studies","ISBN":"978-0-262-01836-4","issued":{"date-parts":[[2012]]},"publisher":"MIT Press","title":"Speaking Code: Coding as Aesthetic and Political Expression","type":"book"}, + {"id":"craftConversationsIgorStravinsky1959","author":[{"family":"Craft","given":"Robert"}],"citation-key":"craftConversationsIgorStravinsky1959","issued":{"date-parts":[[1959,6]]},"publisher":"Doubleday & Co","title":"Conversations with Igor Stravinsky","type":"book","URL":"http://www.worldcat.org/isbn/0571255779"}, + {"id":"CraftsmanshipTechnologyChorality2019","abstract":"Giovanni Fanfani

L’articolo si propone di indagare àmbiti di interazione tra tessitura (e l’affine tecnica dell’intreccio) e coralità nella produzione lirica corale arcaica e classica, prendendo in considerazione aspetti della tecnologia e artigianato tessili in quanto questi vengono introiettati e proiettati nell’immaginario poetico della performance corale. La peculiare dinamica di interrelazione tra piacere estetico, principio di ordine nella variegatura, e armonica disposizione delle parti che contraddistingue la choreia nelle fonti letterarie (e che è illustrata in poesia greca arcaica dalla nozione di ποικιλία) informa ad un tempo la tecnologia e la logica della tessitura, una τέχνη cospicuamente associata nell’immaginario poetico alla ποικιλία e alla coralità. L’analisi dei passi interessati mostra come il verbo πλέκειν (e, in aggiunta ad esso, alcuni composti, sia verbi che aggettivi, dai temi πλεκ-/πλοκ-) è il termine di artigianato tessile più massicciamente impiegato dalle fonti letterarie in riferimento alla composizione poetica e, più specificamente, all’esecuzione di un Coro che danza, con l’epinicio quale sottogenere di lirica corale che in maniera più consistente si appropria della metapoetica della tessitura (in quanto sottogenere lirico-corale meglio attestato, ma anche in parte per questioni di continuità di genere letterario rispetto ad un repertorio di metafore di matrice Proto-Indoeuropea, e in parte per ragioni di pragmatica della performance epinicia). Viene inoltre proposta una rassegna selettiva dell’immagine dell’“intrecciare una danza corale”, con uno sguardo particolare al geranos in quanto esemplificativo di una modalità di danza le cui articolazioni orchestiche potevano prevedere un’interazione con tessuti reali: attraverso il recupero di un’ipotesi formulata in ambito di comparazione etnografica, si propone un possibile (quantunque interamente speculativo) scenario performativo per il geranos.

","accessed":{"date-parts":[[2021,4,30]]},"citation-key":"CraftsmanshipTechnologyChorality2019","issued":{"date-parts":[[2019,1,3]]},"language":"it-IT","title":"Craftsmanship and technology as chorality: the case of weaving imagery in Archaic and Classical choral lyric","title-short":"Craftsmanship and technology as chorality","type":"webpage","URL":"https://dionysusexmachina.it/dionysus2018/?p=4606"}, + {"id":"cramerWordsMadeFlesh2005","accessed":{"date-parts":[[2017,5,18]]},"author":[{"family":"Cramer","given":"Florian"}],"citation-key":"cramerWordsMadeFlesh2005","container-title":"Code, Culture, Imagination","issued":{"date-parts":[[2005]]},"source":"Google Scholar","title":"Words made flesh","type":"article-journal","URL":"https://monoskop.org/images/e/ee/Cramer_Florian_Words_Made_Flesh_Code_Culture_Imagination.pdf"}, + {"id":"crossMusicMeaning2008","author":[{"family":"Cross","given":"Ian"},{"family":"Tolbert","given":"Elizabeth"}],"citation-key":"crossMusicMeaning2008","container-title":"The Oxford Handbook of Music Psychology","issued":{"date-parts":[[2008]]},"publisher":"Oxford University Press","title":"Music and Meaning","type":"chapter"}, + {"id":"cruzDarwinianApproachMathematics2006","abstract":"In the past decades, recent paradigm shifts in ethology, psychology, and the social sciences have given rise to various new disciplines like cognitive ethology and evolutionary psychology. These disciplines use concepts and theories of evolutionary biology to understand and explain the design, function and origin of the brain. I shall argue that there are several good reasons why this approach could also apply to human mathematical abilities. I will review evidence from various disciplines (cognitive ethology, cognitive psychology, cognitive archaeology and neuropsychology) that suggests that the human capacity for mathematics is a category-specific domain of knowledge, hard-wired in the brain, which can be explained as the result of natural selection.","author":[{"family":"Cruz","given":"Helen"}],"citation-key":"cruzDarwinianApproachMathematics2006","container-title":"Foundations of Science","container-title-short":"Foundations of Science","DOI":"10.1007/s10699-004-5916-z","ISSN":"1233-1821","issue":"1-2","issued":{"date-parts":[[2006,3]]},"page":"157–196","title":"Towards a Darwinian Approach to Mathematics","type":"article-journal","URL":"http://dx.doi.org/10.1007/s10699-004-5916-z","volume":"11"}, + {"id":"csikszentmihalyiFlowPsychologyOptimal2008","author":[{"family":"Csikszentmihalyi","given":"Mihaly"}],"citation-key":"csikszentmihalyiFlowPsychologyOptimal2008","ISBN":"978-0-06-154812-3","issued":{"date-parts":[[2008]]},"publisher":"HarperCollins","title":"Flow: the psychology of optimal experience","type":"book","URL":"http://www.worldcat.org/isbn/9780061548123"}, + {"id":"cupchikSharedProcessesSpatial2001","abstract":"An experiment was conducted in which subjects performed a three-dimensional spatial rotation test (24 trials) and a new test involving judgments of musical permutations (64 trials). Two types of musical permutations were used, including retrograde and inverse. In a retrograde permutation, the criterion melody was played backward in the test melody, and in an inverse permutation, an ascending or descending interval in the criterion melody became an opposite in the test melody. Subjects included 32 male and 64 female undergraduates at the University of Toronto. Regression analysis clearly showed that it was easiest to compare short retrograde permutations and that accuracy at discerning retrograde permutations predicted accuracy at judging spatial rotations. The implication is that a higher order ability to discriminate contour underlies both kinds of judgments.","author":[{"family":"Cupchik","given":"G."}],"citation-key":"cupchikSharedProcessesSpatial2001","container-title":"Brain and Cognition","DOI":"10.1006/brcg.2001.1295","ISSN":"02782626","issue":"3","issued":{"date-parts":[[2001,8]]},"page":"373–382","PMID":"11487287","title":"Shared Processes in Spatial Rotation and Musical Permutation","type":"article-journal","URL":"http://dx.doi.org/10.1006/brcg.2001.1295","volume":"46"}, + {"id":"dahlMovementsAnalysisDrumming2006","author":[{"family":"Dahl","given":"Sofia"}],"citation-key":"dahlMovementsAnalysisDrumming2006","container-title":"Music, Motor Control and the Brain","editor":[{"family":"Wiesendanger","given":"M."},{"family":"Kesselring","given":"J."}],"event-place":"New York","issued":{"date-parts":[[2006]]},"page":"125–138","publisher":"Oxford University Press","publisher-place":"New York","title":"Movements and analysis of drumming","type":"chapter"}, + {"id":"damerauTechniqueComputerDetection1964","abstract":"The method described assumes that a word which cannot be found in a dictionary has at most one error, which might be a wrong, missing or extra letter or a single transposition. The unidentified input word is compared to the dictionary again, testing each time to see if the words match—assuming one of these errors occurred. During a test run on garbled text, correct identifications were made for over 95 percent of these error types.","author":[{"family":"Damerau","given":"Fred J."}],"citation-key":"damerauTechniqueComputerDetection1964","container-title":"Commun. ACM","issue":"3","issued":{"date-parts":[[1964]]},"page":"171–176","title":"A technique for computer detection and correction of spelling errors","type":"article-journal","URL":"http://portal.acm.org/citation.cfm?id=363994","volume":"7"}, + {"id":"danieleInterplayLinguisticHistorical2004","abstract":"New techniques for comparing rhythm in language and music [1]and new data on musical rhythm from a range of Western societies[2] provide an opportunity to study the relationship betweenlinguistic and musical rhythm in a number of cultures. Specifically,one can ask if ” stress-timed” and ” syllable-timed” languages areassociated with distinctive musical rhythms. If so, then it mightmake sense to speak of stress-timed and syllable-timed music. Inconducting such studies it is important to bear in mind that in anygiven culture there may be historical musical influences which runcounter to linguistic influences. We illustrate this point with anexamination of German/Austrian music. German is a stress-timedlanguage but it appears that the rhythm of much German/Austrianmusic (especially during the Baroque and Classical eras) does notreflect this linguistic rhythm [2]. This may be due to thewell-known influence of Italian music on German music duringthese eras [3]. Some support for this idea comes from a historicalanalysis of German/Austrian music, which shows that this musicbecomes more ” stress-timed” after the end of the Classical period","author":[{"family":"Daniele","given":"Joseph R."},{"family":"Patel","given":"Aniruddh D."}],"citation-key":"danieleInterplayLinguisticHistorical2004","container-title":"Proc. of the 8th Intl. Conference on Music Perception and Cognition","issued":{"date-parts":[[2004]]},"title":"The interplay of linguistic and historical influences on musical rhythm in different cultures","type":"article-journal"}, + {"id":"danielsWorldWritingSystems1996","citation-key":"danielsWorldWritingSystems1996","editor":[{"family":"Daniels","given":"Peter T."},{"family":"Bright","given":"William"}],"event-place":"New York","issued":{"date-parts":[[1996]]},"publisher":"Oxford University Press","publisher-place":"New York","title":"The World's Writing Systems","type":"book"}, + {"id":"darkeAssessmentTimbreUsing2005","abstract":"As part of the perceptual processing to form an abstract picture of a sound, the question arises as to how various timbral judgments are made. An early step in these 'processing stages' suggests that comparisons are made with our previous experiences of sounds. These experiences are often given descriptive labels by which we can communicate the concept of a timbre. It follows that a listener might be able to make qualitative assessments of a sound when asked to judge against the perception of this set of verbal attributes. This study looks at the effectiveness of communicating assessment judgments concerning timbre under controlled conditions. The work presented reports on a study where a group of musicians were asked to assess a number of musical sounds against 12 verbal attributes. The study is based around describing and analysing sounds from a subset of pitched European orchestral instruments. Using statistical analysis, the collated judgements are analysed to indicate the level of agreement that can be obtained from a collective view of each attribute. Some evidence of agreement between assessments is shown by the use of group means and variances, along with a preliminary discussion on a few of the reasons behind the inconsistencies.","author":[{"family":"Darke","given":"Graham"}],"citation-key":"darkeAssessmentTimbreUsing2005","container-title":"Proceedings of the Conference on Interdisciplinary Musicology","issued":{"date-parts":[[2005]]},"title":"Assessment of Timbre Using Verbal Attributes","type":"paper-conference"}, + {"id":"dausilioMotorSomatotopySpeech2009","abstract":"Listening to speech recruits a network of fronto-temporo-parietal cortical areas. Classical models consider anterior (motor) sites to be involved in speech production whereas posterior sites are considered to be involved in comprehension. This functional segregation is challenged by action-perception theories suggesting that brain circuits for speech articulation and speech perception are functionally dependent. Although recent data show that speech listening elicits motor activities analogous to production, it's still debated whether motor circuits play a causal contribution to the perception of speech. Here we administered transcranial magnetic stimulation (TMS) to motor cortex controlling lips and tongue during the discrimination of lip- and tongue-articulated phonemes. We found a neurofunctional double dissociation in speech sound discrimination, supporting the idea that motor structures provide a specific functional contribution to the perception of speech sounds. Moreover, our findings show a fine-grained motor somatotopy for speech comprehension. We discuss our results in light of a modified \"motor theory of speech perception\" according to which speech comprehension is grounded in motor circuits not exclusively involved in speech production.","author":[{"family":"D'Ausilio","given":"Alessandro"},{"family":"Pulvermüller","given":"Friedemann"},{"family":"Salmas","given":"Paola"},{"family":"Bufalari","given":"Ilaria"},{"family":"Begliomini","given":"Chiara"},{"family":"Fadiga","given":"Luciano"}],"citation-key":"dausilioMotorSomatotopySpeech2009","container-title":"Current biology : CB","DOI":"10.1016/j.cub.2009.01.017","ISSN":"1879-0445","issue":"5","issued":{"date-parts":[[2009,3]]},"page":"381–385","PMID":"19217297","title":"The motor somatotopy of speech perception.","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.cub.2009.01.017","volume":"19"}, + {"id":"davisLearningConsolidationNovel2009","author":[{"family":"Davis","given":"Matthew H."},{"family":"Di Betta","given":"Anna M."},{"family":"Macdonald","given":"Mark J. E."},{"family":"Gaskell","given":"Gareth M."}],"citation-key":"davisLearningConsolidationNovel2009","container-title":"Journal of Cognitive Neuroscience","DOI":"10.1162/jocn.2009.21059","issue":"4","issued":{"date-parts":[[2009]]},"page":"803–820","title":"Learning and Consolidation of Novel Spoken Words","type":"article-journal","URL":"http://www.mitpressjournals.org/doi/abs/10.1162/jocn.2009.21059","volume":"21"}, + {"id":"deanMirageRealtimeAlgorithmic2006","abstract":"This article looks at algorithmic synaesthesia, a form of sonic intermedia involving synchronous computer-mediated manipulation of sound and image. In algorithmic synaesthesia extensively shared features are created in the two media. Examples of such work by austraLYSIS and others are discussed. What an audience member can cognitively access in such synaesthesia is considered: creators of intermedia works may overestimate this. The fact that a machine can process image and sound in parallel, and by the same algorithm, does not establish that the human brain can. The transparency of an algorithmic process to a listener-viewer-screener is a core issue in auditory display (or `sonification'). Sonification aims to make the segmentation of a data set more accessible than it is when represented numerically or visually, and has many practical and creative applications. Current approaches in experimental cognition may assist us in evaluating these issues.","author":[{"family":"Dean","given":"Roger"},{"family":"Whitelaw","given":"Mitchell"},{"family":"Smith","given":"Hazel"},{"family":"Worrall","given":"David"}],"citation-key":"deanMirageRealtimeAlgorithmic2006","container-title":"Contemporary Music Review","issue":"4","issued":{"date-parts":[[2006,8]]},"page":"311–326","title":"The mirage of real-time algorithmic synaesthesia: Some compositional mechanisms and research agendas in computer music and sonification","type":"article-journal","URL":"http://www.ingentaconnect.com/content/routledg/gcmr/2006/00000025/00000004/art00003","volume":"25"}, + {"id":"deanOxfordHandbookAlgorithmic2018","abstract":"With the ongoing development of algorithmic composition programs and communities of practice expanding, algorithmic music faces a turning point. Joining dozens of emerging and established scholars alongside leading practitioners in the field, chapters in this Handbook both describe the state of algorithmic composition and also set the agenda for critical research on and analysis of algorithmic music. Organized into four sections, chapters explore the music's history, utility, community, politics, and potential for mass consumption. Contributors address such issues as the role of algorithms as co-performers, live coding practices, and discussions of the algorithmic culture as it currently exists and what it can potentially contribute society, education, and ecommerce. Chapters engage particularly with post-human perspectives - what new musics are now being found through algorithmic means which humans could not otherwise have made - and, in reciprocation, how algorithmic music is being assimilated back into human culture and what meanings it subsequently takes. Blending technical, artistic, cultural, and scientific viewpoints, this Handbook positions algorithmic music making as an essentially human activity.","citation-key":"deanOxfordHandbookAlgorithmic2018","editor":[{"family":"Dean","given":"Roger T."},{"family":"McLean","given":"Alex"}],"event-place":"New York, NY","ISBN":"978-0-19-022699-2","issued":{"date-parts":[[2018,3]]},"language":"English","number-of-pages":"680","publisher":"OUP USA","publisher-place":"New York, NY","source":"Amazon","title":"The Oxford Handbook of Algorithmic Music","type":"book"}, + {"id":"debbenWhatWeHear2001","author":[{"family":"Debben","given":"Nicola"}],"citation-key":"debbenWhatWeHear2001","container-title":"Musicae Scientiae","issue":"2","issued":{"date-parts":[[2001]]},"page":"161–194","title":"What do we hear when we hear music? Music perception and musical material.","type":"article-journal","volume":"5"}, + {"id":"dehaene-lambertzFunctionalNeuroimagingSpeech2002","abstract":"10.1126/science.1077066","author":[{"family":"Dehaene-Lambertz","given":"Ghislaine"},{"family":"Dehaene","given":"Stanislas"},{"family":"Hertz-Pannier","given":"Lucie"}],"citation-key":"dehaene-lambertzFunctionalNeuroimagingSpeech2002","container-title":"Science","DOI":"10.1126/science.1077066","issue":"5600","issued":{"date-parts":[[2002,12]]},"page":"2013–2015","PMID":"12471265","title":"Functional Neuroimaging of Speech Perception in Infants","type":"article-journal","URL":"http://dx.doi.org/10.1126/science.1077066","volume":"298"}, + {"id":"delahuntaTransactables2004","author":[{"family":"deLahunta","given":"S."},{"family":"McGregor","given":"W."},{"family":"Blackwell","given":"A. F."}],"citation-key":"delahuntaTransactables2004","container-title":"Performance Research","issue":"2","issued":{"date-parts":[[2004]]},"page":"67–72","title":"Transactables","type":"article-journal","volume":"9"}, + {"id":"deleuze1440SmoothStriated1987","author":[{"family":"Deleuze","given":"Gilles"},{"family":"Guattari","given":"Félix"}],"citation-key":"deleuze1440SmoothStriated1987","container-title":"Thousand Plateaus: Capitalism and Schizophrenia","edition":"First","ISBN":"0-8166-1402-4","issued":{"date-parts":[[1987,12]]},"note":"Published: Paperback","publisher":"University of Minnesota Press","title":"1440: The Smooth and the Striated","type":"chapter","URL":"http://www.worldcat.org/isbn/0816614024"}, + {"id":"deleuzeThousandPlateausCapitaliism2013","abstract":"A Thousand Plateaus is the second part of Deleuze and Guattari's landmark philosophical project, Capitalism and Schizophrenia - a project that still sets the terms of contemporary philosophical debate. Written over a seven year period, A Thousand Plateaus provides a compelling analysis of social phenomena and offers fresh alternatives for thinking about philosophy and culture. Its radical perspective provides a toolbox for 'nomadic thought' and has had a galvanizing influence on today's anti-capitalist movement.","author":[{"family":"Deleuze","given":"Gilles"},{"family":"Guattari","given":"Felix"}],"citation-key":"deleuzeThousandPlateausCapitaliism2013","event-place":"London","ISBN":"978-1-78093-537-9","issued":{"date-parts":[[2013,4,25]]},"language":"English","number-of-pages":"744","publisher":"Bloomsbury Academic","publisher-place":"London","source":"Amazon","title":"A Thousand Plateaus: Capitaliism and Schizophrenia","title-short":"A Thousand Plateaus","type":"book"}, + {"id":"demirAutomatedCancerDiagnosis2005","author":[{"family":"Demir","given":"Cigdem"},{"family":"Yener","given":"Bulent"}],"citation-key":"demirAutomatedCancerDiagnosis2005","issued":{"date-parts":[[2005]]},"publisher":"Rensselaer Polytechnic Institute","title":"Automated Cancer Diagnosis Based on Histopathological Systematic Images: A Systematic Survey","type":"book"}, + {"id":"denningUbiquitySymposiumWhat2010","abstract":"Most people understand a computation as a process evoked when a computational agent acts on its inputs under the control of an algorithm. The classical Turing machine model has long served as the fundamental reference model because an appropriate Turing machine can simulate every other computational model known. The Turing model is a good abstraction for most digital computers because the number of steps to execute a Turing machine algorithm is predictive of the running time of the computation on a digital computer. However, the Turing model is not as well matched for the natural, interactive, and continuous information processes frequently encountered today. Other models whose structures more closely match the information processes involved give better predictions of running time and space. Models based on transforming representations may be useful.","author":[{"family":"Denning","given":"Peter J."}],"citation-key":"denningUbiquitySymposiumWhat2010","container-title":"Ubiquity","DOI":"10.1145/1880066.1880067","ISSN":"1530-2180","issued":{"date-parts":[[2010]]},"title":"Ubiquity symposium 'What is computation?': Opening statement","type":"article-journal","URL":"http://dx.doi.org/10.1145/1880066.1880067","volume":"2010"}, + {"id":"derijkeQuackProjectCD2003","author":[{"family":"Rijke","given":"Victoria","non-dropping-particle":"de"},{"family":"Ward","given":"Adrian"},{"family":"Stockhausen","given":"K."},{"family":"Drever","given":"John L."},{"family":"Abdullah","given":"Hattice"}],"citation-key":"derijkeQuackProjectCD2003","issued":{"date-parts":[[2003]]},"title":"Quack Project CD cover notes","type":"book"}, + {"id":"descartesRulesDirectionMind1978","author":[{"family":"Descartes","given":"René"}],"citation-key":"descartesRulesDirectionMind1978","container-title":"The Philosophical works of Descartes","issued":{"date-parts":[[1978]]},"page":"1-77","publisher":"Cambridge University Press","title":"Rules for the Direction of the Mind","translator":[{"family":"Haldane","given":"E"},{"family":"Ross","given":"G.R.T."}],"type":"chapter","volume":"1"}, + {"id":"desilvaNovelFacetrackingMouth2004","abstract":"We describe a simple, computationally light, real-time system for tracking the lower face and extracting information about the shape of the open mouth from a video sequence. The system allows unencumbered control of audio synthesis modules by action of the mouth. We report work in progress to use the mouth controller to interact with a physical model of sound production by the avian syrinx.","author":[{"family":"Silva","given":"Gamhewage C.","non-dropping-particle":"de"},{"family":"Smyth","given":"Tamara"},{"family":"Lyons","given":"Michael J."}],"citation-key":"desilvaNovelFacetrackingMouth2004","collection-title":"NIME '04","container-title":"Proceedings of the 2004 conference on New interfaces for musical expression","event-place":"Hamamatsu, Shizuoka, Japan","issued":{"date-parts":[[2004]]},"page":"169–172","publisher":"National University of Singapore","publisher-place":"Hamamatsu, Shizuoka, Japan","title":"A novel face-tracking mouth controller and its application to interacting with bioacoustic models","type":"paper-conference","URL":"http://portal.acm.org/citation.cfm?id=1085922"}, + {"id":"deutschInternalRepresentationPitch1981","abstract":"A model for the internal representation of pitch sequences in tonal music is advanced. Pitch sequences are retained as hierarchical networks. At each level, elements are organized as structural units, in accordance with laws of figural goodness. Processing advantages of the system are discussed. (Author/BW)","author":[{"family":"Deutsch","given":"Diana"},{"family":"Feroe","given":"John"}],"citation-key":"deutschInternalRepresentationPitch1981","container-title":"Psychological Review","issue":"6","issued":{"date-parts":[[1981,11]]},"page":"503–22","title":"The Internal Representation of Pitch Sequences in Tonal Music.","type":"article-journal","URL":"http://www.eric.ed.gov/ERICWebPortal/detail?accno=EJ254529","volume":"88"}, + {"id":"devdanTablaTechnique2007","author":[{"family":"Devdan","given":"Sen"}],"citation-key":"devdanTablaTechnique2007","container-title":"Grove music online (accessed March 2007)","editor":[{"family":"Macy","given":"L."}],"issued":{"date-parts":[[2007]]},"publisher":"Oxford University Press","title":"Tabla - technique","type":"chapter"}, + {"id":"devlinSpeechPerceptionMotoric2009","author":[{"family":"Devlin","given":"Joseph T."},{"family":"Aydelott","given":"Jennifer"}],"citation-key":"devlinSpeechPerceptionMotoric2009","container-title":"Current Biology","DOI":"10.1016/j.cub.2009.01.005","ISSN":"09609822","issue":"5","issued":{"date-parts":[[2009,3]]},"page":"R198–R200","title":"Speech Perception: Motoric Contributions versus the Motor Theory","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.cub.2009.01.005","volume":"19"}, + {"id":"diegovillasenordecortinaNancinaCanCanonGenerator2019","abstract":"In the present paper a SuperCollider library designed to produce temporal canons, like the ones proposed by Conlon Nancarrow, is explored in order to create new temporal conceptions within the field of live coding. We will define temporal canon as a composition strategy that allows a poly-temporal audition by expressing a single musical idea at different speeds simultaneously. Likewise, our intention is to socialise the work of Nancarrow, often captured by a reduced academic niche, so it may be integrated into a broader and more diverse context. In this paper a broad introduction to the library is provided that emphasises some of its salient aspects that overlap with specific interests of live coders. By de-canonising the ideas of Nancarrow and approaching them from a heterodox and unconventional perspective we attempt to unravel understandings of time and rhythm beyond the scope of the music of Conlon Nancarrow as well as the practices of Mexican and international live coding communities.","accessed":{"date-parts":[[2021,1,28]]},"author":[{"family":"Diego Villaseñor de Cortina","given":""},{"family":"Alejandro Franco Briones","given":""}],"citation-key":"diegovillasenordecortinaNancinaCanCanonGenerator2019","DOI":"10.5281/zenodo.3946192","event-place":"Madrid, Spain","ISBN":"9788418299087","issued":{"date-parts":[[2019,1,16]]},"language":"eng","page":"353","publisher":"Medialab Prado / Madrid Destino","publisher-place":"Madrid, Spain","title":"Nanc-in-a-Can Canon Generator. SuperCollider code capable of generating and visualizing temporal canons critically and algorithmically","type":"speech","URL":"https://zenodo.org/record/3946192#.YBKvFln7SV4"}, + {"id":"diehlSpeechPerception2004","abstract":"This chapter focuses on one of the first steps in comprehending spoken language: How do listeners extract the most fundamental linguistic elements—consonants and vowels, or the distinctive features which compose them—from the acoustic signal? We begin by describing three major theoretical perspectives on the perception of speech. Then we review several lines of research that are relevant to distinguishing these perspectives. The research topics surveyed include categorical perception, phonetic context effects, learning of speech and related nonspeech categories, and the relation between speech perception and production. Finally, we describe challenges facing each of the major theoretical perspectives on speech perception.","author":[{"family":"Diehl","given":"Randy L."},{"family":"Lotto","given":"Andrew J."},{"family":"Holt","given":"Lori L."}],"citation-key":"diehlSpeechPerception2004","container-title":"Annual Review of Psychology","DOI":"10.1146/annurev.psych.55.090902.142028","ISSN":"0066-4308","issue":"1","issued":{"date-parts":[[2004]]},"page":"149–179","PMID":"14744213","title":"Speech Perception","type":"article-journal","URL":"http://dx.doi.org/10.1146/annurev.psych.55.090902.142028","volume":"55"}, + {"id":"dignazioDataFeminism2020","abstract":"A new way of thinking about data science and data ethics that is informed by the ideas of intersectional feminism. Today, data science is a form of power. It has been used to expose injustice, improve health outcomes, and topple governments. But it has also been used to discriminate, police, and surveil. This potential for good, on the one hand, and harm, on the other, makes it essential to ask: Data science by whom? Data science for whom? Data science with whose interests in mind? The narratives around big data and data science are overwhelmingly white, male, and techno-heroic. In Data Feminism, Catherine D'Ignazio and Lauren Klein present a new way of thinking about data science and data ethics-one that is informed by intersectional feminist thought. Illustrating data feminism in action, D'Ignazio and Klein show how challenges to the male/female binary can help challenge other hierarchical (and empirically wrong) classification systems. They explain how, for example, an understanding of emotion can expand our ideas about effective data visualization, and how the concept of invisible labor can expose the significant human efforts required by our automated systems. And they show why the data never, ever \"speak for themselves.\" Data Feminism offers strategies for data scientists seeking to learn how feminism can help them work toward justice, and for feminists who want to focus their efforts on the growing field of data science. But Data Feminism is about much more than gender. It is about power, about who has it and who doesn't, and about how those differentials of power can be challenged and changed.","author":[{"family":"D`ignazio","given":"Catherine"},{"family":"Klein","given":"Lauren F."}],"citation-key":"dignazioDataFeminism2020","event-place":"Cambridge, Massachusetts","ISBN":"978-0-262-04400-4","issued":{"date-parts":[[2020,3,20]]},"language":"English","number-of-pages":"328","publisher":"MIT Press","publisher-place":"Cambridge, Massachusetts","source":"Amazon","title":"Data Feminism","type":"book"}, + {"id":"dignazioIntroductionWhyData2020","accessed":{"date-parts":[[2021,2,24]]},"author":[{"family":"D'Ignazio","given":"Catherine"},{"family":"Klein","given":"Lauren"}],"citation-key":"dignazioIntroductionWhyData2020","container-title":"Data Feminism","issued":{"date-parts":[[2020,3,16]]},"language":"en","publisher":"PubPub","source":"data-feminism.mitpress.mit.edu","title":"Introduction: Why Data Science Needs Feminism","title-short":"Introduction","type":"chapter","URL":"https://data-feminism.mitpress.mit.edu/pub/frfa9szd/release/4"}, + {"id":"dijkstraAnthropomorphismScience1985","author":[{"family":"Dijkstra","given":"Edsger W."}],"citation-key":"dijkstraAnthropomorphismScience1985","issued":{"date-parts":[[1985,9]]},"note":"Published: circulated privately","title":"On anthropomorphism in science","type":"manuscript","URL":"http://www.cs.utexas.edu/users/EWD/ewd09xx/EWD936.PDF"}, + {"id":"dijkstraCrueltyReallyTeaching1988","author":[{"family":"Dijkstra","given":"Edsger W."}],"citation-key":"dijkstraCrueltyReallyTeaching1988","issued":{"date-parts":[[1988]]},"note":"Published: circulated privately","title":"On the cruelty of really teaching computing science","type":"manuscript","URL":"http://www.cs.utexas.edu/users/EWD/ewd10xx/EWD1036.PDF"}, + {"id":"dijkstraReview1977Turing1977","author":[{"family":"Dijkstra","given":"E. W."}],"citation-key":"dijkstraReview1977Turing1977","issued":{"date-parts":[[1977]]},"title":"A review of the 1977 Turing Award Lecture by John Backus","type":"manuscript","URL":"http://www.cs.utexas.edu/users/EWD/transcriptions/EWD06xx/EWD692.html"}, + {"id":"dijulioSoundElectronicMind2017","author":[{"family":"DiJulio","given":"Thomas"}],"citation-key":"dijulioSoundElectronicMind2017","issued":{"date-parts":[[2017]]},"source":"Google Scholar","title":"Sound and the Electronic Mind: Computerized Music and Art","title-short":"Sound and the Electronic Mind","type":"article-journal"}, + {"id":"dinsteinMirrorNature2008","author":[{"family":"Dinstein","given":"Ilan"},{"family":"Thomas","given":"Cibu"},{"family":"Behrmann","given":"Marlene"},{"family":"Heeger","given":"David J."}],"citation-key":"dinsteinMirrorNature2008","container-title":"Current biology : CB","DOI":"10.1016/j.cub.2007.11.004","ISSN":"0960-9822","issue":"1","issued":{"date-parts":[[2008,1]]},"PMID":"18177704","title":"A mirror up to nature.","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.cub.2007.11.004","volume":"18"}, + {"id":"dipellegrinoUnderstandingMotorEvents1992","abstract":"Neurons of the rostral part of inferior premotor cortex of the monkey discharge during goal-directed hand movements such as grasping, holding, and tearing. We report here that many of these neurons become active also when the monkey observes specific, meaningful hand movements performed by the experimenters. The effective experimenters' movements include among others placing or retrieving a piece of food from a table, grasping food from another experimenter's hand, and manipulating objects. There is always a clear link between the effective observed movement and that executed by the monkey and, often, only movements of the experimenter identical to those controlled by a given neuron are able to activate it. These findings indicate that premotor neurons can retrieve movements not only on the basis of stimulus characteristics, as previously described, but also on the basis of the meaning of the observed actions.","author":[{"family":"Pellegrino","given":"G.","non-dropping-particle":"di"},{"family":"Fadiga","given":"L."},{"family":"Fogassi","given":"L."},{"family":"Gallese","given":"V."},{"family":"Rizzolatti","given":"G."}],"citation-key":"dipellegrinoUnderstandingMotorEvents1992","container-title":"Experimental brain research. Experimentelle Hirnforschung. Expérimentation cérébrale","ISSN":"0014-4819","issue":"1","issued":{"date-parts":[[1992]]},"page":"176–180","PMID":"1301372","title":"Understanding motor events: a neurophysiological study.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/1301372","volume":"91"}, + {"id":"discipioSoundInterfaceInteractive2003","abstract":"This paper takes a systemic perspective on interactive signal processing and introduces the author's Audible Eco-Systemic Interface (AESI) project. It starts with a discussion of the paradigm of 'interaction' in existing computer music and live electronics approaches, and develops following bio-cybernetic principles such as 'system/ambience coupling', 'noise', and 'self-organisation'. Central to the paper is an understanding of 'interaction' as a network of interdependencies among system components, and as a means for dynamical behaviour to emerge upon the contact of an autonomous system (e.g. a DSP unit) with the external environment (room or else hosting the performance). The author describes the design philosophy in his current work with the AESI (whose DSP component was implemented as a signal patch in KYMA5.2), touching on compositional implications (not only live electronics situations, but also sound installations).","author":[{"family":"Di Scipio","given":"Agostino"}],"citation-key":"discipioSoundInterfaceInteractive2003","container-title":"Organised Sound","DOI":"10.1017/s1355771803000244","ISSN":"1355-7718","issue":"3","issued":{"date-parts":[[2003,12]]},"page":"269–277","title":"Sound is the Interface: From Interactive to Ecosystemic Signal Processing","type":"article-journal","URL":"http://dx.doi.org/10.1017/s1355771803000244","volume":"8"}, + {"id":"douglasAmusiaAssociatedDeficits2007","abstract":"Amusia (commonly referred to as tone-deafness) is a difficulty in discriminating pitch changes in melodies that affects around 4% of the human population. Amusia cannot be explained as a simple sensory impairment. Here we show that amusia is strongly related to a deficit in spatial processing in adults. Compared to two matched control groups (musicians and non-musicians), participants in the amusic group were significantly impaired on a visually presented mental rotation task. Amusic subjects were also less prone to interference in a spatial stimulus-response incompatibility task and performed significantly faster than controls in an interference task in which they were required to make simple pitch discriminations while concurrently performing a mental rotation task. This indicates that the processing of pitch in music normally depends on the cognitive mechanisms that are used to process spatial representations in other modalities.","author":[{"family":"Douglas","given":"Katie M."},{"family":"Bilkey","given":"David K."}],"citation-key":"douglasAmusiaAssociatedDeficits2007","container-title":"Nature Neuroscience","DOI":"10.1038/nn1925","ISSN":"1097-6256","issue":"7","issued":{"date-parts":[[2007,6]]},"page":"915–921","PMID":"17589505","title":"Amusia is associated with deficits in spatial processing","type":"article-journal","URL":"http://dx.doi.org/10.1038/nn1925","volume":"10"}, + {"id":"downieChoreographicLanguageAgent2009","author":[{"family":"Downie","given":"M."}],"citation-key":"downieChoreographicLanguageAgent2009","issued":{"date-parts":[[2009]]},"note":"Published: Work in progress report at http://openendedgroup.com/index.php/in-progress/choreographic-language-agent/","title":"Choreographic language agent","type":"book"}, + {"id":"duignanAbstractionActivityComputermediated2010","abstract":"An abstract is not available.","author":[{"family":"Duignan","given":"Matthew"},{"family":"Noble","given":"James"},{"family":"Biddle","given":"Robert"}],"citation-key":"duignanAbstractionActivityComputermediated2010","container-title":"Comput. Music J.","DOI":"10.1162/comj_a_00023","ISSN":"0148-9267","issued":{"date-parts":[[2010,12]]},"page":"22–33","title":"Abstraction and activity in computer-mediated music production","type":"article-journal","URL":"http://dx.doi.org/10.1162/comj_a_00023","volume":"34"}, + {"id":"dusautoyFindingMoonshineMathematician2008","author":[{"family":"Sautoy","given":"Marcus","non-dropping-particle":"du"}],"citation-key":"dusautoyFindingMoonshineMathematician2008","ISBN":"0-00-721462-6","issued":{"date-parts":[[2008]]},"note":"Published: Paperback","publisher":"HarperCollins Publishers","title":"Finding Moonshine: A Mathematician's Journey Through Symmetry","type":"book","URL":"http://www.worldcat.org/isbn/0007214626"}, + {"id":"duyckaertsVoronoiTessellationStudy2000","author":[{"family":"Duyckaerts","given":"C."},{"family":"Godefroy","given":"G."}],"citation-key":"duyckaertsVoronoiTessellationStudy2000","container-title":"J Chem. Neuroanatomy","issue":"1","issued":{"date-parts":[[2000,10]]},"page":"83–92","title":"Voronoi tessellation to study the numerical density and the spatial distribution of neurones","type":"article-journal","volume":"20"}, + {"id":"DynamixelAX12ARobot","accessed":{"date-parts":[[2017,3,21]]},"citation-key":"DynamixelAX12ARobot","title":"Dynamixel AX-12A Robot Actuator from Robotis","type":"webpage","URL":"http://www.trossenrobotics.com/dynamixel-ax-12-robot-actuator.aspx"}, + {"id":"eacottInstantMusicJust2012","accessed":{"date-parts":[[2021,1,19]]},"author":[{"family":"Eacott","given":"John"}],"citation-key":"eacottInstantMusicJust2012","container-title":"AI & SOCIETY","container-title-short":"AI & Soc","DOI":"10.1007/s00146-011-0350-6","ISSN":"1435-5655","issue":"2","issued":{"date-parts":[[2012,5,1]]},"language":"en","page":"287-288","source":"Springer Link","title":"Instant music? Just add water","title-short":"Instant music?","type":"article-journal","URL":"https://doi.org/10.1007/s00146-011-0350-6","volume":"27"}, + {"id":"eickDoesCodeDecay2001","abstract":"A central feature of the evolution of large software systems is that change¿which is necessary to add new functionality, accommodate new hardware, and repair faults¿becomes increasingly difficult over time. In this paper, we approach this phenomenon, which we term code decay, scientifically and statistically. We define code decay and propose a number of measurements (code decay indices) on software and on the organizations that produce it, that serve as symptoms, risk factors, and predictors of decay. Using an unusually rich data set (the fifteen-plus year change history of the millions of lines of software for a telephone switching system), we find mixed, but on the whole persuasive, statistical evidence of code decay, which is corroborated by developers of the code. Suggestive indications that perfective maintenance can retard code decay are also discussed.","author":[{"family":"Eick","given":"Stephen G."},{"family":"Graves","given":"Todd L."},{"family":"Karr","given":"Alan F."},{"family":"Marron","given":"J. S."},{"family":"Mockus","given":"Audris"}],"citation-key":"eickDoesCodeDecay2001","container-title":"IEEE Trans. Softw. Eng.","ISSN":"0098-5589","issued":{"date-parts":[[2001,1]]},"page":"1–12","title":"Does Code Decay? Assessing the Evidence from Change Management Data","type":"article-journal","URL":"http://portal.acm.org/citation.cfm?id=359558","volume":"27"}, + {"id":"eickVisualizingSoftwareChanges2002","abstract":"A key problem in software engineering is changing the code. We present a sequence of visualizations and visual metaphors designed to help engineers understand and manage the software change process. The principal metaphors are matrix views, cityscapes, bar and pie charts, data sheets and networks. Linked by selection mechanisms, multiple views are combined to form perspectives that both enable discovery of high-level structure in software change data and allow effective access to details of those data. Use of the views and perspectives is illustrated in two important contexts: understanding software change by exploration of software change data and management of software development. Our approach complements existing visualizations of software structure and software execution","author":[{"family":"Eick","given":"S. G."},{"family":"Graves","given":"T. L."},{"family":"Karr","given":"A. F."},{"family":"Mockus","given":"A."},{"family":"Schuster","given":"P."}],"citation-key":"eickVisualizingSoftwareChanges2002","container-title":"Software Engineering, IEEE Transactions on","DOI":"10.1109/tse.2002.995435","ISSN":"0098-5589","issue":"4","issued":{"date-parts":[[2002,4]]},"page":"396–412","title":"Visualizing software changes","type":"article-journal","URL":"http://dx.doi.org/10.1109/tse.2002.995435","volume":"28"}, + {"id":"eitanHowMusicMoves2006","author":[{"family":"Eitan","given":"Zohar"},{"family":"Granot","given":"Roni Y."}],"citation-key":"eitanHowMusicMoves2006","container-title":"Music Perception","DOI":"10.1525/mp.2006.23.3.221","issue":"3","issued":{"date-parts":[[2006]]},"page":"221–248","title":"How Music Moves","type":"article-journal","URL":"http://caliber.ucpress.net/doi/abs/10.1525/mp.2006.23.3.221","volume":"23"}, + {"id":"elliottPushpullFunctionalReactive2009","author":[{"family":"Elliott","given":"Conal"}],"citation-key":"elliottPushpullFunctionalReactive2009","container-title":"Proceedings of 2nd ACM SIGPLAN symposium on Haskell 2009","issued":{"date-parts":[[2009]]},"title":"Push-pull functional reactive programming","type":"paper-conference"}, + {"id":"emmersonHumanBodyElectroacoustic2007","author":[{"family":"Emmerson","given":"Simon"}],"citation-key":"emmersonHumanBodyElectroacoustic2007","container-title":"Living Electronic Music","ISBN":"0-7546-5548-2","issued":{"date-parts":[[2007,6]]},"note":"Published: Paperback","page":"61–87","publisher":"Ashgate Pub Co","title":"The Human Body in Electroacoustic Music: Sublimated or Celebrated?","type":"chapter"}, + {"id":"emmersonPostscriptUnexpectedAlways2007","author":[{"family":"Emmerson","given":"Simon"}],"citation-key":"emmersonPostscriptUnexpectedAlways2007","container-title":"Living Electronic Music","ISBN":"0-7546-5548-2","issued":{"date-parts":[[2007,6]]},"note":"Published: Paperback","page":"115","publisher":"Ashgate Pub Co","title":"Postscript: the Unexpected is always upon us – Live Coding","type":"chapter","URL":"http://www.worldcat.org/isbn/0754655482"}, + {"id":"emmoreyPuzzleWorkingMemory2004","author":[{"family":"Emmorey","given":"K."},{"family":"Wilson","given":"M."}],"citation-key":"emmoreyPuzzleWorkingMemory2004","container-title":"Trends in Cognitive Sciences","DOI":"10.1016/j.tics.2004.10.009","ISSN":"13646613","issue":"12","issued":{"date-parts":[[2004,12]]},"page":"521–523","title":"The puzzle of working memory for sign language","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.tics.2004.10.009","volume":"8"}, + {"id":"engelbartMotherAllDemos1968","author":[{"family":"Engelbart","given":"Douglas C."}],"citation-key":"engelbartMotherAllDemos1968","container-title":"Fall Joint Computer Conference, San Francisco, Dec","issued":{"date-parts":[[1968]]},"source":"Google Scholar","title":"The mother of all demos","type":"paper-conference","volume":"9"}, + {"id":"engelhardtLanguageGraphicsFramework2002","author":[{"family":"Engelhardt","given":"Yuri"}],"citation-key":"engelhardtLanguageGraphicsFramework2002","issued":{"date-parts":[[2002]]},"publisher":"Institute for Logic, Language and Computation, University of Amsterdam","title":"Language of Graphics - A framework for the analysis of syntax and meaning in maps,charts and diagrams","type":"thesis"}, + {"id":"ennsEfficientAlgorithmDetermining1984","abstract":"An algorithm of time complexity O(n) is given which determines whether a fabric hangs together, regardless of the number of directions of its strands.","accessed":{"date-parts":[[2020,4,9]]},"author":[{"family":"Enns","given":"T. C."}],"citation-key":"ennsEfficientAlgorithmDetermining1984","container-title":"Geometriae Dedicata","container-title-short":"Geom Dedicata","DOI":"10.1007/BF00147648","ISSN":"1572-9168","issue":"3","issued":{"date-parts":[[1984,1,1]]},"language":"en","page":"259-260","source":"Springer Link","title":"An efficient algorithm determining when a fabric hangs together","type":"article-journal","URL":"https://doi.org/10.1007/BF00147648","volume":"15"}, + {"id":"enoGenerativeMusic1996","author":[{"family":"Eno","given":"Brian"}],"citation-key":"enoGenerativeMusic1996","container-title":"In Motion Magazine","issued":{"date-parts":[[1996]]},"title":"Generative music","type":"article-journal"}, + {"id":"ensmengerComputerBoysTake2012","author":[{"family":"Ensmenger","given":"Nathan L."}],"citation-key":"ensmengerComputerBoysTake2012","ISBN":"0-262-51796-5","issued":{"date-parts":[[2012,8]]},"note":"Published: Paperback","publisher":"The MIT Press","title":"The Computer Boys Take Over: Computers, Programmers, and the Politics of Technical Expertise (History of Computing)","type":"book","URL":"http://www.worldcat.org/isbn/0262517965"}, + {"id":"ericksonSoundStructureMusic1975","author":[{"family":"Erickson","given":"Robert"}],"citation-key":"ericksonSoundStructureMusic1975","issued":{"date-parts":[[1975]]},"publisher":"University of California press","title":"Sound structure in music","type":"book"}, + {"id":"ericssonProtocolAnalysisVerbal1984","author":[{"family":"Ericsson","given":"K. A."},{"family":"Simon","given":"H. A."}],"citation-key":"ericssonProtocolAnalysisVerbal1984","event-place":"Cambridge, MA","issued":{"date-parts":[[1984]]},"publisher":"MIT Press","publisher-place":"Cambridge, MA","title":"Protocol Analysis: Verbal Reports as Data","type":"book"}, + {"id":"ernestSpatialImageryAbilitySex1983","author":[{"family":"Ernest","given":"Carole H."}],"citation-key":"ernestSpatialImageryAbilitySex1983","container-title":"Imagery, Memory and Cognition: Essays in honor of Allan Paivio","issued":{"date-parts":[[1983]]},"page":"1–38","title":"Spatial-Imagery Ability, Sex Differences, and Hemispheric Functioning","type":"chapter"}, + {"id":"EshkolWachmanMovementNotation","accessed":{"date-parts":[[2017,4,11]]},"citation-key":"EshkolWachmanMovementNotation","title":"Eshkol-Wachman Movement Notation Center - Books","type":"webpage","URL":"http://www.ewmncenter.com/Books.html"}, + {"id":"eshunMoreBrilliantSun1998","author":[{"family":"Eshun","given":"Kodwo"}],"citation-key":"eshunMoreBrilliantSun1998","edition":"10th Anniversary edition","ISBN":"0-7043-8025-0","issued":{"date-parts":[[1998,4]]},"note":"Published: Paperback","publisher":"Quartet Books (UK)","title":"More Brilliant Than the Sun: Adventures in Sonic Fiction","type":"book","URL":"http://www.worldcat.org/isbn/0704380250"}, + {"id":"essingerJacquardWebHow2004","author":[{"family":"Essinger","given":"James"}],"citation-key":"essingerJacquardWebHow2004","edition":"First","ISBN":"0-19-280577-0","issued":{"date-parts":[[2004,12]]},"note":"Published: Hardcover","publisher":"Oxford University Press, USA","title":"Jacquard's Web: How a Hand-Loom Led to the Birth of the Information Age","type":"book","URL":"http://www.worldcat.org/isbn/0192805770"}, + {"id":"euclidThirteenBooksEuclid1956","accessed":{"date-parts":[[2020,4,9]]},"author":[{"literal":"Euclid"},{"family":"Heath","given":"Thomas Little"}],"citation-key":"euclidThirteenBooksEuclid1956","event-place":"New York","issued":{"date-parts":[[1956]]},"language":"English","note":"OCLC: 679941175","publisher":"Dover Publications","publisher-place":"New York","source":"Open WorldCat","title":"The thirteen books of Euclid's Elements","type":"book","volume":"2 (Books III-IX)"}, + {"id":"evansTwoLegsThing1998","abstract":"Instead of seeing technology as outside ourselves, it is argued that it is an innate human function and the main driving force in human evolution. Opportunistic 'thing using', long before stone tools appeared, was the likeliest cause of bipedalism. It also forced brain development and the emergence of creativity. The neural basis for this creative technical activity later provided the brain functions on which language could develop. This simple unifying hypothesis has interesting implications for the way that we see technology in history, and for determinist theories of the future. It also bears on the way engineers are trained, and more important, the human faculties which need to be fostered in children.","author":[{"family":"Evans","given":"F. T."}],"citation-key":"evansTwoLegsThing1998","container-title":"AI & Society","DOI":"10.1007/bf01206195","ISSN":"0951-5666","issue":"3","issued":{"date-parts":[[1998,9]]},"page":"185–213","title":"Two legs, thing using and talking: The origins of the creative engineering mind","type":"article-journal","URL":"http://dx.doi.org/10.1007/bf01206195","volume":"12"}, + {"id":"fanfaniCraftsmanshipTechnologyChorality2018","abstract":"The article explores areas of interaction between weaving (and the related technique of plaiting) and chorality in archaic and classical choral lyric poetry by considering aspects of the craft and technology of weaving as mapped onto the imagery of a performing chorus. The distinctive interplay of aesthetic pleasure, orderly variegation, and harmonious arrangement of parts that choreia displays in literary sources (and that is conveyed in archaic Greek poetry by the notion of ποικιλία) also informs the technology and logic of ancient weaving, a τέχνη largely associated in poetic imagery with both ποικιλία and chorality. Close reading of the relevant passages shows that πλέκειν (including a number of compounds, both verbs and adjectives, from the themes πλεκ-/πλοκ-) is the most conspicuous textile craft term applied by literary sources to song-making and, in particular, to the performance of a dancing chorus, epinician being the song-type that most consistently appropriates the metapoetics of weaving (for matters of generic continuity with PIE imagery and for elements of performance pragmatics, in addition to its status as the most largely attested sub-type of choral lyric). A selective survey of the image of “plaiting a choral dance” is offered, with a focus on the geranos as a particular instance of a dance whose orchestic features may have been interacting with actual textiles: reviving a hypothesis grounded on ethnographic comparison, a possible performance context for the geranos is tentatively proposed.","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Fanfani","given":"Giovanni"}],"citation-key":"fanfaniCraftsmanshipTechnologyChorality2018","container-title":"Dionysus ex Machina","DOI":"10.5281/zenodo.2553430","issue":"9","issued":{"date-parts":[[2018]]},"page":"6-40","source":"Zenodo","title":"Craftsmanship and technology as chorality: the case of weaving imagery in archaic and classical choral lyric","title-short":"Craftsmanship and technology as chorality","type":"article-journal","URL":"https://zenodo.org/record/2553430","volume":"1"}, + {"id":"fanfaniCraftsmanshipTechnologyChorality2019","abstract":"The article explores areas of interaction between weaving (and the related technique of plaiting) and chorality in archaic and classical choral lyric poetry by considering aspects of the craft and technology of weaving as mapped onto the imagery of a performing chorus. The distinctive interplay of aesthetic pleasure, orderly variegation, and harmonious arrangement of parts that choreia displays in literary sources (and that is conveyed in archaic Greek poetry by the notion of ποικιλία) also informs the technology and logic of ancient weaving, a τέχνη largely associated in poetic imagery with both ποικιλία and chorality. Close reading of the relevant passages shows that πλέκειν (including a number of compounds, both verbs and adjectives, from the themes πλεκ-/πλοκ-) is the most conspicuous textile craft term applied by literary sources to song-making and, in particular, to the performance of a dancing chorus, epinician being the song-type that most consistently appropriates the metapoetics of weaving (for matters of generic continuity with PIE imagery and for elements of performance pragmatics, in addition to its status as the most largely attested sub-type of choral lyric). A selective survey of the image of “plaiting a choral dance” is offered, with a focus on the geranos as a particular instance of a dance whose orchestic features may have been interacting with actual textiles: reviving a hypothesis grounded on ethnographic comparison, a possible performance context for the geranos is tentatively proposed.","accessed":{"date-parts":[[2020,4,9]]},"author":[{"family":"Fanfani","given":"Giovanni"}],"citation-key":"fanfaniCraftsmanshipTechnologyChorality2019","container-title":"Dionysus ex Machina","DOI":"10.5281/zenodo.2553430","issue":"9","issued":{"date-parts":[[2019,1,30]]},"page":"6-40","source":"Zenodo","title":"Craftsmanship and technology as chorality: the case of weaving imagery in archaic and classical choral lyric","title-short":"Craftsmanship and technology as chorality","type":"article-journal","URL":"https://zenodo.org/record/2553430"}, + {"id":"fanfaniMicroPerformingAncient2020","abstract":"What does an ancient weaver know, when she knows how to weave? How is this complex knowledge graspable and representable? The article presents the research practice of the PENELOPE project as it sets to explore the distinctive logic and order of ancient weaving − an inferential dimension embedded in the material and thus mainly implicit, which is best grasped through performing and which we address here as microperformative. In archaic Greek literary and philosophical sources, weaving is cast as a technology capable of imposing order, creating complex structure, and providing a model for cosmic generation. This pre-scientific ‘knowledge through order’ that weaving affords is in turn embedded in a performance culture where notions like kosmos and poikilia refer to woven fabrics, performances of song-and-dance, patterns in nature and in craft. The production of textile patterns incorporates the organization of elements into wholes in a way that is logical and algorithmic yet still unsuited to be laid down in writing. The mode of knowing specific to weaving is a liminal notion at the intersection of technology, knowledge, and embodied practice. Labelling this mode of ordering as microperformativity, one implication is that reflective decision-making, non-propositional knowledge and material agency all have a bearing on how in weaving threads perform together with the algorithm employed by the weaver, who needs to make decisions on repeats and recursion to generate a coherent whole. Using self-made technology, we then attempt to convey through performances the elements included as separate acts in weaving on the warp-weighted loom of antiquity. The order and patterns of weaving circulate through a multimodal and multimedial performance where the rhythms of ancient Greek poetry, manipulated as musical pattern by the live coder, govern the choreography of a set of synchronized arachnoid robots plaiting a braid by dancing around a maypole.","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Fanfani","given":"Giovanni"},{"family":"Griffiths","given":"Dave"},{"family":"Harlizius-Klück","given":"Ellen"},{"family":"Mamidipudi","given":"Annapurna"},{"family":"McLean","given":"Alex"}],"citation-key":"fanfaniMicroPerformingAncient2020","container-title":"Performance Research","DOI":"10.1080/13528165.2020.1807772","ISSN":"1352-8165","issue":"3","issued":{"date-parts":[[2020,4,2]]},"note":"_eprint: https://doi.org/10.1080/13528165.2020.1807772","page":"123-130","publisher":"Routledge","source":"Taylor and Francis+NEJM","title":"(Micro-)Performing Ancient Weaving in the PENELOPE project","type":"article-journal","URL":"https://doi.org/10.1080/13528165.2020.1807772","volume":"25"}, + {"id":"fanfaniOrdersAncientWeaving2016","abstract":"Publication date: 2016 Document version Peer reviewed version Document license: Unspecified Citation for published version (APA): Fanfani, G., & Harlizius-Klück, E. (2016). (B)orders in Ancient Weaving and Archaic Greek Poetry. In M-L. Nosch, M. Harlow, & G. Fanfani (Eds.), Spinning Fates and the Song of the Loom: The Use of Textiles, Clothing and Cloth Production as Metaphor, Symbol and Narrative Device in Greek and Latin Literature (pp. 61-99). Oxford : Oxbow Books. ANCIENT TEXTILE SERIES, Vol.. 24","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Fanfani","given":"Giovanni"},{"family":"Harlizius-Klück","given":"Ellen"}],"citation-key":"fanfaniOrdersAncientWeaving2016","container-title":"undefined","issued":{"date-parts":[[2016]]},"language":"en","source":"www.semanticscholar.org","title":"B)orders in Ancient Weaving and Archaic Greek Poetry","type":"article-journal","URL":"/paper/B)orders-in-Ancient-Weaving-and-Archaic-Greek-Fanfani-Harlizius-Kl%C3%BCck/f43b2e5d2907edbc4414578c9bab4a3ed2b2aaff"}, + {"id":"fanfaniOrdersAncientWeaving2016a","author":[{"family":"Fanfani","given":"Giovanni"},{"family":"Harlizius-Klück","given":"Ellen"}],"citation-key":"fanfaniOrdersAncientWeaving2016a","container-title":"Spinning Fates and the Song of the Loom","editor":[{"family":"Nosch","given":"Marie-Louise"},{"family":"Harlow","given":"Mary"},{"family":"Fanfani","given":"Giovanni"}],"ISBN":"978-1-78570-160-3","issued":{"date-parts":[[2016]]},"page":"61–99","publisher":"Oxbow Books","title":"(B)orders in Ancient Weaving and Archaic Greek Poetry","type":"chapter"}, + {"id":"farnellMovementNotationSystems1996","author":[{"family":"Farnell","given":"Brenda"}],"citation-key":"farnellMovementNotationSystems1996","container-title":"The World's Writing Systems","editor":[{"family":"Daniels","given":"Peter T."},{"family":"Bright","given":"William"}],"event-place":"New York","issued":{"date-parts":[[1996]]},"page":"855–879","publisher":"Oxford University Press","publisher-place":"New York","title":"Movement Notation Systems","type":"chapter"}, + {"id":"faubelMachinemachineCommunicationHierarchies2016","author":[{"family":"Faubel","given":"Christian"}],"citation-key":"faubelMachinemachineCommunicationHierarchies2016","container-title":"Proceedings of the Fourth Conference on Computation, Communication, Aesthetics and X","event":"xCoAx 2016","event-place":"Bergamo","issued":{"date-parts":[[2016]]},"language":"en","page":"201-210","publisher-place":"Bergamo","source":"Zotero","title":"Machine-machine communication without hierarchies and protocols","type":"paper-conference"}, + {"id":"FaustProgrammingLanguage2022","abstract":"Functional programming language for signal processing and sound synthesis","accessed":{"date-parts":[[2022,6,24]]},"citation-key":"FaustProgrammingLanguage2022","genre":"C++","issued":{"date-parts":[[2022,6,23]]},"original-date":{"date-parts":[[2016,11,5]]},"publisher":"GRAME","source":"GitHub","title":"Faust - Programming Language for Audio Applications and Plugins","type":"book","URL":"https://github.com/grame-cncm/faust"}, + {"id":"fayDesignAdaptationConvention2004","abstract":"To study the development of graphical conventions we had members of a simulated community play a series of graphical interaction games with partners drawn from the same pool (Experiment 1). Once the community was established, a conventional referring scheme emerged that facilitated high levels of semantic coordination, with reduced communicative effort. Next, a forced choice reaction time study (Experiment 2) demonstrated that graphical conventions developed in communities offer a distinct processing advantage when compared with those developed by isolated pairs (i.e. participants who always interact with the same partner). This is interpreted as evidence that the graphical conventions that evolve within a closed community constitute higher order cognitions, the whole being greater than the sum of its parts. Background Vygotsky (1981) claims that higher order cognition is a product of social interaction, that novel structures emerge as a consequence of interpersonal, as opposed to intrapersonal, communication. Hutchins (1995) shares this view, arguing that higher order cognition is a cultural product, a consequence of interaction (humanenvironment and human-human) that is distributed across time and space. According to Hutchins, higher order cognitions emerge from ” an adaptive process that accumulates partial solutions to frequently encountered problems ” (p.354). Lewis (1969, 1975) defines conventions in a comparable way, as arising from situations where a community faces the recurrent problem of coordination. If we agree that conventions are cultural products, should we accept that they represent higher order cognitions? Using Chinese characters as an","author":[{"family":"Fay","given":"Nicolas"},{"family":"Lee","given":"John"},{"family":"Oberlander","given":"Jon"}],"citation-key":"fayDesignAdaptationConvention2004","container-title":"In Proceedings of the 26th Annual Conference of the Cognitive Science Society","issued":{"date-parts":[[2004]]},"page":"411–416","title":"Design, adaptation and convention: The emergence of higher order graphical representations","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.67.2254"}, + {"id":"fellbaumWordNetElectronicLexical1998","abstract":"with a preface by George Miller

WordNet, an electronic lexical database, is considered to be the most important resource available to researchers in computational linguistics, text analysis, and many related areas. Its design is inspired by current psycholinguistic and computational theories of human lexical memory. English nouns, verbs, adjectives, and adverbs are organized into synonym sets, each representing one underlying lexicalized concept. Different relations link the synonym sets.

The purpose of this volume is twofold. First, it discusses the design of WordNet and the theoretical motivations behind it. Second, it provides a survey of representative applications, including word sense identification, information retrieval, selectional preferences of verbs, and lexical chains.

Contributors: Reem Al-Halimi, Robert C. Berwick, J. F. M. Burg, Martin Chodorow, Christiane Fellbaum, Joachim Grabowski, Sanda Harabagiu, Marti A. Hearst, Graeme Hirst, Douglas A. Jones, Rick Kazman, Karen T. Kohl, Shari Landes, Claudia Leacock, George A. Miller, Katherine J. Miller, Dan Moldovan, Naoyuki Nomura, Uta Priss, Philip Resnik, David St-Onge, Randee Tengi, Reind P. van de Riet, Ellen Voorhees.","citation-key":"fellbaumWordNetElectronicLexical1998","edition":"Illustrated","editor":[{"family":"Fellbaum","given":"Christiane"}],"ISBN":"0-262-06197-X","issued":{"date-parts":[[1998,5]]},"note":"Published: Hardcover","publisher":"The MIT Press","title":"WordNet: An Electronic Lexical Database (Language, Speech, and Communication)","type":"book","URL":"http://www.worldcat.org/isbn/026206197X"}, + {"id":"ferrerEmbodiedCognitionApplied2009","author":[{"family":"Ferrer","given":"Rafael"}],"citation-key":"ferrerEmbodiedCognitionApplied2009","container-title":"British Postgraduate Musicology","editor":[{"family":"Foulds","given":"Rachel"}],"issued":{"date-parts":[[2009]]},"title":"Embodied cognition applied to timbre and musical appreciation: Theoretical foundation","type":"article-journal","volume":"10"}, + {"id":"filesystemhierarchystandardgroupFilesystemHierarchyStandard2003","author":[{"literal":"Filesystem Hierarchy Standard Group"}],"citation-key":"filesystemhierarchystandardgroupFilesystemHierarchyStandard2003","issued":{"date-parts":[[2003]]},"title":"Filesystem Hierarchy Standard","type":"book","URL":"http://www.pathname.com/fhs/"}, + {"id":"fincherStudyingProgrammingPalgrave2008","author":[{"family":"Fincher","given":"Sally"}],"citation-key":"fincherStudyingProgrammingPalgrave2008","ISBN":"1-4039-4687-6","issued":{"date-parts":[[2008,9]]},"note":"Published: Paperback","publisher":"Palgrave Macmillan","title":"Studying Programming (Palgrave Study Guides)","type":"book","URL":"http://www.worldcat.org/isbn/1403946876"}, + {"id":"finneyRealtimeDataCollection2001","abstract":"Multiuser UNIX-like operating systems such as Linux are often considered unsuitable for real-time data collection because of the potential for indeterminate timing latencies resulting from preemptive scheduling. In this paper, Linux is shown to be fully adequate for precisely controlled programming with millisecond resolution or better. The Linux system calls that subserve such timing control are described and tested and then utilized in a MIDI-based program for tapping and music performance experiments. The timing of this program, including data input and output, is shown to be accurate at the millisecond level. This demonstrates that Linux, with proper programming, is suitable for real-time experiment software. In addition, the detailed description and test of both the operating system facilities and the application program itself may serve as a model for publicly documenting programming methods and software performance on other operating systems.","author":[{"family":"Finney","given":"Steven A."}],"citation-key":"finneyRealtimeDataCollection2001","container-title":"Behavior Research Methods, Instruments, & Computers","issue":"2","issued":{"date-parts":[[2001,5]]},"page":"167–173","title":"Real-time data collection in Linux: A case study","type":"article-journal","URL":"http://brm.psychonomic-journals.org/content/33/2/167.abstract","volume":"33"}, + {"id":"fisherGhostsMyLife2014","author":[{"family":"Fisher","given":"Mark"}],"citation-key":"fisherGhostsMyLife2014","ISBN":"1-78099-226-2","issued":{"date-parts":[[2014,5]]},"note":"Published: Paperback","publisher":"Zero Books","title":"Ghosts of My Life: Writings on Depression, Hauntology and Lost Futures","type":"book","URL":"http://www.worldcat.org/isbn/1780992262"}, + {"id":"fishmanTheyWriteRight1996","author":[{"family":"Fishman","given":"Charles"}],"citation-key":"fishmanTheyWriteRight1996","issued":{"date-parts":[[1996]]},"title":"They Write the Right Stuff","type":"manuscript","URL":"http://www.fastcompany.com/magazine/06/writestuff.html"}, + {"id":"fishwickAestheticComputingLeonardo2008","abstract":"In _Aesthetic Computing_, key scholars and practitioners from art, design, computer science, and mathematics lay the foundations for a discipline that applies the theory and practice of art to computing. Aesthetic computing explores the way art and aesthetics can play a role in different areas of computer science. One of its goals is to modify computer science by the application of the wide range of definitions and categories normally associated with making art. For example, structures in computing might be represented using the style of Gaudi or the Bauhaus school. This goes beyond the usual definition of aesthetics in computing, which most often refers to the formal, abstract qualities of such structures—a beautiful proof, or an elegant diagram. The contributors to this book discuss the broader spectrum of aesthetics—from abstract qualities of symmetry and form to ideas of creative expression and pleasure—in the context of computer science. The assumption behind aesthetic computing is that the field of computing will be enriched if it embraces all of aesthetics. Human-computer interaction will benefit—\"usability,\" for example, could refer to improving a user's emotional state—and new models of learning will emerge. _Aesthetic Computing_ approaches its subject from a variety of perspectives. After defining the field and placing it in its historical context, the book looks at art and design, mathematics and computing, and interface and interaction. Contributions range from essays on the art of visualization and \"the poesy of programming\" to discussions of the aesthetics of mathematics throughout history and transparency and reflectivity in interface design. **Contributors**: James Alty, Olav W. Bertelsen, Jay David Bolter, Donna Cox, Stephan Diehl, Mark d'Inverno, Michele Emmer, Paul Fishwick, Monica Fleischmann, Ben Fry, Carsten Görg, Susanne Grabowski, Diane Gromala, Kenneth A. Huff, John Lee, Frederic Fol Leymarie, Michael Leyton, Jonas Löwgren, Roger F. Malina, Laurent Mignonneau, Frieder Nake, Ray Paton, Jane Prophet, Aaron Quigley, Casey Reas, Christa Sommerer, Wolfgang Strauss, Noam Tractinksy, Paul Vickers, Dror Zmiri.","author":[{"literal":"Fishwick"},{"family":"Paul","given":"A."}],"citation-key":"fishwickAestheticComputingLeonardo2008","ISBN":"0-262-56237-5","issued":{"date-parts":[[2008,9]]},"note":"Published: Paperback","publisher":"The MIT Press","title":"Aesthetic Computing (Leonardo Book)","type":"book","URL":"http://www.worldcat.org/isbn/0262562375"}, + {"id":"fitchPerceptionProductionSyncopated2007","author":[{"family":"Fitch","given":"Tecumseh W."},{"family":"Rosenfeld","given":"Andrew J."}],"citation-key":"fitchPerceptionProductionSyncopated2007","container-title":"Music Perception","issue":"1","issued":{"date-parts":[[2007]]},"page":"43–58","title":"Perception and production of syncopated rhythms","type":"article-journal","volume":"25"}, + {"id":"fitzpatrickFeelBeatUsing2004","abstract":"For a robot to be capable of development, it must be able to explore its environment and learn from its experiences. It must find (or create) opportunities to experience the unfamiliar in ways that reveal properties valid beyond the immediate context. In this paper, we develop a novel method for using the rhythm of everyday actions as a basis for identifying the characteristic appearance and sounds associated with objects, people, and the robot itself. Our approach is to identify and segment groups of signals in individual modalities (sight, hearing, and proprioception) based on their rhythmic variation, then to identify and bind causally-related groups of signals across different modalities. By including proprioception as a modality, this cross-modal binding method applies to the robot itself, and we report a series of experiments in which the robot learns about the characteristics of its own body.","author":[{"family":"Fitzpatrick","given":"Paul"},{"family":"Arsenio","given":"Artur"}],"citation-key":"fitzpatrickFeelBeatUsing2004","editor":[{"family":"Berthouze","given":"Luc"},{"family":"Kozima","given":"Hideki"},{"family":"Prince","given":"Christopher G."},{"family":"Sandini","given":"Giulio"},{"family":"Stojanov","given":"Georgi"},{"family":"Metta","given":"Giorgio"},{"family":"Balkenius","given":"Christian"}],"issued":{"date-parts":[[2004]]},"number-of-pages":"59–66","publisher":"Lund University Cognitive Studies","title":"Feel the beat: using cross-modal rhythm to integrate perception of objects, others, and self","type":"book","URL":"http://cogprints.org/4062/","volume":"117"}, + {"id":"flakeComputationalBeautyNature2000","abstract":"In this book Gary William Flake develops in depth the simple idea that recurrent rules can produce rich and complicated behaviors. Distinguishing \"agents\" (e.g., molecules, cells, animals, and species) from their interactions (e.g., chemical reactions, immune system responses, sexual reproduction, and evolution), Flake argues that it is the computational properties of interactions that account for much of what we think of as \"beautiful\" and \"interesting.\" From this basic thesis, Flake explores what he considers to be today's four most interesting computational topics: fractals, chaos, complex systems, and adaptation.

Each of the book's parts can be read independently, enabling even the casual reader to understand and work with the basic equations and programs. Yet the parts are bound together by the theme of the computer as a laboratory and a metaphor for understanding the universe. The inspired reader will experiment further with the ideas presented to create fractal landscapes, chaotic systems, artificial life forms, genetic algorithms, and artificial neural networks.","author":[{"family":"Flake","given":"Gary W."}],"citation-key":"flakeComputationalBeautyNature2000","edition":"Reprint","ISBN":"0-262-56127-1","issued":{"date-parts":[[2000,1]]},"note":"Published: Paperback","publisher":"A Bradford Book","title":"The Computational Beauty of Nature: Computer Explorations of Fractals, Chaos, Complex Systems, and Adaptation","type":"book","URL":"http://www.worldcat.org/isbn/0262561271"}, + {"id":"flanaganRubyProgrammingLanguage2008","abstract":"The Ruby Programming Language is the authoritative guide to Ruby and provides comprehensive coverage of versions 1.8 and 1.9 of the language. It was written (and illustrated!) by an all-star team: David Flanagan, bestselling author of programming language \"bibles\" (including JavaScript: The Definitive Guide and Java in a Nutshell) and committer to the Ruby Subversion repository. Yukihiro \"Matz\" Matsumoto, creator, designer and lead developer of Ruby and author of Ruby in a Nutshell, which has been expanded and revised to become this book. why the lucky stiff, artist and Ruby programmer extraordinaire. This book begins with a quick-start tutorial to the language, and then explains the language in detail from the bottom up: from lexical and syntactic structure to datatypes to expressions and statements and on through methods, blocks, lambdas, closures, classes and modules. The book also includes a long and thorough introduction to the rich API of the Ruby platform, demonstrating – with heavily-commented example code – Ruby's facilities for text processing, numeric manipulation, collections, input/output, networking, and concurrency. An entire chapter is devoted to Ruby's metaprogramming capabilities. The Ruby Programming Language documents the Ruby language definitively but without the formality of a language specification. It is written for experienced programmers who are new to Ruby, and for current Ruby programmers who want to challenge their understanding and increase their mastery of the language.","author":[{"family":"Flanagan","given":"David"},{"family":"Matsumoto","given":"Yukihiro"}],"citation-key":"flanaganRubyProgrammingLanguage2008","edition":"First","ISBN":"0-596-51617-7","issued":{"date-parts":[[2008,2]]},"note":"Published: Paperback","publisher":"O'Reilly Media","title":"The Ruby Programming Language","type":"book","URL":"http://www.worldcat.org/isbn/0596516177"}, + {"id":"flashCoordinationArmMovements1985","abstract":"This paper presents studies of the coordination of voluntary human arm movements. A mathematical model is formulated which is shown to predict both the qualitative features and the quantitative details observed experimentally in planar, multijoint arm movements. Coordination is modeled mathematically by defining an objective function, a measure of performance for any possible movement. The unique trajectory which yields the best performance is determined using dynamic optimization theory. In the work presented here, the objective function is the square of the magnitude of jerk (rate of change of acceleration) of the hand integrated over the entire movement. This is equivalent to assuming that a major goal of motor coordination is the production of the smoothest possible movement of the hand. Experimental observations of human subjects performing voluntary unconstrained movements in a horizontal plane are presented. They confirm the following predictions of the mathematical model: unconstrained point-to-point motions are approximately straight with bell-shaped tangential velocity profiles; curved motions (through an intermediate point or around an obstacle) have portions of low curvature joined by portions of high curvature; at points of high curvature, the tangential velocity is reduced; the durations of the low-curvature portions are approximately equal. The theoretical analysis is based solely on the kinematics of movement independent of the dynamics of the musculoskeletal system and is successful only when formulated in terms of the motion of the hand in extracorporal space. The implications with respect to movement organization are discussed.","author":[{"family":"Flash","given":"T."},{"family":"Hogan","given":"N."}],"citation-key":"flashCoordinationArmMovements1985","container-title":"The Journal of Neuroscience","ISSN":"1529-2401","issue":"7","issued":{"date-parts":[[1985,7]]},"page":"1688–1703","PMID":"4020415","title":"The coordination of arm movements: an experimentally confirmed mathematical model","type":"article-journal","URL":"http://www.jneurosci.org/content/5/7/1688.abstract","volume":"5"}, + {"id":"fodorLanguageThoughtLanguage1980","author":[{"family":"Fodor","given":"Jerry A."}],"citation-key":"fodorLanguageThoughtLanguage1980","edition":"First","ISBN":"0-674-51030-5","issued":{"date-parts":[[1980,1]]},"note":"Published: Paperback","publisher":"Harvard University Press","title":"The Language of Thought (Language & Thought Series)","type":"book","URL":"http://www.worldcat.org/isbn/0674510305"}, + {"id":"fontanaNewFormulation2DWaveguide1995","author":[{"family":"Fontana","given":"F."},{"family":"Rocchesso","given":"D."}],"citation-key":"fontanaNewFormulation2DWaveguide1995","container-title":"Proceedings of XI Colloquium on Musical Informatics 1995","issued":{"date-parts":[[1995]]},"page":"27–30","title":"A New Formulation of the 2D-Waveguide Mesh for Percussion Instruments","type":"paper-conference"}, + {"id":"fontanaPhysicalModelingMembranes1998","abstract":"Recent research on Physical Modeling has led to 2-D discrete-time structures based on the Digital Waveguides. These structures are well suited for efficient yet accurate simulation of wave propagation in an ideal membrane. Nevertheless, real membranes exhibit a different behaviour, due to the environmental conditions and to the material they are made of. In this work we consider some aspects, crucial for the audio signal, of the physical phenomena concerning real membranes, and we will develop a 2-D waveguide model encompassing the effects of these aspects. In order to excite the simulated membrane, we will consider a hammer model previously developed for piano strings, and here adapted to fit the hammer-membrane interaction.","author":[{"family":"Fontana","given":"Federico"}],"citation-key":"fontanaPhysicalModelingMembranes1998","container-title":"Acta Acustica united with Acustica","issued":{"date-parts":[[1998,5]]},"page":"529–542","title":"Physical Modeling of Membranes for Percussion Instruments","type":"article-journal","URL":"http://www.ingentaconnect.com/content/dav/aaua/1998/00000084/00000003/art00014"}, + {"id":"fontanaSignaltheoreticCharacterizationWaveguide2001","abstract":"Waveguide meshes are efficient and versatile models of wave propagation along a multidimensional ideal medium. The choice of the mesh geometry affects both the computational cost and the accuracy of simulations. In this paper, we focus on two-dimensional (2-D) geometries and use multidimensional sampling theory to compare the square, triangular, and hexagonal meshes in terms of sampling efficiency and dispersion error under conditions of critical sampling. The analysis shows that the triangular geometry exhibits the most desirable tradeoff between accuracy and computational cost","author":[{"family":"Fontana","given":"F."},{"family":"Rocchesso","given":"D."}],"citation-key":"fontanaSignaltheoreticCharacterizationWaveguide2001","container-title":"Speech and Audio Processing, IEEE Transactions on","container-title-short":"Speech and Audio Processing, IEEE Transactions on","DOI":"10.1109/89.902281","ISSN":"1063-6676","issue":"2","issued":{"date-parts":[[2001,2]]},"page":"152–161","title":"Signal-theoretic characterization of waveguide mesh geometries for models of two-dimensional wave propagation in elastic media","type":"article-journal","URL":"http://dx.doi.org/10.1109/89.902281","volume":"9"}, + {"id":"forthMusicalCreativityConceptual2008","author":[{"family":"Forth","given":"Jamie"},{"family":"McLean","given":"Alex"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"forthMusicalCreativityConceptual2008","container-title":"Proceedings of International Joint Workshop on Computational Creativity 2008","issued":{"date-parts":[[2008]]},"page":"21–30","title":"Musical Creativity on the Conceptual Level","type":"paper-conference"}, + {"id":"forthUnifyingConceptualSpaces2010","abstract":"We examine Gärdenfors' theory of conceptual spaces, a geometrical form of knowledge representation (Conceptual spaces: The geometry of thought, MIT Press, Cambridge, 2000 ), in the context of the general Creative Systems Framework introduced by Wiggins (J Knowl Based Syst 19(7):449–458, 2006a ; New Generation Comput 24(3):209–222, 2006 b ). Gärdenfors' theory offers a way of bridging the traditional divide between symbolic and sub-symbolic representations, as well as the gap between representational formalism and meaning as perceived by human minds. We discuss how both these qualities may be advantageous from the point of view of artificial creative systems. We take music as our example domain, and discuss how a range of musical qualities may be instantiated as conceptual spaces, and present a detailed conceptual space formalisation of musical metre.","author":[{"family":"Forth","given":"Jamie"},{"family":"Wiggins","given":"Geraint A."},{"family":"McLean","given":"Alex"}],"citation-key":"forthUnifyingConceptualSpaces2010","container-title":"Minds and Machines","DOI":"10.1007/s11023-010-9207-x","ISSN":"0924-6495","issue":"4","issued":{"date-parts":[[2010,11]]},"page":"503–532","title":"Unifying Conceptual Spaces: Concept Formation in Musical Creative Systems","type":"article-journal","URL":"http://dx.doi.org/10.1007/s11023-010-9207-x","volume":"20"}, + {"id":"fortuneSweeplineAlgorithmVoronoi1986","author":[{"family":"Fortune","given":"S."}],"citation-key":"fortuneSweeplineAlgorithmVoronoi1986","container-title":"SCG '86: Proceedings of the second annual symposium on Computational geometry","event-place":"New York, NY, USA","issued":{"date-parts":[[1986]]},"page":"313–322","publisher":"ACM Press","publisher-place":"New York, NY, USA","title":"A sweepline algorithm for Voronoi diagrams","type":"paper-conference"}, + {"id":"FRAMEWORKBILL","accessed":{"date-parts":[[2017,5,18]]},"citation-key":"FRAMEWORKBILL","title":"FRAME WORK BILL. (Hansard, 27 February 1812)","type":"webpage","URL":"http://hansard.millbanksystems.com/lords/1812/feb/27/frame-work-bill#S1V0021P0_18120227_HOL_3"}, + {"id":"franklinRealWorldTechnology1999","abstract":"In this expanded edition of her bestselling 1989 CBC Massey Lectures, renowned scientist and humanitarian Ursula M. Franklin examines the impact of technology upon our lives and addresses the extraordinary changes since The Real World of Technology was first published. In four new chapters, Franklin tackles contentious issues, such as the dilution of privacy and intellectual property rights, the impact of the current technology on government and governance, the shift from consumer capitalism to investment capitalism, and the influence of the Internet upon the craft of writing.","author":[{"family":"Franklin","given":"Ursula"}],"citation-key":"franklinRealWorldTechnology1999","edition":"2nd edition","issued":{"date-parts":[[1999,6,1]]},"language":"English","number-of-pages":"224","publisher":"House of Anansi Press","source":"Amazon","title":"The Real World of Technology","type":"book"}, + {"id":"franklinSearchingImaginedEnvironments1990","author":[{"family":"Franklin","given":"N."},{"family":"Tversky","given":"B."}],"citation-key":"franklinSearchingImaginedEnvironments1990","container-title":"Journal of Experimental Psychology","issued":{"date-parts":[[1990]]},"title":"Searching imagined environments","type":"article-journal"}, + {"id":"freedAuditoryCorrelatesPerceived1990","abstract":"A psychophysical investigation of timbre was undertaken with the intent of deriving quantitative results that could be useful in musical applications. Recordings of metal objects being struck with percussion mallets were rated by subjects on a unidimensional perceptual scale of perceived mallet hardness. Four acoustical parameters of the attack portion (first 325 ms) were defined and evaluated as predictors of perceived mallet hardness rating. To measure these parameters, a critical-band filter bank was employed. Two curves were extracted from the filter-bank output: (1) spectral level (log of area under spectrum) over time, and (2) spectral centroid over time. For each curve, two parameters were measured: the mean and the slope of the spectral level curve, and the mean and the time-weighted average of the spectral centroid curve. Multiple regression analysis was used to relate the perceptual ratings to these four acoustical parameters, and a good fit was achieved (multiple R-squared=0.725, F=1135.8, p<0.01). The resulting function is suitable for quantitatively predicting the perceptual dimension of perceived mallet hardness.","author":[{"family":"Freed","given":"Daniel J."}],"citation-key":"freedAuditoryCorrelatesPerceived1990","container-title":"The Journal of the Acoustical Society of America","DOI":"10.1121/1.399298","issue":"1","issued":{"date-parts":[[1990]]},"page":"311–322","title":"Auditory correlates of perceived mallet hardness for a set of recorded percussive sound events","type":"article-journal","URL":"http://dx.doi.org/10.1121/1.399298","volume":"87"}, + {"id":"freedFeaturesFutureOpen2009","abstract":"The history and future of Open Sound Control (OSC) is discussed and the next iteration of the OSC specification is introduced with discussion of new features to support NIME community activities. The roadmap to a major revision of OSC is developed.","author":[{"family":"Freed","given":"Adrian"},{"family":"Schmeder","given":"Andy"}],"citation-key":"freedFeaturesFutureOpen2009","container-title":"Proceedings of New Interfaces for Musical Expression 2009","issued":{"date-parts":[[2009]]},"title":"Features and Future of Open Sound Control version 1.1 for NIME","type":"paper-conference","URL":"http://cnmat.berkeley.edu/node/7002"}, + {"id":"freydShareabilitySocialPsychology1983","abstract":"Psychologists and cognitive scientists interested in the nature of internal representations of human knowledge often use observable regularities or structures to infer what the innate constraints on those representations must be like. It is possible, however, that certain structures might come about only when a group of people share a knowledge domain. Furthermore, it is possible that there are analyzable constraints on knowledge structures that emerge when knowledge is being shared. Such constraints are referred to in this paper as \"shareability\" constraints. A number of examples of observable structures in human knowledge are discussed in terms of shareability constraints. An attempt is made to determine which sorts of structures are most shareable, and how those structures may differ from the sorts of structures that are easily represented by the individual mind but not easily shared between minds.","author":[{"family":"Freyd","given":"Jennifer J."}],"citation-key":"freydShareabilitySocialPsychology1983","container-title":"Cognitive Science","issue":"3","issued":{"date-parts":[[1983]]},"page":"191–210","title":"Shareability: The social psychology of epistemology","type":"article-journal","URL":"http://www.sciencedirect.com/science/article/B6W48-4DXC4B8-1P/2/11b8e1b4950af88436e2b01aa54d7266","volume":"7"}, + {"id":"fribergGenerativeRulesMusic1991","author":[{"family":"Friberg","given":"Anders"}],"citation-key":"fribergGenerativeRulesMusic1991","container-title":"Computer Music Journal","issue":"2","issued":{"date-parts":[[1991]]},"page":"56–71","title":"Generative Rules for Music Performance: A Formal Description of a Rule System","type":"article-journal","URL":"http://www.jstor.org/stable/3680917","volume":"15"}, + {"id":"fribergOverviewKTHRule2006","author":[{"family":"Friberg","given":"A."},{"family":"Bresin","given":"R."},{"family":"Sundberg","given":"J."}],"citation-key":"fribergOverviewKTHRule2006","container-title":"Advances in Cognitive Psychology, Special Issue on Music Performance","issue":"2-3","issued":{"date-parts":[[2006]]},"page":"145–161","title":"Overview of the KTH rule system for musical performance","type":"article-journal","URL":"http://www.speech.kth.se/prod/publications/files/1330.pdf","volume":"2"}, + {"id":"friedlMasteringRegularExpressions2006","abstract":"Regular expressions are a central element of UNIX utilities like egrep and programming languages such as Perl. But whether you're a UNIX user or not, you can benefit from a better understanding of regular expressions since they work with applications ranging from validating data-entry fields to manipulating information in multimegabyte text files. Mastering Regular Expressions quickly covers the basics of regular-expression syntax, then delves into the mechanics of expression-processing, common pitfalls, performance issues, and implementation-specific differences. Written in an engaging style and sprinkled with solutions to complex real-world problems, Mastering Regular Expressions offers a wealth information that you can put to immediate use.

Regular expressions are an extremely powerful tool for manipulating text and data. They are now standard features in a wide range of languages and popular tools, including Perl, Python, Ruby, Java, VB.NET and C# (and any language using the .NET Framework), PHP, and MySQL.

If you don't use regular expressions yet, you will discover in this book a whole new world of mastery over your data. If you already use them, you'll appreciate this book's unprecedented detail and breadth of coverage. If you think you know all you need to know about regular expressions, this book is a stunning eye-opener.

As this book shows, a command of regular expressions is an invaluable skill. Regular expressions allow you to code complex and subtle text processing that you never imagined could be automated. Regular expressions can save you time and aggravation. They can be used to craft elegant solutions to a wide range of problems. Once you've mastered regular expressions, they'll become an invaluable part of your toolkit. You will wonder how you ever got by without them.

Yet despite their wide availability, flexibility, and unparalleled power, regular expressions are frequently underutilized. Yet what is power in the hands of an expert can be fraught with peril for the unwary. Mastering Regular Expressions will help you navigate the minefield to becoming an expert and help you optimize your use of regular expressions.

Mastering Regular Expressions, Third Edition, now includes a full chapter devoted to PHP and its powerful and expressive suite of regular expression functions, in addition to enhanced PHP coverage in the central \"core\" chapters. Furthermore, this edition has been updated throughout to reflect advances in other languages, including expanded in-depth coverage of Sun's java.util.regex package, which has emerged as the standard Java regex implementation. Topics include:

  • A comparison of features among different versions of many languages and tools
  • How the regular expression engine works
  • Optimization (major savings available here!)
  • Matching just what you want, but not what you don't want
  • Sections and chapters on individual languages

Written in the lucid, entertaining tone that makes a complex, dry topic become crystal-clear to programmers, and sprinkled with solutions to complex real-world problems, Mastering Regular Expressions, Third Edition offers a wealth information that you can put to immediate use.

Reviews of this new edition and the second edition:

\"There isn't a better (or more useful) book available on regular expressions.\"
–Zak Greant, Managing Director, eZ Systems

\"A real tour-de-force of a book which not only covers the mechanics of regexes in extraordinary detail but also talks about efficiency and the use of regexes in Perl, Java, and .NET...If you use regular expressions as part of your professional work (even if you already have a good book on whatever language you're programming in) I would strongly recommend this book to you.\"
–Dr. Chris Brown, Linux Format

\"The author does an outstanding job leading the reader from regex novice to master. The book is extremely easy to read and chock full of useful and relevant examples...Regular expressions are valuable tools that every developer should have in their toolbox. Mastering Regular Expressions is the definitive guide to the subject, and an outstanding resource that belongs on every programmer's bookshelf. Ten out of Ten Horseshoes.\"
–Jason Menard, Java Ranch

","author":[{"family":"Friedl","given":"Jeffrey E. F."}],"citation-key":"friedlMasteringRegularExpressions2006","edition":"Third","ISBN":"0-596-52812-4","issued":{"date-parts":[[2006,8]]},"note":"Published: Paperback","publisher":"O'Reilly","title":"Mastering regular expressions","type":"book","URL":"http://www.worldcat.org/isbn/0596528124"}, + {"id":"fritzUniversalRecognitionThree2009","abstract":"It has long been debated which aspects of music perception are universal and which are developed only after exposure to a specific musical culture [15]. Here, we report a crosscultural study with participants from a native African population (Mafa) and Western participants, with both groups being naive to the music of the other respective culture. Experiment 1 investigated the ability to recognize three basic emotions (happy, sad, scared/fearful) expressed in Western music. Results show that the Mafas recognized happy, sad, and scared/fearful Western music excerpts above chance, indicating that the expression of these basic emotions in Western music can be recognized universally. Experiment 2 examined how a spectral manipulation of original, naturalistic music affects the perceived pleasantness of music in Western as well as in Mafa listeners. The spectral manipulation modified, among other factors, the sensory dissonance of the music. The data show that both groups preferred original Western music and also original Mafa music over their spectrally manipulated versions. It is likely that the sensory dissonance produced by the spectral manipulation was at least partly responsible for this effect, suggesting that consonance and permanent sensory dissonance universally influence the perceived pleasantness of music.","author":[{"family":"Fritz","given":"Thomas"},{"family":"Jentschke","given":"Sebastian"},{"family":"Gosselin","given":"Nathalie"},{"family":"Sammler","given":"Daniela"},{"family":"Peretz","given":"Isabelle"},{"family":"Turner","given":"Robert"},{"family":"Friederici","given":"Angela D."},{"family":"Koelsch","given":"Stefan"}],"citation-key":"fritzUniversalRecognitionThree2009","container-title":"Current Biology","issue":"7","issued":{"date-parts":[[2009,4]]},"page":"573–576","title":"Universal Recognition of Three Basic Emotions in Music","type":"article-journal","URL":"http://www.cell.com/current-biology/abstract/S0960-9822(09)00813-6","volume":"19"}, + {"id":"frostRealizationNaturalLanguage2006","abstract":"The construction of natural language interfaces to computers continues to be a major challenge. The need for such interfaces is growing now that speech recognition technology is becoming more readily available, and people cannot speak those computer-oriented formal languages that are frequently used to interact with computer applications. Much of the research related to the design and implementation of natural language interfaces has involved the use of high-level declarative programming languages. This is to be expected as the task is extremely difficult, involving syntactic and semantic analysis of potentially ambiguous input. The use of LISP and Prolog in this area is well documented. However, research involving the relatively new lazy functional programming paradigm is less well known. This paper provides a comprehensive survey of that research.","author":[{"family":"Frost","given":"Richard A."}],"citation-key":"frostRealizationNaturalLanguage2006","container-title":"ACM Comput. Surv.","DOI":"10.1145/1177352.1177353","ISSN":"0360-0300","issue":"4","issued":{"date-parts":[[2006,12]]},"title":"Realization of Natural Language Interfaces Using Lazy Functional Programming","type":"article-journal","URL":"http://dx.doi.org/10.1145/1177352.1177353","volume":"38"}, + {"id":"futamuraPartialEvaluationComputation1999","abstract":"This paper reports the relationship between formal description of semantics (i.e., interpreter) of a programming language and an actual compiler. The paper also describes a method to automatically generate an actual compiler from a formal description which is, in some sense, the partial evaluation of a computation process. The compiler-compiler inspired by this method differs from conventional ones in that the compiler-compiler based on our method can describe an evaluation procedure (interpreter) in defining the semantics of a programming language, while the conventional one describes a translation process.","author":[{"family":"Futamura","given":"Yoshihiko"}],"citation-key":"futamuraPartialEvaluationComputation1999","container-title":"Higher-Order and Symbolic Computation","DOI":"10.1023/a:1010095604496","issue":"4","issued":{"date-parts":[[1999,12]]},"page":"381–391","title":"Partial Evaluation of Computation Process—An Approach to a Compiler-Compiler","type":"article-journal","URL":"http://dx.doi.org/10.1023/a:1010095604496","volume":"12"}, + {"id":"gabrielssonComplexitiesRhythm1993","abstract":"This book deals with the complex cognitive processes involved in understanding two \"horizontal\" aspects of music perception, melody and rhythm, both separately and together. Focusing on the tonal framework for pitch material in melodies, the first section provides evidence that mere exposure to music organized in a particular way is sufficient to induce the auditory system to prepare itself to receive further input conforming to the patterns already experienced. Its chapters also offer evidence concerning elaborations of those basic schemes that come about through specialized training in music. Continuing themes from the first section – such as the hypothesis that melodies must be treated as integral wholes and not mere collections of elements – the second section discusses the integration of melody and rhythm. In these chapters there is an underlying concern for clarifying the relation – central to aesthetic questions – between physical patterns of sound energy in the world and our psychological experience of them. The chapters in the third section provide excellent examples of the new, scientific literature that attempts to objectively study early musical abilities. Their data establish that infants and young children are far more perceptive and skilled appreciators of music than was thought a decade ago.","author":[{"family":"Gabrielsson","given":"Alf"}],"citation-key":"gabrielssonComplexitiesRhythm1993","container-title":"Psychology and Music: The Understanding of Melody and Rhythm","editor":[{"family":"Tighe","given":"Thomas J."},{"family":"Dowling","given":"W. Jay"}],"ISBN":"0-8058-0145-6","issued":{"date-parts":[[1993,2]]},"note":"Published: Hardcover","page":"93–120","publisher":"Lawrence Erlbaum Associates Inc,US","title":"The Complexities of Rhythm","type":"chapter","URL":"http://www.worldcat.org/isbn/0805801456"}, + {"id":"gabrielssonEmpiricalComparisonModels1974","abstract":"The results of three methods for multidimensional scaling2014Torgerson's metric analysis, a non-metric method (TORSCA), and a method dealing with individual differences in multidimensional scaling (INDSCAL)2014were compared in experiments on rhythm experience and on perception of sound quality. The INDSCAL analysis seemed to be the most adequate method for treating the data in these experiments.","author":[{"family":"Gabrielsson","given":"A. L. F."}],"citation-key":"gabrielssonEmpiricalComparisonModels1974","container-title":"Scandinavian Journal of Psychology","DOI":"10.1111/j.1467-9450.1974.tb00558.x","issue":"1","issued":{"date-parts":[[1974]]},"page":"73–80","title":"An empirical comparison between some models for multidimensional scaling","type":"article-journal","URL":"http://dx.doi.org/10.1111/j.1467-9450.1974.tb00558.x","volume":"15"}, + {"id":"gainesTalkingDrumMoving1996","author":[{"family":"Gaines","given":"Joseph"}],"citation-key":"gainesTalkingDrumMoving1996","container-title":"Journal of Black Psychology","issue":"2","issued":{"date-parts":[[1996]]},"page":"202–222","title":"The Talking Drum: Moving toward a Psychology of Literacy Transformation","type":"article-journal","volume":"22"}, + {"id":"galanterWhatGenerativeArt2003","author":[{"family":"Galanter","given":"Philip"}],"citation-key":"galanterWhatGenerativeArt2003","container-title":"In GA2003 – 6th Generative Art Conference","issued":{"date-parts":[[2003]]},"title":"What is generative art? Complexity theory as a context for art theory","type":"paper-conference"}, + {"id":"galantucciMotorTheorySpeech2006","author":[{"family":"Galantucci","given":"Bruno"},{"family":"Fowler","given":"Carol A."},{"family":"Turvey","given":"M. T."}],"citation-key":"galantucciMotorTheorySpeech2006","container-title":"Psychonomic Bulletin & Review","ISSN":"1069-9384","issue":"3","issued":{"date-parts":[[2006,6]]},"page":"361–377","title":"The motor theory of speech perception reviewed","type":"article-journal","URL":"http://www.ingentaconnect.com/content/psocpubs/pbr/2006/00000013/00000003/art00001","volume":"13"}, + {"id":"gallardoTurTanTangibleProgramming2008","abstract":"This paper introduces TurTan, a tangible programming language for creative exploration inspired by Logo, which uses a tabletop interface with tangible objects. The aim of this project is to design a toy language for programming entertainment and creative purposes. Along this paper we also discuss some interesting technical issues we have found during its implementation such as tangible linking and angle mapping.","author":[{"family":"Gallardo","given":"Daniel"},{"family":"Julià","given":"Carles F."},{"family":"Jordà","given":"Sergi"}],"citation-key":"gallardoTurTanTangibleProgramming2008","container-title":"Third annual IEEE international workshop on horizontal human-computer systems (TABLETOP)","issued":{"date-parts":[[2008]]},"title":"TurTan: a Tangible Programming Language for Creative Exploration","type":"paper-conference","URL":"#"}, + {"id":"gannNancarrowConlon2011","author":[{"family":"Gann","given":"Kyle"}],"citation-key":"gannNancarrowConlon2011","container-title":"Grove Music Online","issued":{"date-parts":[[2011,2]]},"title":"Nancarrow, Conlon","type":"article-journal"}, + {"id":"gardenforsConceptualSpacesGeometry2000","abstract":"Within cognitive science, two approaches currently dominate the problem of modeling representations. The symbolic approach views cognition as computation involving symbolic manipulation. Connectionism, a special case of associationism, models associations using artificial neuron networks. Peter Gardenfors offers his theory of conceptual representations as a bridge between the symbolic and connectionist approaches.

Symbolic representation is particularly weak at modeling concept learning, which is paramount for understanding many cognitive phenomena. Concept learning is closely tied to the notion of similarity, which is also poorly served by the symbolic approach. Gardenfors's theory of conceptual spaces presents a framework for representing information on the conceptual level. A conceptual space is built up from geometrical structures based on a number of quality dimensions. The main applications of the theory are on the constructive side of cognitive science: as a constructive model the theory can be applied to the development of artificial systems capable of solving cognitive tasks. Gardenfors also shows how conceptual spaces can serve as an explanatory framework for a number of empirical theories, in particular those concerning concept formation, induction, and semantics. His aim is to present a coherent research program that can be used as a basis for more detailed investigations.","author":[{"family":"Gärdenfors","given":"Peter"}],"citation-key":"gardenforsConceptualSpacesGeometry2000","ISBN":"0-262-07199-1","issued":{"date-parts":[[2000,3]]},"note":"Published: Hardcover","publisher":"The MIT Press","title":"Conceptual Spaces: The Geometry of Thought","type":"book","URL":"http://www.worldcat.org/isbn/0262071991"}, + {"id":"gardenforsCooperationConceptualSpaces2006","abstract":"We start by providing an evolutionary scenario for the emergence of semantics. It is argued that the evolution of anticipatory cognition and theory of mind in the hominids opened up for cooperation about future goals. This cooperation requires symbolic communication. The meanings of the symbols are established via a ” meeting of minds.” The concepts in the minds of communicating individuals are modelled as convex regions in conceptual spaces. We then outline a mathematical framework based on fixpoints in continuous mappings between conceptual spaces that can be used to model such a semantics.","author":[{"family":"Gärdenfors","given":"Peter"},{"family":"Warglien","given":"Massimo"}],"citation-key":"gardenforsCooperationConceptualSpaces2006","container-title":"Symbol Grounding and Beyond","DOI":"10.1007/11880172_2","issued":{"date-parts":[[2006]]},"page":"16–30","publisher":"Springer Berlin","title":"Cooperation, Conceptual Spaces and the Evolution of Semantics","type":"chapter","URL":"http://dx.doi.org/10.1007/11880172_2"}, + {"id":"gardenforsSemanticsConceptualSpaces1988","author":[{"family":"Gärdenfors","given":"Peter"}],"citation-key":"gardenforsSemanticsConceptualSpaces1988","container-title":"Acta Philosophica Fennica","issued":{"date-parts":[[1988]]},"page":"9–27","title":"Semantics, Conceptual Spaces and the Dimensions of Music","type":"article-journal","volume":"43"}, + {"id":"garfinkelSociologicalTheoryInformation2009","author":[{"family":"Garfinkel","given":"Harold"},{"family":"Rawls","given":"Anne"}],"citation-key":"garfinkelSociologicalTheoryInformation2009","ISBN":"1-59451-282-5","issued":{"date-parts":[[2009,1]]},"note":"Published: Paperback","publisher":"Routledge","title":"Toward A Sociological Theory of Information","type":"book","URL":"http://www.worldcat.org/isbn/1594512825"}, + {"id":"garreauBotsGround2007","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Garreau","given":"Joel"}],"citation-key":"garreauBotsGround2007","ISSN":"0190-8286","issued":{"date-parts":[[2007,5,6]]},"language":"en-US","source":"www.washingtonpost.com","title":"Bots on The Ground","type":"article-newspaper","URL":"http://www.washingtonpost.com/wp-dyn/content/article/2007/05/05/AR2007050501009.html"}, + {"id":"georgandreassuhrClassicalDanceStyles2012","abstract":"Article by AVIJIT DAS – Kuchipudi Dancer from Bangalore This is the first article from a serial about the classical Indian Dance Legends from the eight dance styles Bharatnatyam, Kathak, Kathakali,…","accessed":{"date-parts":[[2017,4,11]]},"author":[{"family":"Georgandreassuhr","given":""}],"citation-key":"georgandreassuhrClassicalDanceStyles2012","container-title":"gas","issued":{"date-parts":[[2012,12,16]]},"title":"The 8 classical dance styles of India!","type":"post-weblog","URL":"https://georgandreassuhr.wordpress.com/2012/12/16/the-8-classical-dance-styles-of-india/"}, + {"id":"gerraNeuroendocrineResponsesHealthy1998","abstract":"A variety of studies reported psychological and physiological effects of music. Different types of music have been found to induce different neuroendocrine changes. The aim of the present experiment was to investigate the possible combination of emotional and endocrine changes in response to techno-music and to define personality variables as predictors of respective changes. Sixteen psychosomatically healthy subjects (18- to 19-year-olds, eight males and eight females) were exposed, in random order, to techno-music or to classical music (30 min each). Plasma norepinephrine (NE), epinephrine (EPI), growth hormone (GH), prolactin (PRL), adrenocorticotropic hormone (ACTH) cortisol (CORT), β-endorphin (β-EP) concentrations and changes of emotional state were measured in basal conditions and after the experimental trials with two different types of music. Techno-music was associated with a significant increase in heart rate, systolic blood pressure and significant changes in self-rated emotional states. A significant increase was observed in β-EP, ACTH, NE, GH and CORT after listening to techno-music. Classical music induced an improvement in emotional state, but no significant changes in hormonal concentrations. No differences between male and female subjects' responses to music have been found. Plasma levels of PRL and EPI were unaffected by techno- and classical music. Changes in emotional state and NE, β-EP and GH responses to techno-music correlated negatively with harm avoidance scores and positively with the novelty-seeking temperament score on the Cloninger scale. Listening to techno-music induces changes in neurotransmitters, peptides and hormonal reactions, related to mental state and emotional involvement: personality traits and temperament may influence the wide inter-individual variability in response to music.","author":[{"family":"Gerra","given":"G."},{"family":"Zaimovic","given":"A."},{"family":"Franchini","given":"D."},{"family":"Palladino","given":"M."},{"family":"Giucastro","given":"G."},{"family":"Reali","given":"N."},{"family":"Maestri","given":"D."},{"family":"Caccavari","given":"R."},{"family":"Delsignore","given":"R."},{"family":"Brambilla","given":"F."}],"citation-key":"gerraNeuroendocrineResponsesHealthy1998","container-title":"International Journal of Psychophysiology","DOI":"10.1016/s0167-8760(97)00071-8","ISSN":"01678760","issue":"1","issued":{"date-parts":[[1998,1]]},"page":"99–111","title":"Neuroendocrine responses of healthy volunteers to `techno-music': relationships with personality traits and emotional state","type":"article-journal","URL":"http://dx.doi.org/10.1016/s0167-8760(97)00071-8","volume":"28"}, + {"id":"gershenfeldAligningRepresentationReality2011","accessed":{"date-parts":[[2017,5,18]]},"author":[{"family":"Gershenfeld","given":"Neil"}],"citation-key":"gershenfeldAligningRepresentationReality2011","container-title":"Computing","DOI":"10.1007/s00607-011-0160-1","ISSN":"0010-485X, 1436-5057","issue":"2-4","issued":{"date-parts":[[2011,12]]},"language":"en","page":"91-102","source":"CrossRef","title":"Aligning the representation and reality of computation with asynchronous logic automata","type":"article-journal","URL":"http://link.springer.com/10.1007/s00607-011-0160-1","volume":"93"}, + {"id":"gerson-kiwiCheironomy2011","author":[{"family":"Gerson-Kiwi","given":"Edith"},{"family":"Hiley","given":"David"}],"citation-key":"gerson-kiwiCheironomy2011","container-title":"Grove Music Online","issued":{"date-parts":[[2011]]},"title":"Cheironomy","type":"article-journal"}, + {"id":"giaquintoVisualThinkingMathematics2007","author":[{"family":"Giaquinto","given":"Marcus"}],"citation-key":"giaquintoVisualThinkingMathematics2007","ISBN":"0-19-928594-2","issued":{"date-parts":[[2007,8]]},"note":"Published: Hardcover","publisher":"Oxford University Press, USA","title":"Visual Thinking in Mathematics","type":"book","URL":"http://www.worldcat.org/isbn/0199285942"}, + {"id":"gibbsWhyManyConcepts1996","author":[{"family":"Gibbs","given":"R."}],"citation-key":"gibbsWhyManyConcepts1996","container-title":"Cognition","DOI":"10.1016/s0010-0277(96)00723-8","ISSN":"00100277","issue":"3","issued":{"date-parts":[[1996,12]]},"page":"309–319","title":"Why many concepts are metaphorical","type":"article-journal","URL":"http://dx.doi.org/10.1016/s0010-0277(96)00723-8","volume":"61"}, + {"id":"gibetSoundSynthesisSimulation2006","author":[{"family":"Gibet","given":"S."},{"family":"Bouënard","given":"A."}],"citation-key":"gibetSoundSynthesisSimulation2006","container-title":"2nd ConGAS International Symposium on Gesture Interfaces for Multimedia Systems","event-place":"Leeds","issued":{"date-parts":[[2006]]},"publisher-place":"Leeds","title":"Sound Synthesis by Simulation of Percussive Gesture of a Virtual Animated Agent","type":"paper-conference"}, + {"id":"gilbertDiscographiesDanceMusic1999","author":[{"family":"Gilbert","given":"Jeremy"},{"family":"Pearson","given":"Ewan"}],"citation-key":"gilbertDiscographiesDanceMusic1999","edition":"1","ISBN":"0-415-17033-8","issued":{"date-parts":[[1999,9]]},"note":"Published: Paperback","publisher":"Routledge","title":"Discographies: Dance, Music, Culture and the Politics of Sound","type":"book","URL":"http://www.worldcat.org/isbn/0415170338"}, + {"id":"gingrasBookReviewEmbodied2010","author":[{"family":"Gingras","given":"Bruno"},{"family":"McLean","given":"Alex"}],"citation-key":"gingrasBookReviewEmbodied2010","container-title":"Psychology of Music","DOI":"10.1177/0305735609342483","issue":"1","issued":{"date-parts":[[2010,1]]},"page":"119–124","title":"Book review: Embodied Music Cognition and Mediation Technology.","type":"article-journal","URL":"http://dx.doi.org/10.1177/0305735609342483","volume":"38"}, + {"id":"glasgowIMAGERYDEBATEREVISITED1993","author":[{"family":"Glasgow","given":"Janice I."}],"citation-key":"glasgowIMAGERYDEBATEREVISITED1993","container-title":"Computational Intelligence","DOI":"10.1111/j.1467-8640.1993.tb00224.x","issue":"4","issued":{"date-parts":[[1993]]},"page":"310–333","title":"THE IMAGERY DEBATE REVISITED: A COMPUTATIONAL PERSPECTIVE","type":"article-journal","URL":"http://dx.doi.org/10.1111/j.1467-8640.1993.tb00224.x","volume":"9"}, + {"id":"gloverFarmingPerformanceConceptual2018","abstract":"In two widely cited articles, the first of which was published almost 30 years ago, the anthropologist Paul Richards described the situated practices of small-scale farmers as a type of performance, akin to a musical or theatrical performance (1989, 1993). This definition, applied specifically to small-scale and subsistence agriculture, has a powerful appeal for good reasons. This article examines performance as a conceptual framework and tool for studying small-scale farming practice and technological change. Taking the comparison with musical or theatrical endeavour seriously, the article explores the dynamics of performance by individuals and groups; considers alternative ways of conceiving the 'stage' and the 'audience'; and examines the nature of the performers' skills and competence, through an elaboration of key concepts such as practice, rehearsal, repertoire and improvisation. The article also discusses the important implications of a performance being situated in a particular time and place, shaped by its surrounding socio-cultural and ecological context and conditioned by uncertainty. The article proposes that ethnographic or technographic methods are appropriate for studying performance, and considers the ethical responsibilities of the researcher when intervening in a performance from its outside. The argument is framed as a contribution to political ecology, especially an ecology of practices.","accessed":{"date-parts":[[2022,2,7]]},"author":[{"family":"Glover","given":"Dominic"}],"citation-key":"gloverFarmingPerformanceConceptual2018","container-title":"Journal of Political Ecology","DOI":"10.2458/v25i1.22390","ISSN":"1073-0451","issue":"1","issued":{"date-parts":[[2018,1,3]]},"language":"en","source":"DOI.org (Crossref)","title":"Farming as a performance: a conceptual and methodological contribution to the ecology of practices","title-short":"Farming as a performance","type":"article-journal","URL":"http://journals.librarypublishing.arizona.edu/jpe/article/id/2066/","volume":"25"}, + {"id":"godefroyEvaluationNeuronalDensity1994","author":[{"family":"Godefroy","given":"G."},{"family":"Duyckaerts","given":"C."}],"citation-key":"godefroyEvaluationNeuronalDensity1994","container-title":"Journal of Neuroscience Methods","issue":"1","issued":{"date-parts":[[1994]]},"page":"47–69","title":"Evaluation of neuronal density by Dirichlet tessellation","type":"article-journal","volume":"51"}, + {"id":"goelSketchesThoughtBradford1995","author":[{"family":"Goel","given":"Vinod"}],"citation-key":"goelSketchesThoughtBradford1995","ISBN":"0-262-07163-0","issued":{"date-parts":[[1995,10]]},"note":"Published: Hardcover","publisher":"The MIT Press","title":"Sketches of Thought (Bradford Books)","type":"book","URL":"http://www.worldcat.org/isbn/0262071630"}, + {"id":"goldbergSmalltalk80InteractiveProgramming1983","author":[{"family":"Goldberg","given":"Adele"}],"citation-key":"goldbergSmalltalk80InteractiveProgramming1983","ISBN":"0-201-11372-4","issued":{"date-parts":[[1983,12]]},"note":"Published: Hardcover","publisher":"Addison-Wesley","title":"Smalltalk-80: The Interactive Programming Environment (Addison-Wesley series in computer science)","type":"book","URL":"http://www.worldcat.org/isbn/0201113724"}, + {"id":"goldKnittingMusicProgramming2011","abstract":"Source Code Analysis and Manipulation (SCAM) underpins virtually every operational software system. Despite the impact and ubiquity of SCAM principles and techniques in software engineering, there are still frontiers to be explored. Looking \"inward\" to existing techniques, one finds frontiers of performance, efficiency, accuracy, and usability, looking \"outward\" one finds new languages, new problems, and thus new approaches. This paper presents a reflective framework for characterizing source languages and domains. It draws on current research projects in music program analysis, musical score processing, and machine knitting to identify new frontiers for SCAM. The paper also identifies opportunities for SCAM to inspire, and be inspired by, problems and techniques in other domains.","author":[{"family":"Gold","given":"N."}],"citation-key":"goldKnittingMusicProgramming2011","container-title":"Source Code Analysis and Manipulation (SCAM), 2011 11th IEEE International Working Conference on","DOI":"10.1109/scam.2011.10","ISBN":"978-1-4577-0932-6","issued":{"date-parts":[[2011]]},"page":"10–14","publisher":"IEEE","title":"Knitting Music and Programming: Reflections on the Frontiers of Source Code Analysis","type":"paper-conference","URL":"http://dx.doi.org/10.1109/scam.2011.10"}, + {"id":"goltzAbletonLinkTechnology2018","abstract":"Ableton Link is a technology that synchronizes musical beat, tempo, phase, and start/stop commands across multiple applications running on one or more devices. Unlike conventional musical synchronization technologies, Link does not require master/client roles. Automatic discovery on a local area network enables a peer-to-peer system, which peers can join or leave at any time without disrupting others. Musical information is shared equally among peers, so any peer can start or stop while staying in time, or change the tempo, which is followed by all other peers.","accessed":{"date-parts":[[2022,1,10]]},"author":[{"family":"Goltz","given":"Florian"}],"citation-key":"goltzAbletonLinkTechnology2018","container-title":"Linux Audio Conference 2018","event":"Linux Audio Conference 2018","event-place":"Berlin","issued":{"date-parts":[[2018,8,27]]},"language":"en","publisher-place":"Berlin","title":"Ableton Link – A technology to synchronize music software","type":"paper-conference","URL":"https://lac.linuxaudio.org/2018/pages/event/42/"}, + {"id":"gonzalezCombinedVisualizationStructural2009","abstract":"This paper discusses a proposal for the visualization of software evolution, with a focus on combining insight on changes that affect software metrics at project and class level, the project structure, the class hierarchy and the viewing of source code correlated to indirect class coupling. The proposed visualization supports several tasks: the comparison of structural information, including class hierarchies, across several revisions; uncovering collaboration patterns between developers; and determining which classes have been added or deleted to the project during the creation of a given revision. We propose and discuss several design elements supporting these tasks, including interaction patterns and linked views.","author":[{"family":"Gonzalez","given":"Antonio"},{"family":"Theron","given":"Roberto"},{"family":"Telea","given":"Alexandru"},{"family":"Garcia","given":"Francisco J."}],"citation-key":"gonzalezCombinedVisualizationStructural2009","collection-title":"IWPSE-Evol '09","container-title":"Proceedings of the joint international and annual ERCIM workshops on Principles of software evolution (IWPSE) and software evolution (Evol) workshops","DOI":"10.1145/1595808.1595815","event-place":"Amsterdam, The Netherlands","ISBN":"978-1-60558-678-6","issued":{"date-parts":[[2009]]},"page":"25–30","publisher":"ACM","publisher-place":"Amsterdam, The Netherlands","title":"Combined visualization of structural and metric information for software evolution analysis","type":"paper-conference","URL":"http://dx.doi.org/10.1145/1595808.1595815"}, + {"id":"goodEmbodiedInterfaceTeaching2008","abstract":"We describe an innovative educational system designed to, firstly, motivate young people to engage with computational concepts and secondly, provide them with tools to do so in an embodied manner. The interface is designed as a \"magic mirror\" in which users can, through augmented reality technology, take on the role of a character and control the character's movements via their own movements. They are able to record movements, and using a Wii Remote as a mouse and pointing device, organise these movements into sequences. We are now working on ways in which the recorded movements can be manipulated in ways that foster computational thinking.","author":[{"family":"Good","given":"Judith"},{"family":"Romero","given":"Pablo"},{"family":"Boulay","given":"Benedict","non-dropping-particle":"du"},{"family":"Reid","given":"Henry"},{"family":"Howland","given":"Katherine"},{"family":"Robertson","given":"Judy"}],"citation-key":"goodEmbodiedInterfaceTeaching2008","collection-title":"IUI '08","container-title":"Proceedings of the 13th international conference on Intelligent user interfaces","DOI":"10.1145/1378773.1378823","event-place":"Gran Canaria, Spain","ISBN":"978-1-59593-987-6","issued":{"date-parts":[[2008]]},"page":"333–336","publisher":"ACM","publisher-place":"Gran Canaria, Spain","title":"An embodied interface for teaching computational thinking","type":"paper-conference","URL":"http://dx.doi.org/10.1145/1378773.1378823"}, + {"id":"goodmanSonicWarfareSound2012","author":[{"family":"Goodman","given":"Steve"}],"citation-key":"goodmanSonicWarfareSound2012","ISBN":"0-262-51795-7","issued":{"date-parts":[[2012,8]]},"note":"Published: Paperback","publisher":"The MIT Press","title":"Sonic Warfare: Sound, Affect, and the Ecology of Fear (Technologies of Lived Abstraction)","type":"book","URL":"http://www.worldcat.org/isbn/0262517957"}, + {"id":"gosdenProcessArchaeologyPArch2015","abstract":"We advocate a Process Archaeology (P-Arch) which explores modes of becoming rather than being. We advance three theoretical postulates we feel will be useful in understanding the process of becoming. And then six temporal propositions, with the latter arranged from the briefest to the longest timescale. We lay down the basic conceptual foundation of our approach using the example of pottery making and we follow the process of creativity in between the hand of the potter and the affordances of clay. This specific creative entanglement of flow and form on a fast bodily timescale provides our grounding metaphor for an archaeology of becoming over the long term. Subsequent propositions provide the basis for exploring issues of longer-term material engagement and change.","accessed":{"date-parts":[[2017,3,22]]},"author":[{"family":"Gosden","given":"Chris"},{"family":"Malafouris","given":"Lambros"}],"citation-key":"gosdenProcessArchaeologyPArch2015","container-title":"World Archaeology","DOI":"10.1080/00438243.2015.1078741","ISSN":"0043-8243","issue":"5","issued":{"date-parts":[[2015,10,20]]},"page":"701-717","source":"Taylor and Francis+NEJM","title":"Process archaeology (P-Arch)","type":"article-journal","URL":"http://dx.doi.org/10.1080/00438243.2015.1078741","volume":"47"}, + {"id":"grahamVisualPatternAnalyzers1989","author":[{"family":"Graham","given":"Norma Van Surdam"}],"citation-key":"grahamVisualPatternAnalyzers1989","ISBN":"0-19-505154-8","issued":{"date-parts":[[1989,9]]},"note":"Published: Hardcover","publisher":"Oxford University Press, USA","title":"Visual Pattern Analyzers (Oxford Psychology Series)","type":"book","URL":"http://www.worldcat.org/isbn/0195051548"}, + {"id":"grahnRhythmBeatPerception2007","abstract":"When we listen to rhythm, we often move spontaneously to the beat. This movement may result from processing of the beat by motor areas. Previous studies have shown that several motor areas respond when attending to rhythms. Here we investigate whether specific motor regions respond to beat in rhythm. We predicted that the basal ganglia and supplementary motor area (SMA) would respond in the presence of a regular beat. To establish what rhythm properties induce a beat, we asked subjects to reproduce different types of rhythmic sequences. Improved reproduction was observed for one rhythm type, which had integer ratio relationships between its intervals and regular perceptual accents. A subsequent functional magnetic resonance imaging study found that these rhythms also elicited higher activity in the basal ganglia and SMA. This finding was consistent across different levels of musical training, although musicians showed activation increases unrelated to rhythm type in the premotor cortex, cerebellum, and SMAs (pre-SMA and SMA). We conclude that, in addition to their role in movement production, the basal ganglia and SMAs may mediate beat perception.","author":[{"family":"Grahn","given":"Jessica A."},{"family":"Brett","given":"Matthew"}],"citation-key":"grahnRhythmBeatPerception2007","container-title":"Journal of cognitive neuroscience","DOI":"10.1162/jocn.2007.19.5.893","ISSN":"0898-929X","issue":"5","issued":{"date-parts":[[2007,5]]},"page":"893–906","PMID":"17488212","title":"Rhythm and beat perception in motor areas of the brain.","type":"article-journal","URL":"http://dx.doi.org/10.1162/jocn.2007.19.5.893","volume":"19"}, + {"id":"greenewaltNouratharFineArt1946","author":[{"family":"Greenewalt","given":"Mary H."}],"citation-key":"greenewaltNouratharFineArt1946","issued":{"date-parts":[[1946]]},"publisher":"Philadelphia. Pa. Westbrook","title":"Nourathar, the Fine Art of Light Color Playing","type":"book"}, + {"id":"greenfieldIDQuestMeaning2011","author":[{"family":"Greenfield","given":"Susan"}],"citation-key":"greenfieldIDQuestMeaning2011","ISBN":"0-340-93601-0","issued":{"date-parts":[[2011,9]]},"note":"Published: Paperback","publisher":"Hodder & Stoughton","title":"ID: The Quest for Meaning in the 21st Century","type":"book","URL":"http://www.worldcat.org/isbn/0340936010"}, + {"id":"greenInstructionsDescriptionsCognitive2000","abstract":"The Cognitive Dimensions framework outlined here is generalised broad-brush approach to usability evaluation for all types of information artifact, from programming languages through interactive systems to domestic devices. It also has promise of interfacing successfully with organisational and sociological analyses.","author":[{"family":"Green","given":"Thomas R. G."}],"citation-key":"greenInstructionsDescriptionsCognitive2000","container-title":"AVI '00: Proceedings of the working conference on Advanced visual interfaces","DOI":"10.1145/345513.345233","event-place":"Palermo, Italy","ISBN":"1-58113-252-2","issued":{"date-parts":[[2000]]},"page":"21–28","publisher":"ACM","publisher-place":"Palermo, Italy","title":"Instructions and descriptions: some cognitive aspects of programming and similar activities","type":"paper-conference","URL":"http://dx.doi.org/10.1145/345513.345233"}, + {"id":"greyMultidimensionalPerceptualScaling1977","abstract":"Two experiments were performed to evaluate the perceptual relationships between 16 music instrument tones. The stimuli were computer synthesized based upon an analysis of actual instrument tones, and they were perceptually equalized for loudness, pitch, and duration. Experiment 1 evaluated the tones with respect to perceptual similarities, and the results were treated with multidimensional scaling techniques and hierarchic clustering analysis. A three‐dimensional scaling solution, well matching the clustering analysis, was found to be interpretable in terms of (1) the spectral energy distribution; (2) the presence of synchronicity in the transients of the higher harmonics, along with the closely related amount of spectral fluctuation within the the tone through time; and (3) the presence of low‐amplitude, high‐frequency energy in the initial attack segment; an alternate interpretation of the latter two dimensions viewed the cylindrical distribution of clusters of stimulus points about the spectral energy distribution, grouping on the basis of musical instrument family (with two exceptions). Experiment 2 was a learning task of a set of labels for the 16 tones. Confusions were examined in light of the similarity structure for the tones from experiment 1, and one of the family‐grouping exceptions was found to be reflected in the difficulty of learning the labels.","author":[{"family":"Grey","given":"John M."}],"citation-key":"greyMultidimensionalPerceptualScaling1977","container-title":"The Journal of the Acoustical Society of America","DOI":"10.1121/1.381428","issue":"5","issued":{"date-parts":[[1977,5]]},"page":"1270–1277","title":"Multidimensional perceptual scaling of musical timbres","type":"article-journal","URL":"http://dx.doi.org/10.1121/1.381428","volume":"61"}, + {"id":"griffithsFoamPenelopeanrobotics2020","abstract":"Penelopean robot swarms for weaving ancient Greek looms and maypole dancing.","accessed":{"date-parts":[[2020,4,9]]},"author":[{"family":"Griffiths","given":"David"}],"citation-key":"griffithsFoamPenelopeanrobotics2020","genre":"C","issued":{"date-parts":[[2020,2,12]]},"original-date":{"date-parts":[[2018,5,22]]},"publisher":"FoAM","source":"GitHub","title":"fo-am/penelopean-robotics","type":"book","URL":"https://github.com/fo-am/penelopean-robotics"}, + {"id":"griffithsHeadFirstProgramming2009","author":[{"family":"Griffiths","given":"David"},{"family":"Barry","given":"Paul"}],"citation-key":"griffithsHeadFirstProgramming2009","edition":"First","ISBN":"0-596-80237-4","issued":{"date-parts":[[2009,11]]},"note":"Published: Paperback","publisher":"O'Reilly Media","title":"Head First Programming: A Learner's Guide to Programming Using the Python Language","type":"book","URL":"http://www.worldcat.org/isbn/0596802374"}, + {"id":"griffithsLearningReadNotate2014","abstract":"Setting off from Copenhagen, the weaving codes tour continued as Emma Cocker, Alex McLean, Ellen Harlizius-Klück and I sped across the Danish countryside on the train. We were heading for Aarhus to…","accessed":{"date-parts":[[2020,4,9]]},"author":[{"family":"Griffiths","given":"David"}],"citation-key":"griffithsLearningReadNotate2014","container-title":"Weaving codes - coding weaves","genre":"Research blog","issued":{"date-parts":[[2014,10,15]]},"language":"en-US","source":"kairotic.org","title":"Learning to read, notate and compute textiles in Aarhus","type":"webpage","URL":"http://kairotic.org/learning-to-read-notate-and-compute-textiles-in-aarhus/"}, + {"id":"griffithsPatternMatrixPutting2015","accessed":{"date-parts":[[2020,4,9]]},"author":[{"family":"Griffiths","given":"David"}],"citation-key":"griffithsPatternMatrixPutting2015","container-title":"Weaving codes - coding weaves","genre":"Research blog","issued":{"date-parts":[[2015,4,24]]},"title":"Pattern matrix – putting it together | Weaving codes – coding weaves","type":"webpage","URL":"http://kairotic.org/pattern-matrix-putting-it-together/"}, + {"id":"griffithsSlubPhoneMr2008","author":[{"family":"Griffiths","given":"Dave"},{"family":"McLean","given":"Alex"},{"family":"Ward","given":"Adrian"}],"citation-key":"griffithsSlubPhoneMr2008","container-title":"Leonardo Music Journal","editor":[{"family":"Collins","given":"Nicolas"}],"issued":{"date-parts":[[2008]]},"page":"92+","title":"Slub: Phone_Mr_Biskov (sound recording)","type":"article-journal","volume":"18"}, + {"id":"griffithsTextilityCodeCatalogue2017","abstract":"This article presents a series of informal experiments in software and weaving, most of which were conducted as part of the Weaving Codes, Coding Weaves project. Different aspects of weaving, including plain weave, a four-shaft loom, tablet weaving and warp-weighted weaving are simulated, in order to gain greater understanding of the craft from the perspective of computer science. The production rules of L-Systems are employed to begin to explore the expansive possibilities offered even by our simple simulations. In order to test our models and gain deeper understanding, the languages we produce are interpreted both as computer simulations and by our human selves, through the weaving of textile by hand. Physical user interfaces are introduced, in order to help communicate the structures and thought processes of weaving. Finally, we share our approach to representing a weave from the point of view of a thread. Throughout, our aim is not to simulate a weave in its entirety, but to gain and share insights into its complexity, and begin see how the long history of weaving, as a fundamentally digital yet ancient craft, can inform the younger fields of computer science and engineering.","author":[{"family":"Griffiths","given":"David"},{"family":"McLean","given":"Alex"}],"citation-key":"griffithsTextilityCodeCatalogue2017","container-title":"TEXTILE","DOI":"10.1080/14759756.2017.1298308","ISSN":"1475-9756","issue":"2","issued":{"date-parts":[[2017,4,3]]},"page":"198-214","source":"Taylor and Francis+NEJM","title":"Textility of Code: A Catalogue of Errors","title-short":"Textility of Code","type":"article-journal","URL":"https://doi.org/10.1080/14759756.2017.1298308","volume":"15"}, + {"id":"grimshawDynamicNatureLanguage2003","abstract":"In dichotic listening, a right ear advantage for linguistic tasks reflects left hemisphere specialization, and a left ear advantage for prosodic tasks reflects right hemisphere specialization. Three experiments used a response hand manipulation with a dichotic listening task to distinguish between direct access (relative specialization) and callosal relay (absolute specialization) explanations of perceptual asymmetries for linguistic and prosodic processing. Experiment 1 found evidence for direct access in linguistic processing and callosal relay in prosodic processing. Direct access for linguistic processing was found to depend on lexical status (Experiment 2) and affective prosody (Experiment 3). Results are interpreted in terms of a dynamic model of hemispheric specialization in which right hemisphere contributions to linguistic processing emerge when stimuli are words, and when they are spoken with affective prosody.","author":[{"family":"Grimshaw","given":"G."}],"citation-key":"grimshawDynamicNatureLanguage2003","container-title":"Neuropsychologia","DOI":"10.1016/s0028-3932(02)00315-9","ISSN":"00283932","issue":"8","issued":{"date-parts":[[2003]]},"page":"1008–1019","title":"The dynamic nature of language lateralization: effects of lexical and prosodic factors","type":"article-journal","URL":"http://dx.doi.org/10.1016/s0028-3932(02)00315-9","volume":"41"}, + {"id":"griswoldWhenFabricHangs2004","accessed":{"date-parts":[[2019,12,12]]},"author":[{"family":"Griswold","given":"R. E."}],"citation-key":"griswoldWhenFabricHangs2004","issued":{"date-parts":[[2004]]},"title":"When a Fabric Hangs Together (Or Doesn't)","type":"document","URL":"https://www2.cs.arizona.edu/patterns/weaving/webdocs/gre_hng1.pdf"}, + {"id":"grunbaumSatinsTwillsIntroduction1980","accessed":{"date-parts":[[2019,12,16]]},"author":[{"family":"Grunbaum","given":"Branko"},{"family":"Shephard","given":"Geoffrey C."}],"citation-key":"grunbaumSatinsTwillsIntroduction1980","container-title":"Mathematics Magazine","DOI":"10.2307/2690105","ISSN":"0025-570X","issue":"3","issued":{"date-parts":[[1980]]},"page":"139-161","source":"JSTOR","title":"Satins and Twills: An Introduction to the Geometry of Fabrics","title-short":"Satins and Twills","type":"article-journal","URL":"www.jstor.org/stable/2690105","volume":"53"}, + {"id":"grunbaumTilingsPatterns2016","abstract":"The definitive book on tiling and geometric patterns, this magnificently illustrated volume features 520 figures and more than 100 tables. Accessible to anyone with a grasp of geometry, it offers numerous graphic examples of two-dimensional spaces covered with interlocking figures, in addition to related problems and references. Suitable for geometry courses as well as independent study, this inspiring book is geared toward students, professional mathematicians, and readers interested in patterns and shapes artists, architects, and crystallographers, among others. Along with helpful examples from mathematics and geometry, it draws upon models from fields as diverse as crystallography, virology, art, philosophy, and quilting. The self-contained chapters need not be read in sequence, and each concludes with an excellent selection of notes and references. The first seven chapters can be used as a classroom text, and the final four contain fascinating browsing material, including detailed surveys of color patterns, groups of color symmetry, and tilings by polygons.","author":[{"family":"Grunbaum","given":"Branko"},{"family":"Shephard","given":"G. C."}],"citation-key":"grunbaumTilingsPatterns2016","edition":"2 edition","event-place":"Mineola, New York","ISBN":"978-0-486-46981-2","issued":{"date-parts":[[2016,7,29]]},"language":"English","number-of-pages":"720","publisher":"Dover Publications Inc.","publisher-place":"Mineola, New York","source":"Amazon","title":"Tilings and Patterns","type":"book"}, + {"id":"guilfordNatureHumanIntelligence1967","author":[{"family":"Guilford","given":"J. P."}],"citation-key":"guilfordNatureHumanIntelligence1967","issued":{"date-parts":[[1967]]},"publisher":"McGraw-Hill New York,","title":"The nature of human intelligence","type":"book"}, + {"id":"guzdialComputingEducationFoundation2019","abstract":"Teaching programming as a way to express ideas, communicate with others, and understand our world is one of the oldest goals for computing education. The inventor of the term \"computer science\" saw it as the third leg of STEM literacy. In this talk, I lay out the history of the idea of universal computational literacy, some of what it will take to get there, and how our field will be different when we do.","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Guzdial","given":"Mark"}],"citation-key":"guzdialComputingEducationFoundation2019","collection-title":"SIGCSE '19","container-title":"Proceedings of the 50th ACM Technical Symposium on Computer Science Education","DOI":"10.1145/3287324.3290953","event-place":"New York, NY, USA","ISBN":"978-1-4503-5890-3","issued":{"date-parts":[[2019,2,22]]},"page":"502–503","publisher":"Association for Computing Machinery","publisher-place":"New York, NY, USA","source":"ACM Digital Library","title":"Computing Education as a Foundation for 21st Century Literacy","type":"paper-conference","URL":"https://doi.org/10.1145/3287324.3290953"}, + {"id":"guzdialEducationPavingWay2008","abstract":"Drawing on methods from diverse disciplines---including computer science, education, sociology, and psychology---to improve computing education.","accessed":{"date-parts":[[2019,10,23]]},"author":[{"family":"Guzdial","given":"Mark"}],"citation-key":"guzdialEducationPavingWay2008","container-title":"Commun. ACM","DOI":"10.1145/1378704.1378713","ISSN":"0001-0782","issue":"8","issued":{"date-parts":[[2008,8]]},"page":"25–27","source":"ACM Digital Library","title":"Education: Paving the Way for Computational Thinking","title-short":"Education","type":"article-journal","URL":"http://doi.acm.org/10.1145/1378704.1378713","volume":"51"}, + {"id":"guzdialImagineeringInauthenticLegitimate2006","abstract":"Since its publication, Lave and Wenger's concept of legitimate peripheral participation (LPP) [18] has become an important concept for understanding situated learning. LPP states that learning only occurs when students perceive that what's being taught is aligned with their goals (in LPP terms, with the students' perceived community of practice). This has implications for our traditional CS courses (e.g., are we teaching what the students perceive as being relevant for their future careers?), but even greater implications for courses for non-CS majors. When computer science educators are asked to teach non-CS majors, we are often placed in the position of teaching in alignment with a community of practice that does not, or does not yet, exist. In that sense, our teaching is inauthentic—not aligned with a community of practice. However, there is the possibility that we can generate a perception of authenticity or alignment. We use the example of two classes at Georgia Tech that seem successful by several measures, yet suffer this inauthenticity. We propose that a useful tool for understanding how these classes work is the Disney Corporation's Imagineering—their process of story-telling in three-dimensions as used in their theme parks. However, in the end, we find that what students actually learn is not necessarily the story that we are telling them, which points toward future research.","author":[{"family":"Guzdial","given":"Mark"},{"family":"Tew","given":"Allison E."}],"citation-key":"guzdialImagineeringInauthenticLegitimate2006","collection-title":"ICER '06","container-title":"Proceedings of the second international workshop on Computing education research","DOI":"10.1145/1151588.1151597","event-place":"Canterbury, United Kingdom","ISBN":"1-59593-494-4","issued":{"date-parts":[[2006]]},"page":"51–58","publisher":"ACM","publisher-place":"Canterbury, United Kingdom","title":"Imagineering inauthentic legitimate peripheral participation: an instructional design approach for motivating computing education","type":"paper-conference","URL":"http://dx.doi.org/10.1145/1151588.1151597"}, + {"id":"guzdialMediaComputationCourse2003","abstract":"Computing may well become considered an essential part of a liberal education, but introductory programming courses will not look like the way that they do today. Current CSI course are failing dramatically. We are developing a new course, to be taught starting in Spring 2003, which uses computation for communication as a guiding principle. Students learn to program by writing Python programs for manipulating sound, images, and movies. This paper describes the course development and the tools developed for the course. The talk will include the first round of assessment results.","author":[{"family":"Guzdial","given":"Mark"}],"citation-key":"guzdialMediaComputationCourse2003","collection-title":"ITiCSE '03","container-title":"Proceedings of the 8th annual conference on Innovation and technology in computer science education","container-title-short":"SIGCSE Bull.","DOI":"10.1145/961511.961542","ISSN":"0097-8418","issue":"3","issued":{"date-parts":[[2003,6]]},"page":"104–108","title":"A media computation course for non-majors","type":"article-journal","URL":"http://dx.doi.org/10.1145/961511.961542","volume":"35"}, + {"id":"h.k.m.UnseenWorld1918","author":[{"literal":"H. K. M."}],"citation-key":"h.k.m.UnseenWorld1918","container-title":"The New Republic","issued":{"date-parts":[[1918]]},"page":"63+","title":"The Unseen World","type":"article-journal","volume":"14"}, + {"id":"haarslevFullyFormalizedTheory1998","author":[{"family":"Haarslev","given":"Volker"}],"citation-key":"haarslevFullyFormalizedTheory1998","container-title":"Visual Language Theory","editor":[{"family":"Marriott","given":"Kim"},{"family":"Meyer","given":"Bernd"}],"issued":{"date-parts":[[1998]]},"page":"261–292","publisher":"Springer","title":"A Fully Formalized Theory for Describing Visual Notations","type":"chapter"}, + {"id":"hajdaMethodologicalIssuesTimbre1997","author":[{"family":"Hajda","given":"J. M."},{"family":"Kendall","given":"R. A."},{"family":"Carterette","given":"E. C."},{"family":"Harschberger","given":"M. L."}],"citation-key":"hajdaMethodologicalIssuesTimbre1997","container-title":"Perception and Cognition of Music","editor":[{"family":"Deliège","given":"I."},{"family":"Sloboda","given":"J."}],"issued":{"date-parts":[[1997]]},"page":"253–307","publisher":"Psychology Press","title":"Methodological issues in timbre research","type":"chapter"}, + {"id":"hallnasSlowTechnologyNdash2001","abstract":"As computers are increasingly woven into the fabric of everyday life, interaction design may have to change – from creating only fast and efficient tools to be used during a limited time in specific situations, to creating technology that surrounds us and therefore is a part of our activities for long periods of time. We present slow technology: a design agenda for technology aimed at reflection and moments of mental rest rather than efficiency in performance. The aim of this paper is to develop a design philosophy for slow technology, to discuss general design principles and to revisit some basic issues in interaction design from a more philosophical point of view. We discuss examples of soniture and informative art as instances of slow technology and as examples of how the design principles can be applied in practice.","author":[{"family":"Hallnäs","given":"Lars"},{"family":"Redström","given":"Johan"}],"citation-key":"hallnasSlowTechnologyNdash2001","container-title":"Personal Ubiquitous Comput.","DOI":"10.1007/pl00000019","ISSN":"1617-4909","issue":"3","issued":{"date-parts":[[2001,1]]},"page":"201–212","title":"Slow Technology &Ndash; Designing for Reflection","type":"article-journal","URL":"http://dx.doi.org/10.1007/pl00000019","volume":"5"}, + {"id":"hamanakaApplyingVoronoiDiagrams2002","author":[{"family":"Hamanaka","given":"Masatoshi"},{"family":"Hirata","given":"Keiji"}],"citation-key":"hamanakaApplyingVoronoiDiagrams2002","container-title":"Information Technology Letters","issue":"1","issued":{"date-parts":[[2002,9]]},"page":"101–102","title":"Applying Voronoi Diagrams in the Automatic Grouping of Polyphony","type":"article-journal","volume":"1"}, + {"id":"hancockRealtimeProgrammingBig2003","author":[{"family":"Hancock","given":"Christopher M."}],"citation-key":"hancockRealtimeProgrammingBig2003","issued":{"date-parts":[[2003]]},"publisher":"Massachusetts Institute of Technology","title":"Real-time programming and the big ideas of computational literacy","type":"thesis"}, + {"id":"hankinsInstrumentsImagination1995","abstract":"In the 16th century, European \"natural philosophers\" introduced a wide varietyof scientific instruments, among them clocks, magnets, and compasses. Bravingthe risk of being accused of witchcraft, they helped change the face ofscience.\"Instruments have a life of their own,\" write historians of science ThomasHankins and Robert Silverman in this engaging study. \"They do not merelyfollow theory; often they determine theory, because instruments determine whatis possible, and what is possible determines to a large extent what can bethought.\" The \"natural magic\" of inventors such as Father Francis Linus andAthanasius Kircher introduced their contemporaries to the notion that with theproper tools nearly any advance in science was possible. And those who cameafter them made great advances indeed, from the 18th-century Aeolian harp,from which came the belief that light could be bent to produce sound, toautomated weather stations, telestereoscopes, and early phonographs. Many ofthose inventions, Hankins and Silverman note, anticipated the technologicaladvances that mark our own time, which seems itself to be full of naturalmagic. _–Gregory McNamee_","author":[{"family":"Hankins","given":"Thomas L."},{"family":"Silverman","given":"Robert J."}],"citation-key":"hankinsInstrumentsImagination1995","edition":"New Ed","ISBN":"0-691-00549-4","issued":{"date-parts":[[1995,3]]},"note":"Published: Paperback","publisher":"Princeton University Press","title":"Instruments and the Imagination","type":"book","URL":"http://www.worldcat.org/isbn/0691005494"}, + {"id":"hannonMetricalCategoriesInfancy2005","abstract":"Intrinsic perceptual biases for simple duration ratios are thought to constrain the organization of rhythmic patterns in music. We tested that hypothesis by exposing listeners to folk melodies differing in metrical structure (simple or complex duration ratios), then testing them on alterations that preserved or violated the original metrical structure. Simple meters predominate in North American music, but complex meters are common in many other musical cultures. In Experiment 1, North American adults rated structure-violating alterations as less similar to the original version than structure-preserving alterations for simple-meter patterns but not for complex-meter patterns. In Experiment 2, adults of Bulgarian or Macedonian origin provided differential ratings to structure-violating and structure-preserving alterations in complex- as well as simple-meter contexts. In Experiment 3, 6-month-old infants responded differentially to structure-violating and structure-preserving alterations in both metrical contexts. These findings imply that the metrical biases of North American adults reflect enculturation processes rather than processing predispositions for simple meters.","author":[{"family":"Hannon","given":"Erin E."},{"family":"Trehub","given":"Sandra E."}],"citation-key":"hannonMetricalCategoriesInfancy2005","container-title":"Psychological science : a journal of the American Psychological Society / APS","DOI":"10.1111/j.0956-7976.2005.00779.x","ISSN":"0956-7976","issue":"1","issued":{"date-parts":[[2005,1]]},"page":"48–55","PMID":"15660851","title":"Metrical categories in infancy and adulthood.","type":"article-journal","URL":"http://dx.doi.org/10.1111/j.0956-7976.2005.00779.x","volume":"16"}, + {"id":"hanselmannThereNoHardware2010","author":[{"family":"Hanselmann","given":"Nik"}],"citation-key":"hanselmannThereNoHardware2010","issued":{"date-parts":[[2010]]},"publisher":"UC Santa Cruz","title":"There is no hardware","type":"thesis","URL":"http://danm.ucsc.edu/sites/default/files/hanselmann_thesis_there_is_no_hardware.pdf"}, + {"id":"harlizius-kluckAllOddsPure2015","abstract":"The North European Symposium for Archaeological Textiles (NESAT) was founded in 1981 as a discussion forum between various disciplines: textile archaeologists, historians, art historians, natural scientists, conservators and craftspeople. The NESAT XII symposium was organized by the Natural History Museum Vienna from 21st to 24th May 2014 in Hallstatt, Austria. The venue of the 12th Symposium was chosen on account of the archaeological heritage of Hallstatt as well as the flora and fauna of the whole region, which is designated in the UNESCO World Heritage list.The conference volume contains 35 scientific papers grouped into seven chapters. The first chapters introduce Austrian textile research and prehistoric textile finds from Europe, such as recent analysis of the earliest wool finds and early Scandinavian textile design. The main corpus of articles deals with textiles and clothing covering a time span from early medieval to the early modern period, their archaeological research, experiments and art historical context. Five papers focus on tools and textile production, object-based research as well as experimental archaeology and investigation of written sources. The chapter \"Specific analyses\" embraces interdisciplinary research including dyestuff analysis, isotopic tracing and a drawing system for archaeological textile finds from graves.The book, therefore, provides a wealth of information on recent research being undertaken into archaeological textiles from sites in northern Europe.","author":[{"family":"Harlizius-Klück","given":"Ellen"}],"citation-key":"harlizius-kluckAllOddsPure2015","container-title":"Aspects of the Design, Production and Use of Textiles and Clothing from the Bronze Age to the Early Modern Era: Nesat XII. the North European ... in Hallstatt, Austria","edition":"Bilingual edition","editor":[{"family":"Gromer","given":"Karina"},{"family":"Pritchard","given":"Frances"}],"event-place":"Budapest","ISBN":"978-963-9911-67-3","issued":{"date-parts":[[2015,7,1]]},"language":"English","page":"271-277","publisher":"Archaeolingua","publisher-place":"Budapest","title":"Against all Odds: Pure Science and Ancient Weaving","type":"chapter"}, + {"id":"harlizius-kluckArithmeticsWeavingPenelope2008","author":[{"family":"Harlizius-Klück","given":"Ellen"}],"citation-key":"harlizius-kluckArithmeticsWeavingPenelope2008","container-title":"8. Münchner Wissenschaftstage","issued":{"date-parts":[[2008]]},"note":"Published: Online; http://www.saumweberei.de/http:/www.saumweberei.de/der-faden-der-penelope-in-der-hochschule-fur-musik-und-medien/","title":"Arithmetics and Weaving. From Penelope's Loom to Computing (poster)","type":"paper-conference"}, + {"id":"harlizius-kluckImportanceBeginningsGender2014","abstract":"Twenty chapters present the range of current research into the study of textiles and dress in classical antiquity, stressing the need for cross and inter-disciplinarity study in order to gain the fullest picture of surviving material. Issues addressed include: the importance of studying textiles to understand economy and landscape in the past; different types of embellishments of dress from weaving techniques to the (late introduction) of embroidery; the close links between the language of ancient mathematics and weaving; the relationships of iconography to the realities of clothed bodies including a paper on the ground breaking research on the polychromy of ancient statuary; dye recipes and methods of analysis; case studies of garments in Spanish, Viennese and Greek collections which discuss methods of analysis and conservation; analyses of textile tools from across the Mediterranean; discussions of trade and ethnicity to the workshop relations in Roman fulleries. Multiple aspects of the production of textiles and the social meaning of dress are included here to offer the reader an up-to-date account of the state of current research. The volume opens up the range of questions that can now be answered when looking at fragments of textiles and examining written and iconographic images of dressed individuals in a range of media. The volume is part of a pair together with Prehistoric, Ancient Near Eastern and Aegean Textiles and Dress: an interdisciplinary anthology edited by Mary Harlow, C_cile Michel and Marie-Louise Nosch","author":[{"family":"Harlizius-Klück","given":"Ellen"}],"citation-key":"harlizius-kluckImportanceBeginningsGender2014","container-title":"Greek and Roman Textiles and Dress: An Interdisciplinary Anthology","editor":[{"family":"Harlow","given":"Mary"},{"family":"Nosch","given":"Marie-Louise"}],"event-place":"Oxford and Philadelphia","ISBN":"978-1-78297-715-5","issued":{"date-parts":[[2014,9,30]]},"language":"en","page":"46-59","publisher":"Oxbow Books","publisher-place":"Oxford and Philadelphia","title":"The Importance of Beginnings: Gender and Reproduction in Mathematics and Weaving","type":"chapter"}, + {"id":"harlizius-kluckOrdersAncientWeaving2016","abstract":"This study arises from an interest in the question of how ancient weaving technology affected early Greek conceits of poetry-making and cosmic order, and how poetic composition as technē resembles the order of nature (the poem is defined as a ‘kosmos of words’). It is argued that ancient textile technology, lying at the etymological and conceptual root of a significant sample of archaic Greek terminology for poetics, generates patterns of thoughts that are relevant for the emergence of early Greek scientific and mathematical discourse. In turn, textile imagery in poetic and philosophical texts should not be considered a mere rhetorical trope. Following Hans Blumenberg, we consider metaphor and analogy rather as technological means of expressing concepts. In other words, the conceptual import of a given analogy or metaphor is not simply illustrated, but generated by the particular principles of weaving technology at the root of the ‘literal’ element in the figure. In the case of ancient weaving, that is, literary imagery seems best accessed through technology. On such premises, the paper explores the potential correspondences between a structural feature of weaving on the warp-weighted loom, namely the ordering band providing the starting border of the fabric, and the function of the cross-generic prooimion, a compositional and performative principle of orderly beginning, in a sample of archaic Greek poetry.","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Harlizius-Klück","given":"Ellen"},{"family":"Fanfani","given":"Giovanni"}],"citation-key":"harlizius-kluckOrdersAncientWeaving2016","collection-number":"24","collection-title":"Ancient Textile Series","container-title":"Spinning Fates and the Song of the Loom. The Use of Textiles, Clothing and Cloth Production as Metaphor, Symbol and Narrative Device in Greek and Latin Literature.","issued":{"date-parts":[[2016]]},"language":"en","page":"61-99","publisher":"Oxbow Books","source":"zenodo.org","title":"(B)orders in Ancient Weaving and Archaic Greek Poetry","type":"chapter","URL":"https://zenodo.org/record/840005"}, + {"id":"harlizius-kluckPENELOPEProjectCase2020","author":[{"family":"Harlizius-Klück","given":"Ellen"},{"family":"McLean","given":"Alex"}],"citation-key":"harlizius-kluckPENELOPEProjectCase2020","container-title":"Algorithmic and Aesthetic Literacy Matter: Approaches for a Transformative Network Society","ISBN":"978-3-8474-2428-4","issued":{"date-parts":[[2020]]},"publisher":"Verlag Barbara Budrich","title":"The PENELOPE Project: A case study in computational thinking","type":"chapter"}, + {"id":"harlizius-kluckTextileTechnology2016","abstract":"This chapter gives an overview on the topic of textile technology in ancient Greece and Rome 600 BCE - 600 CE. A short historiographical note as well as an introduction into sources and methods is provided. Furthermore all stages of production are discussed as well as starting border, warp-weighted loom, two-beam loom and the question of loom innovations in Roman times. Special attention is paid to mathematical constraints of weaving patterns and to whether primitiveness of tools indicates a simple technology.","accessed":{"date-parts":[[2018,8,20]]},"author":[{"family":"Harlizius‐Klück","given":"Ellen"}],"citation-key":"harlizius-kluckTextileTechnology2016","container-title":"A Companion to Science, Technology, and Medicine in Ancient Greece and Rome","DOI":"10.1002/9781118373057.ch45","ISBN":"978-1-118-37305-7","issued":{"date-parts":[[2016]]},"language":"en","page":"747-767","publisher":"Wiley-Blackwell","source":"Wiley Online Library","title":"Textile Technology","type":"chapter","URL":"https://onlinelibrary.wiley.com/doi/abs/10.1002/9781118373057.ch45"}, + {"id":"harlizius-kluckWeavingBinaryArt2017","abstract":"To refer to the Jacquard loom as a precursor of the computer is a common narrative in histories of computing beginning with Ada Lovelace comparing the punched card operated loom with the calculating engine designed by Charles Babbage: “We may say most aptly that the Analytical Engine weaves algebraical patterns just as the Jacquard-loom weaves flowers and leaves.” But this does not mean that Jacquard invented the algebra of patterns. He only constructed the first widely known and used mechanism replacing the drawboy by punched cards to feed pattern information into his mechanism. To control a weave means to decide whether a warp thread is to be picked up or not. Weaving has therefore been a binary art from its very beginning, applying operations of pattern algebra for millennia. Jacquard’s cards were the end of this story rather than its beginning, reducing the weaver to an operator who had to step on a single treadle repeatedly. This article argues that algebra is already involved in operating shafts or heddles on ordinary looms, that this algebra was applied tacitly until the first weaving notations were developed, and that these notations make the tacit algebra of patterns recognizable to non-weavers: inventors and engineers.","author":[{"family":"Harlizius-Klück","given":"Ellen"}],"citation-key":"harlizius-kluckWeavingBinaryArt2017","container-title":"TEXTILE","DOI":"10.1080/14759756.2017.1298239","ISSN":"1475-9756","issue":"2","issued":{"date-parts":[[2017,4,3]]},"page":"176-197","source":"Taylor and Francis+NEJM","title":"Weaving as Binary Art and the Algebra of Patterns","type":"article-journal","URL":"http://dx.doi.org/10.1080/14759756.2017.1298239","volume":"15"}, + {"id":"harlizius-kluckWebereiAlsEpisteme2004","author":[{"family":"Harlizius-Klück","given":"Ellen"}],"citation-key":"harlizius-kluckWebereiAlsEpisteme2004","event-place":"Berlin","issued":{"date-parts":[[2004]]},"publisher":"Ebersbach","publisher-place":"Berlin","title":"Weberei als \"episteme\" und die Genese der deduktiven Mathematik : in vier Umschweifen entwickelt aus Platons Dialog Politikos","type":"thesis","URL":"http://www.worldcat.org/isbn/9783934703759"}, + {"id":"harlizius-klueckStoffUndOrdnung2019","accessed":{"date-parts":[[2020,4,9]]},"author":[{"family":"Harlizius-Klück","given":"Ellen"}],"citation-key":"harlizius-klueckStoffUndOrdnung2019","container-title":"Gaben, Waren und Tribute: Stoffkreisläufe und antike Textilökonomie","DOI":"10.5281/zenodo.3234712","editor":[{"family":"Nosch","given":"M-L"},{"family":"Wagner-Hasel","given":"B"}],"event-place":"Stuttgart","issued":{"date-parts":[[2019,4,1]]},"language":"Deutsch","page":"397-430","publisher":"Steiner","publisher-place":"Stuttgart","source":"Zenodo","title":"Der Stoff und die Ordnung des Kosmos. Zur Bedeutsamkeit des textilen Mustertransfers im frühen Griechenland","type":"chapter","URL":"https://zenodo.org/record/3234712"}, + {"id":"hassabisPatientsHippocampalAmnesia2007","abstract":"Amnesic patients have a well established deficit in remembering their past experiences. Surprisingly, however, the question as to whether such patients can imagine new experiences has not been formally addressed to our knowledge. We tested whether a group of amnesic patients with primary damage to the hippocampus bilaterally could construct new imagined experiences in response to short verbal cues that outlined a range of simple commonplace scenarios. Our results revealed that patients were markedly impaired relative to matched control subjects at imagining new experiences. Moreover, we identified a possible source for this deficit. The patients' imagined experiences lacked spatial coherence, consisting instead of fragmented images in the absence of a holistic representation of the environmental setting. The hippocampus, therefore, may make a critical contribution to the creation of new experiences by providing the spatial context into which the disparate elements of an experience can be bound. Given how closely imagined experiences match episodic memories, the absence of this function mediated by the hippocampus, may also fundamentally affect the ability to vividly re-experience the past.","author":[{"family":"Hassabis","given":"Demis"},{"family":"Kumaran","given":"Dharshan"},{"family":"Vann","given":"Seralynne D."},{"family":"Maguire","given":"Eleanor A."}],"citation-key":"hassabisPatientsHippocampalAmnesia2007","container-title":"Proceedings of the National Academy of Sciences","DOI":"10.1073/pnas.0610561104","ISSN":"1091-6490","issue":"5","issued":{"date-parts":[[2007,1]]},"page":"1726–1731","PMCID":"PMC1773058","PMID":"17229836","title":"Patients with hippocampal amnesia cannot imagine new experiences","type":"article-journal","URL":"http://dx.doi.org/10.1073/pnas.0610561104","volume":"104"}, + {"id":"hattoriReplayingChangesMultideveloper2010","abstract":"What was I working on before the weekend? and What were the members of my team working on during the last week? are common questions that are frequently asked by a developer. They can be answered if one keeps track of who changes what in the source code. In this work, we present Replay, a tool that allows one to replay past changes as they happened at a fine-grained level, where a developer can watch what she has done or understand what her colleagues have done in past development sessions. With this tool, developers are able to not only understand what sequence of changes brought the system to a certain state (e.g., the introduction of a defect), but also deduce reasons for why her colleagues performed those changes. One of the applications of such a tool is also discovering the changes that broke the code of a developer.","author":[{"family":"Hattori","given":"Lile"},{"family":"Lungu","given":"Mircea"},{"family":"Lanza","given":"Michele"}],"citation-key":"hattoriReplayingChangesMultideveloper2010","collection-title":"IWPSE-EVOL '10","container-title":"Proceedings of the Joint ERCIM Workshop on Software Evolution (EVOL) and International Workshop on Principles of Software Evolution (IWPSE)","DOI":"10.1145/1862372.1862379","event-place":"Antwerp, Belgium","ISBN":"978-1-4503-0128-2","issued":{"date-parts":[[2010]]},"page":"13–22","publisher":"ACM","publisher-place":"Antwerp, Belgium","title":"Replaying past changes in multi-developer projects","type":"paper-conference","URL":"http://dx.doi.org/10.1145/1862372.1862379"}, + {"id":"haworthTechnologyCreativitySocial2018","abstract":"This chapter surveys developments in the sociology of art and theories of mediation to examine the contribution of technical devices to creativity. It considers Actor-Network Theory as a means to analyse the contributions of ‘nonhuman actors’ to the social world of algorithmic music. Two case studies are discussed: the network music pioneers The Hub and the contemporary genre of live coding. The example of The Hub raises the question of technological change and the necessity of considering the external forces that bear on the instrumentarium of algorithmic music as part of its social ecology. The chapter analyses live coding, focusing on the associated actors’ use of the Internet. It charts the online development of the TOPLAP manifesto to illustrate how the ‘true’ computer music that live coding seeks to articulate is an ongoing social negotiation. The final section uses the Issuecrawler software to analyse networks of association within live coding.","author":[{"family":"Haworth","given":"Christopher"}],"citation-key":"haworthTechnologyCreativitySocial2018","collection-title":"Oxford Handbooks","container-title":"The Oxford Handbook of Algorithmic Music","event-place":"Oxford","ISBN":"978-0-19-022699-2","issued":{"date-parts":[[2018,2,22]]},"page":"557-582","publisher":"Oxford University Press","publisher-place":"Oxford","source":"University of Birmingham","title":"Technology, Creativity and the Social in Algorithmic Music","type":"chapter"}, + {"id":"heinSuperiorTemporalSulcus2008","abstract":"The superior temporal sulcus (STS) is the chameleon of the human brain. Several research areas claim the STS as the host brain region for their particular behavior of interest. Some see it as one of the core structures for theory of mind. For others, it is the main region for audiovisual integration. It plays an important role in biological motion perception, but is also claimed to be essential for speech processing and processing of faces. We review the foci of activations in the STS from multiple functional magnetic resonance imaging studies, focusing on theory of mind, audiovisual integration, motion processing, speech processing, and face processing. The results indicate a differentiation of the STS region in an anterior portion, mainly involved in speech processing, and a posterior portion recruited by cognitive demands of all these different research areas. The latter finding argues against a strict functional subdivision of the STS. In line with anatomical evidence from tracer studies, we propose that the function of the STS varies depending on the nature of network coactivations with different regions in the frontal cortex and medial-temporal lobe. This view is more in keeping with the notion that the same brain region can support different cognitive operations depending on task-dependent network connections, emphasizing the role of network connectivity analysis in neuroimaging.","author":[{"family":"Hein","given":"Grit"},{"family":"Knight","given":"Robert T."}],"citation-key":"heinSuperiorTemporalSulcus2008","container-title":"J. Cognitive Neuroscience","DOI":"10.1162/jocn.2008.20148","ISSN":"0898-929X","issue":"12","issued":{"date-parts":[[2008]]},"page":"2125–2136","title":"Superior temporal sulcus—it's my area: Or is it?","type":"article-journal","URL":"http://dx.doi.org/10.1162/jocn.2008.20148","volume":"20"}, + {"id":"hendersonHumanGazeControl2003","abstract":"In human vision, acuity and color sensitivity are best at the point of fixation, and the visual-cognitive system exploits this fact by actively controlling gaze to direct fixation towards important and informative scene regions in real time as needed. How gaze control operates over complex real-world scenes has recently become of central concern in several core cognitive science disciplines including cognitive psychology, visual neuroscience, and machine vision. This article reviews current approaches and empirical findings in human gaze control during real-world scene perception.","author":[{"family":"Henderson","given":"J."}],"citation-key":"hendersonHumanGazeControl2003","container-title":"Trends in Cognitive Sciences","DOI":"10.1016/j.tics.2003.09.006","ISSN":"13646613","issue":"11","issued":{"date-parts":[[2003,11]]},"page":"498–504","title":"Human gaze control during real-world scene perception","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.tics.2003.09.006","volume":"7"}, + {"id":"herrmannBrainGeneratesIts2003","abstract":"Brain processes underlying spoken language comprehension comprise auditory encoding, prosodic analysis and linguistic evaluation. Auditory encoding usually activates both hemispheres while language-specific stages are lateralized: analysis of prosodic cues are right-lateralized while linguistic evaluation is left-lateralized. Here, we investigated to what extent the absence of prosodic information influences lateralization. MEG brain-responses indicated that syntactic violations lead to early bi-lateral brain responses for syntax violations. When the pitch of sentences was flattened to diminish prosodic cues, the brain's syntax response was lateralized to the right hemisphere, indicating that the missing pitch was generated automatically by the brain when it was absent. This represents a Gestalt phenomenon, since we perceive more than is actually presented.","author":[{"family":"Herrmann","given":"C."}],"citation-key":"herrmannBrainGeneratesIts2003","container-title":"Brain and Language","DOI":"10.1016/s0093-934x(03)00054-3","ISSN":"0093934X","issue":"3","issued":{"date-parts":[[2003,6]]},"page":"396–401","title":"The brain generates its own sentence melody: A Gestalt phenomenon in speech perception","type":"article-journal","URL":"http://dx.doi.org/10.1016/s0093-934x(03)00054-3","volume":"85"}, + {"id":"hessionExtendingInstrumentsLive2014","author":[{"family":"Hession","given":"Paul"},{"family":"McLean","given":"Alex"}],"citation-key":"hessionExtendingInstrumentsLive2014","container-title":"Proceedings of the 50th Anniversary Convention of the AISB: Live Algorithms","issued":{"date-parts":[[2014]]},"title":"Extending Instruments with Live Algorithms in a Percussion / Code Duo","type":"paper-conference"}, + {"id":"hickinbothamAugmentingLiveCoding2016","abstract":"We present a new system for integrating evolvutionary processes with live coding. The system is built upon an existing platform called Extramuros, which facilitates network-based collaboration on live coding performances. Our evolutionary approach uses the Tidal live coding language within this platform. The system uses a grammar to parse code patterns and create random mutations that conform to the grammar, thus guaranteeing that the resulting pattern has the correct syntax. With these mutations available, we provide a facility to integrate them during a live performance. To achieve this, we added controls to the Extramuros web client that allows coders to select patterns for submission to the Tidal interpreter. The fitness of the pattern is updated implicitly by the way the coder uses the patterns. In this way, appropriate patterns are continuously generated and selected for throughout a performance. We present examples of performances, and discuss the utility of this approach in live coding music.","author":[{"family":"Hickinbotham","given":"Simon"},{"family":"Stepney","given":"Susan"}],"citation-key":"hickinbothamAugmentingLiveCoding2016","collection-title":"Lecture Notes in Computer Science","container-title":"Evolutionary and Biologically Inspired Music, Sound, Art and Design","DOI":"10.1007/978-3-319-31008-4_3","editor":[{"family":"Johnson","given":"Colin"},{"family":"Ciesielski","given":"Vic"},{"family":"Correia","given":"João"},{"family":"Machado","given":"Penousal"}],"event-place":"Cham","ISBN":"978-3-319-31008-4","issued":{"date-parts":[[2016]]},"language":"en","page":"31-46","publisher":"Springer International Publishing","publisher-place":"Cham","source":"Springer Link","title":"Augmenting Live Coding with Evolved Patterns","type":"paper-conference"}, + {"id":"hickokEightProblemsMirror2009","abstract":"The discovery of mirror neurons in macaque frontal cortex has sparked a resurgence of interest in motor/embodied theories of cognition. This critical review examines the evidence in support of one of these theories, namely, that mirror neurons provide the basis of action understanding. It is argued that there is no evidence from monkey data that directly tests this theory, and evidence from humans makes a strong case against the position.","author":[{"family":"Hickok","given":"Gregory"}],"citation-key":"hickokEightProblemsMirror2009","container-title":"Journal of Cognitive Neuroscience","DOI":"10.1162/jocn.2009.21189","ISSN":"0898-929X","issue":"7","issued":{"date-parts":[[2009,1]]},"page":"1229–1243","PMID":"19199415","title":"Eight Problems for the Mirror Neuron Theory of Action Understanding in Monkeys and Humans","type":"article-journal","URL":"http://dx.doi.org/10.1162/jocn.2009.21189","volume":"21"}, + {"id":"hicksProgrammedInequalityHow2017","abstract":"How Britain lost its early dominance in computing by systematically discriminating against its most qualified workers: women.In 1944, Britain led the world in electronic computing. By 1974, the British computer industry was all but extinct. What happened in the intervening thirty years holds lessons for all postindustrial superpowers. As Britain struggled to use technology to retain its global power, the nation's inability to manage its technical labor force hobbled its transition into the information age. In Programmed Inequality, Marie Hicks explores the story of labor feminization and gendered technocracy that undercut British efforts to computerize. That failure sprang from the government's systematic neglect of its largest trained technical workforce simply because they were women. Women were a hidden engine of growth in high technology from World War II to the 1960s. As computing experienced a gender flip, becoming male-identified in the 1960s and 1970s, labor problems grew into structural ones and gender discrimination caused the nation's largest computer user―the civil service and sprawling public sector―to make decisions that were disastrous for the British computer industry and the nation as a whole.Drawing on recently opened government files, personal interviews, and the archives of major British computer companies, Programmed Inequality takes aim at the fiction of technological meritocracy. Hicks explains why, even today, possessing technical skill is not enough to ensure that women will rise to the top in science and technology fields. Programmed Inequality shows how the disappearance of women from the field had grave macroeconomic consequences for Britain, and why the United States risks repeating those errors in the twenty-first century.","author":[{"family":"Hicks","given":"Marie"},{"family":"Aspray","given":"William"},{"family":"Misa","given":"Thomas J."}],"citation-key":"hicksProgrammedInequalityHow2017","edition":"1st edition","event-place":"Cambridge, MA","ISBN":"978-0-262-03554-5","issued":{"date-parts":[[2017,3,3]]},"language":"English","number-of-pages":"352","publisher":"MIT Press","publisher-place":"Cambridge, MA","source":"Amazon","title":"Programmed Inequality: How Britain Discarded Women Technologists and Lost Its Edge in Computing","title-short":"Programmed Inequality","type":"book"}, + {"id":"HistoryNumbersEscherMath","accessed":{"date-parts":[[2017,3,22]]},"citation-key":"HistoryNumbersEscherMath","title":"History and Numbers - EscherMath","type":"webpage","URL":"http://mathstat.slu.edu/escher/index.php/History_and_Numbers"}, + {"id":"hobsbawmInventionTradition2012","abstract":"Many of the traditions which we think of as very ancient in their origins were not in fact sanctioned by long usage over the centuries, but were invented comparatively recently. This book explores examples of this process of invention – the creation of Welsh and Scottish 'national culture'; the elaboration of British royal rituals in the nineteenth and twentieth centuries; the origins of imperial rituals in British India and Africa; and the attempts by radical movements to develop counter-traditions of their own. It addresses the complex interaction of past and present, bringing together historians and anthropologists in a fascinating study of ritual and symbolism which poses new questions for the understanding of our history.","citation-key":"hobsbawmInventionTradition2012","edition":"Reissue edition","editor":[{"family":"Hobsbawm","given":"Eric"}],"event-place":"Cambridge Cambridgeshire","ISBN":"978-1-107-60467-4","issued":{"date-parts":[[2012,3,29]]},"language":"English","number-of-pages":"330","publisher":"Cambridge University Press","publisher-place":"Cambridge Cambridgeshire","source":"Amazon","title":"The Invention of Tradition","type":"book"}, + {"id":"hobsbawmMachineBreakers1952","accessed":{"date-parts":[[2017,5,19]]},"author":[{"family":"Hobsbawm","given":"E. J."}],"citation-key":"hobsbawmMachineBreakers1952","container-title":"Past & Present","container-title-short":"Past Present","DOI":"10.1093/past/1.1.57","ISSN":"0031-2746","issue":"1","issued":{"date-parts":[[1952,2,1]]},"page":"57-70","source":"academic.oup.com","title":"The Machine Breakers","type":"article-journal","URL":"https://academic.oup.com/past/article-abstract/1/1/57/1508444/The-Machine-Breakers","volume":"1"}, + {"id":"hofmannKnitPickingTexturesProgramming2019","abstract":"Knitting creates complex, soft fabrics with unique texture properties that can be used to create interactive objects.However, little work addresses the challenges of designing and using knitted textures computationally. We present KnitPick: a pipeline for interpreting hand-knitting texture patterns into KnitGraphs which can be output to machine and hand-knitting instructions. Using KnitPick, we contribute a measured and photographed data set of 300 knitted textures. Based on fndings from this data set, we contribute two algorithms for manipulating KnitGraphs. KnitCarving shapes a graph while respecting a texture, and KnitPatching combines graphs with disparate textures while maintaining a consistent shape. KnitPick is the frst system to bridge the gap between hand- and machine-knitting when creating complex knitted textures.","accessed":{"date-parts":[[2021,3,16]]},"author":[{"family":"Hofmann","given":"Megan"},{"family":"Albaugh","given":"Lea"},{"family":"Sethapakadi","given":"Ticha"},{"family":"Hodgins","given":"Jessica"},{"family":"Hudson","given":"Scott E."},{"family":"McCann","given":"James"},{"family":"Mankoff","given":"Jennifer"}],"citation-key":"hofmannKnitPickingTexturesProgramming2019","container-title":"Proceedings of the 32nd Annual ACM Symposium on User Interface Software and Technology","DOI":"10.1145/3332165.3347886","event":"UIST '19: The 32nd Annual ACM Symposium on User Interface Software and Technology","event-place":"New Orleans LA USA","ISBN":"978-1-4503-6816-2","issued":{"date-parts":[[2019,10,17]]},"language":"en","page":"5-16","publisher":"ACM","publisher-place":"New Orleans LA USA","source":"DOI.org (Crossref)","title":"KnitPicking Textures: Programming and Modifying Complex Knitted Textures for Machine and Hand Knitting","title-short":"KnitPicking Textures","type":"paper-conference","URL":"https://dl.acm.org/doi/10.1145/3332165.3347886"}, + {"id":"holdenCulturalValueCrisis2006","author":[{"family":"Holden","given":"John"}],"citation-key":"holdenCulturalValueCrisis2006","ISBN":"1-84180-157-7","issued":{"date-parts":[[2006]]},"publisher":"Demos","title":"Cultural Value and the Crisis of Legitimacy: Why culture needs a democratic mandate","type":"book"}, + {"id":"hollandRobotsInternalModels2003","abstract":"We are engineers, and our view of consciousness is shaped by an engineering ambition: we would like to build a conscious machine. We begin by acknowledging that we may be a little disadvantaged, in that consciousness studies do not form part of the engineering curriculum, and so we may be starting from a position of considerable ignorance as regards the study of consciousness itself. In practice, however, this may not set us back very far; almost a decade ago, Crick wrote: 'Everyone has a rough idea of what is meant by consciousness. It is better to avoid a precise definition of consciousness because of the dangers of premature definition. Until the problem is understood much better, any attempt at a formal definition is likely to be either misleading or overly restrictive, or both' (Crick, 1994). This seems to be as true now as it was then, although the identification of different aspects of consciousness (P-consciousness, A-consciousness, self consciousness, and monitoring consciousness) by Block (1995) has certainly brought a degree of clarification. On the other hand, there is little doubt that consciousness does seem to be something to do with the operation of a sophisticated control system (the human brain), and we can claim more familiarity with control systems than can most philosophers, so perhaps we can make up some ground there.","author":[{"family":"Holland","given":"O."},{"family":"Goodman","given":"R."}],"citation-key":"hollandRobotsInternalModels2003","container-title":"Journal of Consciousness Studies","ISSN":"1355-8250","issued":{"date-parts":[[2003]]},"page":"77–109","title":"Robots With Internal Models A Route to Machine Consciousness?","type":"article-journal","URL":"http://www.ingentaconnect.com/content/imp/jcs/2003/00000010/F0020004/1348"}, + {"id":"holmboeResearchAgendaComputer2001","abstract":"This paper examines the nature and scope of computer science education (CSE) research. We first distinguish CSE research from other forms of educational research, outlining its aims and identity as a research discipline. In examining the state of the art of CSE research, we attempt to categorise past research studies into general themes, reflecting the diverse contributions to CSE made over the years. Further, we critique each category, highlighting possible benefits and limitations. We argue that there has been a lack of reference to pedagogical theory, underlying most past research studies. This has resulted in a failure to provide teachers with \"pedagogical content knowledge\", critical to gaining useful insights into cognitive and educational issues surrounding learning. We conclude by providing guidelines for CSE research, stressing the need for a stronger connection to the theoretical frameworks of education-related disciplines such as pedagogy, epistemology, curriculum studies and psychology.","author":[{"family":"Holmboe","given":"Christian"},{"family":"McIver","given":"Linda"},{"family":"George","given":"Carlisle"}],"citation-key":"holmboeResearchAgendaComputer2001","container-title":"Proceedings of Psychology of Programming Interest Group","issued":{"date-parts":[[2001]]},"title":"Research Agenda for Computer Science Education","type":"paper-conference","URL":"http://www.ppig.org/papers/13th-holmboe.pdf"}, + {"id":"holowkaSemanticConceptualKnowledge2002","abstract":"We addressed the question of how babies exposed to two languages simultaneously acquire the meanings of words across their two languages. In particular, we attempted to shed new light on whether babies know that they are acquiring different lexicons right from the start, or whether early bilingual exposure causes them to be semantically confused. We propose a collection of research methods that, taken together, can answer these questions, which have hitherto received scant attention. Six hearing babies were videotaped for one hour on average seven times over one year (ages ranging from 0;7 to 2;2); three babies were acquiring French and English, and three French and LSQ. These populations offer unique insights into the semantic knowledge underlying bilingual as well as monolingual language acquisition. We found that the babies (1) acquired their two languages on the same timetable as monolinguals and (2) produced translation equivalents in their very first lexicons. Further, their early words (signs) in each language (3) were constrained along kind boundaries, (4) showed fundamentally similar semantic organization across their dual lexicons, and (5) reflected the meanings of their favorite things first. We also discuss why attributions that young bilinguals are delayed and confused have prevailed and we show that they are neither at this point in development. Finally, the present findings show how research of this type can provide a method for making bilingual norms wholly attainable.","author":[{"family":"Holowka","given":"Siobhan"},{"family":"Brosseau-Lapré","given":"Françoise"},{"family":"Petitto","given":"Laura A."}],"citation-key":"holowkaSemanticConceptualKnowledge2002","container-title":"Language Learning","DOI":"10.1111/0023-8333.00184","issue":"2","issued":{"date-parts":[[2002]]},"page":"205–262","title":"Semantic and Conceptual Knowledge Underlying Bilingual Babies' First Signs and Words","type":"article-journal","URL":"http://dx.doi.org/10.1111/0023-8333.00184","volume":"52"}, + {"id":"holtSpeechPerceptionAuditory2008","abstract":"The complexities of the acoustic speech signal pose many significant challenges for listeners. Although perceiving speech begins with auditory processing, investigation of speech perception has progressed mostly independently of study of the auditory system. Nevertheless, a growing body of evidence demonstrates that cross-fertilization between the two areas of research can be productive. We briefly describe research bridging the study of general auditory processing and speech perception, showing that the latter is constrained and influenced by operating characteristics of the auditory system and that our understanding of the processes involved in speech perception is enhanced by study within a more general framework. The disconnect between the two areas of research has stunted the development of a truly interdisciplinary science, but there is an opportunity for great strides in understanding with the development of an integrated field of auditory cognitive science.","author":[{"family":"Holt","given":"Lori L."},{"family":"Lotto","given":"Andrew J."}],"citation-key":"holtSpeechPerceptionAuditory2008","container-title":"Current directions in psychological science : a journal of the American Psychological Society","DOI":"10.1111/j.1467-8721.2008.00545.x","ISSN":"1467-8721","issue":"1","issued":{"date-parts":[[2008,2]]},"page":"42–46","PMCID":"PMC2593873","PMID":"19060961","title":"Speech Perception Within an Auditory Cognitive Science Framework.","type":"article-journal","URL":"http://dx.doi.org/10.1111/j.1467-8721.2008.00545.x","volume":"17"}, + {"id":"honorofPerceptionPitchLocation2005","abstract":"Fundamental frequency (F0) is used for many purposes in speech, but its linguistic significance is based on its relation to the speaker's range, not its absolute value. While it may be that listeners can gauge a specific pitch relative to a speaker's range by recognizing it from experience, whether they can do the same for an unfamiliar voice is an open question. The present experiment explored that question. Twenty native speakers of English (10 male, 10 female) produced the vowel /a/ with a spoken (not sung) voice quality at varying pitches within their own ranges. Listeners then judged, without familiarization or context, where each isolated F0 lay within each speaker's range. Correlations were high both for the entire range (0.721) and for the range minus the extremes (0.609). Correlations were somewhat higher when the F0s were related to the range of all the speakers, either separated by sex (0.830) or pooled (0.848), but several factors discussed here may help account for this pattern. Regardless, the present data provide strong support for the hypothesis that listeners are able to locate an F0 reliably within a range without external context or prior exposure to a speaker's voice.","author":[{"family":"Honorof","given":"D. N."},{"family":"Whalen","given":"D. H."}],"citation-key":"honorofPerceptionPitchLocation2005","container-title":"The Journal of the Acoustical Society of America","ISSN":"0001-4966","issue":"4 Pt 1","issued":{"date-parts":[[2005,4]]},"page":"2193–2200","PMID":"15898660","title":"Perception of pitch location within a speaker's F0 range.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/15898660","volume":"117"}, + {"id":"hoskinsFactoringBinaryMatrices1982","author":[{"family":"Hoskins","given":"J. A."}],"citation-key":"hoskinsFactoringBinaryMatrices1982","collection-title":"Lecture Notes in Mathematics","container-title":"Combinatorial Mathematics IX","DOI":"10.1007/BFb0061986","editor":[{"family":"Billington","given":"Elizabeth J."},{"family":"Oates-Williams","given":"Sheila"},{"family":"Street","given":"Anne Penfold"}],"event-place":"Berlin, Heidelberg","ISBN":"978-3-540-39375-7","issued":{"date-parts":[[1982]]},"language":"en","page":"300-326","publisher":"Springer","publisher-place":"Berlin, Heidelberg","source":"Springer Link","title":"Factoring binary matrices: A weaver's approach","title-short":"Factoring binary matrices","type":"paper-conference"}, + {"id":"hudakConceptionEvolutionApplication1989","abstract":"The foundations of functional programming languages are examined from both historical and technical perspectives. Their evolution is traced through several critical periods: early work on lambda calculus and combinatory calculus, Lisp, Iswim, FP, ML, and modern functional languages such as Miranda1 and Haskell. The fundamental premises on which the functional programming methodology stands are critically analyzed with respect to philosophical, theoretical, and pragmatic concerns. Particular attention is paid to the main features that characterize modern functional languages: higher-order functions, lazy evaluation, equations and pattern matching, strong static typing and type inference, and data abstraction. In addition, current research areas—such as parallelism, nondeterminism, input/output, and state-oriented computations—are examined with the goal of predicting the future development and application of functional languages.","author":[{"family":"Hudak","given":"Paul"}],"citation-key":"hudakConceptionEvolutionApplication1989","container-title":"ACM Comput. Surv.","DOI":"10.1145/72551.72554","ISSN":"0360-0300","issue":"3","issued":{"date-parts":[[1989,9]]},"page":"359–411","title":"Conception, evolution, and application of functional programming languages","type":"article-journal","URL":"http://dx.doi.org/10.1145/72551.72554","volume":"21"}, + {"id":"hudakHaskellSchoolExpression2000","abstract":"\"This book teaches functional programming using Haskell, the most popular purely functional language. The emphasis is on functional programming as a way of thinking and problem solving, using Haskell as a vehicle for expressing solutions. Rather than using conventional examples from mathematics, which are commonly found in other programming language books, this tutorial uses examples drawn from multimedia applications, including graphics, animation, and computer music, thus rewarding the reader with working programs for inherently more interesting applications. The author also teaches how to reason about functional programs, using a very simple process of calculation.\"–Jacket.","author":[{"family":"Hudak","given":"Paul"}],"citation-key":"hudakHaskellSchoolExpression2000","edition":"First","ISBN":"0-521-64408-9","issued":{"date-parts":[[2000,2]]},"note":"Published: Paperback","publisher":"Cambridge University Press","title":"The Haskell school of expression : learning functional programming through multimedia","type":"book","URL":"http://www.worldcat.org/isbn/0521644089"}, + {"id":"huettigUsingVisualWorld2011","abstract":"We describe the key features of the visual world paradigm and review the main research areas where it has been used. In our discussion we highlight that the paradigm provides information about the way language users integrate linguistic information with information derived from the visual environment. Therefore the paradigm is well suited to study one of the key issues of current cognitive psychology, namely the interplay between linguistic and visual information processing. However, conclusions about linguistic processing (e.g., about activation, competition, and timing of access of linguistic representations) in the absence of relevant visual information must be drawn with caution. Copyright \\copyright 2010 Elsevier B.V. All rights reserved.","author":[{"family":"Huettig","given":"Falk"},{"family":"Rommers","given":"Joost"},{"family":"Meyer","given":"Antje S."}],"citation-key":"huettigUsingVisualWorld2011","container-title":"Acta Psychologica","DOI":"10.1016/j.actpsy.2010.11.003","ISSN":"00016918","issue":"2","issued":{"date-parts":[[2011,6]]},"page":"151–171","PMID":"21288498","title":"Using the visual world paradigm to study language processing: A review and critical evaluation","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.actpsy.2010.11.003","volume":"137"}, + {"id":"huiRecursivityContingency2019","abstract":"This book employs recursivity and contingency as two principle concepts to investigate into the relation between nature and technology, machine and organism, system and freedom. It reconstructs a trajectory of thought from an Organic condition of thinking elaborated by Kant, passing by the philosophy of nature (Schelling and Hegel), to the 20th century Organicism (Bertalanffy, Needham, Whitehead, Wiener among others) and Organology (Bergson, Canguilhem, Simodnon, Stiegler), and questions the new condition of philosophizing in the time of algorithmic contingency, ecological and algorithmic catastrophes, which Heidegger calls the end of philosophy. The book centres on the following speculative question: if in the philosophical tradition, the concept of contingency is always related to the laws of nature, then in what way can we understand contingency in related to technical systems? The book situates the concept of recursivity as a break from the Cartesian mechanism and the drive of system construction; it elaborates on the necessity of contingency in such epistemological rupture where nature ends and system emerges. In this development, we see how German idealism is precursor to cybernetics, and the Anthropocene and Noosphere (Teilhard de Chardin) point toward the realization of a gigantic cybernetic system, which lead us back to the question of freedom. It questions the concept of absolute contingency (Meillassoux) and proposes a cosmotechnical pluralism. Engaging with modern and contemporary European philosophy as well as Chinese thought through the mediation of Needham, this book refers to cybernetics, mathematics, artificial intelligence and inhumanism.","author":[{"family":"Hui","given":"Yuk"}],"citation-key":"huiRecursivityContingency2019","event-place":"London ; New York","ISBN":"978-1-78660-052-3","issued":{"date-parts":[[2019,3,1]]},"language":"English","number-of-pages":"338","publisher":"Rowman & Littlefield International","publisher-place":"London ; New York","source":"Amazon","title":"Recursivity and Contingency","type":"book"}, + {"id":"huronSweetAnticipationMusic2008","abstract":"The psychological theory of expectation that David Huron proposes in Sweet Anticipation grew out of the author's experimental efforts to understand how music evokes emotions. These efforts evolved into a general theory of expectation that will prove informative to readers interested in cognitive science and evolutionary psychology as well as those interested in music. The book describes a set of psychological mechanisms and illustrates how these mechanisms work in the case of music. All examples of notated music can be heard on the Web.Huron proposes that emotions evoked by expectation involve five functionally distinct response systems: reaction responses (which engage defensive reflexes); tension responses (where uncertainty leads to stress); prediction responses (which reward accurate prediction); imagination responses (which facilitate deferred gratification); and appraisal responses (which occur after conscious thought is engaged). For real-world events, these five response systems typically produce a complex mixture of feelings. The book identifies some of the aesthetic possibilities afforded by expectation, and shows how common musical devices (such as syncopation, cadence, meter, tonality, and climax) exploit the psychological opportunities. The theory also provides new insights into the physiological psychology of awe, laughter, and spine-tingling chills. Huron traces the psychology of expectations from the patterns of the physical/cultural world through imperfectly learned heuristics used to predict that world to the phenomenal qualia we experienced as we apprehend the world.","author":[{"family":"Huron","given":"David"}],"citation-key":"huronSweetAnticipationMusic2008","event-place":"Cambridge, Mass.; London","ISBN":"978-0-262-58278-0","issued":{"date-parts":[[2008,2,22]]},"language":"English","number-of-pages":"480","publisher":"MIT Press","publisher-place":"Cambridge, Mass.; London","source":"Amazon","title":"Sweet Anticipation: Music and the Psychology of Expectation","title-short":"Sweet Anticipation","type":"book"}, + {"id":"hutchinsLivePatchLive2015","author":[{"family":"Hutchins","given":"Charles"}],"citation-key":"hutchinsLivePatchLive2015","container-title":"Proceedings of the 1st International Conference on Live Coding","issued":{"date-parts":[[2015,7]]},"title":"Live Patch / Live Code","type":"paper-conference"}, + {"id":"ijzermanThermometerSocialRelations2009","abstract":"ABSTRACT2014\"Holding warm feelings toward someone\" and \"giving someone the cold shoulder\" indicate different levels of social proximity. In this article, we show effects of temperature that go beyond these metaphors people live by. In three experiments, warmer conditions, compared with colder conditions, induced (a) greater social proximity, (b) use of more concrete language, and (c) a more relational focus. Different temperature conditions were created by either handing participants warm or cold beverages (Experiment 1) or placing them in comfortable warm or cold ambient conditions (Experiments 2 and 3). These studies corroborate recent findings in the field of grounded cognition revealing that concrete experiences ground abstract concepts with which they are coexperienced. Our studies show a systemic interdependence among language, perception, and social proximity: Environmentally induced conditions shape not only language use, but also the perception and construal of social relationships.","author":[{"family":"Ijzerman","given":"Hans"},{"family":"Semin","given":"Gün R."}],"citation-key":"ijzermanThermometerSocialRelations2009","container-title":"Psychological Science","DOI":"10.1111/j.1467-9280.2009.02434.x","ISSN":"1467-9280","issue":"9999","issued":{"date-parts":[[2009]]},"title":"The Thermometer of Social Relations: Mapping Social Proximity on Temperature","type":"article-journal","URL":"http://dx.doi.org/10.1111/j.1467-9280.2009.02434.x","volume":"9999"}, + {"id":"ingoldBeingAliveEssays2011","author":[{"family":"Ingold","given":"Tim"}],"citation-key":"ingoldBeingAliveEssays2011","ISBN":"0-415-57684-9","issued":{"date-parts":[[2011,5]]},"note":"Published: Paperback","publisher":"Routledge","title":"Being Alive: Essays on Movement, Knowledge and Description","type":"book","URL":"http://www.worldcat.org/isbn/0415576849"}, + {"id":"ingoldTextilityMaking2010","abstract":"Contemporary discussions of art and technology continue to work on the assumption that making entails the imposition of form upon the material world, by an agent with a design in mind. Against this hylomorphic model of creation, I argue that the forms of things arise within fields of force and flows of material. It is by intervening in these force-fields and following the lines of flow that practitioners make things. In this view, making is a practice of weaving, in which practitioners bind their own pathways or lines of becoming into the texture of material flows comprising the lifeworld. Rather than reading creativity 'backwards', from a finished object to an initial intention in the mind of an agent, this entails reading it forwards, in an ongoing generative movement that is at once itinerant, improvisatory and rhythmic. To illustrate what this means in practice, I compare carpentry and drawing. In both cases, making is a matter of finding the grain of the world's becoming and following its course. Historically, it was the turn from drawing lines to pulling them straight, between predetermined points, which marked the transition from the textilic to the architectonic, debasing the former as craft while elevating the latter as technology.","author":[{"family":"Ingold","given":"Tim"}],"citation-key":"ingoldTextilityMaking2010","container-title":"Cambridge Journal of Economics","DOI":"10.1093/cje/bep042","ISSN":"1464-3545","issue":"1","issued":{"date-parts":[[2010,1]]},"page":"91–102","title":"The textility of making","type":"article-journal","URL":"http://dx.doi.org/10.1093/cje/bep042","volume":"34"}, + {"id":"ingoldTextilityMaking2011","author":[{"family":"Ingold","given":"Tim"}],"citation-key":"ingoldTextilityMaking2011","container-title":"Being Alive: Essays on Movement, Knowledge and Description","ISBN":"0-415-57684-9","issued":{"date-parts":[[2011,5]]},"note":"Published: Paperback","page":"210–219","publisher":"Routledge","title":"The Textility of Making","type":"chapter"}, + {"id":"InkaHistoryKnots","accessed":{"date-parts":[[2018,9,7]]},"citation-key":"InkaHistoryKnots","title":"Inka History in Knots: Reading Khipus as Primary Sources: Gary Urton: 9781477311998: Amazon.com: Books","type":"webpage","URL":"https://www.amazon.com/Inka-History-Knots-Reading-Primary/dp/1477311998"}, + {"id":"InkaHistoryKnotsa","accessed":{"date-parts":[[2018,9,7]]},"citation-key":"InkaHistoryKnotsa","title":"Inka History in Knots: Reading Khipus as Primary Sources eBook: Gary Urton: Amazon.co.uk: Kindle Store","type":"webpage","URL":"https://www.amazon.co.uk/dp/B01MU1JGMY/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1"}, + {"id":"InterviewFlorenceBrooks","citation-key":"InterviewFlorenceBrooks","title":"Interview with Florence Brooks and Eugenie Carter about maypole dancing","type":"song","URL":"http://research.culturalequity.org/get-audio-ix.do?ix=recording&id=11145&idType=sessionId&sortBy=abc"}, + {"id":"iversonAuditoryStreamSegregation1995","abstract":"Two experiments examined the influence of timbre on auditory stream segregation. In experiment 1, listeners heard sequences of orchestral tones equated for pitch and loudness, and they rated how strongly the instruments segregated. Multidimensional scaling analyses of these ratings revealed that segregation was based on the static and dynamic acoustic attributes that influenced similarity judgements in a previous experiment (P Iverson & CL Krumhansl, 1993). In Experiment 2, listeners heard interleaved melodies and tried to recognize the melodies played by a target timbre. The results extended the findings of Experiment 1 to tones varying pitch. Auditory stream segregation appears to be influenced by gross differences in static spectra and by dynamic attributes, including attack duration and spectral flux. These findings support a gestalt explanation of stream segregation and provide evidence against peripheral channel model.","author":[{"family":"Iverson","given":"P."}],"citation-key":"iversonAuditoryStreamSegregation1995","container-title":"J Exp Psychol Hum Percept Perform","ISSN":"0096-1523","issue":"4","issued":{"date-parts":[[1995,8]]},"page":"751–763","PMID":"7643047","title":"Auditory stream segregation by musical timbre: effects of static and dynamic acoustic attributes.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/7643047","volume":"21"}, + {"id":"iyerNovelRepresentationRhythmic1997","author":[{"family":"Iyer","given":"Vijay"},{"family":"Bilmes","given":"Jeff"},{"family":"Wright","given":"Matt"},{"family":"Wessel","given":"David"}],"citation-key":"iyerNovelRepresentationRhythmic1997","container-title":"International Computer Music Conference","issued":{"date-parts":[[1997]]},"title":"A Novel Representation for Rhythmic Structure","type":"paper-conference"}, + {"id":"jackendoffParallelsNonparallelsLanguage2009","author":[{"family":"Jackendoff","given":"Ray"}],"citation-key":"jackendoffParallelsNonparallelsLanguage2009","container-title":"Music Perception","DOI":"10.1525/mp.2009.26.3.195","issue":"3","issued":{"date-parts":[[2009]]},"page":"195–204","title":"Parallels and Nonparallels between Language and Music","type":"article-journal","URL":"http://caliber.ucpress.net/doi/abs/10.1525/mp.2009.26.3.195","volume":"26"}, + {"id":"jackHydra2022","abstract":"Livecoding networked visuals in the browser","accessed":{"date-parts":[[2022,6,24]]},"author":[{"family":"Jack","given":"Olivia"}],"citation-key":"jackHydra2022","issued":{"date-parts":[[2022,6,20]]},"original-date":{"date-parts":[[2022,6,13]]},"source":"GitHub","title":"Hydra","type":"book","URL":"https://github.com/ojack/hydra"}, + {"id":"janerFeatureExtractionVoicedriven2005","author":[{"family":"Janer","given":"J."}],"citation-key":"janerFeatureExtractionVoicedriven2005","container-title":"Proceedings of 118th Audio Engineering Society Convention","event-place":"Barcelona","issued":{"date-parts":[[2005]]},"publisher-place":"Barcelona","title":"Feature Extraction for Voice-driven Synthesis","type":"paper-conference"}, + {"id":"janerGroovatorImplementationRealtime2006","author":[{"family":"Janer","given":"J."},{"family":"Bonada","given":"J."},{"family":"Jordà","given":"S."}],"citation-key":"janerGroovatorImplementationRealtime2006","container-title":"Proceedings of 121st Convention of the Audio Engineering Society","event-place":"San Francisco, CA, USA","issued":{"date-parts":[[2006]]},"publisher-place":"San Francisco, CA, USA","title":"Groovator - an implementation of real-time rhythm transformations","type":"paper-conference"}, + {"id":"janerMorphingTechniquesEnhanced2005","author":[{"family":"Janer","given":"J."},{"family":"Loscos","given":"A."}],"citation-key":"janerMorphingTechniquesEnhanced2005","container-title":"Proceedings of 8th Intl. Conference on Digital Audio Effects","event-place":"Madrid, Spain","issued":{"date-parts":[[2005]]},"publisher-place":"Madrid, Spain","title":"Morphing techniques for enhanced scat singing","type":"paper-conference"}, + {"id":"janerPerformancedrivenControlSamplebased2006","author":[{"family":"Janer","given":"J."},{"family":"Bonada","given":"J."},{"family":"Blaauw","given":"M."}],"citation-key":"janerPerformancedrivenControlSamplebased2006","container-title":"Proceedings of 9th International Conference on Digital Audio Effects","event-place":"Montreal, Canada","issued":{"date-parts":[[2006]]},"publisher-place":"Montreal, Canada","title":"Performance-driven control for sample-based singing voice synthesis","type":"paper-conference"}, + {"id":"janerPhoneticbasedMappingsVoicedriven2007","author":[{"family":"Janer","given":"J."},{"family":"Maestre","given":"E."}],"citation-key":"janerPhoneticbasedMappingsVoicedriven2007","container-title":"Proceedings of International Conference on Signal Processing and Multimedia Applications","event-place":"Barcelona, Spain","issued":{"date-parts":[[2007]]},"publisher-place":"Barcelona, Spain","title":"Phonetic-based mappings in voice-driven sound synthesis","type":"paper-conference"}, + {"id":"janerSingingdrivenInterfacesSound2008","abstract":"Together with the sound synthesis engine, the user interface, or controller, is a basic component of any digital music synthesizer and the primary focus of this dissertation. Under the title of singing-driven interfaces, we study the design of systems, that based on the singing voice as input, can control the synthesis of musical sounds. From a number of preliminary experiments and studies, we identify the principal issues involved in voice-driven synthesis. We propose one approach for controlling a singing voice synthesizer and another one for controlling the synthesis of other musical instruments. In the former, input and output signals are of the same nature, and control to signal mappings can be direct. In the latter, mappings become more complex, depending on the phonetics of the input voice and the characteristics of the synthesized instrument sound. For this latter case, we present a study on vocal imitation of instruments showing that these voice signals consist of syllables with musical meaning. Also, we suggest linking the characteristics of voice signals to instrumental gestures, describing these signals as vocal gestures. Within the wide scope of the voice-driven synthesis topic, this dissertation studies the relationship between the human voice and the sound of musical instruments by addressing the automatic description of the voice and the mapping strategies for a meaningful control of the synthesized sounds. The contributions of the thesis include several voice analysis methods for using the voice as a control input: a) a phonetic alignment algorithm based on dynamic programming; b) a segmentation algorithm to isolate vocal gestures; c) a formant tracking algorithm; and d) a breathiness characterization algorithm. We also propose a general framework for defining the mappings from vocal gestures to the synthesizer parameters, which are configured according to the instrumental sound being synthesized. As a way to demonstrate the results obtained, two real-time prototypes are implemented. The first prototype controls the synthesis of a singing voice and the second one is a generic controller for other instrumental sounds.","author":[{"family":"Janer","given":"J."}],"citation-key":"janerSingingdrivenInterfacesSound2008","event-place":"Barcelona","issued":{"date-parts":[[2008]]},"publisher":"Universitat Pompeu Fabra","publisher-place":"Barcelona","title":"Singing-driven Interfaces for Sound Synthesizers","type":"thesis","URL":"http://mtg.upf.edu/files/publications/Tesi_jjaner_2008.pdf"}, + {"id":"janerSyllablingInstrumentImitation2007","abstract":"Syllabling is nonsense text singing that is widespread over cultures. This paper describes a case study of syllabling on instrument imitation. An additional interest of this study is to apply the results to improve voice-driven synthesizers. The presented case study addresses syllabling on instrument imitation in an educational context.","author":[{"family":"Janer","given":"J."},{"family":"Peñalba","given":"A."}],"citation-key":"janerSyllablingInstrumentImitation2007","container-title":"Proceedings of 3rd Conference on Interdisciplinary Musicology","event-place":"Tallinn, Estonia","issued":{"date-parts":[[2007]]},"publisher-place":"Tallinn, Estonia","title":"Syllabling on instrument imitation: case study and computational methods","type":"paper-conference","URL":"http://mtg.upf.edu/publicacions.php?lng=eng&aul=3&did=443"}, + {"id":"janerVoicecontrolledPluckedBass2005","author":[{"family":"Janer","given":"J."}],"citation-key":"janerVoicecontrolledPluckedBass2005","container-title":"Proceedings of 2005 International Conference on New Interfaces for Musical Expression","event-place":"Vancouver, Canada","issued":{"date-parts":[[2005]]},"publisher-place":"Vancouver, Canada","title":"Voice-controlled plucked bass guitar through two synthesis techniques","type":"paper-conference"}, + {"id":"janerVoiceMusicalController2004","author":[{"family":"Janer","given":"J."}],"citation-key":"janerVoiceMusicalController2004","issued":{"date-parts":[[2004]]},"title":"Voice as a musical controller for real-time synthesis","type":"thesis"}, + {"id":"jarickDifferentOutlookTime2009","abstract":"Synaesthesia is a fascinating condition whereby individuals report extraordinary experiences when presented with ordinary stimuli. Here we examined an individual (L) who experiences time units (i.e., months of the year and hours of the day) as occupying specific spatial locations (January is 30° to the left of midline). This form of time-space synaesthesia has been recently investigated by Smilek et al. (2007) who demonstrated that synaesthetic time-space associations are highly consistent, occur regardless of intention, and can direct spatial attention. We extended this work by showing that for the synaesthete L, her time-space vantage point changes depending on whether the time units are seen or heard. For example, when L sees the word JANUARY, she reports experiencing January on her left side, however when she hears the word ” January” she experiences the month on her right side. L's subjective reports were validated using a spatial cueing paradigm. The names of months were centrally presented followed by targets on the left or right. L was faster at detecting targets in validly cued locations relative to invalidly cued locations both for visually presented cues (January orients attention to the left) and for aurally presented cues (January orients attention to the right). We replicated this difference in visual and aural cueing effects using hour of the day. Our findings support previous research showing that time-space synaesthesia can bias visual spatial attention, and further suggest that for this synaesthete, time-space associations differ depending on whether they are visually or aurally induced.","author":[{"family":"Jarick","given":"Michelle"},{"family":"Dixon","given":"Mike J."},{"family":"Stewart","given":"Mark T."},{"family":"Maxwell","given":"Emily C."},{"family":"Smilek","given":"Daniel"}],"citation-key":"jarickDifferentOutlookTime2009","container-title":"Cortex","DOI":"10.1016/j.cortex.2009.05.014","ISSN":"00109452","issue":"10","issued":{"date-parts":[[2009,11]]},"page":"1217–1228","title":"A different outlook on time: Visual and auditory month names elicit different mental vantage points for a time-space synaesthete","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.cortex.2009.05.014","volume":"45"}, + {"id":"jarvinen-pasleyEnhancedPerceptualProcessing2008","author":[{"family":"Jarvinen-Pasley","given":"Anna"},{"family":"Wallace","given":"Gregory L."},{"family":"Ramus","given":"Franck"},{"family":"Happe","given":"Francesca"},{"family":"Heaton","given":"Pamela"}],"citation-key":"jarvinen-pasleyEnhancedPerceptualProcessing2008","container-title":"Developmental Science","DOI":"10.1111/j.1467-7687.2007.00644.x","ISSN":"1363-755X","issue":"1","issued":{"date-parts":[[2008,1]]},"page":"109–121","title":"Enhanced perceptual processing of speech in autism","type":"article-journal","URL":"http://dx.doi.org/10.1111/j.1467-7687.2007.00644.x","volume":"11"}, + {"id":"jeffsCylobMusicSystem2007","author":[{"family":"Jeffs","given":"Chris"}],"citation-key":"jeffsCylobMusicSystem2007","issued":{"date-parts":[[2007]]},"title":"Cylob Music System","type":"book","URL":"http://durftal.com/cms/cylobmusicsystem.html"}, + {"id":"jentschkeChildrenSpecificLanguage2008","abstract":"Both language and music consist of sequences that are structured according to syntactic regularities. We used two specific event-related brain potential (ERP) components to investigate music-syntactic processing in children: the ERAN (early right anterior negativity) and the N5. The neural resources underlying these processes have been posited to overlap with those involved in the processing of linguistic syntax. Thus, we expected children with specific language impairment (SLI, which is characterized by deficient processing of linguistic syntax) to demonstrate difficulties with music-syntactic processing. Such difficulties were indeed observed in the neural correlates of music-syntactic processing: neither an ERAN nor an N5 was elicited in children with SLI, whereas both components were evoked in age-matched control children with typical language development. Moreover, the amplitudes of ERAN and N5 were correlated with subtests of a language development test. These data provide evidence for a strong interrelation between the language and the music processing system, thereby setting the ground for possible effects of musical training in SLI therapy.","author":[{"family":"Jentschke","given":"Sebastian"},{"family":"Koelsch","given":"Stefan"},{"family":"Sallat","given":"Stephan"},{"family":"Friederici","given":"Angela D."}],"citation-key":"jentschkeChildrenSpecificLanguage2008","container-title":"Journal of cognitive neuroscience","DOI":"10.1162/jocn.2008.20135","ISSN":"0898-929X","issue":"11","issued":{"date-parts":[[2008,11]]},"page":"1940–1951","PMID":"18416683","title":"Children with specific language impairment also show impairment of music-syntactic processing.","type":"article-journal","URL":"http://dx.doi.org/10.1162/jocn.2008.20135","volume":"20"}, + {"id":"jessenConcretenessEffectEvidence2000","abstract":"The term concreteness effect refers to the observation that concrete nouns are processed faster and more accurately than abstract nouns in a variety of cognitive tasks. Two models have been proposed to explain the neuronal basis of the concreteness effect. The dual-coding theory attributes the advantage to the access of a right hemisphere image based system in addition to a verbal system by concrete words. The context availability theory argues that concrete words activate a broader contextual verbal support, which results in faster processing, but do not access a distinct image based system. We used event-related fMRI to detect the brain regions that subserve to the concreteness effect. We found greater activation in the lower right and left parietal lobes, in the left inferior frontal lobe and in the precuneus during encoding of concrete compared to abstract nouns. This makes a single exclusive theory unlikely and rather suggests a combination of both models. Superior encoding of concrete words in the present study may result from (1) greater verbal context resources reflected by the activation of left parietal and frontal associative areas, and (2) the additional activation of a non-verbal, perhaps spatial imagery-based system, in the right parietal lobe.","author":[{"family":"Jessen","given":"F."}],"citation-key":"jessenConcretenessEffectEvidence2000","container-title":"Brain and Language","DOI":"10.1006/brln.2000.2340","ISSN":"0093934X","issue":"1","issued":{"date-parts":[[2000,8]]},"page":"103–112","title":"The Concreteness Effect: Evidence for Dual Coding and Context Availability","type":"article-journal","URL":"http://dx.doi.org/10.1006/brln.2000.2340","volume":"74"}, + {"id":"johnson-lairdMentalModelsCognitive1986","abstract":"_Mental Models_ offers nothing less than a unified theory of the majorproperties of mind: comprehension, inference, and consciousness. In spiritedand graceful prose, Johnson-Laird argues that we apprehend the world bybuilding inner mental replicas of the relations among objects and events thatconcern us. The mind is essentially a model-building device that can itself bemodeled on a digital computer. This book provides both a blueprint forbuilding such a model and numerous important illustrations of how to do it.In several key areas of cognition, Johnson-Laird shows how an explanationbased on mental modeling is clearly superior to previous theory. For example,he argues compellingly that deductive reasoning does not take place by tacitlyapplying the rules of logic, but by mentally manipulating models of the statesof affairs from which inferences are drawn. Similarly, linguisticcomprehension is best understood not as a matter of applying inference rulesto propositions derived from sentences, but rather as the mind's effort toconstruct and update a model of the situation described by a text or adiscourse. Most provocative, perhaps, is Johnson-Laird's theory ofconsciousness: the mind's necessarily incomplete model of itself allows only apartial control over the many unconscious and parallel processes of cognition.This an extraordinarily rich book, providing a coherent account of much recentexperimental work in cognitive psychology, along with lucid explanations ofrelevant theory in linguistics, computer science, and philosophy Not sinceMiller, Galanter, and Pribram's classic _Plans and the Structure of Behavior_has a book in cognitive science combined such sweep, style, and good sense.Like its distinguished predecessor, _Mental Models_ may well serve to fix apoint of view for a generation.","author":[{"family":"Johnson-Laird","given":"Philip"}],"citation-key":"johnson-lairdMentalModelsCognitive1986","ISBN":"0-674-56882-6","issued":{"date-parts":[[1986,6]]},"note":"Published: Paperback","publisher":"Harvard University Press","title":"Mental Models: Towards a Cognitive Science of Language, Inference, and Consciousness (Cognitive Science Series)","type":"book","URL":"http://www.worldcat.org/isbn/0674568826"}, + {"id":"jonesComposingContractsAdventure2000","abstract":"Financial and insurance contracts do not sound like promising territory for functional programming and formal semantics, but in fact we have discovered that insights from programming languages bear directly on the complex subject of describing and valuing a large class of contracts.We introduce a combinator library that allows us to describe such contracts precisely, and a compositional denotational semantics that says what such contracts are worth. We sketch an implementation of our combinator library in Haskell. Interestingly, lazy evaluation plays a crucial role.","author":[{"family":"Jones","given":"Simon P."},{"family":"Eber","given":"Jean M."},{"family":"Seward","given":"Julian"}],"citation-key":"jonesComposingContractsAdventure2000","container-title":"ICFP '00: Proceedings of the fifth ACM SIGPLAN international conference on Functional programming","DOI":"10.1145/351240.351267","event-place":"New York, NY, USA","ISBN":"1-58113-202-6","issued":{"date-parts":[[2000]]},"page":"280–292","publisher":"ACM","publisher-place":"New York, NY, USA","title":"Composing contracts: an adventure in financial engineering (functional pearl)","type":"paper-conference","URL":"http://dx.doi.org/10.1145/351240.351267"}, + {"id":"jonesCompositionalControlPhonetic1987","author":[{"family":"Jones","given":"David E."}],"citation-key":"jonesCompositionalControlPhonetic1987","container-title":"Perspectives of new music","issue":"1-2","issued":{"date-parts":[[1987]]},"page":"138–155","title":"Compositional control of phonetic/nonphonetic perception","type":"article-journal","volume":"25"}, + {"id":"jonesHandDrummingDataset2007","abstract":"Physical modeling is a proven technique for creating sounds with rich expressive potential, but the state of the art in control does not offer access to the whole of this potential. New developments in modeling algorithms are typically presented with single-point, idealized excitations where more complex ones would add vitality to the sounds produced. The 2D waveguide mesh, in particular, can be excited simultaneously at multiple points on a surface, like a physical drum by a hand. The authors present a synthesis system in which this control has been implemented using a 2D pressure sensor, resulting in sounds that capture the some of the salient qualities of hand drumming. A dataset of 2D force measurements from various hand drumming techniques is presented, to be used by researchers in physical modeling synthesis.","author":[{"family":"Jones","given":"Randy"},{"family":"Lagrange","given":"Mathieu"},{"family":"Schloss","given":"Andrew"}],"citation-key":"jonesHandDrummingDataset2007","container-title":"Int. Conf on Computer Music","issued":{"date-parts":[[2007]]},"title":"A Hand Drumming Dataset for Physical Modeling","type":"paper-conference"}, + {"id":"jonesHaskell98Language2002","citation-key":"jonesHaskell98Language2002","editor":[{"family":"Jones","given":"Simon P."}],"issued":{"date-parts":[[2002]]},"publisher":"http://haskell.org/","title":"Haskell 98 Language and Libraries: The Revised Report","type":"book","URL":"http://haskell.org/definition/haskell98-report.pdf"}, + {"id":"jonesIntimateControlPhysical2008","abstract":"http://2uptech.com/intimate_control/","author":[{"family":"Jones","given":"Randall"}],"citation-key":"jonesIntimateControlPhysical2008","issued":{"date-parts":[[2008]]},"title":"Intimate Control for Physical Modeling Synthesis","type":"thesis","URL":"http://2uptech.com/intimate_control/"}, + {"id":"jonesSpeechExtrapolated1990","author":[{"family":"Jones","given":"David E."}],"citation-key":"jonesSpeechExtrapolated1990","container-title":"Perspectives of New Music","issue":"1","issued":{"date-parts":[[1990]]},"page":"112–142","title":"Speech Extrapolated","type":"article-journal","volume":"28"}, + {"id":"jordaReacTable2005","abstract":"This paper describes the reacTable*, a novel multi-user electro-acoustic music instrument with a tabletop tangible user interface, which is being developed at the MTG in Barcelona. We first introduce the reacTable * project and some of the concepts behind its design and we then discuss interaction and performance scenarios. 1.","author":[{"family":"Jordà","given":"Sergi"},{"family":"Kaltenbrunner","given":"Martin"},{"family":"Geiger","given":"Günter"},{"family":"Bencina","given":"Ross"}],"citation-key":"jordaReacTable2005","container-title":"In Proceedings of the International Computer Music Conference (ICMC 2005","issued":{"date-parts":[[2005]]},"page":"579–582","title":"The reacTable","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.62.6306"}, + {"id":"jordaReacTableExploringSynergy2007","abstract":"In recent years we have seen a proliferation of musical tables. Believing that this is not just the result of a tabletop trend, in this paper we first discuss several of the reasons for which live music performance and HCI in general, and musical instruments and tabletop interfaces in particular, can lead to a fertile two-way cross-pollination that can equally benefit both fields. After that, we present the reacTable, a musical instrument based on a tabletop interface that exemplifies several of these potential achievements.","author":[{"family":"Jordà","given":"S."},{"family":"Geiger","given":"G."},{"family":"Alonso","given":"M."},{"family":"Kaltenbrunner","given":"M."}],"citation-key":"jordaReacTableExploringSynergy2007","container-title":"Proceedings of Tangible and Embedded Interaction 2007","issued":{"date-parts":[[2007]]},"page":"139–146","title":"The reacTable: Exploring the Synergy between Live Music Performance and Tabletop Tangible Interfaces","type":"paper-conference","URL":"#"}, + {"id":"junProsodicTypologyPhonology2005","abstract":"This book illustrates an approach to prosodic typology through the intonational phonology of thirteen typologically different languages and the transcription system of prosody known as Tones and Break Indices (ToBI). This is the first book introducing the history and principles of this system, and it covers European languages, Asian languages, an Australian aboriginal language, and an American Indian language. It is the first book on intonation that includes sound files on a CD-ROM.","author":[{"family":"Jun","given":"Sun A."}],"citation-key":"junProsodicTypologyPhonology2005","ISBN":"0-19-924963-6","issued":{"date-parts":[[2005,3]]},"note":"Published: Hardcover","publisher":"Oxford University Press","title":"Prosodic Typology : The Phonology of Intonation and Phrasing includes CD","type":"book","URL":"http://www.amazon.ca/exec/obidos/redirect?tag=citeulike09-20&path=ASIN/0199249636"}, + {"id":"juslinCommunicationEmotionsVocal2003","abstract":"Many authors have speculated about a close relationship between vocal expression of emotions and musical expression of emotions. but evidence bearing on this relationship has unfortunately been lacking. This review of 104 studies of vocal expression and 41 studies of music performance reveals similarities between the 2 channels concerning (a) the accuracy with which discrete emotions were communicated to listeners and (b) the emotion-specific patterns of acoustic cues used to communicate each emotion. The patterns are generally consistent with K. R. Scherer's (1986) theoretical predictions. The results can explain why music is perceived as expressive of emotion, and they are consistent with an evolutionary perspective on vocal expression of emotions. Discussion focuses on theoretical accounts and directions for future research.","author":[{"family":"Juslin","given":"P. N."},{"family":"Laukka","given":"P."}],"citation-key":"juslinCommunicationEmotionsVocal2003","container-title":"Psychological bulletin","DOI":"10.1037/0033-2909.129.5.770","ISSN":"0033-2909","issue":"5","issued":{"date-parts":[[2003,9]]},"page":"770–814","PMID":"12956543","title":"Communication of emotions in vocal expression and music performance: different channels, same code?","type":"article-journal","URL":"http://dx.doi.org/10.1037/0033-2909.129.5.770","volume":"129"}, + {"id":"kadoshSynaesthesiaLearnedLost2009","abstract":"Abstract The question why synaesthesia, an atypical binding within or between modalities, occurs is both enduring and important. Two explanations have been provided: (1) a congenital explanation: we are all born as synaesthetes but most of us subsequently lose the experience due to brain development; (2) a learning explanation: synaesthesia is related to some learning process during childhood. Three recent studies provide conflicting support for these explanations. Two studies supported the idea that synaesthesia is learned by showing that the frequency of everyday language implicitly modulates the synaesthetic experience. Another study argued that synaesthesia reflects basic, innate magnitude representations. In this paper we reassess these points of view, and show that it is possible for both to be valid. These findings are integrated into an interactive specialization account of development in order to explain the neuronal mechanism underlying synaesthesia.","author":[{"family":"Kadosh","given":"Roi C."},{"family":"Henik","given":"Avishai"},{"family":"Walsh","given":"Vincent"}],"citation-key":"kadoshSynaesthesiaLearnedLost2009","container-title":"Developmental Science","DOI":"10.1111/j.1467-7687.2008.00798.x","ISSN":"1363-755X","issue":"3","issued":{"date-parts":[[2009]]},"page":"484–491","PMID":"19371373","title":"Synaesthesia: learned or lost?","type":"article-journal","URL":"http://dx.doi.org/10.1111/j.1467-7687.2008.00798.x","volume":"12"}, + {"id":"kalraSoftwareHutStudent2005","abstract":"The University of Sheffield provides undergraduate students with a real experience of software engineering through a module entitled the Software Hut. Here, 2nd year students work in teams competing to build a real business solution for a real commercial client. In this exercise, eXtreme Programming is used. This article provides a few details of this innovative educational programme.","author":[{"family":"Kalra","given":"Bhavnidhi"},{"family":"Thomson","given":"Chris"},{"family":"Holcombe","given":"Mike"}],"citation-key":"kalraSoftwareHutStudent2005","collection-title":"Lecture Notes in Computer Science","container-title":"Extreme Programming and Agile Processes in Software Engineering","DOI":"10.1007/11499053_68","editor":[{"family":"Baumeister","given":"Hubert"},{"family":"Marchesi","given":"Michele"},{"family":"Holcombe","given":"Mike"}],"event-place":"Berlin, Heidelberg","ISBN":"978-3-540-26277-0","issued":{"date-parts":[[2005]]},"page":"323–324","publisher":"Springer Berlin / Heidelberg","publisher-place":"Berlin, Heidelberg","title":"The Software Hut – A Student Experience of eXtreme Programming with Real Commercial Clients","type":"chapter","URL":"http://dx.doi.org/10.1007/11499053_68","volume":"3556"}, + {"id":"kamiyaHowCodeSkips2011","author":[{"family":"Kamiya","given":"Toshihiro"}],"citation-key":"kamiyaHowCodeSkips2011","collection-title":"IWSC '11","container-title":"Proceeding of the 5th international workshop on Software clones","event-place":"Waikiki, Honolulu, HI, USA","issued":{"date-parts":[[2011]]},"page":"69–70","publisher":"ACM","publisher-place":"Waikiki, Honolulu, HI, USA","title":"How code skips over revisions","type":"paper-conference","URL":"http://doi.acm.org/10.1145/1985404.1985420"}, + {"id":"karjalainenHighqualitySoundSynthesis1993","abstract":"The sound quality of real-time synthesis based on physical models has so far been inferior tosampling techniques. In this paper we introduce new principles to make model-based sound synthesisof the guitar and other plucked string instruments more attractive from the viewpoint ofsound quality. A major improvement is achieved by estimating the model parameters and the excitationsignal from the sound of an acoustic instrument. It is shown that the impulse response of thebody is included...","author":[{"family":"Karjalainen","given":"M."},{"family":"Valimaki","given":"V."},{"family":"J'anosy","given":"Z."}],"citation-key":"karjalainenHighqualitySoundSynthesis1993","issued":{"date-parts":[[1993]]},"title":"Towards high-quality sound synthesis of the guitar and string instruments","type":"book","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.686"}, + {"id":"karjalainenPluckedStringModelsKarplusStrong1998","author":[{"family":"Karjalainen","given":"Matti"},{"family":"Välimäki","given":"Vesa"},{"family":"Tolonen","given":"Tero"}],"citation-key":"karjalainenPluckedStringModelsKarplusStrong1998","container-title":"Computer Music Journal","DOI":"10.2307/3681155","issue":"3","issued":{"date-parts":[[1998]]},"page":"17–32","title":"Plucked-String Models: From the Karplus-Strong Algorithm to Digital Waveguides and beyond","type":"article-journal","URL":"http://dx.doi.org/10.2307/3681155","volume":"22"}, + {"id":"karnStudyEffectsPersonality2007","abstract":"The aim of the research described in this paper is to gain a qualitative understanding of how cohesiveness relates to personality type, performance and adherence to a particular software engineering methodology (XP). A variety of research methods were employed including ethnographic methods, questionnaires and interviews. An online personality test based on the Myers-Briggs Type Indicator (MBTI) was used to ascertain the personality types, and questionnaires were used throughout the project to measure levels of cohesiveness. Examples of how the teams worked together throughout the project are described, and whether and how this relates to the personality types of the individual members. The results indicate that certain teams were found to work consistently well over the project due to homogeneity in personality type and others were found to be very cohesive due to a mixture of types.","author":[{"family":"Karn","given":"J. S."},{"family":"Abdullah","given":"Syed S."},{"family":"Cowling","given":"A. J."},{"family":"Holcombe","given":"M."}],"citation-key":"karnStudyEffectsPersonality2007","container-title":"Behav. Inf. Technol.","ISSN":"0144-929X","issued":{"date-parts":[[2007,3]]},"page":"99–111","title":"A study into the effects of personality type and methodology on cohesion in software engineering teams","type":"article-journal","URL":"http://portal.acm.org/citation.cfm?id=1392879","volume":"26"}, + {"id":"karplusDigitalSynthesisPlucked1983","author":[{"family":"Karplus","given":"Kevin"},{"family":"Strong","given":"Alex"}],"citation-key":"karplusDigitalSynthesisPlucked1983","container-title":"Computer Music Journal","issue":"2","issued":{"date-parts":[[1983]]},"page":"43–55","title":"Digital Synthesis of Plucked String and Drum Timbres","type":"article-journal","volume":"7"}, + {"id":"katesicchioLiveCodingTools2020","abstract":"Terpsicode is a developing mini programming language for live coding dance performance scores. This paper explores the process of creating a choreographic patterning language using images, and discusses the creation, capturing, and naming of movement. It also reflects on the premiere performance using this system with a live coder and improvising dancer and how score-making with code may be translated by a performer. The final result of this venture seeks to provide a computer language for choreography that utilises dance terminology alongside visual performance scores that may be used within various improvising settings","accessed":{"date-parts":[[2021,1,19]]},"author":[{"family":"Kate Sicchio","given":""},{"family":"Zeshan Wang","given":""},{"family":"Marissa Forbes","given":""}],"citation-key":"katesicchioLiveCodingTools2020","DOI":"10.5281/zenodo.3939135","event-place":"Limerick, Ireland","ISBN":"9781911620235","issued":{"date-parts":[[2020,2,5]]},"page":"87-94","publisher":"University of Limerick","publisher-place":"Limerick, Ireland","title":"Live Coding Tools for Choreography: Creating Terpsicode","title-short":"Live Coding Tools for Choreography","type":"speech","URL":"https://zenodo.org/record/3939135#.YAbvB1n7SV4"}, + {"id":"kaufmannMusicalNotationsOrient1967","author":[{"family":"Kaufmann","given":"Walter A."}],"citation-key":"kaufmannMusicalNotationsOrient1967","ISBN":"0-253-38660-8","issued":{"date-parts":[[1967]]},"note":"Published: Hardcover","publisher":"Indiana Univ Pr","title":"Musical Notations of the Orient: Notational Systems of Continental East, South and Central Asia","type":"book","URL":"http://www.worldcat.org/isbn/0253386608"}, + {"id":"kawrykowNonessentialChangesVersion2011","abstract":"Numerous techniques involve mining change data captured in software archives to assist engineering efforts, for example to identify components that tend to evolve together. We observed that important changes to software artifacts are sometimes accompanied by numerous non-essential modifications, such as local variable refactorings, or textual differences induced as part of a rename refactoring. We developed a tool-supported technique for detecting non-essential code differences in the revision histories of software systems. We used our technique to investigate code changes in over 24,000 change sets gathered from the change histories of seven long-lived open-source systems. We found that up to 15.5% of a system's method updates were due solely to non-essential differences. We also report on numerous observations on the distribution of non-essential differences in change history and their potential impact on change-based analyses.","author":[{"family":"Kawrykow","given":"David"},{"family":"Robillard","given":"Martin P."}],"citation-key":"kawrykowNonessentialChangesVersion2011","collection-title":"ICSE '11","container-title":"Proceeding of the 33rd international conference on Software engineering","DOI":"10.1145/1985793.1985842","event-place":"Waikiki, Honolulu, HI, USA","ISBN":"978-1-4503-0445-0","issued":{"date-parts":[[2011]]},"page":"351–360","publisher":"ACM","publisher-place":"Waikiki, Honolulu, HI, USA","title":"Non-essential changes in version histories","type":"paper-conference","URL":"http://dx.doi.org/10.1145/1985793.1985842"}, + {"id":"kayserMinimumSpanningTree1989","author":[{"family":"Kayser","given":"K."},{"family":"Stute","given":"H."}],"citation-key":"kayserMinimumSpanningTree1989","container-title":"Pathology, Research and Practice","issue":"5","issued":{"date-parts":[[1989]]},"page":"729–734","title":"Minimum spanning tree, Voronoi's tessellation and Johnson-Mehl diagrams in human lung carcinoma","type":"article-journal","volume":"185"}, + {"id":"kernighanProgrammingLanguage1988","abstract":"Just about every C programmer I respect learned C from this book. Unlike many of the 1,000 page doorstops stuffed with CD-ROMs that have become popular, this volume is concise and powerful (if somewhat dangerous) – like C itself. And it was written by Kernighan himself. Need we say more?","author":[{"family":"Kernighan","given":"Brian W."},{"family":"Ritchie","given":"Dennis M."}],"citation-key":"kernighanProgrammingLanguage1988","edition":"Second","ISBN":"0-13-110362-8","issued":{"date-parts":[[1988,4]]},"note":"Published: Paperback","publisher":"Prentice Hall","title":"C Programming Language","type":"book","URL":"http://www.worldcat.org/isbn/0131103628"}, + {"id":"kieferLiveCodingMachine2019","abstract":"The MIMIC (Musically Intelligent Machines Interacting Creatively) project explores how the techniques of machine learning and machine listening can be communicated and implemented in simple terms for composers, instrument makers and performers. The potential for machine learning to support musical composition and performance is high, and with novel techniques in machine listening, we see emerging a technology that can shift from being instrumental to conversational and collaborative. By leveraging the internet as a live software ecosystem, the MIMIC project explores how such technology can best reach artists, and live up to its collaborative potential to fundamentally change creative practice in the field.\n The project involves creating a high level language that can be used for live coding, creative coding and quick prototyping. Implementing a language that interfaces with technically complex problems such as the design of machine learning neural networks or the temporal and spectral algorithms applied in machine listening is not a simple task, but we can build upon decades of research and practice in programming language design (Ko 2016), and computer music language design in particular, as well as a plethora of inventive new approaches in the design of live coding systems for music (Reina et al. 2019). The language and user interface design will build on recent research in creative coding and interactive machine learning, exemplified by the Rapid Mix project (Bernardo et. al., 2016, Zbyszynski et. al., 2017). Machine learning continues to be at the forefront of new innovations in computer music, (e.g. new sound synthesis techniques in NSynth (Engel et. al. 2017) and WaveNet (van den Oord, 2016)); the language will seek to integrate models based around these new techniques into live coding performance, and also explore the efficacy of live coding as an approach to training and exploiting these systems for analysing and generating sound.\n Existing live coding systems and languages are often reported on, describing clever solutions as well as weaknesses, as given, for example, in accounts of the development of Tidal (McLean, 2014), Extramuros (Ogborn et. al, 2015) and Gibber (Roberts and Kuchera-Morin, 2012). Researchers are typically reflective and openly critical of their own systems when analysing them and often report on its design with wider implications (Aaron 2011; Sorensen 2018). However, they rarely speculate freely and uninhibitedly about possible solutions or alternative paths taken; the focus is typically on the system described. Before defining the design of our own system, we were therefore interested in opening up a channel where we could learn from other practitioners in language design, machine learning and machine listening. We created a survey that we sent out to relevant communities of practice - such as live coding, machine learning, machine listening, creative coding, deep learning - and asked open questions about how they might imagine a future system implemented, given the knowledge we have today. Below we report on the questionnaire and its findings.","accessed":{"date-parts":[[2021,1,28]]},"author":[{"family":"Kiefer","given":"Chris"},{"family":"Magnusson","given":"Thor"}],"citation-key":"kieferLiveCodingMachine2019","container-title":"Proceedings of the International Conference on Live Coding","event-place":"Media Lab Prado, Madrid","genre":"Conference Proceedings","issued":{"date-parts":[[2019,3,7]]},"language":"en","publisher":"ICLC","publisher-place":"Media Lab Prado, Madrid","title":"Live coding machine learning and machine listening: a survey on the design of languages and environments for live coding","title-short":"Live coding machine learning and machine listening","type":"webpage","URL":"https://iclc.livecodenetwork.org/2019/"}, + {"id":"kinzerTweenbots","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Kinzer","given":"Kacie"}],"citation-key":"kinzerTweenbots","title":"Tweenbots","type":"webpage","URL":"http://www.tweenbots.com/"}, + {"id":"kippenTablaLucknowCultural1988","author":[{"family":"Kippen","given":"James"}],"citation-key":"kippenTablaLucknowCultural1988","issued":{"date-parts":[[1988]]},"publisher":"Cambridge University Press","title":"The Tabla of Lucknow - A cultural analysis of a musical tradiation","type":"book"}, + {"id":"kirschThinkingBody2010","author":[{"family":"Kirsch","given":"David"}],"citation-key":"kirschThinkingBody2010","container-title":"Proceedings of Cognitive Science Society 2010","issued":{"date-parts":[[2010]]},"title":"Thinking with the Body","type":"paper-conference","URL":"http://palm.mindmodeling.org/cogsci2010/papers/0674/index.html"}, + {"id":"kirshThinkingExternalRepresentations2010","abstract":"Why do people create extra representations to help them make sense of situations, diagrams, illustrations, instructions and problems? The obvious explanation—external representations save internal memory and computation—is only part of the story. I discuss seven ways external representations enhance cognitive power: they change the cost structure of the inferential landscape; they provide a structure that can serve as a shareable object of thought; they create persistent referents; they facilitate re-representation; they are often a more natural representation of structure than mental representations; they facilitate the computation of more explicit encoding of information; they enable the construction of arbitrarily complex structure; and they lower the cost of controlling thought—they help coordinate thought. Jointly, these functions allow people to think more powerfully with external representations than without. They allow us to think the previously unthinkable.","author":[{"family":"Kirsh","given":"David"}],"citation-key":"kirshThinkingExternalRepresentations2010","container-title":"AI Soc.","DOI":"10.1007/s00146-010-0272-8","ISSN":"0951-5666","issue":"4","issued":{"date-parts":[[2010,11]]},"page":"441–454","title":"Thinking with External Representations","type":"article-journal","URL":"http://dx.doi.org/10.1007/s00146-010-0272-8","volume":"25"}, + {"id":"klattReviewTexttospeechConversation1987","author":[{"family":"Klatt","given":"Dennis"}],"citation-key":"klattReviewTexttospeechConversation1987","container-title":"J. Acoust. Soc. Am.","issued":{"date-parts":[[1987]]},"title":"Review of text-to-speech conversation for English","type":"article-journal","volume":"82"}, + {"id":"klattSoftwareCascadeParallel1980","author":[{"family":"Klatt","given":"Dennis"}],"citation-key":"klattSoftwareCascadeParallel1980","container-title":"J. Acoust. Soc. Am.","issued":{"date-parts":[[1980]]},"title":"Software for a cascade/parallel formant synthesizer","type":"article-journal","volume":"67"}, + {"id":"kleePedagogicalSketchbook1953","author":[{"family":"Klee","given":"Paul"}],"citation-key":"kleePedagogicalSketchbook1953","issued":{"date-parts":[[1953]]},"publisher":"Faber and Faber","title":"Pedagogical sketchbook","type":"book"}, + {"id":"kleinConcreteAbstractVoronoi1989","author":[{"family":"Klein","given":"Rolf"}],"citation-key":"kleinConcreteAbstractVoronoi1989","collection-title":"Lecture Notes in Computer Science","issued":{"date-parts":[[1989]]},"publisher":"Springer","title":"Concrete and Abstract Voronoi Diagrams","type":"book","volume":"400"}, + {"id":"knoblichInferringAgencySound2009","abstract":"In three experiments we investigated how people determine whether or not they are in control of sounds they hear. The sounds were either triggered by participants' taps or controlled by a computer. The task was to distinguish between self-control and external control during active tapping, and during passive listening to a playback of the sounds recorded during the active condition. Experiment 1 required detection of a change in control mode within trials. Experiments 2 and 3 introduced a simple rhythm reproduction task that requires discrimination of control modes between trials. The results demonstrate that both sensorimotor cues and perceptual cues are used to infer agency. In addition, there may be further influences of cognitive expectation and/or multimodal integration. In accordance with hierarchical models of intention [e.g., Pacherie, E. (2008). The phenomenology of action: A conceptual framework. Cognition, 107, 179-217] this suggests that the sense of agency is not situated on one specific level of action control but subject to multiple influences.","author":[{"family":"Knoblich","given":"Günther"},{"family":"Repp","given":"Bruno H. H."}],"citation-key":"knoblichInferringAgencySound2009","container-title":"Cognition","DOI":"10.1016/j.cognition.2009.02.007","ISSN":"1873-7838","issued":{"date-parts":[[2009,3]]},"PMID":"19306996","title":"Inferring agency from sound.","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.cognition.2009.02.007"}, + {"id":"koelschMusicLanguageMeaning2004","abstract":"Semantics is a key feature of language, but whether or not music can activate brain mechanisms related to the processing of semantic meaning is not known. We compared processing of semantic meaning in language and music, investigating the semantic priming effect as indexed by behavioral measures and by the N400 component of the event-related brain potential (ERP) measured by electroencephalography (EEG). Human subjects were presented visually with target words after hearing either a spoken sentence or a musical excerpt. Target words that were semantically unrelated to prime sentences elicited a larger N400 than did target words that were preceded by semantically related sentences. In addition, target words that were preceded by semantically unrelated musical primes showed a similar N400 effect, as compared to target words preceded by related musical primes. The N400 priming effect did not differ between language and music with respect to time course, strength or neural generators. Our results indicate that both music and language can prime the meaning of a word, and that music can, as language, determine physiological indices of semantic processing.","author":[{"family":"Koelsch","given":"Stefan"},{"family":"Kasper","given":"Elisabeth"},{"family":"Sammler","given":"Daniela"},{"family":"Schulze","given":"Katrin"},{"family":"Gunter","given":"Thomas"},{"family":"Friederici","given":"Angela D."}],"citation-key":"koelschMusicLanguageMeaning2004","container-title":"Nature Neuroscience","DOI":"10.1038/nn1197","ISSN":"1097-6256","issue":"3","issued":{"date-parts":[[2004,2]]},"page":"302–307","PMID":"14983184","title":"Music, language and meaning: brain signatures of semantic processing","type":"article-journal","URL":"http://dx.doi.org/10.1038/nn1197","volume":"7"}, + {"id":"koestlerActCreation1976","author":[{"family":"Koestler","given":"Arthur"}],"citation-key":"koestlerActCreation1976","ISBN":"0-14-019191-7","issued":{"date-parts":[[1976,6]]},"note":"Published: Paperback","publisher":"Penguin (Non-Classics)","title":"The Act of Creation","type":"book","URL":"http://www.worldcat.org/isbn/0140191917"}, + {"id":"kohlerGestaltPsychology1930","author":[{"family":"Kohler","given":"Wolfgang"}],"citation-key":"kohlerGestaltPsychology1930","issued":{"date-parts":[[1930]]},"publisher":"Camelot Press","title":"Gestalt Psychology","type":"book"}, + {"id":"kokolLinguisticLawsComputer1996","abstract":"An abstract is not available.","author":[{"family":"Kokol","given":"Peter"},{"family":"Kokol","given":"Tatjana"}],"citation-key":"kokolLinguisticLawsComputer1996","container-title":"Journal of the American Society for Information Science","ISSN":"0002-8231","issued":{"date-parts":[[1996,9]]},"page":"781–785","title":"Linguistic laws and computer programs","type":"article-journal","URL":"http://portal.acm.org/citation.cfm?id=236242.236248","volume":"47"}, + {"id":"korzybskiScienceSanityIntroduction1933","author":[{"family":"Korzybski","given":"Alfred"}],"citation-key":"korzybskiScienceSanityIntroduction1933","issued":{"date-parts":[[1933]]},"language":"en","number-of-pages":"836","publisher":"International Non-Aristotelian Library Publishing Company","source":"Google Books","title":"Science and Sanity: An Introduction to Non-Aristotelian Systems and General Semantics","title-short":"Science and Sanity","type":"book"}, + {"id":"koStateArtEnduser2011","author":[{"family":"Ko","given":"Andrew J."},{"family":"Abraham","given":"Robin"},{"family":"Beckwith","given":"Laura"},{"family":"Blackwell","given":"Alan"},{"family":"Burnett","given":"Margaret"},{"family":"Erwig","given":"Martin"},{"family":"Scaffidi","given":"Chris"},{"family":"Lawrance","given":"Joseph"},{"family":"Lieberman","given":"Henry"},{"family":"Myers","given":"Brad"},{"family":"Rosson","given":"Mary B."},{"family":"Rothermel","given":"Gregg"},{"family":"Shaw","given":"Mary"},{"family":"Wiedenbeck","given":"Susan"}],"citation-key":"koStateArtEnduser2011","container-title":"ACM Comput. Surv.","issue":"3","issued":{"date-parts":[[2011,4]]},"page":"1–44","title":"The state of the art in end-user software engineering","type":"article-journal","URL":"http://doi.acm.org/10.1145/1922649.1922658","volume":"43"}, + {"id":"kowalskiAlgorithmLogicControl1979","abstract":"The notion that computation = controlled deduction was first proposed by Pay Hayes [19] and more recently by Bibel [2] and Vaughn-Pratt [31]. A similar thesis that database systems should be regarded as consisting of a relational component, which defines the logic of the data, and a control component, which stores and retrieves it, has been successfully argued by Codd [10]. Hewitt's argument [20] for the programming language PLANNER, though generally regarded as an argument against logic, can also be regarded as an argument for the thesis that algorithms be regarded as consisting of both logic and control components. In this paper we shall explore some of the useful consequences of that thesis.","author":[{"family":"Kowalski","given":"Robert"}],"citation-key":"kowalskiAlgorithmLogicControl1979","container-title":"Communications of the ACM","DOI":"10.1145/359131.359136","ISSN":"0001-0782","issue":"7","issued":{"date-parts":[[1979,7]]},"page":"424–436","title":"Algorithm = Logic + Control","type":"article-journal","URL":"http://dx.doi.org/10.1145/359131.359136","volume":"22"}, + {"id":"kretowitzAlgoraveLiveCoding","abstract":"Artists across the world are redefining what it means to create music with a laptop","accessed":{"date-parts":[[2017,3,21]]},"author":[{"family":"Kretowitz","given":"Steph"}],"citation-key":"kretowitzAlgoraveLiveCoding","container-title":"Mixmag","title":"Algorave: The live coding movement that makes next-level electronic music","title-short":"Algorave","type":"webpage","URL":"http://mixmag.net/feature/algorave"}, + {"id":"krinkeCloningCopyingGNOME2010","abstract":"This paper presents an approach to automatically distinguish the copied clone from the original in a pair of clones. It matches the line-by-line version information of a clone to the pair's other clone. A case study on the GNOME Desktop Suite revealed a complex flow of reused code between the different subprojects. In particular, it showed that the majority of larger clones (with a minimal size of 28 lines or higher) exist between the subprojects and more than 60% of the clone pairs can be automatically separated into original and copy.","author":[{"family":"Krinke","given":"J."},{"family":"Gold","given":"N."},{"family":"Jia","given":"Yue"},{"family":"Binkley","given":"D."}],"citation-key":"krinkeCloningCopyingGNOME2010","container-title":"Mining Software Repositories (MSR), 2010 7th IEEE Working Conference on","DOI":"10.1109/msr.2010.5463290","issued":{"date-parts":[[2010,5]]},"page":"98–101","title":"Cloning and copying between GNOME projects","type":"article-journal","URL":"http://dx.doi.org/10.1109/msr.2010.5463290"}, + {"id":"krumhanslWhyMusicalTimbre1989","author":[{"family":"Krumhansl","given":"Carol L."}],"citation-key":"krumhanslWhyMusicalTimbre1989","container-title":"Structure and Perception of Electroacoustic Sound and Music, Proceedings of the Marcus Wallenberg symposium 1998","editor":[{"family":"Nielzén","given":"Sören"},{"family":"Olsson","given":"Olle"}],"issued":{"date-parts":[[1989]]},"page":"43–53","publisher":"Excerpta Medica","title":"Why is Musical Timbre so hard to understand?","type":"paper-conference"}, + {"id":"kupkaConversationalLanguages1980","author":[{"family":"Kupka","given":"I."},{"family":"Wilsing","given":"N."}],"citation-key":"kupkaConversationalLanguages1980","issued":{"date-parts":[[1980]]},"publisher":"John Wiley and Sons","title":"Conversational Languages","type":"book"}, + {"id":"kurbakStitchingWorldsExploring2018","citation-key":"kurbakStitchingWorldsExploring2018","editor":[{"family":"Kurbak","given":"Ebru"}],"event-place":"Berlin","ISBN":"978-3-95763-422-1","issued":{"date-parts":[[2018,5,1]]},"language":"English","publisher":"Revolver Publishing","publisher-place":"Berlin","source":"Amazon","title":"Stitching Worlds: Exploring Textiles and Electronics","title-short":"Stitching Worlds","type":"book"}, + {"id":"kuuttiTurnPracticeHCI2014","abstract":"This paper argues that a new paradigm for HCI research, which we label the ‘practice’ perspective, has been emerging in recent years. This stands in contrast to the prevailing mainstream HCI paradigm, which we term the ‘interaction’ perspective. The ‘practice turn’, as it has been dubbed in the social sciences, provides a conceptual frame to organize a variety of issues emerging in more recent HCI research. While this approach has been present in certain strands of HCI research for some time, it has not been articulated fully to date. In this paper, we provide a short account of the main tenets of this perspective, and then show how it can illuminate some of the recent debates within HCI. Our argument is one which does not seek to replace extant HCI theories, but rather to provide an alternative, complementary theoretical lens which may illuminate the present confusion among both researchers and practitioners as to the direction of HCI. The paper articulates a set of issues which can help direct HCI research programs, as well as highlighting the potential contribution of the HCI field to this practice approach itself, in terms of a more nuanced understanding of emerging practices.","accessed":{"date-parts":[[2021,3,1]]},"author":[{"family":"Kuutti","given":"Kari"},{"family":"Bannon","given":"Liam J."}],"citation-key":"kuuttiTurnPracticeHCI2014","container-title":"Proceedings of the SIGCHI Conference on Human Factors in Computing Systems","DOI":"10.1145/2556288.2557111","event":"CHI '14: CHI Conference on Human Factors in Computing Systems","event-place":"Toronto Ontario Canada","ISBN":"978-1-4503-2473-1","issued":{"date-parts":[[2014,4,26]]},"language":"en","page":"3543-3552","publisher":"ACM","publisher-place":"Toronto Ontario Canada","source":"DOI.org (Crossref)","title":"The turn to practice in HCI: towards a research agenda","title-short":"The turn to practice in HCI","type":"paper-conference","URL":"https://dl.acm.org/doi/10.1145/2556288.2557111"}, + {"id":"ladefogedRevisedInternationalPhonetic1990","author":[{"family":"Ladefoged","given":"Peter"}],"citation-key":"ladefogedRevisedInternationalPhonetic1990","container-title":"Language","DOI":"10.2307/414611","ISSN":"00978507","issue":"3","issued":{"date-parts":[[1990]]},"page":"550–552","title":"The Revised International Phonetic Alphabet","type":"article-journal","URL":"http://dx.doi.org/10.2307/414611","volume":"66"}, + {"id":"lahavActionRepresentationSound2007","abstract":"The discovery of audiovisual mirror neurons in monkeys gave rise to the hypothesis that premotor areas are inherently involved not only when observing actions but also when listening to action-related sound. However, the whole-brain functional formation underlying such \"action-listening\" is not fully understood. In addition, previous studies in humans have focused mostly on relatively simple and overexperienced everyday actions, such as hand clapping or door knocking. Here we used functional magnetic resonance imaging to ask whether the human action-recognition system responds to sounds found in a more complex sequence of newly acquired actions. To address this, we chose a piece of music as a model set of acoustically presentable actions and trained non-musicians to play it by ear. We then monitored brain activity in subjects while they listened to the newly acquired piece. Although subjects listened to the music without performing any movements, activation was found bilaterally in the frontoparietal motor-related network (including Broca's area, the premotor region, the intraparietal sulcus, and the inferior parietal region), consistent with neural circuits that have been associated with action observations, and may constitute the human mirror neuron system. Presentation of the practiced notes in a different order activated the network to a much lesser degree, whereas listening to an equally familiar but motorically unknown music did not activate this network. These findings support the hypothesis of a \"hearing-doing\" system that is highly dependent on the individual's motor repertoire, gets established rapidly, and consists of Broca's area as its hub.","author":[{"family":"Lahav","given":"Amir"},{"family":"Saltzman","given":"Elliot"},{"family":"Schlaug","given":"Gottfried"}],"citation-key":"lahavActionRepresentationSound2007","container-title":"The Journal of neuroscience : the official journal of the Society for Neuroscience","DOI":"10.1523/jneurosci.4822","ISSN":"1529-2401","issue":"2","issued":{"date-parts":[[2007,1]]},"page":"308–314","PMID":"17215391","title":"Action representation of sound: audiomotor recognition network while listening to newly acquired actions.","type":"article-journal","URL":"http://dx.doi.org/10.1523/jneurosci.4822","volume":"27"}, + {"id":"lairdPhysicalModellingDrums2001","abstract":"In this thesis the physical modelling of percussive drums was approached using digital waveguides. The constituent components of a drum were considered individually before connecting them together to complete the model. To model the drumskin techniques were created to incorporate smooth curved boundaries, calculate the impedance of a 2D waveguide mesh and include the effect of the bearing edge. The accuracy of the curved boundary model, which utilised 'rimguides', was demonstrated with a good reproduction of the first seven resonant modes of a circular membrane. The impedance was used in a kettledrum model where it correctly controlled the exchange of energy between the drumskin and interior air. Simulations of different bearing edge sizes revealed that a blunt edge takes energy from low frequencies and redistributes it into higher frequencies. These decay faster and so the result is a decrease in sustain. For the interior air it was necessary to correctly model 3D wave propagation and incorporate diffuse reflections, which occur at rough surfaces. Unlike 3D meshes used in previous studies, the new dodecahedral mesh proposed here was found to exhibit near direction independent dispersion error. The effect of diffusion was adequately simulated with a technique that was shown to be controllable, enabling different types of surface to be modelled. To complete the drum model a way of connecting different waveguide meshes together was found and a new procedure for modelling a mallet exciter was proposed. The interfacing method enabled a lossless interconnection between two 2D meshes and also 2D and 3D meshes. The procedure used for the mallet exciter incorporated non-linear stiffness and the mallet's contact area. Its behaviour was shown to be almost identical to that of a real mallet. Finally, a digital waveguide model of a kettledrum was constructed to demonstrate the techniques and the results were promising; the resonant modes were reproduced with good accuracy and their decay was sufficient to give the impression of realism, whilst not exactly matching that found through measurement.","author":[{"family":"Laird","given":"Joel A."}],"citation-key":"lairdPhysicalModellingDrums2001","issued":{"date-parts":[[2001,11]]},"publisher":"University of Bristol","title":"The Physical Modelling of Drums using Digital Waveguides","type":"thesis"}, + {"id":"lakoffMetaphorsWeLive1980","abstract":"
The now-classic Metaphors We Live By changed our understanding of metaphor and its role in language and the mind. Metaphor, the authors explain, is a fundamental mechanism of mind, one that allows us to use what we know about our physical and social experience to provide understanding of countless other subjects. Because such metaphors structure our most basic understandings of our experience, they are \"metaphors we live by\"–metaphors that can shape our perceptions and actions without our ever noticing them.

In this updated edition of Lakoff and Johnson's influential book, the authors supply an afterword surveying how their theory of metaphor has developed within the cognitive sciences to become central to the contemporary understanding of how we think and how we express our thoughts in language.

","author":[{"family":"Lakoff","given":"George"},{"family":"Johnson","given":"Mark"}],"citation-key":"lakoffMetaphorsWeLive1980","edition":"Second","ISBN":"0-226-46801-1","issued":{"date-parts":[[1980,4]]},"note":"Published: Paperback","publisher":"University of Chicago Press","title":"Metaphors We Live By","type":"book","URL":"http://www.worldcat.org/isbn/0226468011"}, + {"id":"lakoffPhilosophyFleshEmbodied1999","abstract":"George Lakoff and Mark Johnson take on the daunting task of rebuilding Western philosophy in alignment with three fundamental lessons from cognitive science: The mind is inherently embodied, thought is mostly unconscious, and abstract concepts are largely metaphorical. Why so daunting? \"Cognitive science–the empirical study of the mind–calls upon us to create a new, empirically responsible philosophy, a philosophy consistent with empirical discoveries about the nature of mind,\" they write. \"A serious appreciation of cognitive science requires us to rethink philosophy from the beginning, in a way that would put it more in touch with the reality of how we think.\" In other words, no Platonic forms, no Cartesian mind-body duality, no Kantian pure logic. Even Noam Chomsky's generative linguistics is revealed under scrutiny to have substantial problems.

Parts of Philosophy in the Flesh retrace the ground covered in the authors' earlier Metaphors We Live By, which revealed how we deal with abstract concepts through metaphor. (The previous sentence, for example, relies on the metaphors \"Knowledge is a place\" and \"Knowing is seeing\" to make its point.) Here they reveal the metaphorical underpinnings of basic philosophical concepts like time, causality–even morality–demonstrating how these metaphors are rooted in our embodied experiences. They repropose philosophy as an attempt to perfect such conceptual metaphors so that we can understand how our thought processes shape our experience; they even make a tentative effort toward rescuing spirituality from the heavy blows dealt by the disproving of the disembodied mind or \"soul\" by reimagining \"transcendence\" as \"imaginative empathetic projection.\" Their source list is helpfully arranged by subject matter, making it easier to follow up on their citations. If you enjoyed the mental workout from Steven Pinker's How the Mind Works, Lakoff and Johnson will, to pursue the \"Learning is exercise\" metaphor, take you to the next level of training. –Ron Hogan Two leading thinkers offer a blueprint for a new philosophy.

\"Their ambition is massive, their argument important.…The authors engage in a sort of metaphorical genome project, attempting to delineate the genetic code of human thought.\" -The New York Times Book Review

\"This book will be an instant academic best-seller.\" -Mark Turner, University of Maryland

This is philosophy as it has never been seen before. Lakoff and Johnson show that a philosophy responsible to the science of the mind offers a radically new and detailed understandings of what a person is. After first describing the philosophical stance that must follow from taking cognitive science seriously, they re-examine the basic concepts of the mind, time, causation, morality, and the self; then they rethink a host of philosophical traditions, from the classical Greeks through Kantian morality through modern analytical philosophy.","author":[{"family":"Lakoff","given":"George"},{"family":"Johnson","given":"Mark"}],"citation-key":"lakoffPhilosophyFleshEmbodied1999","ISBN":"0-465-05674-1","issued":{"date-parts":[[1999,12]]},"note":"Published: Paperback","publisher":"HarperCollins Publishers","title":"Philosophy in the Flesh : The Embodied Mind and Its Challenge to Western Thought","type":"book","URL":"http://www.worldcat.org/isbn/0465056741"}, + {"id":"lakoffWomenFireDangerous1997","abstract":"

\"Its publication should be a major event for cognitive linguistics and should pose a major challenge for cognitive science. In addition, it should have repercussions in a variety of disciplines, ranging from anthropology and psychology to epistemology and the philosophy of science. . . . Lakoff asks: What do categories of language and thought reveal about the human mind? Offering both general theory and minute details, Lakoff shows that categories reveal a great deal.\"–David E. Leary, American Scientist

","author":[{"family":"Lakoff","given":"George"}],"citation-key":"lakoffWomenFireDangerous1997","edition":"1997","ISBN":"0-226-46804-6","issued":{"date-parts":[[1997,4]]},"note":"Published: Paperback","publisher":"University of Chicago Press","title":"Women, fire, and dangerous things : what categories reveal about the mind","type":"book","URL":"http://www.worldcat.org/isbn/0226468046"}, + {"id":"lamkinExaminationCorrelationsFlutists2005","abstract":"The purpose of this project is to study the recorded flute sound and articulation of flutists in comparison with the recorded speech of the subject's native language (L1) and other languages they may speak [L2, L(n)]. Three hundred years of pedagogical literature recommending shape of mouth, embouchure placement besides the use of linguistic comparisons with four consonants, /t/, /d/, /k/, and /g/, along with every vowel have been used in syllable combination to recommend the optimum output, that of beautiful music. Language culture can influence subtle choices in tone production; hearing ranges of timbre, clarity, rise and fall, cadences, and rhythm could be the basis from which players develop tone as well as maintain repetitive precision in the execution of syllable choice(s). The performance recordings revealed correlations between vocal and instrumental timbre using sound analysis software. The initial alveolar stops of speech matched that of the subject's flute playing in the spectral envelope in the power spectrum, as well as in the harmonic envelope in the spectrogram. Implications for further research in music perception, semiotics and ethnomusicological analysis, flute pedagogy, performance parameters of the communication of emotions and vocal imitation are discussed.","author":[{"family":"Lamkin","given":"Linda L."}],"citation-key":"lamkinExaminationCorrelationsFlutists2005","container-title":"Proceedings of the Conference on Interdisciplinary Musicology 2005","issued":{"date-parts":[[2005]]},"title":"An Examination of Correlations between Flutists' Linguistic Practices and Their Sound Production on the Flute","type":"article-journal"}, + {"id":"lanChaosprintGlicol2022","abstract":"(Audio) graph-oriented live coding language and music DSP library written in Rust","accessed":{"date-parts":[[2022,6,24]]},"author":[{"family":"Lan","given":"Qichao"}],"citation-key":"lanChaosprintGlicol2022","genre":"Rust","issued":{"date-parts":[[2022,6,24]]},"original-date":{"date-parts":[[2020,7,13]]},"source":"GitHub","title":"chaosprint/glicol","type":"book","URL":"https://github.com/chaosprint/glicol"}, + {"id":"landyUnderstandingArtSound2007","abstract":"The art of sound organization, also known as electroacoustic music, uses sounds not available to traditional music making, including pre-recorded, synthesized, and processed sounds. The body of work of such sound-based music (which includes electroacoustic art music, turntable composition, computer games, and acoustic and digital sound installations) has developed more rapidly than its musicology. Understanding the Art of Sound Organization proposes the first general foundational framework for the study of the art of sound organization, defining terms, discussing relevant forms of music, categorizing works, and setting sound-based music in interdisciplinary contexts.

Leigh Landy's goal in this book is not only to create a theoretical framework but also to make sound-based music more accessible–to give a listener what he terms \"something to hold on to,\" for example, by connecting elements in a work to everyday experience. Landy considers the difficulties of categorizing works and discusses such types of works as sonic art and electroacoustic music, pointing out where they overlap and how they are distinctive. He proposes a \"sound-based music paradigm\" that transcends such traditional categories as art and pop music. Landy defines patterns that suggest a general framework and places the study of sound-based music in interdisciplinary contexts, from acoustics to semiotics, proposing a holistic research approach that considers the interconnectedness of a given work's history, theory, technological aspects, and social impact.

The author's ElectroAcoustic Resource Site (EARS, www.ears.dmu.ac.uk), the architecture of which parallels this book's structure, offers updated bibliographic resource abstracts and related information.","author":[{"family":"Landy","given":"Leigh"}],"citation-key":"landyUnderstandingArtSound2007","ISBN":"0-262-12292-8","issued":{"date-parts":[[2007,9]]},"note":"Published: Hardcover","publisher":"The MIT Press","title":"Understanding the Art of Sound Organization","type":"book","URL":"http://www.worldcat.org/isbn/0262122928"}, + {"id":"larsonMusicalForcesMelodic2004","abstract":"Recent work on musical forces asserts that experienced listeners of tonal music not only talk about music in terms used to describe physical motion, but actually experience musical motion as if it were shaped by quantifiable analogues of physical gravity, magnetism, and inertia. This article presents a theory of melodic expectation based on that assertion, describes two computer models of aspects of that theory, and finds strong support for that theory in comparisons of the behavior of those models with the behavior of participants in several experiments. The following summary statement of the theory is explained and illustrated in the article: Experienced listeners of tonal music expect completions in which the musical forces of gravity, magnetism, and inertia control operations on alphabets in hierarchies of embellishment whose stepwise displacements of auralized traces create simple closed shapes.A single-level computer program models the operation of these musical forces on a single level of musical structure. Given a melodic beginning in a certain key, the model not only produces almost the same responses as experimental participants, but it also rates them in a similar way; the computer model gives higher ratings to responses that participants sing more often. In fact, the completions generated by this model match note-for-note the entire completions sung by participants in several psychological studies as often as the completions of any one of those participants matches those of the other participants.A multilevel computer program models the operation of these musical forces on multiple hierarchical levels. When the multilevel model is given a melodic beginning and a hierarchical description of its embellishment structure (i.e., a Schenkerian analysis of it), the model produces responses that reflect the operation of musical forces on all the levels of that hierarchical structure.Statistical analyses of the results of a number of experiments test hypotheses arising from the computer models algorithm (S. Larson, 1993a) for the interaction of musical forces as well as from F. Lerdahls similar (1996) algorithm. Further statistical analysis contrasts the explanatory power of the theory of musical forces with that of E. Narmours (1990, 1992) implication-realization model.The striking agreement between computer-generated responses and experimental results suggests that the theory captures some important aspects of melodic expectation. Furthermore, the fact that these data can be modeled well by the interaction of constantly acting but contextually determined musical forces gives support to the idea that we experience musical motions metaphorically in terms of our experience of physical motions.","author":[{"family":"Larson","given":"S."}],"citation-key":"larsonMusicalForcesMelodic2004","container-title":"Music Perception","issue":"4","issued":{"date-parts":[[2004]]},"page":"457–498","title":"Musical forces and melodic expectations: Comparing computer models with experimental results","type":"article-journal","URL":"http://caliber.ucpress.net/doi/abs/10.1525/mp.2004.21.4.457","volume":"21"}, + {"id":"latourInquiryModesExistence2013","abstract":"In this new book, Bruno Latour offers answers to questions raised in \"We Have Never Been Modern, \"a work that interrogated the connections between nature and culture. If not modern, he asked, what \"have\" we been, and what values should we inherit? Over the past twenty-five years, Latour has developed a research protocol different from the actor-network theory with which his name is now associated--a research protocol that follows the different types of connectors that provide specific truth conditions. These are the connectors that prompt a climate scientist challenged by a captain of industry to appeal to the \"institution\" of science, with its army of researchers and mountains of data, rather than to \"capital-S Science\" as a higher authority. Such modes of extension--or modes of existence, Latour argues here--account for the many differences between law, science, politics, and other domains of knowledge. Though scientific knowledge corresponds to only one of the many possible modes of existence Latour describes, an unrealistic vision of science has become the arbiter of reality and truth, seducing us into judging all values by a single standard. Latour implores us to recover other modes of existence in order to do justice to the plurality of truth conditions that Moderns have discovered throughout their history. This systematic effort of building a new philosophical anthropology presents a completely different view of what Moderns have been, and provides a new basis for opening diplomatic encounters with other societies at a time when all societies are coping with ecological crisis.","author":[{"family":"Latour","given":"Bruno"},{"family":"Porter","given":"Catherine"}],"citation-key":"latourInquiryModesExistence2013","event-place":"Cambridge, Massachusetts","ISBN":"978-0-674-72499-0","issued":{"date-parts":[[2013,8,16]]},"language":"English","number-of-pages":"520","publisher":"Harvard University Press","publisher-place":"Cambridge, Massachusetts","source":"Amazon","title":"An Inquiry Into Modes of Existence: An Anthropology of the Moderns","title-short":"An Inquiry Into Modes of Existence","type":"book"}, + {"id":"latourInquiryModesExistence2013a","abstract":"In this new book, Bruno Latour offers answers to questions raised in \"We Have Never Been Modern, \"a work that interrogated the connections between nature and culture. If not modern, he asked, what \"have\" we been, and what values should we inherit? Over the past twenty-five years, Latour has developed a research protocol different from the actor-network theory with which his name is now associated--a research protocol that follows the different types of connectors that provide specific truth conditions. These are the connectors that prompt a climate scientist challenged by a captain of industry to appeal to the \"institution\" of science, with its army of researchers and mountains of data, rather than to \"capital-S Science\" as a higher authority. Such modes of extension--or modes of existence, Latour argues here--account for the many differences between law, science, politics, and other domains of knowledge. Though scientific knowledge corresponds to only one of the many possible modes of existence Latour describes, an unrealistic vision of science has become the arbiter of reality and truth, seducing us into judging all values by a single standard. Latour implores us to recover other modes of existence in order to do justice to the plurality of truth conditions that Moderns have discovered throughout their history. This systematic effort of building a new philosophical anthropology presents a completely different view of what Moderns have been, and provides a new basis for opening diplomatic encounters with other societies at a time when all societies are coping with ecological crisis.","author":[{"family":"Latour","given":"Bruno"},{"family":"Porter","given":"Catherine"}],"citation-key":"latourInquiryModesExistence2013a","event-place":"Cambridge, Massachusetts","ISBN":"978-0-674-72499-0","issued":{"date-parts":[[2013,8,16]]},"language":"English","number-of-pages":"520","publisher":"Harvard University Press","publisher-place":"Cambridge, Massachusetts","source":"Amazon","title":"An Inquiry Into Modes of Existence: An Anthropology of the Moderns","title-short":"An Inquiry Into Modes of Existence","type":"book"}, + {"id":"laursonExpressiveNotationModelBased1999","author":[{"family":"Laurson","given":"Mikael"},{"family":"Hiipakka","given":"Jarmo"},{"family":"Erkut","given":"Cumhur"},{"family":"Karjalainen","given":"Matti"},{"family":"Välimäki","given":"Vesa"},{"family":"Kuuskankare","given":"Mika"}],"citation-key":"laursonExpressiveNotationModelBased1999","issued":{"date-parts":[[1999]]},"title":"From Expressive Notation to Model-Based Sound Synthesis: A Case Study of theAcoustic Guitar","type":"paper-conference"}, + {"id":"laursonMethodsModelingRealistic2001","author":[{"family":"Laurson","given":"Mikael"},{"family":"Erkut","given":"Cumhur"},{"family":"Välimäki","given":"Vesa"},{"family":"Kuuskankare","given":"Mika"}],"citation-key":"laursonMethodsModelingRealistic2001","container-title":"Comput. Music J.","DOI":"10.1162/014892601753189529","ISSN":"0148-9267","issue":"3","issued":{"date-parts":[[2001]]},"page":"38–49","title":"Methods for Modeling Realistic Playing in Acoustic Guitar Synthesis","type":"article-journal","URL":"http://dx.doi.org/10.1162/014892601753189529","volume":"25"}, + {"id":"laursonRealTimeImplementationControl2000","abstract":"This paper presents a detailed account on how a model-based state-of-the-art classical guitar synthesizer has been implemented in SuperCollider2 (SC2, McCartney 1998). SC2 is an attractive choice for model-based instruments as it is ageneral purpose and efficient software synthesizer containing a large set of predefined unit generators. It is also a high-levelprogramming language allowing the user to tailor various control strategies. Besides implementation issues we describehow the model is controlled and how the user can specify accurately various playing styles used in the classical guitarrepertoire.","author":[{"family":"Laurson","given":"Mikael"}],"citation-key":"laursonRealTimeImplementationControl2000","container-title":"International Computer Music Conference","issued":{"date-parts":[[2000]]},"title":"Real-Time Implementation and Control of a Classical Guitar Synthesizer in SuperCollider","type":"paper-conference"}, + {"id":"laursonRTMnotationENPscorenotation2003","abstract":"This paper discusses some recent developments within a compositional environment called PWGL. Our focus is to present how score information is represented in PWGL. We give some background information concerning the rhythmic notation that was used in PatchWork (a predecessor of PWGL). After this we show how this notation has been expanded so that it allows to generate very detailed scores that can contain besides the basic rhythmic structures also other information such as grace-notes, instrumentation, pitch and expressions.","author":[{"family":"Laurson","given":"Mikael"},{"family":"Kuuskankare","given":"Mika"}],"citation-key":"laursonRTMnotationENPscorenotation2003","container-title":"Journées d'Informatique Musicale","issued":{"date-parts":[[2003]]},"title":"From RTM-notation to ENP-score-notation","type":"article-journal","volume":"10"}, + {"id":"laveSituatedLearningLegitimate1991","abstract":"In this important theoretical treatise, Jean Lave, anthropologist, and Etienne Wenger, computer scientist, push forward the notion of situated learning–that learning is fundamentally a social process and not solely in the learner's head. The authors maintain that learning viewed as situated activity has as its central defining characteristic a process they call legitimate peripheral participation. Learners participate in communities of practitioners, moving toward full participation in the sociocultural practices of a community. Legitimate peripheral participation provides a way to speak about crucial relations between newcomers and oldtimers and about their activities, identities, artifacts, knowledge and practice. The communities discussed in the book are midwives, tailors, quartermasters, butchers, and recovering alcoholics, however, the process by which participants in those communities learn can be generalized to other social groups.","author":[{"family":"Lave","given":"Jean"},{"family":"Wenger","given":"Etienne"}],"citation-key":"laveSituatedLearningLegitimate1991","edition":"1","ISBN":"0-521-42374-0","issued":{"date-parts":[[1991,9]]},"note":"Published: Paperback","publisher":"Cambridge University Press","title":"Situated Learning: Legitimate Peripheral Participation (Learning in Doing: Social, Cognitive and Computational Perspectives)","type":"book","URL":"http://www.worldcat.org/isbn/0521423740"}, + {"id":"leeCognitiveLinguisticsIntroduction2002","author":[{"family":"Lee","given":"David"}],"citation-key":"leeCognitiveLinguisticsIntroduction2002","ISBN":"0-19-551424-6","issued":{"date-parts":[[2002,2]]},"note":"Published: Paperback","publisher":"Oxford University Press, USA","title":"Cognitive Linguistics: An Introduction","type":"book","URL":"http://www.worldcat.org/isbn/0195514246"}, + {"id":"leeComputingNeedsTime2009","abstract":"The passage of time is essential to ensuring the repeatability and predictability of software and networks in cyber-physical systems.","author":[{"family":"Lee","given":"Edward A."}],"citation-key":"leeComputingNeedsTime2009","container-title":"Communications of the ACM","DOI":"10.1145/1506409.1506426","ISSN":"0001-0782","issue":"5","issued":{"date-parts":[[2009,5]]},"page":"70–79","title":"Computing Needs Time","type":"article-journal","URL":"http://dx.doi.org/10.1145/1506409.1506426","volume":"52"}, + {"id":"lefebvreProductionSpace1992","abstract":"Henri Lefebvre has considerable claims to be the greatest living philosopher. His work spans some sixty years and includes original work on a diverse range of subjects, from dialectical materialism to architecture, urbanism and the experience of everyday life. The Production of Space is his major philosophical work and its translation has been long awaited by scholars in many different fields. The book is a search for reconciliation between mental space (the space of the philosophers) and real space (the physical and social spheres in which we all live). In the course of his exploration, Henri Lefebvre moves from metaphysical and ideological considerations of the meaning of space to its experience in the everyday life of home and city. He seeks, in other words, to bridge the gap between the realms of theory and practice, between the mental and the social, and between philosophy and reality. In doing so, he ranges through art, literature, architecture and economics, and further provides a powerful antidote to the sterile and obfuscatory methods and theories characteristic of much recent continental philosophy. This is a work of great vision and incisiveness. It is also characterized by its author's wit and by anecdote, as well as by a deftness of style that Donald Nicholson-Smith's sensitive translation precisely captures.","author":[{"family":"Lefebvre","given":"Henri"}],"citation-key":"lefebvreProductionSpace1992","edition":"1","ISBN":"0-631-18177-6","issued":{"date-parts":[[1992,4]]},"note":"Published: Paperback","publisher":"Wiley-Blackwell","title":"The Production of Space","type":"book","URL":"http://www.worldcat.org/isbn/0631181776"}, + {"id":"lefevreRechensteineUndSprache1991","author":[{"family":"Lefèvre","given":"W"}],"citation-key":"lefevreRechensteineUndSprache1991","container-title":"Rechensein, Experiment, Sprache: Historische Fallstudien zur Entstehung der exakten Wissenschaften","editor":[{"family":"Damerow","given":"P"},{"family":"Lefèvre","given":"W"}],"event-place":"Stuttgart","issued":{"date-parts":[[1991]]},"page":"115-169","publisher":"Klett-Cotta","publisher-place":"Stuttgart","title":"Rechensteine und Sprache: Zur Begründung der wissenschaftlichen Mathematik durch die Pythagoreer","type":"chapter"}, + {"id":"leijenParsecDirectStyle2007","abstract":"Despite the long list of publications on parser combinators, there does not yet exist a monadic parser combinator library that is applicable in real world situations. In particular naive implementations of parser combinators are likely to suffer from space leaks and are often unable to report precise error messages in case of parse errors. The […]","accessed":{"date-parts":[[2022,1,7]]},"author":[{"family":"Leijen","given":"Daan"},{"family":"Meijer","given":"Erik"}],"citation-key":"leijenParsecDirectStyle2007","event":"11th International Conference on User Modeling","issued":{"date-parts":[[2007]]},"language":"en-US","source":"www.microsoft.com","title":"Parsec: Direct Style Monadic Parser Combinators for the Real World","title-short":"Parsec","type":"paper-conference","URL":"https://www.microsoft.com/en-us/research/publication/parsec-direct-style-monadic-parser-combinators-for-the-real-world/"}, + {"id":"lemanEmbodiedMusicCognition2007","abstract":"Digital media handles music as encoded physical energy, but humans consider music in terms of beliefs, intentions, interpretations, experiences, evaluations, and significations. In this book, drawing on work in computer science, psychology, brain science, and musicology, Marc Leman proposes an embodied cognition approach to music research that will help bridge this gap. Assuming that the body plays a central role in all musical activities, and basing his approach on a hypothesis about the relationship between musical experience (mind) and sound energy (matter), Leman proposes that the human body is a biologically designed mediator that transfers physical energy to a mental level–engaging experiences, values, and intentions–and, reversing the process, transfers mental representation into material form. He suggests that this idea of the body as mediator offers a promising framework for thinking about music mediation technology. Leman argues that, under certain conditions, the natural mediator (the body) can be extended with artificial technology-based mediators. He explores the necessary conditions and analyzes ways in which they can be studied.

Leman outlines his theory of embodied music cognition, introducing a model that describes the relationship between a human subject and its environment, analyzing the coupling of action and perception, and exploring different degrees of the body's engagement with music. He then examines possible applications in two core areas: interaction with music instruments and music search and retrieval in a database or digital library. The embodied music cognition approach, Leman argues, can help us develop tools that integrate artistic expression and contemporary technology.","author":[{"family":"Leman","given":"Marc"}],"citation-key":"lemanEmbodiedMusicCognition2007","ISBN":"0-262-12293-6","issued":{"date-parts":[[2007,9]]},"note":"Published: Hardcover","publisher":"The MIT Press","title":"Embodied Music Cognition and Mediation Technology","type":"book","URL":"http://www.worldcat.org/isbn/0262122936"}, + {"id":"lepoidevinExperiencePerceptionTime2011","author":[{"family":"Le Poidevin","given":"Robin"}],"citation-key":"lepoidevinExperiencePerceptionTime2011","container-title":"The Stanford Encyclopedia of Philosophy","editor":[{"family":"Zalta","given":"Edward N."}],"issued":{"date-parts":[[2011]]},"note":"Published: \\http://plato.stanford.edu/archives/fall2011/entries/time-experience/","title":"The Experience and Perception of Time","type":"chapter"}, + {"id":"lerdahlGenerativeTheoryTonal1983","author":[{"family":"Lerdahl","given":"F."},{"family":"Jackendoff","given":"R."}],"citation-key":"lerdahlGenerativeTheoryTonal1983","issued":{"date-parts":[[1983]]},"publisher":"MIT Press, Cambridge, MA","title":"A Generative Theory of Tonal Music","type":"book"}, + {"id":"lernerSeriousFun2009","author":[{"family":"Lerner","given":"Evan"}],"citation-key":"lernerSeriousFun2009","issued":{"date-parts":[[2009,6]]},"title":"Serious fun","type":"book","URL":"http://seedmagazine.com/content/article/serious_fun/"}, + {"id":"lessigCodeOtherLaws2006","abstract":"The \"alarming and impassioned\"* book on how the Internet is redefining constitutional law, now reissued as the first popular book revised online by its readers (*New York Times)

There's a common belief that cyberspace cannot be regulated-that it is, in its very essence, immune from the government's (or anyone else's) control. Code, first published in 2000, argues that this belief is wrong. It is not in the nature of cyberspace to be unregulable; cyberspace has no \"nature.\" It only has code-the software and hardware that make cyberspace what it is. That code can create a place of freedom-as the original architecture of the Net did-or a place of oppressive control. Under the influence of commerce, cyberpsace is becoming a highly regulable space, where behavior is much more tightly controlled than in real space. But that's not inevitable either. We can-we must-choose what kind of cyberspace we want and what freedoms we will guarantee. These choices are all about architecture: about what kind of code will govern cyberspace, and who will control it. In this realm, code is the most significant form of law, and it is up to lawyers, policymakers, and especially citizens to decide what values that code embodies.

Since its original publication, this seminal book has earned the status of a minor classic. This second edition, or Version 2.0, has been prepared through the author's wiki, a web site that allows readers to edit the text, making this the first reader-edited revision of a popular book.","author":[{"family":"Lessig","given":"Lawrence"}],"citation-key":"lessigCodeOtherLaws2006","ISBN":"0-465-03914-6","issued":{"date-parts":[[2006,12]]},"note":"Published: Paperback","publisher":"Basic Books","title":"Code: And Other Laws of Cyberspace, Version 2.0","type":"book","URL":"http://www.worldcat.org/isbn/0465039146"}, + {"id":"leveltModelsWordProduction1999","abstract":"Research on spoken word production has been approached from two angles. In one research tradition, the analysis of spontaneous or induced speech errors led to models that can account for speech error distributions. In another tradition, the measurement of picture naming latencies led to chronometric models accounting for distributions of reaction times in word production. Both kinds of models are, however, dealing with the same underlying processes: (1) the speaker's selection of a word that is semantically and syntactically appropriate; (2) the retrieval of the word's phonological properties; (3) the rapid syllabification of the word in context; and (4) the preparation of the corresponding articulatory gestures. Models of both traditions explain these processes in terms of activation spreading through a localist, symbolic network. By and large, they share the main levels of representation: conceptual/semantic, syntactic, phonological and phonetic. They differ in various details, such as the amount of cascading and feedback in the network. These research traditions have begun to merge in recent years, leading to highly constructive experimentation. Currently, they are like two similar knives honing each other. A single pair of scissors is in the making.","author":[{"family":"Levelt","given":"Willem J. M."}],"citation-key":"leveltModelsWordProduction1999","container-title":"Trends in Cognitive Sciences","DOI":"10.1016/s1364-6613(99)01319-4","ISSN":"13646613","issue":"6","issued":{"date-parts":[[1999,6]]},"page":"223–232","title":"Models of word production","type":"article-journal","URL":"http://dx.doi.org/10.1016/s1364-6613(99)01319-4","volume":"3"}, + {"id":"levenshteinBinaryCodesCapable1966","author":[{"family":"Levenshtein","given":"V. I."}],"citation-key":"levenshteinBinaryCodesCapable1966","container-title":"Soviet Physics Doklady.","issue":"8","issued":{"date-parts":[[1966]]},"page":"707–710","title":"Binary codes capable of correcting deletions, insertions and reversals.","type":"article-journal","volume":"10"}, + {"id":"levi-straussSavageMindNature1968","author":[{"family":"Lévi-Strauss","given":"Claude"}],"citation-key":"levi-straussSavageMindNature1968","ISBN":"0-226-47484-4","issued":{"date-parts":[[1968,9]]},"note":"Published: Paperback","publisher":"University Of Chicago Press","title":"The Savage Mind (Nature of Human Society)","type":"book","URL":"http://www.worldcat.org/isbn/0226474844"}, + {"id":"levinInsituSpeechVisualization2004","abstract":"Although we can sense someone's vocalizations with our ears, nose, and haptic sense, speech is invisible to us without the help of technical aids. In this paper, we present three interactive artworks which explore the question: ” if we could see our speech, what might it look like? ” The artworks we present are concerned with the aesthetic implications of making the human voice visible, and were created with a particular emphasis on interaction designs that support the perception of tight spatio-temporal relationships between sound, image, and the body. We coin the term in-situ speech visualization to describe a variety of augmented-reality techniques by which graphic representations of speech can be made to appear coincident with their apparent point of origination.","author":[{"family":"Levin","given":"Golan"}],"citation-key":"levinInsituSpeechVisualization2004","container-title":"In Proceedings of The 3rd International Symposium on Non-Photorealistic Animation and Rendering","issued":{"date-parts":[[2004]]},"page":"7–14","title":"In-situ speech visualization in real-time interactive installation and performance","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.100.4202"}, + {"id":"levitinControlParametersMusical2002","abstract":"In this paper we describe a new way of thinking about musical tones, specifically in the context of how features of a sound might be controlled by computer musicians, and how those features might be most appropriately mapped onto musical controllers. Our approach is the consequence of one bias that we should reveal at the outset: we believe that electronically controlled (and this includes computer-controlled)musical instruments need to be emancipated from the keyboard metaphor; although piano-like keyboards are convenient and familiar, they limit the musician's expressiveness (Mathews 1991, Vertegaal and Eaglestone 1996, Paradiso 1997, Levitin and Adams 1998). This is especially true in the domain of computer music,in which timbres can be created that go far beyond the physical constraints of traditional acoustic instruments.","author":[{"family":"Levitin","given":"Daniel J."},{"family":"McAdams","given":"Stephen"},{"family":"Adams","given":"Robert L."}],"citation-key":"levitinControlParametersMusical2002","container-title":"Org. Sound","DOI":"10.1017/s135577180200208x","ISSN":"1355-7718","issue":"2","issued":{"date-parts":[[2002]]},"page":"171–189","title":"Control parameters for musical instruments: a foundation for new mappings of gesture to sound","type":"article-journal","URL":"http://dx.doi.org/10.1017/s135577180200208x","volume":"7"}, + {"id":"levyHackersHeroesComputer2002","abstract":"Steven Levy's classic book explains why the misuse of the word \"hackers\" to describe computer criminals does a terrible disservice to many important shapers of the digital revolution. Levy follows members of an MIT model railroad club–a group of brilliant budding electrical engineers and computer innovators–from the late 1950s to the mid-1980s. These eccentric characters used the term \"hack\" to describe a clever way of improving the electronic system that ran their massive railroad. And as they started designing clever ways to improve computer systems, \"hack\" moved over with them. These maverick characters were often fanatics who did not always restrict themselves to the letter of the law and who devoted themselves to what became known as \"The Hacker Ethic.\" The book traces the history of hackers, from finagling access to clunky computer-card-punching machines to uncovering the inner secrets of what would become the Internet. This story of brilliant, eccentric, flawed, and often funny people devoted to their dream of a better world will appeal to a wide audience. Today, technology is cool. Owning the most powerful computer, the latest high-tech gadget, and the whizziest web site is a status symbol on a par with having a flashy car or a designer suit. And a media obsessed with the digital explosion has reappropriated the term \"computer nerd\" so that it's practically synonymous with \"entrepreneur.\" Yet, a mere fifteen years ago, wireheads hooked on tweaking endless lines of code were seen as marginal weirdos, outsiders whose world would never resonate with the mainstream. That was before one pioneering work documented the underground computer revolution that was about to change our world forever. With groundbreaking profiles of Bill Gates, Steve Wozniak, MIT's tech Model Railroad Club, and more, Steven Levy's Hackers brilliantly captures a seminal moment when the risk takers and explorers were poised to conquer twentieth-century America's last great frontier. And in the Internet age, \"the hacker ethic\"–first espoused here–is alive an well.","author":[{"family":"Levy","given":"Steven"}],"citation-key":"levyHackersHeroesComputer2002","ISBN":"0-14-100051-1","issued":{"date-parts":[[2002,1]]},"note":"Published: Paperback","publisher":"Penguin Putnam","title":"Hackers: Heroes of the Computer Revolution","type":"book","URL":"http://www.worldcat.org/isbn/0141000511"}, + {"id":"lewisLiveAlgorithmsFuture2007","author":[{"family":"Lewis","given":"G. E."}],"citation-key":"lewisLiveAlgorithmsFuture2007","container-title":"CTWatch Quarterly","issue":"2","issued":{"date-parts":[[2007,5]]},"title":"Live Algorithms and The Future of Music","type":"article-journal","volume":"3"}, + {"id":"lewisMaxMusicalContext1993","author":[{"family":"Lewis","given":"George"}],"citation-key":"lewisMaxMusicalContext1993","container-title":"Computer Music Journal","issue":"2","issued":{"date-parts":[[1993]]},"title":"Max in a Musical Context","type":"article-journal","volume":"17"}, + {"id":"lewittParagraphsConceptualArt1967","author":[{"family":"LeWitt","given":"Sol"}],"citation-key":"lewittParagraphsConceptualArt1967","container-title":"Artforum","issue":"10","issued":{"date-parts":[[1967]]},"page":"79–83","publisher":"AEIUO Rome","source":"Google Scholar","title":"Paragraphs on conceptual art","type":"article-journal","volume":"5"}, + {"id":"leymarieAestheticComputingShape2006","author":[{"family":"Leymarie","given":"Frederic F."}],"citation-key":"leymarieAestheticComputingShape2006","collection-title":"Aesthetic Computing, Paul Fishwick, ed.","issued":{"date-parts":[[2006]]},"publisher":"MIT Press","title":"Aesthetic Computing and Shape","type":"chapter"}, + {"id":"libermanMotorTheorySpeech1985","abstract":"A motor theory of speech perception, initially proposed to account for results of early experiments with synthetic speech, is now extensively revised to accommodate recent findings, and to relate the assumptions of the theory to those that might be made about other perceptual modes. According to the revised theory, phonetic information is perceived in a biologically distinct system, a 'module' specialized to detect the intended gestures of the speaker that are the basis for phonetic categories. Built into the structure of this module is the unique but lawful relationship between the gestures and the acoustic patterns in which they are variously overlapped. In consequence, the module causes perception of phonetic structure without translation from preliminary auditory impressions. Thus, it is comparable to such other modules as the one that enables an animal to localize sound. Peculiar to the phonetic module are the relation between perception and production it incorporates and the fact that it must compete with other modules for the same stimulus variations.","author":[{"family":"Liberman","given":"Alvin M."},{"family":"Mattingly","given":"Ignatius G."}],"citation-key":"libermanMotorTheorySpeech1985","container-title":"Cognition","issue":"1","issued":{"date-parts":[[1985]]},"page":"1–36","title":"The motor theory of speech perception revised","type":"article-journal","URL":"http://dx.doi.org/10.1016/0010-0277(85)90021-6","volume":"21"}, + {"id":"libermanRelationSpeechLanguage2000","abstract":"There are two widely divergent theories about the relation of speech to language. The more conventional view holds that the elements of speech are sounds that rely for their production and perception on two wholly separate processes, neither of which is distinctly linguistic. Accordingly, the primary motor and perceptual representations are inappropriate for linguistic purposes until a cognitive process of some sort has connected them to language and to each other. The less conventional theory takes the speech elements to be articulatory gestures that are the primary objects of both production and perception. Those gestures form a natural class that serves a linguistic function and no other. Therefore, their representations are immediately linguistic, requiring no cognitive intervention to make them appropriate for use by the other components of the language system. The unconventional view provides the more plausible answers to three important questions: (1) How was the necessary parity between speaker and listener established in evolution, and how maintained? (2) How does speech meet the special requirements that underlie its ability, unique among natural communication systems, to encode an indefinitely large number of meanings? (3) What biological properties of speech make it easier than the reading and writing of its alphabetic transcription?","author":[{"family":"Liberman","given":"A."}],"citation-key":"libermanRelationSpeechLanguage2000","container-title":"Trends in Cognitive Sciences","DOI":"10.1016/s1364-6613(00)01471-6","ISSN":"13646613","issue":"5","issued":{"date-parts":[[2000,5]]},"page":"187–196","title":"On the relation of speech to language","type":"article-journal","URL":"http://dx.doi.org/10.1016/s1364-6613(00)01471-6","volume":"4"}, + {"id":"liddicoatIntroductionConversationAnalysis2007","author":[{"family":"Liddicoat","given":"Anthony J."}],"citation-key":"liddicoatIntroductionConversationAnalysis2007","ISBN":"0-8264-9115-4","issued":{"date-parts":[[2007,2]]},"note":"Published: Paperback","publisher":"Continuum","title":"An Introduction to Conversation Analysis","type":"book","URL":"http://www.worldcat.org/isbn/0826491154"}, + {"id":"lieh-tzuTaoistTeachingsBook2008","abstract":"This is a pre-1923 historical reproduction that was curated for quality. Quality assurance was conducted on each of these books in an attempt to remove books with imperfections introduced by the digitization process. Though we have made best efforts - the books may have occasional errors that do not impede the reading experience. We believe this work is culturally important and have elected to bring the book back into print as part of our continuing commitment to the preservation of printed works worldwide.","author":[{"family":"Lieh-Tzu","given":"Liezi"}],"citation-key":"lieh-tzuTaoistTeachingsBook2008","ISBN":"978-0-559-27047-5","issued":{"date-parts":[[2008,10,15]]},"language":"English","number-of-pages":"124","publisher":"BiblioLife","source":"Amazon","title":"Taoist Teachings from the Book of Lieh Tzu","type":"book"}, + {"id":"lingQuantitativeCharacterizationsSpeech2000","abstract":"British English and Singapore English are said to differ in rhythmic patterning. British English is commonly described as stress-timed, but Singapore English is claimed to be syllable-timed. In the present paper, we explore the acoustic nature of the suggested cross-varietal difference. In directly comparable samples from British English and Singapore English, two types of acoustic measurements were taken; we calculated a variability index reflecting changes in vowel length over utterances, and measurements reflecting vowel quality. Our findings provide acoustic data which support the hypothesized cross-varietal difference in rhythmic patterning; we show (1) that successive vowel durations are more nearly equal in Singapore English than in British English, and (2) that reduced vowels pattern more peripherally in the F1/F2 formant space in Singapore English than in British English. We complete the paper with a comparison of our vowel variability index with a set of acoustic measures for rhythm proposed by Ramus, Nespor, and Mehler (1999), which focus on variability in vocalic and intervocalic intervals. We conclude that our variability index is more successful in capturing rhythmic differences than Ramus et al. (1999)'s measures, and that an application of our index to Ramus et al.'s intervocalic measure may provide a further diagnostic of rhythmic class.","author":[{"family":"Ling","given":"L. E."},{"family":"Grabe","given":"E."},{"family":"Nolan","given":"F."}],"citation-key":"lingQuantitativeCharacterizationsSpeech2000","container-title":"Language and speech","ISSN":"0023-8309","issue":"4","issued":{"date-parts":[[2000]]},"page":"377–401","PMID":"11419223","title":"Quantitative characterizations of speech rhythm: syllable-timing in Singapore English.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/11419223","volume":"43"}, + {"id":"LinuxMint20","accessed":{"date-parts":[[2021,3,9]]},"citation-key":"LinuxMint20","title":"Linux Mint 20.1 \"Ulyssa\" - Xfce (64-bit) - Linux Mint","type":"webpage","URL":"https://www.linuxmint.com/edition.php?id=286"}, + {"id":"listerMultinationalStudyReading2004","abstract":"A study by a ITiCSE 2001 working group (\"the McCracken Group\") established that many students do not know how to program at the conclusion of their introductory courses. A popular explanation for this incapacity is that the students lack the ability to problem-solve. That is, they lack the ability to take a problem description, decompose it into sub-problems and implement them, then assemble the pieces into a complete solution. An alternative explanation is that many students have a fragile grasp of both basic programming principles and the ability to systematically carry out routine programming tasks, such as tracing (or \"desk checking\") through code. This ITiCSE 2004 working group studied the alternative explanation, by testing students from seven countries, in two ways. First, students were tested on their ability to predict the outcome of executing a short piece of code. Second, students were tested on their ability, when given the desired function of short piece of near-complete code, to select the correct completion of the code from a small set of possibilities. Many students were weak at these tasks, especially the latter task, suggesting that such students have a fragile grasp of skills that are a prerequisite for problem-solving.","author":[{"family":"Lister","given":"Raymond"},{"family":"Adams","given":"Elizabeth S."},{"family":"Fitzgerald","given":"Sue"},{"family":"Fone","given":"William"},{"family":"Hamer","given":"John"},{"family":"Lindholm","given":"Morten"},{"family":"McCartney","given":"Robert"},{"family":"Moström","given":"Jan E."},{"family":"Sanders","given":"Kate"},{"family":"Seppälä","given":"Otto"},{"family":"Simon","given":"Beth"},{"family":"Thomas","given":"Lynda"}],"citation-key":"listerMultinationalStudyReading2004","collection-title":"ITiCSE-WGR '04","container-title":"Working group reports from ITiCSE on Innovation and technology in computer science education","DOI":"10.1145/1044550.1041673","event-place":"Leeds, United Kingdom","issued":{"date-parts":[[2004,12]]},"page":"119–150","publisher":"ACM","publisher-place":"Leeds, United Kingdom","title":"A multi-national study of reading and tracing skills in novice programmers","type":"paper-conference","URL":"http://dx.doi.org/10.1145/1044550.1041673"}, + {"id":"LiveEnduserProgramming","accessed":{"date-parts":[[2017,11,28]]},"citation-key":"LiveEnduserProgramming","title":"Live end-user programming: a demo/manifesto - ECOOP 2016","type":"webpage","URL":"https://2016.ecoop.org/event/live-2016-live-end-user-programming-a-demo-manifesto"}, + {"id":"lochbaumSpeechSynthesis1962","author":[{"family":"Lochbaum","given":"C. C."},{"family":"Kelly","given":"K. L."}],"citation-key":"lochbaumSpeechSynthesis1962","container-title":"Proc. Fourth ICA","issued":{"date-parts":[[1962]]},"title":"Speech Synthesis","type":"article-journal"}, + {"id":"logothetisWhatWeCan2008","abstract":"Functional magnetic resonance imaging (fMRI) is currently the mainstay of neuroimaging in cognitive neuroscience. Advances in scanner technology, image acquisition protocols, experimental design, and analysis methods promise to push forward fMRI from mere cartography to the true study of brain organization. However, fundamental questions concerning the interpretation of fMRI data abound, as the conclusions drawn often ignore the actual limitations of the methodology. Here I give an overview of the current state of fMRI, and draw on neuroimaging and physiological data to present the current understanding of the haemodynamic signals and the constraints they impose on neuroimaging data interpretation.","author":[{"family":"Logothetis","given":"Nikos K."}],"citation-key":"logothetisWhatWeCan2008","container-title":"Nature","DOI":"10.1038/nature06976","ISSN":"0028-0836","issue":"7197","issued":{"date-parts":[[2008,6]]},"page":"869–878","PMID":"18548064","title":"What we can do and what we cannot do with fMRI","type":"article-journal","URL":"http://dx.doi.org/10.1038/nature06976","volume":"453"}, + {"id":"londonHearingTimePsychological2004","abstract":"Our sense that a waltz is \"in three\" or a blues song is \"in four with a shuffle\" comes from our sense of musical meter. Hearing in Time explores musical meter from the point of view of cognitive theories of perception and attention. London explores how our ability to follow musical meter is simply a specific instance of our more general ability to synchronize our attention to regularly recurring events in our environment. As such, musical meter is subject to a number of fundamental perceptual and cognitive constraints, which form the cornerstones of London's account. Because listening to music, like many other rhythmic activities, is something that we often do, London views it as a skilled activity for performers and non-performers alike. Hearing in Time approaches musical meter in the context of music as it is actually performed, rather than as a theoretical ideal. Its approach is not based on any particular musical style or cultural practice, so it uses familiar examples from a broad range of music–Beethoven and Bach to Brubeck and Ghanaian drumming. Taking this broad approach brings out a number of fundamental similarities between a variety of different metric phenomena, such as the difference between so-called simple versus complex or additive meters. Because of its accessible style–only a modest ability to read a musical score is presumed–Hearing in Time is for anyone interested in rhythm and meter, including cognitive psychologists, musicologists, musicians, and music theorists.","author":[{"family":"London","given":"Justin"}],"citation-key":"londonHearingTimePsychological2004","ISBN":"0-19-516081-9","issued":{"date-parts":[[2004,9]]},"note":"Published: Hardcover","publisher":"Oxford University Press, USA","title":"Hearing in Time: Psychological Aspects of Musical Meter","type":"book","URL":"http://www.worldcat.org/isbn/0195160819"}, + {"id":"lonswayMistakenDimensionalityCAD2002","abstract":"Computer Aided Design software has an unfortunate tendency to suppress the rich dimensions of computational complexity in favor of a feeble representation of dimension appropriately labeled D. 3D and 4D software applications categorically manifest either the three geometric axes of Cartesian space or the four axes of Minkowskian space-time in spatial dimensions. But all that these dimensional representations can portray are geometric simulations of objects in space. Computational multi-dimensionality as expressed in the mechanisms of numeric manipulation offers designers more: a space for design parallel to that space within which architects have traditionally designed.","author":[{"family":"Lonsway","given":"B."}],"citation-key":"lonswayMistakenDimensionalityCAD2002","container-title":"Journal of Architectural Education","DOI":"10.1162/10464880260472549","issue":"2","issued":{"date-parts":[[2002]]},"page":"23–25","title":"The Mistaken Dimensionality of CAD","type":"article-journal","URL":"http://dx.doi.org/10.1162/10464880260472549","volume":"56"}, + {"id":"lopezNormativeFrameworkAgentbased2006","abstract":"Abstract  One of the key issues in the computational representation of open societies relates to the introduction of norms that help to cope with the heterogeneity, the autonomy and the diversity of interests among their members. Research regarding this issue presents two omissions. One is the lack of a canonical model of norms that facilitates their implementation, and that allows us to describe the processes of reasoning about norms. The other refers to considering, in the model of normative multi-agent systems, the perspective of individual agents and what they might need to effectively reason about the society in which they participate. Both are the concerns of this paper, and the main objective is to present a formal normative framework for agent-based systems that facilitates their implementation.","author":[{"family":"Lopez","given":"Fabiola"},{"family":"Luck","given":"Michael"},{"literal":"D'"}],"citation-key":"lopezNormativeFrameworkAgentbased2006","container-title":"Computational & Mathematical Organization Theory","DOI":"10.1007/s10588-006-9545-7","ISSN":"1381-298X","issue":"2","issued":{"date-parts":[[2006,10]]},"page":"227–250","title":"A normative framework for agent-based systems","type":"article-journal","URL":"http://dx.doi.org/10.1007/s10588-006-9545-7","volume":"12"}, + {"id":"lorenzoReducingGenderGap2006","author":[{"family":"Lorenzo","given":"Mercedes"},{"family":"Crouch","given":"Catherine H."},{"family":"Mazur","given":"Eric"}],"citation-key":"lorenzoReducingGenderGap2006","container-title":"American Journal of Physics","DOI":"10.1119/1.2162549","ISSN":"00029505","issue":"2","issued":{"date-parts":[[2006]]},"page":"118+","title":"Reducing the gender gap in the physics classroom","type":"article-journal","URL":"http://dx.doi.org/10.1119/1.2162549","volume":"74"}, + {"id":"lottoReflectionsMirrorNeurons2009","abstract":"The discovery of mirror neurons, a class of neurons that respond when a monkey performs an action and also when the monkey observes others producing the same action, has promoted a renaissance for the Motor Theory (MT) of speech perception. This is because mirror neurons seem to accomplish the same kind of one to one mapping between perception and action that MT theorizes to be the basis of human speech communication. However, this seeming correspondence is superficial, and there are theoretical and empirical reasons to temper enthusiasm about the explanatory role mirror neurons might have for speech perception. In fact, rather than providing support for MT, mirror neurons are actually inconsistent with the central tenets of MT.","author":[{"family":"Lotto","given":"Andrew J."},{"family":"Hickok","given":"Gregory S."},{"family":"Holt","given":"Lori L."}],"citation-key":"lottoReflectionsMirrorNeurons2009","container-title":"Trends Cogn Sci","DOI":"10.1016/j.tics.2008.11.008","ISSN":"13646613","issue":"3","issued":{"date-parts":[[2009,2]]},"page":"110–114","title":"Reflections on mirror neurons and speech perception","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.tics.2008.11.008","volume":"13"}, + {"id":"luckExploringSpatioTemporalProperties2008","author":[{"family":"Luck","given":"G."},{"family":"Sloboda","given":"J."}],"citation-key":"luckExploringSpatioTemporalProperties2008","container-title":"Music Perception","issue":"3","issued":{"date-parts":[[2008]]},"page":"225–239","title":"Exploring the Spatio-Temporal Properties of Simple Conducting Gestures using a Synchronization Task","type":"article-journal","volume":"25"}, + {"id":"LudditesCondescension","abstract":"Event Date: 6 May 2011 Room B34 10:00 – 18:00 Birkbeck, University of London Malet Street, Bloomsbury London WC1E 7HX   The Birkbeck Institute for the Humanities presents: The Luddites, without Condescension A Conference on…","accessed":{"date-parts":[[2017,5,18]]},"citation-key":"LudditesCondescension","container-title":"Backdoor Broadcasting Company","title":"The Luddites, without Condescension","type":"post-weblog","URL":"https://backdoorbroadcasting.net/2011/05/the-luddites-without-condescension/"}, + {"id":"luddLudditesCondescensionReport","abstract":"The Luddite conference at Birkbeck which took place on May 6th was the most important date so far for those interested in the bicentenary. ...","accessed":{"date-parts":[[2017,5,18]]},"author":[{"family":"Ludd","given":"Ned"}],"citation-key":"luddLudditesCondescensionReport","title":"'Luddites Without Condescension' - a report from the Birkbeck Conference","type":"post-weblog","URL":"http://ludditebicentenary.blogspot.com/2011/05/luddites-without-condescension-report.html"}, + {"id":"lunaInkaHistoryKnots2018","abstract":"//static.cambridge.org/content/id/urn%3Acambridge.org%3Aid%3Aarticle%3AS0959774317000889/resource/name/firstPage-S0959774317000889a.jpg","accessed":{"date-parts":[[2018,9,7]]},"author":[{"family":"Luna","given":"José Carlos de la Puente"}],"citation-key":"lunaInkaHistoryKnots2018","container-title":"Cambridge Archaeological Journal","DOI":"10.1017/S0959774317000889","ISSN":"0959-7743, 1474-0540","issue":"3","issued":{"date-parts":[[2018,8]]},"language":"en","page":"514-515","source":"Cambridge Core","title":"Inka History in Knots: Reading khipus as primary sources, by Gary Urton, 2017. Austin (TX): University of Texas Press; ISBN 978-1-4773-1198-1 hardback $85; xvii+319 pp., 13 colour, 48 b/w photos, 22 illus./maps, 15 charts/graphs, 3 tables","title-short":"Inka History in Knots","type":"article-journal","URL":"https://www.cambridge.org/core/journals/cambridge-archaeological-journal/article/inka-history-in-knots-reading-khipus-as-primary-sources-by-gary-urton-2017-austin-tx-university-of-texas-press-isbn-9781477311981-hardback-85-xvii319-pp-13-colour-48-bw-photos-22-illusmaps-15-chartsgraphs-3-tables/C361F71A9CA3F45EB24471D5F980F7E2","volume":"28"}, + {"id":"lyonsDisappearanceIntrospection1986","author":[{"family":"Lyons","given":"William E."}],"citation-key":"lyonsDisappearanceIntrospection1986","ISBN":"978-0-262-12115-6","issued":{"date-parts":[[1986]]},"publisher":"MIT Press","title":"The disappearance of introspection","type":"book","URL":"http://www.worldcat.org/isbn/9780262121156"}, + {"id":"lyonsFacingMusicFacial2001","abstract":"We describe a novel musical controller which acquires live video input from the user's face, extracts facial feature parameters using a computer vision algorithm, and converts these to expressive musical effects. The controller allows the user to modify synthesized or audio-filtered musical sound in real time by moving the face.","author":[{"family":"Lyons","given":"Michael J."},{"family":"Tetsutani","given":"Nobuji"}],"citation-key":"lyonsFacingMusicFacial2001","collection-title":"CHI EA '01","container-title":"CHI '01 Extended Abstracts on Human Factors in Computing Systems","DOI":"10.1145/634067.634250","event-place":"Seattle, Washington","ISBN":"1-58113-340-5","issued":{"date-parts":[[2001]]},"page":"309–310","publisher":"ACM","publisher-place":"Seattle, Washington","title":"Facing the music: a facial action controlled musical interface","type":"paper-conference","URL":"http://dx.doi.org/10.1145/634067.634250"}, + {"id":"MachineBreakersEric","abstract":"The purpose of this essay is clearly stated: to defend British labour movements against what E. P. Thompson was later to call 'the enormous condescension of posterity'; and, one might add, against ideologists of our own times. It was first published in 1952 in the first issue of a historical journal that had been recently founded by the author and a group of friends, and is still published, Past & Present","accessed":{"date-parts":[[2017,5,18]]},"citation-key":"MachineBreakersEric","container-title":"libcom.org","title":"The machine breakers - Eric Hobsbawm","type":"webpage","URL":"http://libcom.org/history/machine-breakers-eric-hobsbawm"}, + {"id":"macmahonPhoneticNotation1996","author":[{"family":"MacMahon","given":"Michael K. C."}],"citation-key":"macmahonPhoneticNotation1996","container-title":"The World's Writing Systems","editor":[{"family":"Daniels","given":"Peter T."},{"family":"Bright","given":"William"}],"event-place":"New York","issued":{"date-parts":[[1996]]},"page":"821–847","publisher":"Oxford University Press","publisher-place":"New York","title":"Phonetic Notation","type":"chapter"}, + {"id":"magnussonDVDProgrammeNotes2011","author":[{"family":"Magnusson","given":"Thor"},{"family":"McLean","given":"Alex"},{"family":"Collins","given":"Nick"}],"citation-key":"magnussonDVDProgrammeNotes2011","container-title":"Computer Music Journal","issue":"4","issued":{"date-parts":[[2011]]},"page":"119–137","title":"DVD Programme notes","type":"article-journal","volume":"35"}, + {"id":"magnussonEpistemicToolsMusical2009","abstract":"This paper explores the differences in the design and performance of acoustic and new digital musical instruments, arguing that with the latter there is an increased encapsulation of musical theory. The point of departure is the phenomenology of musical instruments, which leads to the exploration of designed artefacts as extensions of human cognition – as scaffolding onto which we delegate parts of our cognitive processes. The paper succinctly emphasises the pronounced epistemic dimension of digital instruments when compared to acoustic instruments. Through the analysis of material epistemologies it is possible to describe the digital instrument as an epistemic tool: a designed tool with such a high degree of symbolic pertinence that it becomes a system of knowledge and thinking in its own terms. In conclusion, the paper rounds up the phenomenological and epistemological arguments, and points at issues in the design of digital musical instruments that are germane due to their strong aesthetic implications for musical culture.","author":[{"family":"Magnusson","given":"Thor"}],"citation-key":"magnussonEpistemicToolsMusical2009","container-title":"Organised Sound","DOI":"10.1017/s1355771809000272","issue":"2","issued":{"date-parts":[[2009]]},"page":"168–176","title":"Of Epistemic Tools: musical instruments as cognitive extensions","type":"article-journal","URL":"http://dx.doi.org/10.1017/s1355771809000272","volume":"14"}, + {"id":"magnussonEpistemicToolsPhenomenology2009","abstract":"Digital music technologies, and instruments in particular, are the result of specific systems of thought that define and enframe the user’s creative options. Distinctive divisions between digital and acoustic instruments can be traced, contrasting the conceptually based design of software with the affordances and constraints of physical artefacts. Having lost the world’s gift of physical properties, the digital instrument builder becomes more than a mere luthier. The process of designing and building the instrument is transformed into a process of composition, for it typically contains a greater degree of classification and music theory than its acoustic counterpart.\n\nPart I of this thesis begins by framing musical systems in the context of the philosophy of technology. Here technological conditions are questioned and theories introduced that will assist the investigation into the relationship between creativity and technology. After this general grounding, the ramifications digital technologies pose to the human body are explored in the context of human expression through tool use. The human-machine relationship is described from phenomenological perspectives and relevant theories of cognitive science. This analysis serves as a foundation for the concept of epistemic tools, defined as the mechanism whereby techno-cultural models are inscribed into technological artefacts. The cultural element of tool use and tool origins is therefore emphasised, an aspect that is highly relevant in musical technologies. Part I thus frames the material properties of acoustic and digital instruments in relation to human culture, cognition, performance and epistemology.\n\nPart II contextualises these theories in practice. The ixiQuarks, the live improvisation musical environment that resulted from the current research, are presented as a system addressing some of the vital problems of musical performance with digital systems (such as the question of embodiment and theoretical inscriptions), proposing an innovative interaction model for screen-based musical instruments. The concept of virtual embodiment is introduced and framed in the context of the ixi interaction model. Two extensive user studies are described that support the report on ixiQuarks. Furthermore, comparative surveys on the relationship between expression and technology are presented: a) the phenomenology of musical instruments, where the divergence between the acoustic and the digital is investigated; b) the question of expressive freedom versus time constraints in musical environments is explored with practitioners in the field; and c) the key players in the design of audio programming environments explain the rationale and philosophy behind their work. These are the first major surveys of this type conducted to date, and the results interweave smoothly with the observations and findings in the chapters on the nature and the design of digital instruments that make up the majority of Part II.\n\nThis interdisciplinary research investigates the nature of making creative tools in the digital realm, through an active, philosophically framed and ethnographically inspired study, of both practical and theoretical engagement. It questions the nature of digital musical instruments, particularly in comparison with acoustic instruments. Through a survey of material epistemologies, the dichotomy between the acoustic and the digital is employed to illustrate the epistemic nature of digital artefacts, necessitating a theory of epistemic tools. Consequently virtual embodiment is presented as a definition of the specific interaction mode constituting human relations with digital technologies. It is demonstrated that such interactions are indeed embodied, contrasting common claims that interaction with software is a disembodied activity. The role of cultural context in such design is emphasised, through an analysis of how system design is always an intricate process of analyses, categorisations, normalisations, abstractions, and constructions; where the design paths taken are often defined by highly personal, culturally conditioned and often arbitrary reasons.\n\nThe dissertation therefore dissects the digital musical instrument from the perspectives of ontology, phenomenology and epistemology. Respective sections in Part I and Part II deal with these views. The practical outcome of this research – the ixiQuarks – embodies many of the theoretical points made on these pages. The software itself, together with the theoretical elucidation of its context, should therefore be viewed as equal contributions to the field of music technology. The thesis closes by considering what has been achieved through these investigations of the technological context, software development, user studies, surveys, and the phenomenological and epistemological enquiries into the realities of digital musical instruments, emphasising that technology can never be neutral.","accessed":{"date-parts":[[2021,1,29]]},"author":[{"family":"Magnusson","given":"Thor"}],"citation-key":"magnussonEpistemicToolsPhenomenology2009","genre":"doctoral","issued":{"date-parts":[[2009,5,1]]},"language":"en","number-of-pages":"407","publisher":"University of Sussex","source":"sro.sussex.ac.uk","title":"Epistemic tools: the phenomenology of digital musical instruments","title-short":"Epistemic tools","type":"thesis","URL":"http://sro.sussex.ac.uk/id/eprint/83540/"}, + {"id":"magnussonIxiLangSuperCollider2011","author":[{"family":"Magnusson","given":"Thor"}],"citation-key":"magnussonIxiLangSuperCollider2011","container-title":"Proceedings of International Computer Music Conference 2011","issued":{"date-parts":[[2011]]},"title":"ixi lang: a SuperCollider parasite for live coding","type":"paper-conference"}, + {"id":"magnussonPerformingPatternsTime2018","abstract":"Music is a time-based art form often characterised by patternings; manipulations of sequences over time. Composers and performers may think in terms of patterns, although the structure of patterned sequences are often not made explicit in musical notation. This chapter explores how musical sequences can be created and transformed in real-time performance through patterning functions. Topics related to the use of algorithms for pattern-making are discussed, and two systems are introduced - ixi lang and TidalCycles, as high level and expressive mini-languages for musical pattern.","accessed":{"date-parts":[[2018,4,25]]},"author":[{"family":"Magnusson","given":"Thor"},{"family":"McLean","given":"Alex"}],"citation-key":"magnussonPerformingPatternsTime2018","DOI":"10.5281/zenodo.1193251","ISBN":"978-0-19-022699-2","issued":{"date-parts":[[2018,2,1]]},"language":"eng","publisher":"Oxford University Press","source":"Zenodo","title":"Performing with Patterns of Time","type":"chapter","URL":"https://zenodo.org/record/1193251#.WuBvmnUvzrc"}, + {"id":"maloneyScratchProgrammingLanguage2010","abstract":"Scratch is a visual programming environment that allows users (primarily ages 8 to 16) to learn computer programming while working on personally meaningful projects such as animated stories and games. A key design goal of Scratch is to support self-directed learning through tinkering and collaboration with peers. This article explores how the Scratch programming language and environment support this goal.","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Maloney","given":"John"},{"family":"Resnick","given":"Mitchel"},{"family":"Rusk","given":"Natalie"},{"family":"Silverman","given":"Brian"},{"family":"Eastmond","given":"Evelyn"}],"citation-key":"maloneyScratchProgrammingLanguage2010","container-title":"ACM Transactions on Computing Education","container-title-short":"ACM Trans. Comput. Educ.","DOI":"10.1145/1868358.1868363","issue":"4","issued":{"date-parts":[[2010,11,1]]},"page":"16:1–16:15","source":"November 2010","title":"The Scratch Programming Language and Environment","type":"article-journal","URL":"https://doi.org/10.1145/1868358.1868363","volume":"10"}, + {"id":"manningThreeBiasedReminders2012","abstract":"\"Three Biased Reminders about Hylomorphism in Early Modern Science and Philosophy\" published on 01 Jan 2012 by Brill.","accessed":{"date-parts":[[2021,1,29]]},"author":[{"family":"Manning","given":"Gideon"}],"citation-key":"manningThreeBiasedReminders2012","DOI":"10.1163/9789004221147_002","ISBN":"978-90-04-22114-7","issued":{"date-parts":[[2012,1,1]]},"language":"en","page":"1-32","publisher":"Brill","section":"Matter and Form in Early Modern Science and Philosophy","source":"brill.com","title":"Three Biased Reminders about Hylomorphism in Early Modern Science and Philosophy","type":"book","URL":"https://brill.com/view/book/edcoll/9789004221147/B9789004221147_002.xml"}, + {"id":"markmanStructuralAlignmentSimilarity1993","abstract":"The hypothesis that structured representations can be compared via structural alignment and the prediction that similarity comparisons lead subjects to attend to the matching relational structure of a pair of items were supported through 4 experiments involving 218 undergraduates. Results indicate that similarity involves alignment of structured representations. (SLD)","author":[{"family":"Markman","given":"Arthur B."},{"family":"Gentner","given":"Dedre"}],"citation-key":"markmanStructuralAlignmentSimilarity1993","container-title":"Cognitive Psychology","issue":"4","issued":{"date-parts":[[1993]]},"page":"431–67","title":"Structural Alignment during Similarity Comparisons.","type":"article-journal","URL":"http://www.eric.ed.gov/ERICWebPortal/detail?accno=EJ473789","volume":"25"}, + {"id":"martinHumanNeuropsychology2006","author":[{"family":"Martin","given":"G. Neil"}],"citation-key":"martinHumanNeuropsychology2006","edition":"Second","ISBN":"0-13-197452-1","issued":{"date-parts":[[2006,12]]},"note":"Published: Paperback","publisher":"Prentice Hall","title":"Human Neuropsychology","type":"book","URL":"http://www.worldcat.org/isbn/0131974521"}, + {"id":"martinoNotationGeneralArticulationParticular1966","author":[{"family":"Martino","given":"Donald"}],"citation-key":"martinoNotationGeneralArticulationParticular1966","container-title":"Perspectives of New Music","DOI":"10.2307/832212","ISSN":"00316016","issue":"2","issued":{"date-parts":[[1966]]},"page":"47–58","title":"Notation in General-Articulation in Particular","type":"article-journal","URL":"http://dx.doi.org/10.2307/832212","volume":"4"}, + {"id":"martinsRevisitingArchitectureCurriculum2010","author":[{"family":"Martins","given":"Susana B."}],"citation-key":"martinsRevisitingArchitectureCurriculum2010","container-title":"FUTURE CITIES, 28th eCAADe Conference Proceedings","event-place":"ETH Zurich (Switzerland)","issued":{"date-parts":[[2010,9]]},"publisher":"FUTURE CITIES, 28th eCAADe Conference Proceedings","publisher-place":"ETH Zurich (Switzerland)","title":"Revisiting the Architecture Curriculum - The Programming Perspective","type":"paper-conference"}, + {"id":"MathematicalBasisArts","abstract":"Groundbreaking study by the Ukrainian-American composer and theoriest Joseph Schillinger (1895-1943), who presents here nothing less than a \"scientific theory of the arts\" that influenced musicians such as George Gershwin, Burt Bacharach, Earle Brown, and Henry Cowell, and  constitutes a crucial text for the history and theory of art in the 20th century.","accessed":{"date-parts":[[2020,3,5]]},"citation-key":"MathematicalBasisArts","language":"English","source":"Internet Archive","title":"The Mathematical Basis Of The Arts ( Joseph Schillinger, 1943)","type":"book","URL":"http://archive.org/details/TheMathematicalBasisOfTheArtsJosephSchillinger1943"}, + {"id":"MathematicsRunningMaypole","accessed":{"date-parts":[[2017,3,8]]},"citation-key":"MathematicsRunningMaypole","title":"Mathematics, Running, and Maypole Dancing | Discovering the Art of Mathematics (DAoM)","type":"webpage","URL":"https://www.artofmathematics.org/blogs/cvonrenesse/mathematics-running-and-maypole-dancing"}, + {"id":"mathewsTechnologyComputerMusic1969","author":[{"family":"Mathews","given":"Max V."}],"citation-key":"mathewsTechnologyComputerMusic1969","ISBN":"0-262-13050-5","issued":{"date-parts":[[1969]]},"publisher":"The MIT Press","title":"The Technology of Computer Music","type":"book","URL":"http://portal.acm.org/citation.cfm?id=1214123"}, + {"id":"matsushitaCoxROpenSource","abstract":"In typical open source software development, developers use revision control systems for product management, mailing list systems for human communications, and bug tracking systems for process management. All of these systems store development histories of the products that show significant information of problems during the development.However, it would be a hard job to retrieve useful information related to a current problem faced by developers. In this paper, we describe a software development supporting system CoxR that is capable of crawling the development histories. CoxR creates software development information web which consists of developers, emails, and program deltas, and provides an interface to search, navigate, browse, and retrieve past development results. Through a case study, we confirmed that CoxR helps developers to solve their problems by making it easier to search development history. 1.","author":[{"family":"Matsushita","given":"Makoto"},{"family":"Sasaki","given":"Kei"},{"family":"Inoue","given":"Katsuro"}],"citation-key":"matsushitaCoxROpenSource","container-title":"In Proceedings of 12th Asia-Pacific Software Engineering Conference, Taipe","page":"821–826","title":"CoxR: Open Source Development History Search System","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.128.714","volume":"2005"}, + {"id":"mattinglyDefenseMotorTheory1991","author":[{"family":"Mattingly","given":"Ignatius G."}],"citation-key":"mattinglyDefenseMotorTheory1991","container-title":"Current Phonetic Research Paradigms: Implications for Speech Motor Control","issued":{"date-parts":[[1991]]},"page":"167–172","title":"In Defense of the Motor Theory","type":"paper-conference"}, + {"id":"mayoMultidimensionalScalingListener2005","abstract":"The move to unit-selection in speech synthesis has resulted in system improvements being made at subtle sub- and suprasegmental levels. Human perceptual evaluation of such subtle improvements requires a highly sophisticated level of perceptual attention to specific acoustic characteristics or cues. However, it is not well understood what acoustic cues listeners attend to by default when asked to evaluate synthetic speech. It may, therefore, be potentially quite difficult to design an evaluation method that allows listeners to concentrate on only one dimension of the signal, while ignoring others that are perceptually more important to them. This paper describes a pilot study which aims to evaluate multidimensional scaling (MDS) as a possible method of determining what acoustic characteristics of synthetic speech influence listeners' judgements of the naturalness of the speech. Using distance measures (either real or perceived distances), MDS techniques represent stimuli as points in n-dimensional space. The space is configured so that similar stimuli are close together, while different stimuli are farther apart. Additionally, the dimensions of the space correspond to characteristics of the stimuli which influenced the perceived distances. Our results indicate that MDS techniques should be a useful tool in understanding the complex psychoacoustic processes that listeners undergo when evaluating synthetic speech. This method has allowed us to identify a number of cues that appear to be particularly perceptually salient to listeners evaluating synthetic speech naturalness, namely prosodic cues (in terms of duration and/or intonation) and segmental or unit level cues (in terms of appropriateness of units, or number of units).","author":[{"family":"Mayo","given":"Catherine"},{"family":"Clark","given":"Robert A. J."},{"family":"King","given":"Simon"}],"citation-key":"mayoMultidimensionalScalingListener2005","issued":{"date-parts":[[2005]]},"title":"Multidimensional scaling of listener responses to synthetic speech","type":"article-journal","URL":"http://www.isca-speech.org/archive/interspeech_2005"}, + {"id":"MaypoleBraidGroup2009","abstract":"Over the weekend I attended a May Day party thrown by one of my colleagues. During the party they had a traditional maypole dance. An example of a maypole dance is shown at left. A maypole is a tal…","accessed":{"date-parts":[[2017,3,8]]},"citation-key":"MaypoleBraidGroup2009","container-title":"Division by Zero","issued":{"date-parts":[[2009,5,4]]},"title":"The maypole braid group","type":"post-weblog","URL":"https://divisbyzero.com/2009/05/04/the-maypole-braid-group/"}, + {"id":"MaypoleDanceBritannica","abstract":"Ceremonial folk dance performed around a tall pole garlanded with greenery or flowers and often hung with ribbons that are woven into complex patterns by the dancers. Such dances...","accessed":{"date-parts":[[2017,2,27]]},"citation-key":"MaypoleDanceBritannica","title":"Maypole dance | Britannica.com","type":"webpage","URL":"https://www.britannica.com/art/Maypole-dance"}, + {"id":"mcadamsPerceptualScalingSynthesized1995","author":[{"family":"McAdams","given":"Stephen"},{"family":"Winsberg","given":"Suzanne"},{"family":"Donnadieu","given":"Sophie"},{"family":"De Soete","given":"Geert"},{"family":"Krimphoff","given":"Jochen"}],"citation-key":"mcadamsPerceptualScalingSynthesized1995","container-title":"Phychological Research","container-title-short":"Psychological Research","issue":"3","issued":{"date-parts":[[1995]]},"page":"177–192","title":"Perceptual scaling of synthesized musical timbres: Common dimensions, specificities and latent subject classes","type":"article-journal","volume":"58"}, + {"id":"mcadamsPerspectivesContributionTimbre1999","author":[{"family":"McAdams","given":"Stephen"}],"citation-key":"mcadamsPerspectivesContributionTimbre1999","container-title":"Computer Music Journal","DOI":"10.2307/3681242","ISSN":"01489267","issue":"3","issued":{"date-parts":[[1999]]},"page":"85–102","title":"Perspectives on the Contribution of Timbre to Musical Structure","type":"article-journal","URL":"http://dx.doi.org/10.2307/3681242","volume":"23"}, + {"id":"mcadamsPsychophysicalQuantificationIndividual2000","author":[{"family":"McAdams","given":"S."},{"family":"Winsberg","given":"S."}],"citation-key":"mcadamsPsychophysicalQuantificationIndividual2000","container-title":"Contributions to Psychological Acoustics: Results of the 8th Oldenburg Symposium on Psychological Acoustics","editor":[{"family":"Schick","given":"A."},{"family":"Meis","given":"M."},{"family":"Reckhardt","given":"C."}],"event-place":"Oldenburg","issued":{"date-parts":[[2000]]},"page":"165–182","publisher":"Bis","publisher-place":"Oldenburg","title":"Psychophysical quantification of individual differences in timbre perception","type":"chapter"}, + {"id":"mccartneyRethinkingComputerMusic2002","author":[{"family":"McCartney","given":"James"}],"citation-key":"mccartneyRethinkingComputerMusic2002","container-title":"Computer Music Journal","issue":"4","issued":{"date-parts":[[2002]]},"page":"61–68","title":"Rethinking the Computer Music Language: SuperCollider","type":"article-journal","URL":"http://www.mitpressjournals.org/doi/abs/10.1162/014892602320991383","volume":"26"}, + {"id":"mccormackGenerativeCompositionNodal2011","author":[{"family":"McCormack","given":"Jon"},{"family":"McIlwain","given":"Peter"}],"citation-key":"mccormackGenerativeCompositionNodal2011","collection-title":"Computer Music and Digital Audio","container-title":"A-Life for Music: Music and Computer Models of Living Systems","editor":[{"family":"Miranda","given":"Eduardo R."}],"issued":{"date-parts":[[2011]]},"page":"99–113","publisher":"A-R Editions, Inc.","title":"Generative Composition with Nodal","type":"chapter"}, + {"id":"mccreaFCJ034GesturesDigital","abstract":"Felicity Colman and Christian McCrea take all these questions - very old and very new technics, new intensities and new fragmentation, new relations, the infinite deferral of networks and the way this deferral ties everything into a web - in the direction of what they call the 'digital maypole'. For Colman and McCrea, 'the maypole expresses the network’s torsion balance chart of power. The maypole topology is order through rhythmic tension and torsion, and in this sense its continuous binding of power makes the concept the paradoxical apostate of the network’s labyrinthine structure. The instinctual and biological ties of the etymological maypole enable us to focus upon specific power combinations of the network’s prescience'. There could perhaps be no better description of the problems and possibilities given to us by new mobile intensities, whether for those who are trying to mediate the shifts in social practices and cultural cohensions occasioned by mobility, or those attempting merely to analyse them.","accessed":{"date-parts":[[2017,2,27]]},"author":[{"family":"McCrea","given":"Felicity Colman and Christian"}],"citation-key":"mccreaFCJ034GesturesDigital","title":"FCJ-034 Gestures Towards the Digital Maypole","type":"post-weblog","URL":"http://six.fibreculturejournal.org/fcj-034-gestures-towards-the-digital-maypole/"}, + {"id":"mcgurkHearingLipsSeeing1976","abstract":"MOST verbal communication occurs in contexts where the listener can see the speaker as well as hear him. However, speech perception is normally regarded as a purely auditory process. The study reported here demonstrates a previously unrecognised influence of vision upon speech perception. It stems from an observation that, on being shown a film of a young woman's talking head, in which repeated utterances of the syllable [ba] had been dubbed on to lip movements for [ga], normal adults reported hearing [da]. With the reverse dubbing process, a majority reported hearing [bagba] or [gaba]. When these subjects listened to the soundtrack from the film, without visual input, or when they watched untreated film, they reported the syllables accurately as repetitions of [ba] or [ga]. Subsequent replications confirm the reliability of these findings; they have important implications for the understanding of speech perception.","author":[{"family":"McGurk","given":"H."},{"family":"MacDonald","given":"J. W."}],"citation-key":"mcgurkHearingLipsSeeing1976","container-title":"Nature","issue":"246-248","issued":{"date-parts":[[1976]]},"title":"Hearing lips and seeing voices","type":"article-journal","URL":"http://www.nature.com/nature/journal/v264/n5588/abs/264746a0.html;jsessionid=18B8F4F4E09E98C54D5410A41B4F3D4A","volume":"264"}, + {"id":"mcilwainComposingNodalNetworks2006","abstract":"This is my music: A graph drawn by Stravinsky when asked to visually represent his music (Craft, 1962). Issues related to compositional technique using the software environment Nodal are discussed. The particular focus in this paper is the use and characterisation of nodal networks. These networks are the generative engine of Nodal. Network configuration is explored by discussing the compositional process for the work ” Network Study #1 ” that employs Nodal exclusively. Observations are made regarding the transformational properties of simple networks.","author":[{"family":"Mcilwain","given":"Peter"},{"family":"Mccormack","given":"Jon"},{"family":"Lane","given":"Aidan"},{"family":"Dorin","given":"Alan"}],"citation-key":"mcilwainComposingNodalNetworks2006","container-title":"Proceedings of the Australasian Computer Music Conference 2006","editor":[{"family":"Opie","given":"T."},{"family":"Brown","given":"A."}],"issued":{"date-parts":[[2006]]},"page":"101–107","title":"Composing With Nodal Networks","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.146.2797"}, + {"id":"mckayCommunityMusicHistory2012","author":[{"family":"McKay","given":"George"},{"family":"Higham","given":"Ben"}],"citation-key":"mckayCommunityMusicHistory2012","issued":{"date-parts":[[2012]]},"publisher":"Arts and Humanities Research Council","title":"Community Music: History and Current Practice, its Constructions of \"Community\", Digital Turns and Future Soundings","type":"report"}, + {"id":"mcleanAlgoraveDancingAlgorithms2019","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanAlgoraveDancingAlgorithms2019","collection-title":"Cambridge Companions to Music","container-title":"The Cambridge Companion to Music in Digital Culture","DOI":"10.1017/9781316676639.016","editor":[{"family":"Cook","given":"Nicholas"},{"family":"Ingalls","given":"Monique M."},{"family":"Trippett","given":"DavidEditors"}],"issued":{"date-parts":[[2019]]},"page":"175–177","publisher":"Cambridge University Press","title":"Algorave: Dancing to Algorithms","type":"chapter"}, + {"id":"mcleanAlgorithmicPattern2020a","abstract":"This paper brings together two main perspectives on algorithmic pattern. First, the writing of musical patterns in live coding performance, and second, the weaving of patterns in textiles. In both cases, algorithmic pattern is an interface between the human and the outcome, where small changes have far-reaching impact on the results. By bringing contemporary live coding and ancient textile approaches together, we reach a common view of pattern as algorithmic movement (e.g. looping, shifting, reflecting, interfering) in the making of things. This works beyond the usual definition of pattern used in musical interfaces, of mere repeating sequences. We conclude by considering the place of algorithmic pattern in a wider activity of making.","accessed":{"date-parts":[[2022,1,9]]},"author":[{"family":"Mclean","given":"Alex"}],"citation-key":"mcleanAlgorithmicPattern2020a","container-title":"Proceedings of the International Conference on New Interfaces for Musical Expression","event":"NIME2020","event-place":"Birmingham, UK","issued":{"date-parts":[[2020,6,1]]},"page":"265--270","publisher-place":"Birmingham, UK","title":"Algorithmic Pattern","type":"paper-conference","URL":"https://zenodo.org/record/4813352"}, + {"id":"mcleanAlgorithmicTrajectories2018","abstract":"We jointly designed and edited this volume [Oxford Handbook of Algorithmic Music] because of our complementary, overlapping yet highly contrasting backgrounds (we have performed together and met first in the context of music research). The contrast between us stems both from our differing time frames of involvement, and from the fact that AM makes music primarily (usually solely) via a computer and in real-time whereas RTD is an acoustic instrumentalist (particularly keyboards, often with computers), and a composer (offline) as well as improviser (real-time). While AM was using computers from an early age, and began serious programming around 1986 (aged 11), RTD first used a (desktop) computer in around 1982 (already aged more than 30). So in this final Perspective on Practice, we will discuss our own experiences and the development of our current enthusiasms. We hope that brief consideration of these trajectories will have some interest for readers seeking to engage with the breadth of our field of algorithmic music. We drafted our own sections, and then jointly edited the chapter, providing a brief conclusion; we also took advantage of helpful suggestions from external reviewers. See Note 1 to this chapter for information on cd and other sources of the music mentioned in the two authors’ sections that follow.","accessed":{"date-parts":[[2018,4,25]]},"author":[{"family":"McLean","given":"Alex"},{"family":"Dean","given":"Roger"}],"citation-key":"mcleanAlgorithmicTrajectories2018","DOI":"10.5281/zenodo.1228959","ISBN":"978-0-19-022699-2","issued":{"date-parts":[[2018,2,1]]},"publisher":"Oxford University Press","source":"Zenodo","title":"Algorithmic Trajectories","type":"chapter","URL":"https://zenodo.org/record/1228959#.WuB2PnUvzrc"}, + {"id":"mcleanAlternateTimelinesTidalCycles2021","abstract":"The TidalCycles (or Tidal for short) live coding environment has been developed since around 2009, via several rewrites of its core representation. Rather than having fixed goals, this development has been guided by use, motivated by the open aim to make music. This development process can be seen as a long-form improvisation, with insights into the nature of Tidal gained through the process of writing it, feeding back to guide the next steps of development. This brings the worrying thought that key insights will have been missed along this development journey, that would otherwise have lead to very different software. Indeed participants at beginners’ workshops that I have lead or co-lead have often asked questions without good answers, because they made deficiencies or missing features in the software clear. It is well known that a beginner’s mind is able to see much that an expert has become blind to. Running workshops are an excellent way to find new development ideas, but the present paper explores a different technique – the rewrite.","accessed":{"date-parts":[[2022,3,17]]},"author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanAlternateTimelinesTidalCycles2021","DOI":"10.5281/zenodo.5788732","event-place":"Valdivia, Chile","issued":{"date-parts":[[2021,12,15]]},"language":"eng","publisher":"Zenodo","publisher-place":"Valdivia, Chile","title":"Alternate Timelines for TidalCycles","type":"speech","URL":"https://zenodo.org/record/5788732"}, + {"id":"mcleanApolloniusDiagramsRepresentation2007","author":[{"family":"McLean","given":"Alex"},{"family":"Leymarie","given":"Frederic F."},{"family":"Wiggins","given":"Geraint"}],"citation-key":"mcleanApolloniusDiagramsRepresentation2007","container-title":"Proceedings of the 4th International Symposium on Voronoi Diagrams in Science and Engineering","issued":{"date-parts":[[2007]]},"page":"276–281","title":"Apollonius diagrams and the Representation of Sounds and Music","type":"paper-conference"}, + {"id":"mcleanArtistProgrammersProgrammingLanguages2011","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanArtistProgrammersProgrammingLanguages2011","genre":"PhD Thesis","issued":{"date-parts":[[2011,11]]},"publisher":"Department of Computing, Goldsmiths, University of London","title":"Artist-Programmers and Programming Languages for the Arts","type":"thesis"}, + {"id":"mcleanBabble2008","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanBabble2008","issued":{"date-parts":[[2008]]},"note":"Published: online artwork; http://project.arnolfini.org.uk/projects/2008/babble/","title":"Babble","type":"book"}, + {"id":"mcleanBricolageProgrammingCreative2010","author":[{"family":"McLean","given":"Alex"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"mcleanBricolageProgrammingCreative2010","container-title":"22nd Psychology of Programming Interest Group 2010","event-place":"Madrid","issued":{"date-parts":[[2010]]},"publisher-place":"Madrid","title":"Bricolage Programming in the Creative Arts","type":"paper-conference"}, + {"id":"mcleanComputerProgrammingCreative2012","author":[{"family":"McLean","given":"Alex"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"mcleanComputerProgrammingCreative2012","container-title":"Computers and Creativity","editor":[{"family":"McCormack","given":"Jon"},{"family":"Inverno","given":"Mark","non-dropping-particle":"d'"}],"ISBN":"978-3-642-31726-2","issued":{"date-parts":[[2012]]},"page":"235–252","publisher":"Springer","title":"Computer Programming in the Creative Arts","type":"chapter"}, + {"id":"mcleanCyclicPatternsMovement2018","abstract":"This article hosts an interdisciplinary exploration of cyclic rhythmic structures, bringing together historical references to ground understanding of algorithmic electronic dance music, and in particular the algorave movement. The role of pattern in uniting dance, music and language is investigated in the ancient practice of weaving, in ancient Greek choral lyric, and contemporary live coding. In this context the TidalCycles environment is introduced, with some visual and audio examples. Cyclic metrical patterns in ancient Greek are then explored in detail, particularly the metrical transformations of Epiplokē. Finally, this jump between contemporary and ancient practice leads us to consider algorave itself as a Luddite movement, its proponents engaged in an unravelling of technology.","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"McLean","given":"Alex"},{"family":"Fanfani","given":"Giovanni"},{"family":"Harlizius-Klück","given":"Ellen"}],"citation-key":"mcleanCyclicPatternsMovement2018","container-title":"Dancecult. Journal of Electronic Music Dance Culture","DOI":"10.12801/1947-5403.2018.10.01.01","issue":"1","issued":{"date-parts":[[2018,11,23]]},"page":"5-30","source":"Zenodo","title":"Cyclic Patterns of Movement Across Weaving, Epiplokē and Live Coding","type":"article-journal","URL":"https://zenodo.org/record/1548969","volume":"10"}, + {"id":"mcleanCyclicPatternsMovement2018a","abstract":"This article hosts an interdisciplinary exploration of cyclic rhythmic structures, bringing together historical references to ground understanding of algorithmic electronic dance music, and in particular the algorave movement. The role of pattern in uniting dance, music and language is investigated in the ancient practice of weaving, in ancient Greek choral lyric, and contemporary live coding. In this context the TidalCycles environment is introduced, with some visual and audio examples. Cyclic metrical patterns in ancient Greek are then explored in detail, particularly the metrical transformations of Epiplokē. Finally, this jump between contemporary and ancient practice leads us to consider algorave itself as a Luddite movement, its proponents engaged in an unravelling of technology.","accessed":{"date-parts":[[2020,4,9]]},"author":[{"family":"McLean","given":"Alex"},{"family":"Fanfani","given":"Giovanni"},{"family":"Harlizius-Klück","given":"Ellen"}],"citation-key":"mcleanCyclicPatternsMovement2018a","container-title":"Dancecult: Journal of Electronic Dance Music Culture","container-title-short":"Dancecult","DOI":"http://dx.doi.org/ 10.12801/1947-5403.2018.10.01.01","ISSN":"1947-5403","issue":"1","issued":{"date-parts":[[2018]]},"language":"en-US","page":"5-30","source":"dj.dancecult.net","title":"Cyclic Patterns of Movement across Weaving, Epiplokē and Live Coding","title-short":"Cyclic Patterns of Movement across Weaving, Epiplokē and Live Coding | Dancecult","type":"article-journal","URL":"https://dj.dancecult.net/index.php/dancecult/article/view/1036","volume":"10"}, + {"id":"mcleanFabricatingAlgorithmicArt2018","abstract":"“We build our computers the way we build our cities -- over time, without a plan, on top of ruins.” Ellen Ullman (1998) The above quote refers to the historical layers that make up our computer operating systems, where newly developed user interfaces are successively placed on top of the old ones, creating a kind of palimpsest. Behind the graphical user interface we find a text-based one, then a programming language, then a low-level assembly language, then machine and microcode, until we eventually meet with physical electronic circuits. The conventional timeline for computing technology as a whole begins earlier still, with the discovery of the electronic transistor a century ago. Each of these layers has had its heyday as the dominant user interface of its time, and indeed each has been used to make algorithmic systems for, or indeed as, art. There is much artwork to be recognised throughout this period, but if we keep digging, there are many more ruins to be found. Through research during our European Research Council project PENELOPE, we find that algorithms have been present in everyday life for millennia. In the following we will explore some examples which support this claim, with focus on our recent work while resident at the Textiles Zentrum Haslach in Austria.","accessed":{"date-parts":[[2020,4,9]]},"author":[{"family":"McLean","given":"Alex"},{"family":"Harlizius-Klück","given":"Ellen"}],"citation-key":"mcleanFabricatingAlgorithmicArt2018","container-title":"Parsing Digital","DOI":"10.5281/zenodo.2155745","event-place":"London, UK","ISBN":"9789999269391","issued":{"date-parts":[[2018,9,19]]},"language":"eng","page":"10-21","publisher":"Austrian Cultural Forum","publisher-place":"London, UK","source":"Zenodo","title":"Fabricating Algorithmic Art","type":"chapter","URL":"https://zenodo.org/record/2155745"}, + {"id":"mcleanFeedforward2020","abstract":"This is an improvised, from-scratch live coding performance. The NIME interface which this performance showcases is the new Feedfoward editor for the TidalCycles live coding environment. Feedforward is written in Haskell using the ncurses library for terminal-based user interfaces. It runs on low-powered hardware including the Raspberry Pi Zero, with formative testing of prototypes conducted with several groups of children between the ages of 8 and 14. Feedforward has a number of features designed to support improvised, multi-pattern live coding. Individual Tidal patterns are addressable with hotkeys for fast mute and unmuting. Each pattern has a stereo VU meter, to aid the quick matching of sound to pattern within a mix. In addition, TidalCycles has been extended to store context with each event, so that source code positions in its polyrhythmic sequence mini-notation are tracked. This allows steps to be highlighted in the source code when- ever they are active. This works even when Tidal combinators have been applied to manipulate the timeline. Formal evaluation has yet to take place, but this feature appears to support learning of how pattern manipulations work in Tidal. Feedforward and TidalCycles is free/open source software under a GPL licence version 3.0.","accessed":{"date-parts":[[2022,6,24]]},"author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanFeedforward2020","container-title":"Proceedings of New Interfaces for Musical Expression","event":"NIME2020","event-place":"Birmingham","issued":{"date-parts":[[2020,7,21]]},"publisher-place":"Birmingham","title":"Feedforward","type":"paper-conference","URL":"https://zenodo.org/record/6353969"}, + {"id":"mcleanHackingPerlNightclubs2004","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanHackingPerlNightclubs2004","issued":{"date-parts":[[2004]]},"publisher":"O'Reilly Media, Inc.","title":"Hacking Perl in nightclubs","type":"book","URL":"http://www.perl.com/pub/a/2004/08/31/livecode.html"}, + {"id":"mcleanHackingSoundContext2001","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanHackingSoundContext2001","container-title":"Proceedings of Music without walls","editor":[{"family":"Landy","given":"Leigh"}],"issued":{"date-parts":[[2001]]},"publisher":"De Montfort University","title":"Hacking Sound in Context","type":"paper-conference"}, + {"id":"mcleanImprovisingSynthesisedVocables2007","abstract":"In the context of the live coding of music and computational creativity, literature examining perceptual relationships between text, speech and instrumental sounds are surveyed, including the use of vocable words in music. A system for improvising polymetric rhythms with vocable words is introduced, together with a working prototype for producing rhythmic continuations within the system. This is shown to be a promising direction for both text based music improvisation and research into creative agents.","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanImprovisingSynthesisedVocables2007","issued":{"date-parts":[[2007]]},"publisher":"Goldsmiths College, University of London","title":"Improvising with Synthesised Vocables, with Analysis Towards Computational Creativity","type":"thesis"}, + {"id":"mcleanIntroductionWeavingCodes2017","abstract":"This article introduces the TEXTILE special issue on Weaving Codes, Coding Weaves, and the project of the same name, which was funded by the Arts and Humanities Research Council for 18 months from September 2014. We introduce the collaborators of this interdisciplinary project, spanning textiles, music, arts technology, computer science, mathematics, anthropology, media theory, and philosophy. We tell the multifaceted story of how we met and began to collaborate, following prescient activities in textiles, music performance, live art, and computer programming that have met confluence in our project. This forms an introduction to the articles produced by these collaborators, either as part of the Weaving Codes project, or in parallel with it. We conclude by looking to the future, in particular the five year ERC PENELOPE project now beginning in the Deutsches Museum in Munich.","author":[{"family":"McLean","given":"Alex"},{"family":"Harlizius-Klück","given":"Ellen"},{"family":"Jefferies","given":"Janis"}],"citation-key":"mcleanIntroductionWeavingCodes2017","container-title":"TEXTILE","DOI":"10.1080/14759756.2017.1298232","ISSN":"1475-9756","issue":"2","issued":{"date-parts":[[2017,4,3]]},"page":"118-123","source":"Taylor and Francis+NEJM","title":"Introduction: Weaving Codes, Coding Weaves","title-short":"Introduction","type":"article-journal","URL":"https://doi.org/10.1080/14759756.2017.1298232","volume":"15"}, + {"id":"mcleanLiveCodingComputational2010","author":[{"family":"McLean","given":"Alex"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"mcleanLiveCodingComputational2010","container-title":"Proceedings of the 1st International Conference on Computational Creativity 2010","issued":{"date-parts":[[2010]]},"page":"175–179","title":"Live Coding Towards Computational Creativity","type":"paper-conference"}, + {"id":"mcleanLiveCodingFree2008","abstract":"FLOSS+Art critically reflects on the growing relationship between FreeSoftware ideology, open content and digital art. It provides a view onto thesocial, political and economic myths and realities linked to this phenomenon.Topics include: digital art licensing, copying and distributing under opencontent models, the influence of FLOSS on digital art practices, the use offree software to produce art and the art of producing free software, FLOSS asan embedded political message in digital art, paradoxes and limitations ofopen licenses for digital art, FLOSS as a way to quote and embed otherartworks in the making of new works, definitions and manifestos for a freesoftware art... With contributions from: Fabianne Balvedi, Florian Cramer,Sher Doruff, Nancy Mauro Flude, Olga Goriunova, Dave Griffiths, Ross Harley,Martin Howse, Shahee Ilyas, Ricardo Lafuente, Ivan Monroy Lopez, ThorMagnusson, Alex McLean, Rob Myers, Alejandra Maria Perez Nuñez, EleonoraOreggia, oRx-qX, Julien Ottavi, Michael van Schaik, Femke Snelting, PedroSoler, Hans Christoph Steiner, Prodromos Tsiavos, Simon Yuill. Compiled andedited by Aymeric Mansoux and Marloes de Valk.","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanLiveCodingFree2008","container-title":"FLOSS+Art","editor":[{"family":"Mansoux","given":"Aymeric"},{"family":"Valk","given":"Marloes","non-dropping-particle":"de"}],"ISBN":"1-906496-18-8","issued":{"date-parts":[[2008,8]]},"note":"Published: Paperback","publisher":"Mute Publishing Ltd","title":"Live coding for free","type":"chapter","URL":"http://www.worldcat.org/isbn/1906496188"}, + {"id":"mcleanLiveLoom2020","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanLiveLoom2020","container-title":"Proceedings of the 5th International Conference on Live Coding","event":"International Conference on Live Coding","event-place":"Limerick, Ireland","issued":{"date-parts":[[2020]]},"publisher":"University of Limerick","publisher-place":"Limerick, Ireland","title":"The Live Loom","type":"paper-conference"}, + {"id":"mcleanLiveNotationAcoustic2012","author":[{"family":"McLean","given":"Alex"},{"family":"Reeve","given":"Hester"}],"citation-key":"mcleanLiveNotationAcoustic2012","container-title":"Proceedings of International Computer Music Conference","issued":{"date-parts":[[2012]]},"page":"70–75","title":"Live Notation: Acoustic Resonance?","type":"paper-conference"}, + {"id":"mcleanLiveWorkHttpDoc2006","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanLiveWorkHttpDoc2006","issued":{"date-parts":[[2006]]},"title":"LiveWork, http://doc.gold.ac.uk/∼ma503am/software/livework/","type":"manuscript"}, + {"id":"mcleanMakingProgrammingLanguages2014","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanMakingProgrammingLanguages2014","container-title":"proceedings of the 2nd ACM SIGPLAN International Workshop on Functional Art, Music, Modelling and Design","DOI":"10.1145/2633638.2633647","issued":{"date-parts":[[2014]]},"title":"Making programming languages to dance to: Live Coding with Tidal","type":"paper-conference","URL":"http://dx.doi.org/10.1145/2633638.2633647"}, + {"id":"mcleanMusicalAlgorithmsTools2018","abstract":"This is an introductory chapter to The Oxford Handbook of Algorithmic Music, and the practical, historical, philosophical, and cultural perspectives that it covers. This chapter outlines the structure and scope of the book, provides some background and motivation for its focus, covers points of terminology, and summarizes the development of the field in the modern era. It then signposts the following chapters and relates them to one another in terms of some of the key issues that are covered. As algorithmic music is a fast-developing field, the chapter then outlines contemporary directions in order to look forward to the next steps in both research and practice. The chapter concludes with further signposting, this time to literature which may be read in partnership with the present volume.","accessed":{"date-parts":[[2018,3,30]]},"author":[{"family":"McLean","given":"Alex"},{"family":"Dean","given":"Roger T."}],"citation-key":"mcleanMusicalAlgorithmsTools2018","container-title":"The Oxford Handbook of Algorithmic Music","DOI":"10.1093/oxfordhb/9780190226992.013.24","issued":{"date-parts":[[2018,2,22]]},"language":"en","source":"www.oxfordhandbooks.com","title":"Musical Algorithms as Tools, Languages, and Partners","type":"article-journal","URL":"http://www.oxfordhandbooks.com/view/10.1093/oxfordhb/9780190226992.001.0001/oxfordhb-9780190226992-e-24"}, + {"id":"mcleanMusicImprovisationCreative2006","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanMusicImprovisationCreative2006","issued":{"date-parts":[[2006]]},"title":"Music improvisation and creative systems","type":"manuscript"}, + {"id":"mcleanOxfordHandbookAlgorithmicundercontract","citation-key":"mcleanOxfordHandbookAlgorithmicundercontract","editor":[{"family":"McLean","given":"Alex"},{"family":"Dean","given":"Roger"}],"issued":{"literal":"under contract"},"publisher":"Oxford University Press","title":"Oxford Handbook on Algorithmic Music","type":"book"}, + {"id":"mcleanParalinguisticMicrophone2013","author":[{"family":"McLean","given":"Alex"},{"family":"Shin","given":"EunJoo"},{"family":"Ng","given":"Kia"}],"citation-key":"mcleanParalinguisticMicrophone2013","container-title":"Proceedings of 13th Conference on New Interfaces for Musical Expression","event-place":"Seoul","issued":{"date-parts":[[2013]]},"page":"381–384","publisher-place":"Seoul","title":"The Paralinguistic Microphone","type":"paper-conference"}, + {"id":"mcleanPatternCodeAlgorithmic2019","abstract":"A report on Pattern + Code, a project working with primary school children to explore codes through both textiles and musical code, creating an audio/visual installation and live performance. The project came in three parts: Knot Coding, hiding messages in string, inspired by Andean Quipu, Algorithmic Drumming Circles, live coding percussive, cyclic music in groups of eight, and finally a live coding quartet performance. The paper concludes by considering how knot coding and live coding could be brought together in the future.","accessed":{"date-parts":[[2022,3,17]]},"author":[{"family":"McLean","given":"Alex"},{"family":"Bell","given":"Renick"}],"citation-key":"mcleanPatternCodeAlgorithmic2019","DOI":"10.5281/zenodo.3946174","event-place":"Madrid, Spain","ISBN":"9788418299087","issued":{"date-parts":[[2019,1,16]]},"language":"eng","page":"353","publisher":"Medialab Prado / Madrid Destino","publisher-place":"Madrid, Spain","title":"Pattern, Code and Algorithmic Drumming Circles","type":"speech","URL":"https://zenodo.org/record/3946174"}, + {"id":"mcleanPatternsMovementLive2009","author":[{"family":"McLean","given":"Alex"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"mcleanPatternsMovementLive2009","container-title":"Computers and the History of Art (CHArt) conference 2009","issued":{"date-parts":[[2009]]},"title":"Patterns of Movement in Live Languages.","type":"paper-conference"}, + {"id":"mcleanPetrolReactivePattern2010","author":[{"family":"McLean","given":"Alex"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"mcleanPetrolReactivePattern2010","container-title":"Proceedings of the International Computer Music Conference 2010","issued":{"date-parts":[[2010,6]]},"page":"331–334","title":"Petrol: Reactive Pattern Language for Improvised Music","type":"paper-conference"}, + {"id":"mcleanProceedings1stInternational2015","author":[{"family":"McLean","given":"Alex"},{"family":"Magnusson","given":"Thor"},{"family":"Ng","given":"Kia"},{"family":"Knotts","given":"Shelly"},{"family":"Armitage","given":"Joanne"}],"citation-key":"mcleanProceedings1stInternational2015","issued":{"date-parts":[[2015]]},"publisher":"ICSRiM, School of Music","title":"Proceedings of the 1st International Conference on Live Coding","type":"paper-conference"}, + {"id":"mcleanProceedingsFirstInternational","citation-key":"mcleanProceedingsFirstInternational","editor":[{"family":"McLean","given":"Alex"},{"family":"Magnusson","given":"Thor"},{"family":"Ng","given":"Kia"},{"family":"Knotts","given":"Shelly"},{"family":"Armitage","given":"Joanne"}],"ISBN":"978-0-85316-340-4","number-of-pages":"300","publisher":"ICSRiM, University of Leeds","title":"Proceedings of the First International Conference on Live Coding","type":"book"}, + {"id":"mcleanReflectionsLiveCoding2015","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanReflectionsLiveCoding2015","container-title":"Proceedings of 3rd conference on Computation, Communication, Aesthetics and X (xCoAx)","issued":{"date-parts":[[2015]]},"title":"Reflections on Live Coding Collaboration","type":"paper-conference"}, + {"id":"mcleanSoundChoreographyBody2014","author":[{"family":"McLean","given":"Alex"},{"family":"Sicchio","given":"Kate"}],"citation-key":"mcleanSoundChoreographyBody2014","container-title":"Proceedings of the 2nd conference on Computation, Communication, Aesthetics and X (xCoAx)","issued":{"date-parts":[[2014]]},"page":"355–362","title":"Sound Choreography <> Body Code","type":"paper-conference"}, + {"id":"mcleanSpecialIssueLive2014","author":[{"family":"McLean","given":"Alex"},{"family":"Rohrhuber","given":"Julian"},{"family":"Collins","given":"Nick"}],"citation-key":"mcleanSpecialIssueLive2014","container-title":"Computer Music Journal","issue":"1","issued":{"date-parts":[[2014]]},"title":"Special issue on Live Coding: Editor's notes","type":"article-journal","volume":"38"}, + {"id":"mcleanTextilityLiveCode2014","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanTextilityLiveCode2014","container-title":"Torque#1. Mind, Language and Technology","issued":{"date-parts":[[2014,9]]},"page":"141–144","publisher":"Link Editions","title":"Textility of Live Code","type":"chapter"}, + {"id":"mcleanTextural2013","author":[{"family":"McLean","given":"Alex"}],"citation-key":"mcleanTextural2013","container-title":"Proceedings of first conference on Computation, Communication, Aesthetics and X (xCoAx)","issued":{"date-parts":[[2013]]},"page":"81–88","title":"The Textural X","type":"paper-conference"}, + {"id":"mcleanTextureVisualNotation2011","author":[{"family":"McLean","given":"Alex"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"mcleanTextureVisualNotation2011","container-title":"Proceedings of the International Computer Music Conference 2011","issued":{"date-parts":[[2011]]},"page":"612–628","title":"Texture: Visual Notation for the Live Coding of Pattern","type":"paper-conference"}, + {"id":"mcleanTidalPatternLanguage2010","author":[{"family":"McLean","given":"Alex"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"mcleanTidalPatternLanguage2010","container-title":"Proceedings of the 7th Sound and Music Computing conference 2010","event-place":"Barcelona","issued":{"date-parts":[[2010]]},"page":"331–334","publisher-place":"Barcelona","title":"Tidal - Pattern Language for the Live Coding of Music","type":"paper-conference"}, + {"id":"mcleanTidalVortexZero2022","abstract":"In this paper we introduce ‘version zero’ of TidalVortex, an alternative implementation of the TidalCycles live coding system, using the Python programming language.  This is open-ended work, exploring what happens when we try to extract the 'essence' of a system like TidalCycles and translate it into another programming language, while taking advantage of the affordance of its new host. First, we review the substantial prior art in porting TidalCycles, and in representing musical patterns in Python. We then compare equivalent patterns written in Haskell (TidalCycles) and Python (TidalVortex), and relate implementation details of how functional reactive paradigms have translated from the pure functional, strongly typed Haskell to the more multi-paradigm, dynamically typed Python. Finally, we conclude with reflections and generalisable outcomes.","accessed":{"date-parts":[[2022,6,24]]},"author":[{"family":"McLean","given":"Alex"},{"family":"Forment","given":"Raphaël"},{"family":"Le Beux","given":"Sylvain"},{"family":"Silvani","given":"Damián"}],"citation-key":"mcleanTidalVortexZero2022","container-title":"Proceedings of the 7th International Conference on Live Coding","DOI":"10.5281/zenodo.6456380","event":"ICMC2022","event-place":"Limerick, Ireland","issued":{"date-parts":[[2022,4,12]]},"publisher":"Zenodo","publisher-place":"Limerick, Ireland","title":"TidalVortex Zero","type":"paper-conference","URL":"https://zenodo.org/record/6456380/export/hx"}, + {"id":"mcleanVisualisationLiveCode2010","author":[{"family":"McLean","given":"Alex"},{"family":"Griffiths","given":"Dave"},{"family":"Collins","given":"Nick"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"mcleanVisualisationLiveCode2010","container-title":"Proceedings of Electronic Visualisation and the Arts London 2010","issued":{"date-parts":[[2010]]},"page":"26–30","title":"Visualisation of Live Code","type":"paper-conference"}, + {"id":"mcleanVocableSynthesis2008","abstract":"In many cultures musicians describe the sounds made by their instruments by speaking, singing or transcribing them as words. This paper proposes applying this approach to synthesised sounds, where these vocable words control physical modelling synthesis systems. We aim to produce instruments played by typing words, allowing a rich range of musical expression. A working prototype of a system for music improvisation is presented, and future work and applications are considered.","author":[{"family":"McLean","given":"Alex"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"mcleanVocableSynthesis2008","container-title":"Proceedings of International Computer Music Conference 2008","issued":{"date-parts":[[2008]]},"title":"Vocable Synthesis","type":"paper-conference"}, + {"id":"mcleanWarpweightedTabletWeaving2015","abstract":"I’m enjoying teaching myself about tablet weaving, through some reading and a lot of trial and error.  Over the past few months I’ve spent quite a while experimenting with ways to make sure that I’…","accessed":{"date-parts":[[2018,8,20]]},"author":[{"family":"McLean","given":"Sally"}],"citation-key":"mcleanWarpweightedTabletWeaving2015","container-title":"Celtic Weaving","issued":{"date-parts":[[2015,7,22]]},"language":"en","title":"A warp-weighted Tablet Weaving Loom","type":"post-weblog","URL":"https://celticweaving.com/2015/07/22/a-warp-weighted-tablet-weaving-loom/"}, + {"id":"mcleanWordsMovementTimbre2009","author":[{"family":"McLean","given":"Alex"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"mcleanWordsMovementTimbre2009","container-title":"Proceedings of New Interfaces for Musical Expression 2009","issued":{"date-parts":[[2009]]},"page":"276–279","title":"Words, Movement and Timbre.","type":"paper-conference"}, + {"id":"medinRespectsSimilarity1993","author":[{"family":"Medin","given":"D. L."},{"family":"Goldstone","given":"R. L."},{"family":"Gentner","given":"D."}],"citation-key":"medinRespectsSimilarity1993","container-title":"Psychological Review","issued":{"date-parts":[[1993]]},"page":"254–278","title":"Respects for Similarity","type":"article-journal","volume":"100"}, + {"id":"mehaffyCityNotTree2016","abstract":"In 1965, the architect and design theorist Christopher Alexander published a landmark theoretical critique of modern urban design, and by extension, modern design in general. His critique was different from others of the day in that it was not based on a social or political argument, but rather, on a structural analysis, rooted in then-emerging insights from the fields of mathematics and cognition. Here, published again on its fiftieth anniversary, is Alexander's classic text, together with new interpretive commentaries and discussions by leading theorists and practitioners. This volume is destined to become an invaluable resource for a new generation of students and practitioners.","author":[{"family":"Mehaffy","given":"Michael W."},{"family":"Alexander","given":"Christopher"}],"citation-key":"mehaffyCityNotTree2016","ISBN":"978-0-9893469-7-9","issued":{"date-parts":[[2016]]},"publisher":"Sustasis Press","source":"Amazon","title":"A City is Not a Tree: 50th Anniversary Edition","title-short":"A City is Not a Tree","type":"book"}, + {"id":"melaraOptionalProcessesSimilarity1992","abstract":"This research investigates the nature of similarity relations-among three pairs of interacting dimensions: (1) the integral dimensions of auditory pitch and loudness, (2) the configural dimen- sions of paired parentheses, and (3) the cross-modally corresponding dimensions of visual posi- tion and auditory pitch. We evaluated the rules by which information from each di-mens-ion corn— bines in similarity judgments. Our claim is that, when judging similarity, processes that are obligatory, or what we call mandatory processes, can commingle with processes of choice, or what we call optional processes. By varying instructions, we found strong evidence of optional process- ing. Instructions to rate overall similarity encouraged subjects to attend to stimuli as wholes and led to a Euclidean rule in similarity scaling. Instructionsto focus on-dimensions encouraged subjects to consider each stimulus dimension separately and-led-to-a-city-block rule. We argue that optional processes may obscure mandatory ones, and so need to be identified-before-manda- tory processes can be understood.","author":[{"family":"Melara","given":"Robert D."},{"family":"Marks","given":"Lawrence E."},{"family":"Lesko","given":"Kathryn E."}],"citation-key":"melaraOptionalProcessesSimilarity1992","container-title":"Perception & Psychophysics","issue":"2","issued":{"date-parts":[[1992]]},"page":"123–133","title":"Optional processes in similarity judgments","type":"article-journal","volume":"51"}, + {"id":"menabreacount.SketchAnalyticalEngine1843","author":[{"family":"MENABREA (Count.)","given":"Luigi Federico"}],"citation-key":"menabreacount.SketchAnalyticalEngine1843","issued":{"date-parts":[[1843]]},"language":"en","number-of-pages":"124","publisher":"R. & J. E. Taylor","source":"Google Books","title":"Sketch of the Analytical Engine invented by Charles Babbage ... with notes by the translator. Extracted from the 'Scientific Memoirs,' etc. [The translator's notes signed: A.L.L. ie. Augusta Ada King, Countess Lovelace.]","title-short":"Sketch of the Analytical Engine invented by Charles Babbage ... with notes by the translator. Extracted from the 'Scientific Memoirs,' etc. [The translator's notes signed","type":"book"}, + {"id":"menabreaSketchAnalyticalEngine2020","abstract":"Ada Lovelace was an English mathematician considered by many as the first computer scientist in history. Soon after the (never built) invention of the “Analytical Engine” by Charles Babbage, i.e. the first mechanical computer, Ada Lovelace became interested in this machine. She began an intense exchange of ideas and notes with Charles Babbage through the years and translated an article of the Italian engineer Luigi Menabrea on the Analytical Engine.This book presents the translated article together with Ada Lovelace’s added notes, that constitute the bulk of the text. She included several insights that can be considered seminal contributions to the field, most notably: the outline of the first published computer program in history (Note G), useful to calculate a sequence of Bernoulli numbers with the Analytical Engine, and a groundbreaking description of the Analytical Engine as a general purpose machine, a visionary concept that became reality much later with the contributions of Alan Turing and John von Neumann.Sourced from the public domain, this work has been proof-read, newly typeset, and indexed.","author":[{"family":"Menabrea","given":"Luigi Federico"},{"family":"Lovelace","given":"Ada"}],"citation-key":"menabreaSketchAnalyticalEngine2020","ISBN":"9798629949091","issued":{"date-parts":[[2020,3,23]]},"language":"English","number-of-pages":"99","publisher":"Independently published","source":"Amazon","title":"Sketch of the Analytical Engine Invented by Charles Babbage: Translation and Notes by Ada Lovelace","title-short":"Sketch of the Analytical Engine Invented by Charles Babbage","type":"book"}, + {"id":"metzgerLawsSeeing2006","author":[{"family":"Metzger","given":"Wolfgang"}],"citation-key":"metzgerLawsSeeing2006","edition":"1","ISBN":"0-262-13467-5","issued":{"date-parts":[[2006,9]]},"note":"Published: Hardcover","publisher":"The MIT Press","title":"Laws of Seeing","type":"book","URL":"http://www.worldcat.org/isbn/0262134675"}, + {"id":"meyerThingsAlgorithm","abstract":"What happens when people's fate hangs on machine learning?","accessed":{"date-parts":[[2021,1,27]]},"author":[{"family":"Meyer","given":"Bertrand"}],"citation-key":"meyerThingsAlgorithm","language":"en","title":"Things To Do To An Algorithm","type":"webpage","URL":"https://cacm.acm.org/blogs/blog-cacm/247225-things-to-do-to-an-algorithm/fulltext"}, + {"id":"meyerThingsAlgorithma","abstract":"What happens when people's fate hangs on machine learning?","accessed":{"date-parts":[[2021,1,19]]},"author":[{"family":"Meyer","given":"Bertrand"}],"citation-key":"meyerThingsAlgorithma","language":"en","title":"Things To Do To An Algorithm","type":"webpage","URL":"https://cacm.acm.org/blogs/blog-cacm/247225-things-to-do-to-an-algorithm/fulltext?mobile=false"}, + {"id":"millerMagicalNumberSeven1956","author":[{"family":"Miller","given":"G. A."}],"citation-key":"millerMagicalNumberSeven1956","container-title":"Psychological review","ISSN":"0033-295X","issue":"2","issued":{"date-parts":[[1956,3]]},"page":"81–97","PMID":"13310704","title":"The magical number seven plus or minus two: some limits on our capacity for processing information.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/13310704","volume":"63"}, + {"id":"millerPerceptualSpaceMusical1975","abstract":"Individual subjects with or without musical training made similarity judgments of pairs of tones on a nine-point scale. Each subject was run in three or four sessions of 351 trials each. The tones had structures like those of musical instruments, being made of all 27 combinations of three dimensions, each at three levels. In Experiment 1, the dimensions were fundamental frequency F0, envelope, and relative amplitudes of harmonics. In Experiment 2, the dimensions were number of harmonics, envelope, and onset rate of harmonics. Analysis of data by means of multidimensional scaling showed a strong context effect. In Experiment 1, F0 had such high saliency that for most subjects no other dimension was present in perceptual space and thus no differences were found between musical and nonmusical subjects. By holding F0 constant in Experiment 2, subjects were able to use harmonic as well as envelope structure in judgments. Differences between musical and nonmusical subjects appeared, and we discuss the basis for these differences. For both experiments, the curve relating latency of response to similarity was parabolic and, although a given subject's perceptual space changes little over successive runs, there is some evidence from Experiment 2 that musical subjects have the more stable space of perceptual dimensions.Subject Classification: 65.52, 65.75; 75.10. doi:10.1121/1.380719 PACS: 43.65.+v, 43.75.+a Additional Information Full Text: [ PDF (874 kB) GZipped PS","author":[{"family":"Miller","given":"James R."},{"family":"Carterette","given":"Edward C."}],"citation-key":"millerPerceptualSpaceMusical1975","container-title":"The Journal of the Acoustical Society of America","DOI":"10.1121/1.380719","issue":"3","issued":{"date-parts":[[1975]]},"page":"711–720","title":"Perceptual space for musical structures","type":"article-journal","URL":"http://dx.doi.org/10.1121/1.380719","volume":"58"}, + {"id":"millerRevisionHistoryAware2011","abstract":"Building repositories of computational models of biological systems ensures that published models are available for both education and further research, and can provide a source of smaller, previously verified models to integrate into a larger model. One problem with earlier repositories has been the limitations in facilities to record the revision history of models. Often, these facilities are limited to a linear series of versions which were deposited in the repository. This is problematic for several reasons. Firstly, there are many instances in the history of biological systems modelling where an 'ancestral' model is modified by different groups to create many different models. With a linear series of versions, if the changes made to one model are merged into another model, the merge appears as a single item in the history. This hides useful revision history information, and also makes further merges much more difficult, as there is no record of which changes have or have not already been merged. In addition, a long series of individual changes made outside of the repository are also all merged into a single revision when they are put back into the repository, making it difficult to separate out individual changes. Furthermore, many earlier repositories only retain the revision history of individual files, rather than of a group of files. This is an important limitation to overcome, because some types of models, such as CellML 1.1 models, can be developed as a collection of modules, each in a separate file. The need for revision history is widely recognised for computer software, and a lot of work has gone into developing version control systems and distributed version control systems (DVCSs) for tracking the revision history. However, to date, there has been no published research on how DVCSs can be applied to repositories of computational models of biological systems. We have extended the Physiome Model Repository software to be fully revision history aware, by building it on top of Mercurial, an existing DVCS. We have demonstrated the utility of this approach, when used in conjunction with the model composition facilities in CellML, to build and understand more complex models. We have also demonstrated the ability of the repository software to present version history to casual users over the web, and to highlight specific versions which are likely to be useful to users. Providing facilities for maintaining and using revision history information is an important part of building a useful repository of computational models, as this information is useful both for understanding the source of and justification for parts of a model, and to facilitate automated processes such as merges. The availability of fully revision history aware repositories, and associated tools, will therefore be of significant benefit to the community.","author":[{"family":"Miller","given":"Andrew K."},{"family":"Yu","given":"Tommy"},{"family":"Britten","given":"Randall"},{"family":"Cooling","given":"Mike T."},{"family":"Lawson","given":"James"},{"family":"Cowan","given":"Dougal"},{"family":"Garny","given":"Alan"},{"family":"Halstead","given":"Matt D."},{"family":"Hunter","given":"Peter J."},{"family":"Nickerson","given":"David P."},{"family":"Nunns","given":"Geo"},{"family":"Wimalaratne","given":"Sarala M."},{"family":"Nielsen","given":"Poul M."}],"citation-key":"millerRevisionHistoryAware2011","container-title":"BMC bioinformatics","DOI":"10.1186/1471-2105-12-22","ISSN":"1471-2105","issue":"1","issued":{"date-parts":[[2011]]},"page":"22+","PMCID":"PMC3033326","PMID":"21235804","title":"Revision history aware repositories of computational models of biological systems.","type":"article-journal","URL":"http://dx.doi.org/10.1186/1471-2105-12-22","volume":"12"}, + {"id":"milnerDefinitionStandardML1990","abstract":"An abstract is not available.","author":[{"family":"Milner","given":"Robin"},{"family":"Tofte","given":"Mads"},{"family":"Harper","given":"Robert"}],"citation-key":"milnerDefinitionStandardML1990","event-place":"Cambridge, MA, USA","ISBN":"0-262-63132-6","issued":{"date-parts":[[1990]]},"publisher":"MIT Press","publisher-place":"Cambridge, MA, USA","title":"The definition of Standard ML","type":"book","URL":"http://portal.acm.org/citation.cfm?id=77325"}, + {"id":"mirandaSymbolsSoundAIbased1994","abstract":"In this paper we investigate the possibility of an intelligent system for sound synthesis that would allow composition with sounds thought of in terms of abstract descriptions and operations rather than low level computer programing. Our research work is aimed at looking for plausible guidelines and strategies to map a composer's intuitive notion of sound structure to the parametric control of electronic sound synthesis. This paper shows how we attempted to approach the problem by means of a compilation of a few well known expert systems design techniques used in Artificial Intelligence (AI) research. We begin introducing the problem from a musician's point of view. Then we focus on two major issues of AI/Music: knowledge representation and machine learning. We propose a suitable representation scheme for sound synthesis followed by an inductive learning experiment towards an example prototype synthesiser. We also introduce the prototype functioning and suggest further work.","author":[{"family":"Miranda","given":"Eduardo R."}],"citation-key":"mirandaSymbolsSoundAIbased1994","container-title":"Contemporary Music Review","DOI":"10.1080/07494469400640441","ISSN":"0749-4467","issued":{"date-parts":[[1994]]},"page":"211–232","title":"From symbols to sound: AI-based investigation of sound synthesis","type":"article-journal","URL":"http://dx.doi.org/10.1080/07494469400640441"}, + {"id":"MirrorNeurons2008","citation-key":"MirrorNeurons2008","container-title":"Scholarpedia","issue":"1","issued":{"date-parts":[[2008]]},"page":"2055","title":"Mirror neurons","type":"article-journal","volume":"3"}, + {"id":"mithenSingingNeanderthalsOrigins2006","author":[{"family":"Mithen","given":"Steven"}],"citation-key":"mithenSingingNeanderthalsOrigins2006","edition":"First Am edition","ISBN":"0-674-02192-4","issued":{"date-parts":[[2006,3]]},"note":"Published: Hardcover","publisher":"Harvard University Press","title":"The Singing Neanderthals: The Origins of Music, Language, Mind, and Body","type":"book","URL":"http://www.worldcat.org/isbn/0674021924"}, + {"id":"moleMotorTheorySpeech2009","author":[{"family":"Mole","given":"Christopher"}],"citation-key":"moleMotorTheorySpeech2009","container-title":"Sounds and Perception: New Philosophical Essays","issued":{"date-parts":[[2009]]},"publisher":"Oxford University Press","title":"The Motor Theory of Speech Perception","type":"chapter"}, + {"id":"mollerBayesianImageAnalysis2001","author":[{"family":"Moller","given":"Jesper"},{"family":"Skare","given":"Oivind"}],"citation-key":"mollerBayesianImageAnalysis2001","issued":{"date-parts":[[2001]]},"title":"Bayesian Image Analysis with Coloured Voronoi Tessellations and a View to Applications in Reservoir Modelling","type":"book"}, + {"id":"molnar-szakacsMusicMirrorNeurons2006","abstract":"The ability to create and enjoy music is a universal human trait and plays an important role in the daily life of most cultures. Music has a unique ability to trigger memories, awaken emotions and to intensify our social experiences. We do not need to be trained in music performance or appreciation to be able to reap its benefits-already as infants, we relate to it spontaneously and effortlessly. There has been a recent surge in neuroimaging investigations of the neural basis of musical experience, but the way in which the abstract shapes and patterns of musical sound can have such profound meaning to us remains elusive. Here we review recent neuroimaging evidence and suggest that music, like language, involves an intimate coupling between the perception and production of hierarchically organized sequential information, the structure of which has the ability to communicate meaning and emotion. We propose that these aspects of musical experience may be mediated by the human mirror neuron system.","author":[{"family":"Molnar-Szakacs","given":"Istvan"},{"family":"Overy","given":"Katie"}],"citation-key":"molnar-szakacsMusicMirrorNeurons2006","container-title":"Social cognitive and affective neuroscience","ISSN":"1749-5024","issue":"3","issued":{"date-parts":[[2006,12]]},"page":"235–241","PMID":"18985111","title":"Music and mirror neurons: from motion to 'e'motion.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/18985111","volume":"1"}, + {"id":"monelleSenseMusicSemiotic2000","abstract":"The fictional Dr. Strabismus sets out to write a new comprehensive theory ofmusic. But music's tendency to deconstruct itself combined with thecomplexities of postmodernism doom him to failure. This is the parable thatframes \"The Sense of Music,\" a novel treatment of music theory thatreinterprets the modern history of Western music in the terms of semiotics.Based on the assumption that music cannot be described without reference toits meaning, Raymond Monelle proposes that works of the Western classicaltradition be analyzed in terms of temporality, subjectivity, and topic theory.Critical of the abstract analysis of musical scores, Monelle argues that thescore does not reveal music's \"sense.\" That sense–what a piece of music saysand signifies–can be understood only with reference to history, culture, andthe other arts. Thus, music is meaningful in that it signifies culturaltemporalities and themes, from the traditional manly heroism of the hunt tomilitary power to postmodern \"polyvocality.\" This theoretical innovationallows Monelle to describe how the Classical style of the eighteenth century–which he reads as a balance of lyric and progressive time–gave way to theRomantic need for emotional realism. He argues that irony and ambiguitysubsequently eroded the domination of personal emotion in Western music aswell as literature, killing the composer's subjectivity with that of theauthor. This leaves Dr. Strabismus suffering from the postmodern condition,and Raymond Monelle with an exciting, controversial new approach tounderstanding music and its history.","author":[{"family":"Monelle","given":"Raymond"}],"citation-key":"monelleSenseMusicSemiotic2000","ISBN":"0-691-05715-X","issued":{"date-parts":[[2000,11]]},"note":"Published: Hardcover","publisher":"Princeton University Press","title":"The Sense of Music: Semiotic Essays","type":"book","URL":"http://www.worldcat.org/isbn/069105715X"}, + {"id":"mooreHearingHandbookPerception1995","abstract":"**Hearing** is a comprehensive, authoritative reference work covering both thephysiological and perceptual aspects of hearing. Intended for researchers andadvanced students in the field of hearing, it reviews major areas of researchin addition to new discoveries, including active mechanisms in the cochlea,across-channel processes in auditory masking, and perceptual groupingprocesses.Key Features* Covers both physiological and perceptual aspects of hearing* Authoritative reviews by experts in the field* Comprehensive up-to-date coverage* An integrated work with extensive cross-references between chapters","citation-key":"mooreHearingHandbookPerception1995","edition":"2","editor":[{"family":"Moore","given":"C. J."}],"ISBN":"0-12-505626-5","issued":{"date-parts":[[1995,8]]},"note":"Published: Hardcover","publisher":"Academic Press","title":"Hearing, Handbook of Perception and Cognition","type":"book","URL":"http://www.worldcat.org/isbn/0125056265"}, + {"id":"moranRolesCreativitySociety2010","author":[{"family":"Moran","given":"Seana"}],"citation-key":"moranRolesCreativitySociety2010","collection-title":"Cambridge Handbooks in Psychology","container-title":"The Cambridge Handbook of Creativity","editor":[{"family":"Kaufman","given":"James C."},{"family":"Sternberg","given":"Robert J."}],"issued":{"date-parts":[[2010]]},"page":"74–90","publisher":"Cambridge University Press","title":"The Roles of Creativity in Society","type":"chapter"}, + {"id":"moranUnsupervisedLearningNonnegativity2005","author":[{"family":"Moran","given":"Ben"}],"citation-key":"moranUnsupervisedLearningNonnegativity2005","issued":{"date-parts":[[2005]]},"publisher":"Sussex University","title":"Unsupervised learning with non-negativity constraints for analysis of polyphonic musical audio","type":"thesis"}, + {"id":"mossbergContinuumWordsVoice2005","abstract":"This text offers some principal and methodogical issues on studies of timbre in words, music and vocal performance. Timbral relationships between word and music can be conceptualized as a continuum following an fictive axis running from meaning and timbre of words, through melody and music to performance. Sometimes the order might be different, but the ingredients will always be there. To get a grip on the totality of timbre and meaning involved in the songs and performances of one single artist, Swedish balladeer Olle Adolphson, a study was conducted along this research design. The interplay between the inherent timbres in vowel sounds and melody were firstly studied in the songs themselves and relationships were noted that showed signs of systematic appearance. Perspectives from these observations were intergrated with analyzes of timbral bearings on meaning and signification in words and musical settings of a number of songs. Following the axis to performance, aspects of timbre were studied with aid of visual representations of the signal as waveforms, melograms and spectograms, verifying observations and as tools for identification and discussion. The study points further towards timbre and emotional cues in vocal performances as signs of individual/enviroment interactions.","author":[{"family":"Mossberg","given":"Frans"}],"citation-key":"mossbergContinuumWordsVoice2005","container-title":"Proceedings of the Conference on Interdisciplinary Musicology 2005","issued":{"date-parts":[[2005]]},"title":"The Continuum of words, voice and music. In search for a vocabulary for the timbre of song and voice","type":"paper-conference"}, + {"id":"murphyBigBookConcepts2002","abstract":"Concepts embody our knowledge of the kinds of things there are in the world. Tying our past experiences to our present interactions with the environment, they enable us to recognize and understand new objects and events. Concepts are also relevant to understanding domains such as social situations, personality types, and even artistic styles. Yet like other phenomenologically simple cognitive processes such as walking or understanding speech, concept formation and use are maddeningly complex.

Research since the 1970s and the decline of the \"classical view\" of concepts have greatly illuminated the psychology of concepts. But persistent theoretical disputes have sometimes obscured this progress. The Big Book of Concepts goes beyond those disputes to reveal the advances that have been made, focusing on the major empirical discoveries. By reviewing and evaluating research on diverse topics such as category learning, word meaning, conceptual development in infants and children, and the basic level of categorization, the book develops a much broader range of criteria than is usual for evaluating theories of concepts.","author":[{"family":"Murphy","given":"Gregory L."}],"citation-key":"murphyBigBookConcepts2002","ISBN":"0-262-63299-3","issued":{"date-parts":[[2002,8]]},"note":"Published: Paperback","publisher":"The MIT Press","title":"The Big Book of Concepts (Bradford Books)","type":"book","URL":"http://www.worldcat.org/isbn/0262632993"}, + {"id":"myersReviewPallThayer2009","author":[{"family":"Myers","given":"Rob"}],"citation-key":"myersReviewPallThayer2009","issued":{"date-parts":[[2009]]},"note":"Published: Online; \\http://www.furtherfield.org/displayreview.php?review_id=337","title":"Review: Pall Thayer's Microcodes","type":"manuscript"}, + {"id":"myersTaxonomiesVisualProgramming1990","abstract":"There has been great interest recently in systems that use graphics to aid in the programming, debugging, and understanding of computer systems. The terms 'Visual Programming' and 'Program Visualization' have been applied to these systems. This paper attempts to provide more meaning to these terms by giving precise definitions, and then surveys a number of systems that can be classified as providing Visual Programming or Program Visualization. These systems are organized by classifying them into three different taxonomies.","author":[{"family":"Myers","given":"B."}],"citation-key":"myersTaxonomiesVisualProgramming1990","container-title":"Journal of Visual Languages & Computing","DOI":"10.1016/s1045-926x(05)80036-9","ISSN":"1045926X","issue":"1","issued":{"date-parts":[[1990,3]]},"page":"97–123","title":"Taxonomies of visual programming and program visualization","type":"article-journal","URL":"http://dx.doi.org/10.1016/s1045-926x(05)80036-9","volume":"1"}, + {"id":"nafusFLOSSPOLSDeliverable162006","author":[{"family":"Nafus","given":"D"},{"family":"Leach","given":"James"},{"family":"Krieger","given":"B"}],"citation-key":"nafusFLOSSPOLSDeliverable162006","issued":{"date-parts":[[2006,1,1]]},"source":"ResearchGate","title":"FLOSSPOLS Deliverable D 16 Gender: Integrated Report of Findings","title-short":"FLOSSPOLS Deliverable D 16 Gender","type":"article-journal"}, + {"id":"nakeComputerArtPersonal2005","abstract":"The story of some early computer art drawings in 1965 is told. It is a story of randomness. Computer art is viewed here as the programming of classes of aesthetic objects. In the mid 1960s, information aesthetics was a powerful and radical theory that had some influence on constructive and concrete forms of art in Europe. A connection is drawn to computer supported works by A. Michael Noll in the US, and Georg Nees in Germany. \"Experiment and tendency\" is identified as an important principle still valid today. The concept of the algorithmic sign appears at the horizon. Digital media are claimed to be explorations of algorithmic signs.","author":[{"family":"Nake","given":"Frieder"}],"citation-key":"nakeComputerArtPersonal2005","collection-title":"C&C '05","container-title":"Proceedings of the 5th conference on Creativity & cognition","DOI":"10.1145/1056224.1056234","event-place":"London, United Kingdom","ISBN":"1-59593-025-6","issued":{"date-parts":[[2005]]},"page":"54–62","publisher":"ACM","publisher-place":"London, United Kingdom","title":"Computer art: a personal recollection","type":"paper-conference","URL":"http://dx.doi.org/10.1145/1056224.1056234"}, + {"id":"nakeThereShouldBe1971","author":[{"family":"Nake","given":"Frieder"}],"citation-key":"nakeThereShouldBe1971","container-title":"PAGE","issued":{"date-parts":[[1971]]},"title":"There should be no computer art","type":"article-journal","volume":"18"}, + {"id":"nashTrackingVirtuosityFlow2011","author":[{"family":"Nash","given":"C."},{"family":"Blackwell","given":"A. F."}],"citation-key":"nashTrackingVirtuosityFlow2011","container-title":"Proceedings of International Computer Music Conference 2011","issued":{"date-parts":[[2011]]},"title":"Tracking virtuosity and flow in computer music","type":"paper-conference"}, + {"id":"nataleSensorimotorDevelopmentObject2005","abstract":"This paper describes a developmental sequence that allows a humanoid robot to learn about the shape of its body and successively about certain parts of the environment. We equipped the humanoid robot with an initial set of motor and perceptual competencies ranging from simple stereotyped actions to more sophisticated visual routines providing a bottom-up attention system. This initial form of sensorimotor coordination is sufficient to initiate the interaction with the environment and allows the robot to improve its motor and perceptual skills by first constructing a \"body-schema\" and later by learning about objects. The body-schema allows controlling movements to fixate, reach and touch objects in the environment. The interaction is further used to form a visual model of the objects grasped by the robot which eventually modulate the attention system in a top-down way. In another experiment we show an initial effort to study the acquisition of object affordances. We discuss the importance of sensorimotor coordination as a required step not only for the control of action but also, and more importantly, for perceptual development","author":[{"family":"Natale","given":"L."},{"family":"Orabona","given":"F."},{"family":"Berton","given":"F."},{"family":"Metta","given":"G."},{"family":"Sandini","given":"G."}],"citation-key":"nataleSensorimotorDevelopmentObject2005","container-title":"5th IEEE-RAS International Conference on Humanoid Robots, 2005.","DOI":"10.1109/ichr.2005.1573572","event-place":"San Diego, Cali, USA","ISBN":"0-7803-9320-1","issued":{"date-parts":[[2005]]},"page":"226–231","publisher":"IEEE","publisher-place":"San Diego, Cali, USA","title":"From sensorimotor development to object perception","type":"paper-conference","URL":"http://dx.doi.org/10.1109/ichr.2005.1573572"}, + {"id":"nauertTheoryPracticePorgy1994","accessed":{"date-parts":[[2020,3,11]]},"archive":"JSTOR","author":[{"family":"Nauert","given":"Paul"}],"citation-key":"nauertTheoryPracticePorgy1994","container-title":"The Musical Quarterly","ISSN":"0027-4631","issue":"1","issued":{"date-parts":[[1994]]},"page":"9-33","publisher":"Oxford University Press","source":"JSTOR","title":"Theory and Practice in \"Porgy and Bess\": The Gershwin-Schillinger Connection","title-short":"Theory and Practice in \"Porgy and Bess\"","type":"article-journal","URL":"https://www.jstor.org/stable/742491","volume":"78"}, + {"id":"naurHumanKnowingLanguage1992","author":[{"family":"Naur","given":"Peter"}],"citation-key":"naurHumanKnowingLanguage1992","container-title":"Computing: A Human Activity","issued":{"date-parts":[[1992]]},"page":"518–535","publisher":"ACM Press","title":"Human Knowing, Language and Discrete Structures","type":"chapter"}, + {"id":"naurProgrammingLanguagesAre1992","author":[{"family":"Naur","given":"Peter"}],"citation-key":"naurProgrammingLanguagesAre1992","container-title":"Computing: A Human Activity","issued":{"date-parts":[[1992]]},"page":"503–510","publisher":"ACM Press","title":"Programming languages are not languages – why `programming language' is a misleading designation","type":"chapter"}, + {"id":"nealeRoleMetaphorsUser1997","author":[{"family":"Neale","given":"Dennis C."},{"family":"Carroll","given":"John M."}],"citation-key":"nealeRoleMetaphorsUser1997","container-title":"Handbook of Human-Computer Interaction","edition":"Second","editor":[{"family":"Helander","given":"M."},{"family":"Landauer","given":"T. K."},{"family":"Prabhu","given":"P."}],"issued":{"date-parts":[[1997]]},"page":"441–462","publisher":"Elsevier","title":"The Role of Metaphors in User Interface Design","type":"chapter"}, + {"id":"nelsonComputerLibDream1987","author":[{"family":"Nelson","given":"Theodore H."}],"citation-key":"nelsonComputerLibDream1987","edition":"Rev Upd Su","ISBN":"0-914845-49-7","issued":{"date-parts":[[1987,10]]},"note":"Published: Paperback","publisher":"Microsoft Pr","title":"Computer Lib/Dream Machines (Tempus)","type":"book","URL":"http://www.worldcat.org/isbn/0914845497"}, + {"id":"neumarkIntroductionParadoxVoice2010","author":[{"family":"Neumark","given":"Norie"}],"citation-key":"neumarkIntroductionParadoxVoice2010","collection-title":"Leonardo Books","container-title":"Voice: Vocal Aesthetics in Digital Arts and Media","editor":[{"family":"Neumark","given":"Norie"},{"family":"Gibson","given":"Ross"},{"family":"Leeuwen","given":"Theo","non-dropping-particle":"van"}],"issued":{"date-parts":[[2010]]},"page":"xv–xxxiii","publisher":"MIT Press","title":"Introduction: The Paradox of Voice","type":"chapter"}, + {"id":"nevalainenComparisonThreeEye2004","author":[{"family":"Nevalainen","given":"Seppo"},{"family":"Sajaniemi","given":"Jorma"}],"citation-key":"nevalainenComparisonThreeEye2004","container-title":"Proceedings of Psychology of Programming Interest Group","issued":{"date-parts":[[2004]]},"title":"Comparison of Three Eye Tracking Devices in Psychology of Programming Research","type":"paper-conference"}, + {"id":"ngBigDataOptical2014","author":[{"family":"Ng","given":"Kia"},{"family":"McLean","given":"Alex"},{"family":"Marsden","given":"Alan"}],"citation-key":"ngBigDataOptical2014","container-title":"Proceedings of Electronic Visualisation and the Arts","DOI":"10.14236/ewic/eva2014.26","issued":{"date-parts":[[2014,7]]},"title":"Big Data Optical Music Recognition with Multi Images and Multi Recognisers","type":"paper-conference","URL":"http://dx.doi.org/10.14236/ewic/eva2014.26"}, + {"id":"ngColourMusicRealtime2014","author":[{"family":"Ng","given":"Kia"},{"family":"Armitage","given":"Joanne"},{"family":"McLean","given":"Alex"}],"citation-key":"ngColourMusicRealtime2014","container-title":"Proceedings of Electronic Visualisation and the Arts","DOI":"10.14236/ewic/eva2014.3","issued":{"date-parts":[[2014,7]]},"title":"The Colour of Music: Real-time Music Visualisation with Synaesthetic Sound-colour Mapping","type":"paper-conference","URL":"http://dx.doi.org/10.14236/ewic/eva2014.3"}, + {"id":"ngMusicMotionTransdomain2004","abstract":"This paper presents a framework called Music via Motion (MvM) designed for the transdomain mapping between physical movements of the performer(s) and multimedia events, translating activities from one creative domain to another-for example, from physical gesture to audio output. With a brief background of this domain and prototype designs, the paper describes a number of inter- and multidisciplinary collaborative works for interactive multimedia performances. These include a virtual musical instrument interface, exploring video-based tracking technology to provide an intuitive and nonintrusive musical interface, and sensor-based augmented instrument designs. The paper also describes a distributed multimedia-mapping server which allows multiplatform and multisensory integrations and presents a sample application which integrates a real-time face tracking system. Ongoing developments and plausible future explorations on stage augmentation with virtual and augmented realities as well as gesture analysis on the correlations of musical gesture and physical gesture are also discussed.","author":[{"family":"Ng","given":"K. C."}],"citation-key":"ngMusicMotionTransdomain2004","container-title":"Proceedings of the IEEE","DOI":"10.1109/jproc.2004.825885","ISSN":"0018-9219","issue":"4","issued":{"date-parts":[[2004,4]]},"page":"645–655","title":"Music via motion: transdomain mapping of motion and sound for interactive performances","type":"article-journal","URL":"http://dx.doi.org/10.1109/jproc.2004.825885","volume":"92"}, + {"id":"nisbettTellingMoreWe1977","abstract":"Evidence is reviewed which suggests that there may be little or no direct introspective access to higher order cognitive processes. Subjects are sometimes (a) unaware of the existence of a stimulus that importantly influenced a response, (b) unaware of the existence of the response, and (c) unaware that the stimulus has affected the response. It is proposed that when people attempt to report on their cognitive processes, that is, on the processes mediating the effects of a stimulus on a response, the do not do so on the basis of any true introspection. Instead, their reports are based on a priori, implicit casual theories or judgments about the extent to which a particular stimulus is a plausible cause of a given response. This suggests that though people may not be able to observe directly their cognitive processes, the will sometimes be able to report accurately about them. Accurate reports will occur when influential stimuli are salient and are plausible causes of the responses they produce, and will not occur the stimuli are not salient or are not plausible causes.","author":[{"family":"Nisbett","given":"Richard E."},{"family":"Wilson","given":"Timothy D."}],"citation-key":"nisbettTellingMoreWe1977","container-title":"Psychological Review","editor":[{"family":"Devivo","given":"Anita"},{"family":"Silver","given":"Amy"},{"family":"Felder","given":"Deborah S."},{"family":"Hayward","given":"Robert J."},{"family":"Patterson","given":"Kendall C."},{"family":"Redman","given":"Anne"},{"family":"Buchwald","given":"Alexander"},{"family":"Falmagne","given":"Rachel J."},{"family":"Krantz","given":"David H."},{"family":"Olson","given":"Gary M."},{"family":"Shiffrin","given":"Richard M."},{"family":"Smith","given":"Edward E."},{"family":"Theios","given":"John"},{"family":"Wiggins","given":"Jerry S."}],"issue":"3","issued":{"date-parts":[[1977,5]]},"note":"Published: Not available electronically","title":"Telling More Than We Can Know: Verbal Reports on Mental Processes","type":"article-journal","volume":"84"}, + {"id":"novelloPerceptualEvaluationMusic2006","author":[{"family":"Novello","given":"Alberto"},{"family":"McKinney","given":"Martin F."},{"family":"Kohlrausch","given":"Armin"}],"citation-key":"novelloPerceptualEvaluationMusic2006","container-title":"Proceedings of the Seventh Annual In- ternational Symposium on Music Information Retrieval: ISMIR 2006","issued":{"date-parts":[[2006]]},"title":"Perceptual evaluation of music similarity","type":"article-journal"}, + {"id":"ogbornDktr0WebDirt2022","abstract":"Sampling engine implemented in Web Audio API (rough re-creation of Dirt)","accessed":{"date-parts":[[2022,6,24]]},"author":[{"family":"Ogborn","given":"David"}],"citation-key":"ogbornDktr0WebDirt2022","genre":"JavaScript","issued":{"date-parts":[[2022,6,12]]},"original-date":{"date-parts":[[2016,5,4]]},"source":"GitHub","title":"dktr0/WebDirt","type":"book","URL":"https://github.com/dktr0/WebDirt"}, + {"id":"ogbornEstuaryBrowserbasedCollaborative2017","abstract":"This paper describes the initial design and development of Estuary, a browser-based collaborative projectional editing environment built on top of the popular TidalCycles language for the live coding of musical pattern. Key features of Estuary include a strict form of structure editing (making syntactical errors impossible), a click-only border-free approach to interface design, explicit notations to modulate the liveness of different parts of the code, and a server-based network collaboration system that can be used for many simultaneous collaborative live coding performances, as well as to present different views of the same live coding activity. Estuary has been developed using Reflex-DOM, a Haskell-based framework for web development whose strictness promises robustness and security advantages.","author":[{"family":"Ogborn","given":"David"},{"family":"Beverley","given":"Jamie"},{"family":"Navarro del Angel","given":"Luis"},{"family":"Tsabary","given":"Eldad"},{"family":"McLean","given":"Alex"}],"citation-key":"ogbornEstuaryBrowserbasedCollaborative2017","container-title":"Proceedings of the International Conference on Live Coding","event":"ICLC2017","event-place":"Morelia","issued":{"date-parts":[[2017]]},"language":"en","page":"11","publisher-place":"Morelia","source":"Zotero","title":"Estuary: Browser-based Collaborative Projectional Live Coding of Musical Patterns","type":"paper-conference"}, + {"id":"ogbornExtramurosMakingMusic2015","author":[{"family":"Ogborn","given":"David"},{"family":"Tsabary","given":"Eldad"},{"family":"Jarvis","given":"Ian"},{"family":"Cardenas","given":"Alexandra"},{"family":"McLean","given":"Alex"}],"citation-key":"ogbornExtramurosMakingMusic2015","container-title":"Proceedings of the First International Conference on Live Coding, University of Leeds, ICSRiM","issued":{"date-parts":[[2015]]},"title":"Extramuros: making music in a browser-based, language-neutral collaborative live coding environment","type":"paper-conference"}, + {"id":"ogbornLiveCodingScalable2014","abstract":"Live coding (Collins et al. 2003 and other articles in this special issue of Computer Music Journal) is the central performance practice of the Cybernetic Orchestra, a laptop orchestra at McMaster University in Hamilton, Ontario, Canada. Inspired by the idea of participatory culture, the ensemble has been made open to a diverse and ever changing roster of participants, and may be likened to a human laboratory exploring this question: How is live coding scalable onto larger groups of people coming from diverse backgrounds? This article presents the practices that have developed during the first three years of the Cybernetic Orchestra's existence, starting with a summary of our human organization and physical infrastructure. The EspGrid software, developed for enhanced network synchronization and sharing, is reviewed before a final section presents the live coding practices that have crystallized around this specific collective of people, equipment, and code.","author":[{"family":"Ogborn","given":"David"}],"citation-key":"ogbornLiveCodingScalable2014","container-title":"Computer Music Journal","DOI":"10.1162/comj_a_00217","issue":"1","issued":{"date-parts":[[2014,3]]},"page":"17–30","title":"Live Coding in a Scalable, Participatory Laptop Orchestra","type":"article-journal","URL":"http://dx.doi.org/10.1162/comj_a_00217","volume":"38"}, + {"id":"ohalaEthologicalPerspectiveCommon1984","abstract":"The author suggests that the following seemingly disparate phenomena have an underlying relationship: cross-language similarities in the intonation contours for statements versus questions, cross-cultural similarities in the vocal expression via intonation of attitude and affect, cross-language patterns in the use of tone, vowels, and consonants in \"sound symbolic' vocabulary , cross-species use of F0 in threatening or non threatening vocalizations, cross-cultural and cross-species use of certain facial expressions (involving distinct mouth shape), and the existence of sexual dimorphism in the vocal anatomy of humans (and certain non humans). He argues that all arise due to an innately specified \"frequency code', which associates high acoustic frequency with the primary meaning of \"small vocalizer ' and thus such secondary meanings as \"subordinate, submissive, non threatening, desirous of the receiver's goodwill , etc.' and associates with low acoustic frequency the primary meaning of \"large vocalizer ' and such secondary meanings as \"dominant, aggressive, threatening, etc.'","author":[{"family":"Ohala","given":"J. J."}],"citation-key":"ohalaEthologicalPerspectiveCommon1984","container-title":"Phonetica","ISSN":"0031-8388","issue":"1","issued":{"date-parts":[[1984]]},"page":"1–16","PMID":"6204347","title":"An ethological perspective on common cross-language utilization of F0 of voice.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/6204347","volume":"41"}, + {"id":"ohrmanSingingLoomImportance","abstract":"This paper traces Roman acoustic experience of domestic soundscapes, particularly the soundscape of textile production (especially weaving) through a combination of philological analysis of Latin poetry and experimental archaeology. Based on a comprehensive survey of textile sound-mimicking in Latin poetry, the paper highlights consistent features of Roman domestic soundscapes rather than the soundscape of any one specific setting, site, or period. Spectrographic anlaysis of audio recordings of weaving experiments conducted at the Centre for Textile Research in Copenhagen provides the experimental archaeological basis for the literary analysis. Passages from Tibullus’ Elegies 2.1 and the Ciris provide representative examples of literary sound-mimicking of craft processes.","author":[{"family":"Öhrman","given":"Magdalena"}],"citation-key":"ohrmanSingingLoomImportance","language":"en","page":"8","source":"Zotero","title":"The Singing Loom: The Importance of Textile Production in the Roman Domestic Soundscape","type":"article-journal"}, + {"id":"ohrmanSingingLoomImportance2018","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Ohrman","given":"Magdalena"}],"citation-key":"ohrmanSingingLoomImportance2018","container-title":"Archaeoacoustics lll : Proceedings of the Third International Multidisciplinary conference","issued":{"date-parts":[[2018,5,3]]},"language":"en","page":"143-150","publisher":"OTS Foundation","source":"repository.uwtsd.ac.uk","title":"The Singing Loom: The Importance of Textile Production in the Roman Domestic Soundscape","title-short":"The singing loom","type":"paper-conference","URL":"http://www.otsf.org/contact.html","volume":"3"}, + {"id":"okabeSpatialTessellationsConcepts1992","author":[{"family":"Okabe","given":"Atsuyuki"},{"family":"Boots","given":"Barry"},{"family":"Sugihara","given":"Kokichi"}],"citation-key":"okabeSpatialTessellationsConcepts1992","event-place":"New York, NY, USA","issued":{"date-parts":[[1992]]},"publisher":"John Wiley & Sons, Inc.","publisher-place":"New York, NY, USA","title":"Spatial tessellations: concepts and applications of Voronoi diagrams","type":"book"}, + {"id":"okabeSpatialTessellationsConcepts2000","author":[{"family":"Okabe","given":"Atsuyuki"},{"family":"Boots","given":"Barry"},{"family":"Sugihara","given":"Kokichi"},{"family":"Chiu","given":"Sung N."}],"citation-key":"okabeSpatialTessellationsConcepts2000","collection-title":"Series in Probability and Statistics","edition":"Second","issued":{"date-parts":[[2000]]},"publisher":"John Wiley and Sons, Inc.","title":"Spatial Tessellations: Concepts and Applications of Voronoi Diagrams","type":"book"}, + {"id":"oliverCriticalEngineeringManifesto","abstract":"The Critical Engineer considers Engineering to be the most transformative language of our time, shaping the way we move, communicate and think. It is the work of the Critical Engineer to study and exploit this language, exposing its influence. The Critical Engineer considers any technology depended upon to be both a challenge and a threat. The greater the dependence on a technology the greater the need to study and expose its inner workings, regardless of ownership or legal provision. The Critical Engineer raises awareness that with each technological advance our techno-political literacy is challenged. The Critical Engineer deconstructs and incites suspicion of rich user experiences. The Critical Engineer looks beyond the 'awe of implementation' to determine methods of influence and their specific effects. The Critical Engineer recognises that each work of engineering engineers its user, proportional to that user's dependency upon it. The Critical Engineer expands 'machine' to describe interrelationships encompassing devices, bodies, agents, forces and networks. The Critical Engineer observes the space between the production and consumption of technology. Acting rapidly to changes in this space, the Critical Engineer serves to expose moments of imbalance and deception. The Critical Engineer looks to the history of art, architecture, activism, philosophy and invention and finds exemplary works of Critical Engineering. Strategies, ideas and agendas from these disciplines will be adopted, re-purposed and deployed. The Critical Engineer notes that written code expands into social and psychological realms, regulating behaviour between people and the machines they interact with. By understanding this, the Critical Engineer seeks to reconstruct user-constraints and social action through means of digital excavation. The Critical Engineer considers the exploit to be the most desirable form of exposure.","author":[{"family":"Oliver","given":"Julian"},{"family":"Savičić","given":"Gordan"},{"family":"Vasiliev","given":"Danja"}],"citation-key":"oliverCriticalEngineeringManifesto","title":"The Critical Engineering Manifesto","type":"book","URL":"http://criticalengineering.org/"}, + {"id":"ongAfricanTalkingDrums1977","author":[{"family":"Ong","given":"Walter J."}],"citation-key":"ongAfricanTalkingDrums1977","container-title":"New Literary History","DOI":"10.2307/468293","ISSN":"00286087","issue":"3","issued":{"date-parts":[[1977]]},"page":"411–429","title":"African Talking Drums and Oral Noetics","type":"article-journal","URL":"http://dx.doi.org/10.2307/468293","volume":"8"}, + {"id":"OrderThingsPocketbooks2001","abstract":"Concrete poetry has been called the last great episode of Modernism which continued the experiments of Futurism, Dada, and Constructivism in poetry. \"The Order of Things\" presents the work of Scottish Concrete and sound poets within a national and international perspective, and is accompanied by an audio mini-CD of poetry.","citation-key":"OrderThingsPocketbooks2001","edition":"Min Pap/Co","ISBN":"0-7486-6290-1","issued":{"date-parts":[[2001,7]]},"note":"Published: Paperback","publisher":"Polygon","title":"The Order of Things (Pocketbooks)","type":"book","URL":"http://www.worldcat.org/isbn/0748662901"}, + {"id":"osakaConstructionTimbreTheory2004","abstract":"Since the 20 century, timbre has become an important factor in music composition. However, no effective timbre theory for music composition has been yet developed. In this paper, firstly standpoints are described for previous timbre theories. Then the requirements for a new timbre theory are discussed: 1) How timbre should be categorized, 2) hierarchical structure and its self-similar representation, 3) extension of previous timbre (music) representation, 4) discrimination of embedded and exposed structure, and 5) definition of operation and grammatical structure.","author":[{"family":"Osaka","given":"Naotoshi"}],"citation-key":"osakaConstructionTimbreTheory2004","issued":{"date-parts":[[2004]]},"note":"Published: Proceedings of ICMC","title":"Toward Construction of a Timbre Theory for Music Composition","type":"article-journal"}, + {"id":"osullivanRealWorldHaskell2008","author":[{"family":"O'Sullivan","given":"Bryan"},{"family":"Goerzen","given":"John"},{"family":"Stewart","given":"Donald B."}],"citation-key":"osullivanRealWorldHaskell2008","issued":{"date-parts":[[2008]]},"publisher":"O'Reilly Media","title":"Real World Haskell","type":"book"}, + {"id":"OxfordHandbookAlgorithmic2018","abstract":"Algorithmic music appears to be at a turning point in its history, with many new systems and communities of practice developing together, as vibrant musical culture. This handbook brings together dozens of leading researchers and practitioners in the field, blending technical, artistic, cultural and scientific viewpoints into a whole that considers the making of algorithmic music as a rich, and essentially human activity. The book is organised into four sections, the first grounding the topic in the history, philosophy and psychology of algorithmic music. The second section asks 'what can algorithms in music do?', finding answers in computer science, mathematics, machine learning, bio-inspired computation, manipulation of pattern, computational creativity, and live coding. The third section focuses on the music maker, and the role of algorithms in supporting network music, sonification, music interface design, music in computer games, and spatialisation. The final section opens out to culture at large, and considers algorithmic music in terms of its audience reception, sociology, education, politics and the potential for mass consumption. Perhaps just as importantly, these sections are interleaved with reflective pieces from leading practitioners in the field, allowing us to to grasp the pragmatics of making music with algorithms. Combined, these diverse standpoints provide an absorbing, authoritative survey of research and practice from across the algorithmic music field.","accessed":{"date-parts":[[2018,4,25]]},"citation-key":"OxfordHandbookAlgorithmic2018","DOI":"10.1093/oxfordhb/9780190226992.001.0001","issued":{"date-parts":[[2018,2,22]]},"language":"en","source":"www.oxfordhandbooks.com","title":"The Oxford Handbook of Algorithmic Music","type":"article-journal","URL":"http://www.oxfordhandbooks.com/view/10.1093/oxfordhb/9780190226992.001.0001/oxfordhb-9780190226992"}, + {"id":"padillaImprovingOMRDigital2014","author":[{"family":"Padilla","given":"Victor"},{"family":"Marsden","given":"Alan"},{"family":"McLean","given":"Alex"},{"family":"Ng","given":"Kia"}],"citation-key":"padillaImprovingOMRDigital2014","container-title":"Proceedings of the ACM/IEEE International Digital Libraries for Musicology workshop","issued":{"date-parts":[[2014]]},"page":"1–8","publisher":"ACM","title":"Improving OMR for Digital Music Libraries with Multiple Recognisers and Multiple Sources","type":"paper-conference"}, + {"id":"padillaImprovingOpticalMusic2015","author":[{"family":"Padilla","given":"Victor"},{"family":"McLean","given":"Alex"},{"family":"Marsden","given":"Alan"},{"family":"Ng","given":"Kia"}],"citation-key":"padillaImprovingOpticalMusic2015","container-title":"ISMIR","issued":{"date-parts":[[2015]]},"page":"517–523","title":"Improving Optical Music Recognition by Combining Outputs from Multiple Sources.","type":"paper-conference"}, + {"id":"paivioMentalRepresentationsDual1990","author":[{"family":"Paivio","given":"Allan"}],"citation-key":"paivioMentalRepresentationsDual1990","ISBN":"0-19-506666-9","issued":{"date-parts":[[1990,9]]},"note":"Published: Paperback","publisher":"Oxford University Press, USA","title":"Mental Representations: A Dual Coding Approach (Oxford Psychology Series)","type":"book","URL":"http://www.worldcat.org/isbn/0195066669"}, + {"id":"papertMindstormsChildrenComputers1993","author":[{"family":"Papert","given":"Seymour A."}],"citation-key":"papertMindstormsChildrenComputers1993","edition":"2","ISBN":"0-465-04674-6","issued":{"date-parts":[[1993,8]]},"note":"Published: Paperback","publisher":"Basic Books","title":"Mindstorms: Children, Computers, And Powerful Ideas","type":"book","URL":"http://www.worldcat.org/isbn/0465046746"}, + {"id":"parkinsonInterfacingNight2014","author":[{"family":"Parkinson","given":"Adam"},{"family":"McLean","given":"Alex"}],"citation-key":"parkinsonInterfacingNight2014","container-title":"Proceedings of the 2nd International Conference on Live Interfaces","issued":{"date-parts":[[2014]]},"title":"Interfacing with the Night","type":"paper-conference"}, + {"id":"parmarLiveLoomAlex2020","abstract":"ICLC 2020, University of Limerick, Ireland. 6 Feb 2020.","accessed":{"date-parts":[[2021,6,16]]},"author":[{"family":"Parmar","given":"Robin"}],"citation-key":"parmarLiveLoomAlex2020","issued":{"date-parts":[[2020,2,6]]},"medium":"photo","source":"Flickr","title":"\"The Live Loom\" by Alex McLean","type":"graphic","URL":"https://www.flickr.com/photos/rparmar/49565580827/"}, + {"id":"parryCowboyMutantGolfers2011","abstract":"Animation is a significant form in children's lives. Animated films and television programs make up a substantial part of their experience of narratives and as such are an important resource in their talk and play. Making space in schools for this aspect of children's repertoires of narrative, even in the context of animated film production, can be challenging. In this article I explore some of the barriers to incorporating children's experiences of animation and then offer an account of an activity in which six fifth-year children were encouraged to draw on their popular culture experiences of animation in their text productions. These data demonstrate the way the children were able to create meaning using the affordances of all the modes of animation, revealing their implicit understandings of narrative conventions. The data raise questions regarding what constitutes good and acceptable storytelling in animated films in school and how to accommodate collaborative, hybrid, and transgressive texts and text production in the primary classroom. Finally, I examine the way in which the currency of popular culture affects the hierarchy of learners and the necessity of finding new ways to enable children to share their funds of knowledge about animation in the classroom.","author":[{"family":"Parry","given":"Becky"}],"citation-key":"parryCowboyMutantGolfers2011","container-title":"International Journal of Learning and Media","DOI":"10.1162/ijlm_a_00074","issue":"3","issued":{"date-parts":[[2011,7]]},"page":"43–53","title":"Cowboy Mutant Golfers and Dreamcatcher Dogs: Making Space for Popular Culture in Animation Production with Children","type":"article-journal","URL":"http://dx.doi.org/10.1162/ijlm_a_00074","volume":"3"}, + {"id":"parryMindingGapsTeachers2010","author":[{"family":"Parry","given":"Becky"}],"citation-key":"parryMindingGapsTeachers2010","collection-title":"New Literacies and Digital Epistemologies","container-title":"Adolescents' Online Literacies: Connecting Classrooms, Digital Media, and Popular Culture","editor":[{"family":"Alvermann","given":"Donna E."}],"issued":{"date-parts":[[2010]]},"page":"183–202","publisher":"Peter Lang Publishing","title":"Minding the gaps: teachers' cultures, students' cultures","type":"chapter","volume":"39"}, + {"id":"patelAcousticPerceptualComparison2003","author":[{"family":"Patel","given":"Aniruddh D."},{"family":"Iversen","given":"John R."}],"citation-key":"patelAcousticPerceptualComparison2003","container-title":"Proceedings of the 15th International Congress of Phonetic Sciences (ICPhS)","issued":{"date-parts":[[2003]]},"title":"Acoustic and Perceptual Comparison of Speech and Drum Sounds in the North Indian Tabla Tradition: An Empirical Study of Sound Symbolism","type":"paper-conference"}, + {"id":"patelEvolutionaryNeuroscienceMusical2014","abstract":"a perceived periodic pulse that structures the perception of musical rhythm and which serves as a framework for synchronized movement to music. What are the neural mechanisms of musical beat perception, and how did they evolve? One view, which dates back to Darwin and implicitly informs some current models of beat perception, is that the relevant neural mechanisms are relatively general and are widespread among animal species. On the basis of recent neural and cross-species data on musical beat processing, this paper argues for a different view. Here we argue that beat perception is a complex brain function involving temporally-precise communication between auditory regions and motor planning regions of the cortex (even in the absence of overt movement). More specifically, we propose that simulation of periodic movement in motor planning regions provides a neural signal that helps the auditory system predict the timing of upcoming beats. This \"action simulation for auditory prediction\" (ASAP) hypothesis leads to testable predictions. We further suggest that ASAP relies on dorsal auditory pathway connections between auditory regions and motor planning regions via the parietal cortex, and suggest that these connections may be stronger in humans than in non-human primates due to the evolution of vocal learning in our lineage. This suggestion motivates cross-species research to determine which species are capable of human-like beat perception, i.e., beat perception that involves accurate temporal prediction of beat times across a fairly broad range of tempi.","author":[{"family":"Patel","given":"Aniruddh D."},{"family":"Iversen","given":"John R."}],"citation-key":"patelEvolutionaryNeuroscienceMusical2014","container-title":"Frontiers in systems neuroscience","DOI":"10.3389/fnsys.2014.00057","ISSN":"1662-5137","issued":{"date-parts":[[2014]]},"PMCID":"PMC4026735","PMID":"24860439","title":"The evolutionary neuroscience of musical beat perception: the Action Simulation for Auditory Prediction (ASAP) hypothesis.","type":"article-journal","URL":"http://dx.doi.org/10.3389/fnsys.2014.00057","volume":"8"}, + {"id":"patelLanguageMusicSyntax2003","abstract":"The comparative study of music and language is drawing an increasing amount of research interest. Like language, music is a human universal involving perceptually discrete elements organized into hierarchically structured sequences. Music and language can thus serve as foils for each other in the study of brain mechanisms underlying complex sound processing, and comparative research can provide novel insights into the functional and neural architecture of both domains. This review focuses on syntax, using recent neuroimaging data and cognitive theory to propose a specific point of convergence between syntactic processing in language and music. This leads to testable predictions, including the prediction that that syntactic comprehension problems in Broca's aphasia are not selective to language but influence music perception as well.","author":[{"family":"Patel","given":"A. D."}],"citation-key":"patelLanguageMusicSyntax2003","container-title":"Nature Neuroscience","DOI":"10.1038/nn1082","ISSN":"1097-6256","issue":"7","issued":{"date-parts":[[2003,6]]},"page":"674–681","PMID":"12830158","title":"Language, music, syntax and the brain","type":"article-journal","URL":"http://dx.doi.org/10.1038/nn1082","volume":"6"}, + {"id":"patelMusicalRhythmLinguistic2006","author":[{"family":"Patel","given":"A. D."}],"citation-key":"patelMusicalRhythmLinguistic2006","container-title":"Music Perception","issue":"24","issued":{"date-parts":[[2006]]},"page":"99–104","title":"Musical rhythm, linguistic rhythm, and human evolution","type":"article-journal"}, + {"id":"patelMusicLanguageBrain2007","abstract":"In the first comprehensive study of the relationship between music and language from the standpoint of cognitive neuroscience, Aniruddh D. Patel challenges the widespread belief that music and language are processed independently. Since Plato's time, the relationship between music and language
has attracted interest and debate from a wide range of thinkers. Recently, scientific research on this topic has been growing rapidly, as scholars from diverse disciplines, including linguistics, cognitive science, music cognition, and neuroscience are drawn to the music-language interface as one
way to explore the extent to which different mental abilities are processed by separate brain mechanisms. Accordingly, the relevant data and theories have been spread across a range of disciplines. This volume provides the first synthesis, arguing that music and language share deep and critical
connections, and that comparative research provides a powerful way to study the cognitive and neural mechanisms underlying these uniquely human abilities.","author":[{"family":"Patel","given":"Aniruddh D."}],"citation-key":"patelMusicLanguageBrain2007","edition":"First","ISBN":"0-19-512375-1","issued":{"date-parts":[[2007,12]]},"note":"Published: Hardcover","publisher":"Oxford University Press, USA","title":"Music, Language, and the Brain","type":"book","URL":"http://www.worldcat.org/isbn/0195123751"}, + {"id":"patelRhythmLanguageMusic2003","abstract":"Rhythm is widely acknowledged to be an important feature of both speech and music, yet there is little empirical work comparing rhythmic organization in the two domains. One approach to the empirical comparison of rhythm in language and music is to break rhythm down into subcomponents and compare each component across domains. This approach reveals empirical evidence that rhythmic grouping is an area of overlap between language and music, but no empirical support for the long-held notion that language has periodic structure comparable to that of music. Focusing on the statistical patterning of event duration, new evidence suggests that the linguistic rhythm of a culture leaves an imprint on its musical rhythm. The latter finding suggests that one effective strategy for comparing rhythm in language and music is to determine if differences in linguistic rhythm between cultures are reflected in differences in musical rhythm.","author":[{"family":"Patel","given":"Aniruddh D."}],"citation-key":"patelRhythmLanguageMusic2003","container-title":"Annals of the New York Academy of Sciences","DOI":"10.1196/annals.1284.015","ISSN":"0077-8923","issue":"1","issued":{"date-parts":[[2003,11]]},"page":"140–143","PMID":"14681127","title":"Rhythm in language and music: parallels and differences.","type":"article-journal","URL":"http://dx.doi.org/10.1196/annals.1284.015","volume":"999"}, + {"id":"pattersonReviewingDefinitionTimbre2010","abstract":"The purpose of this paper is to draw attention to the definition of timbre as it pertains to the vowels of speech. There are two forms of size information in these source-filter sounds, information about the size of the excitation mechanism (the vocal folds), and information about the size of the resonators in the vocal tract that filter the excitation before it is projected into the air. The current definitions of pitch and timbre treat the two forms of size information differently. In this paper, we argue that the perception of speech sounds by humans suggests that the definition of timbre would be more useful if it grouped the size variables together and separated the pair of them from the remaining properties of these sounds.","author":[{"family":"Patterson","given":"Roy D."},{"family":"Walters","given":"Thomas C."},{"family":"Monaghan","given":"Jessica J. M."},{"family":"Gaudrain","given":"Etienne"}],"citation-key":"pattersonReviewingDefinitionTimbre2010","container-title":"The Neurophysiological Bases of Auditory Perception","DOI":"10.1007/978-1-4419-5686-6_21","editor":[{"family":"Lopez-Poveda","given":"Enrique A."},{"family":"Meddis","given":"Ray"},{"family":"Palmer","given":"Alan R."}],"event-place":"New York, NY","ISBN":"978-1-4419-5685-9","issued":{"date-parts":[[2010]]},"page":"223–233","publisher":"Springer New York","publisher-place":"New York, NY","title":"Reviewing the Definition of Timbre as it Pertains to the Perception of Speech and Musical Sounds","type":"chapter","URL":"http://dx.doi.org/10.1007/978-1-4419-5686-6_21"}, + {"id":"paulDigitalArt2003","abstract":"Digital technology has revolutionized the way we produce and experience art today. Not only have traditional forms of art such as printing, painting, photography and sculpture been transformed by digital techniques and media, but entirely new forms such as net art, software art, digital installation and virtual reality have emerged as recognized artistic practices, collected by major museums, institutions and private collectors the world over. Here Christiane Paul surveys the developments in digital art from its appearance in the early 1990s right up to the present day, and looks ahead to what the future may hold. Drawing a distinction between work that uses digital technology as a tool to produce traditional forms and work that uses it as a medium to create new types of art, she discusses all the key artists and works. The book explores themes addressed and raised by the art, such as viewer interaction, artificial life and intelligence, political and social activism, networks and telepresence, as well as issues such as the collection, presentation and preservation of digital art, the virtual museum, and ownership and copyright.","author":[{"family":"Paul","given":"Christiane"}],"citation-key":"paulDigitalArt2003","edition":"1st edition","event-place":"London ; New York, N.Y","ISBN":"978-0-500-20367-5","issued":{"date-parts":[[2003,7,1]]},"language":"English","number-of-pages":"224","publisher":"Thames & Hudson Ltd","publisher-place":"London ; New York, N.Y","source":"Amazon","title":"Digital Art","type":"book"}, + {"id":"pearceConstructionEvaluationStatistical2005","author":[{"family":"Pearce","given":"Marcus"}],"citation-key":"pearceConstructionEvaluationStatistical2005","issued":{"date-parts":[[2005]]},"publisher":"Department of Computing, City University, London, UK","title":"The Construction and Evaluation of Statistical Models of Melodic Structure in Music Perception and Composition","type":"thesis"}, + {"id":"pearceEvaluatingCognitiveModels2007","author":[{"family":"Pearce","given":"Marcus"},{"family":"Wiggins","given":"Geraint"}],"citation-key":"pearceEvaluatingCognitiveModels2007","container-title":"International Joint Workshop on Computational Creativity","issued":{"date-parts":[[2007]]},"page":"73–80","title":"Evaluating Cognitive Models of Musical Composition","type":"paper-conference"}, + {"id":"pearceSelectedObservationsAmusia2005","abstract":"Amusia appears primarily as a defect in processing pitch. The deficit extends to musical memory and recognition, singing and timing of music. Clinical studies of acquired brain lesions show that dysphasia is not necessarily accompanied by amusia, and acquired amusia without aphasia has been reported. These dissociations suggest some degree of autonomy in the function of these mechanisms.","author":[{"family":"Pearce","given":"J. M."}],"citation-key":"pearceSelectedObservationsAmusia2005","container-title":"European neurology","DOI":"10.1159/000089606","ISSN":"0014-3022","issue":"3","issued":{"date-parts":[[2005]]},"page":"145–148","PMID":"16282692","title":"Selected observations on amusia.","type":"article-journal","URL":"http://dx.doi.org/10.1159/000089606","volume":"54"}, + {"id":"pecherSensorimotorSimulationsUnderlie2004","abstract":"According to the perceptual symbols theory (Barsalou, 1999), sensorimotor simulations underlie the representation of concepts. Simulations are componential in the sense that they vary with the context in which the concept is presented. In the present study, we investigated whether representations are affected by recent experiences with a concept. Concept names (e.g., APPLE) were presented twice in a property verification task with a different property on each occasion. The two properties were either from the same perceptual modality (e.g., green, shiny) or from different modalities (e.g., tart, shiny). All stimuli were words. There was a lag of several intervening trials between the first and second presentation. Verification times and error rates for the second presentation of the concept were higher if the properties were from different modalities than if they were from the same modality.","author":[{"family":"Pecher","given":"D."},{"family":"Zeelenberg","given":"R."},{"family":"Barsalou","given":"L. W."}],"citation-key":"pecherSensorimotorSimulationsUnderlie2004","container-title":"Psychonomic bulletin & review","ISSN":"1069-9384","issue":"1","issued":{"date-parts":[[2004,2]]},"page":"164–167","PMID":"15117003","title":"Sensorimotor simulations underlie conceptual representations: modality-specific effects of prior activation.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/15117003","volume":"11"}, + {"id":"PenelopeSlack","accessed":{"date-parts":[[2021,3,3]]},"citation-key":"PenelopeSlack","title":"Penelope | Slack","type":"webpage","URL":"https://app.slack.com/client/T2K15Q9A5/C2K1544LF"}, + {"id":"pereiraPeterGardenforsConceptual2007","author":[{"family":"Pereira","given":"Alfredo"}],"citation-key":"pereiraPeterGardenforsConceptual2007","container-title":"Minds and Machines","DOI":"10.1007/s11023-007-9075-1","issue":"4","issued":{"date-parts":[[2007,12]]},"page":"493–496","title":"Peter Gärdenfors, Conceptual Spaces: The Geometry of Thought","type":"article-journal","URL":"http://dx.doi.org/10.1007/s11023-007-9075-1","volume":"17"}, + {"id":"PerformanceEcosystemsEcological2007","citation-key":"PerformanceEcosystemsEcological2007","container-title":"Proceedings of EMS","issued":{"date-parts":[[2007]]},"note":"Published: Online; http://www.ems-network.org/IMG/pdf_WatersEMS07.pdf","title":"Performance Ecosystems: Ecological approaches to musical interaction","type":"paper-conference"}, + {"id":"petittoBabyHandsThat2004","abstract":"The \"ba, ba, ba\" sound universal to babies' babbling around 7 months captures scientific attention because it provides insights into the mechanisms underlying language acquisition and vestiges of its evolutionary origins. Yet the prevailing mystery is what is the biological basis of babbling, with one hypothesis being that it is a non-linguistic motoric activity driven largely by the baby's emerging control over the mouth and jaw, and another being that it is a linguistic activity reflecting the babies' early sensitivity to specific phonetic-syllabic patterns. Two groups of hearing babies were studied over time (ages 6, 10, and 12 months), equal in all developmental respects except for the modality of language input (mouth versus hand): three hearing babies acquiring spoken language (group 1: \"speech-exposed\") and a rare group of three hearing babies acquiring sign language only, not speech (group 2: \"sign-exposed\"). Despite this latter group's exposure to sign, the motoric hypothesis would predict similar hand activity to that seen in speech-exposed hearing babies because language acquisition in sign-exposed babies does not involve the mouth. Using innovative quantitative Optotrak 3-D motion-tracking technology, applied here for the first time to study infant language acquisition, we obtained physical measurements similar to a speech spectrogram, but for the hands. Here we discovered that the specific rhythmic frequencies of the hands of the sign-exposed hearing babies differed depending on whether they were producing linguistic activity, which they produced at a low frequency of approximately 1 Hz, versus non-linguistic activity, which they produced at a higher frequency of approximately 2.5 Hz - the identical class of hand activity that the speech-exposed hearing babies produced nearly exclusively. Surprisingly, without benefit of the mouth, hearing sign-exposed babies alone babbled systematically on their hands. We conclude that babbling is fundamentally a linguistic activity and explain why the differentiation between linguistic and non-linguistic hand activity in a single manual modality (one distinct from the human mouth) could only have resulted if all babies are born with a sensitivity to specific rhythmic patterns at the heart of human language and the capacity to use them.","author":[{"family":"Petitto","given":"L. A."},{"family":"Holowka","given":"S."},{"family":"Sergio","given":"L. E."},{"family":"Levy","given":"B."},{"family":"Ostry","given":"D. J."}],"citation-key":"petittoBabyHandsThat2004","container-title":"Cognition","DOI":"10.1016/j.cognition.2003.10.007","ISSN":"0010-0277","issue":"1","issued":{"date-parts":[[2004,8]]},"page":"43–73","PMID":"15110725","title":"Baby hands that move to the rhythm of language: hearing babies acquiring sign languages babble silently on the hands.","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.cognition.2003.10.007","volume":"93"}, + {"id":"petreMentalImageryProgram1999","abstract":"There is widespread anecdotal evidence that expert programmers make use of visual mental images when they are designing programs. This evidence is used to justify the use of diagrams and visual programming languages during software design. This paper reports the results of two studies. In the first, expert programmers were directly questioned regarding the nature of their mental representations while they were engaged in a design task. This investigative technique was used with the explicit intention of eliciting introspective reports of mental imagery. In the second, users of a visual programming language responded to a questionnaire in which they were asked about cognitive processes. The resulting transcripts displayed a considerable number of common elements. These suggest that software design shares many characteristics of more concrete design disciplines. The reports from participants in the two studies, together with previous research into imagery use, indicate potential techniques for further investigation of software development support tools and design strategies. 1.","author":[{"family":"Petre","given":"Marian"},{"family":"Blackwell","given":"Alan F."}],"citation-key":"petreMentalImageryProgram1999","container-title":"International Journal of Human-Computer Studies","issued":{"date-parts":[[1999]]},"page":"7–30","title":"Mental imagery in program design and visual programming","type":"article-journal","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.41.1603","volume":"51"}, + {"id":"petriCommunicationAutomata1966","author":[{"family":"Petri","given":"C. A."}],"citation-key":"petriCommunicationAutomata1966","issued":{"date-parts":[[1966,1]]},"publisher":"Applied Data Research Inc.","title":"Communication with automata","type":"report"}, + {"id":"pettyWarpWeightedLooms2014","abstract":"This thesis examines the warp weighted loom during the Anglo-Saxon and Viking eras in England through archaeological, linguistic, and art evidence, supported by similar information about the loom from Northern Continental Europe. Some evidence from other parts of the world where this specific type of loom was used is also included for clarity. In order to further understanding of the possible functioning and abilities of the loom, modern individuals with experience weaving with this early medieval technology were sought out to answer a questionnaire. The analysis of data gathered is supported with evidence from interviews of some of the respondents. The weavers who answered the questionnaire were primarily associated with the living history or re-enactment movements; therefore a history of these movements and their goals is also included. An analysis of the responses to the questionnaire, including thoughts about how these answers might advance academic understanding of the loom, completes the thesis.","accessed":{"date-parts":[[2018,8,20]]},"author":[{"family":"Petty","given":"Christina"}],"citation-key":"pettyWarpWeightedLooms2014","container-title":"[Thesis]. Manchester, UK: The University of Manchester; 2014.","issued":{"date-parts":[[2014,7,10]]},"language":"en","title":"Warp Weighted Looms: Then and Now Anglo-Saxon and Viking Archaeological Evidence and Modern Practitioners","title-short":"Warp Weighted Looms","type":"webpage","URL":"https://www.escholar.manchester.ac.uk/uk-ac-man-scw:229035"}, + {"id":"phillips-silverHearingWhatBody2007","abstract":"Phillips-Silver and Trainor (Phillips-Silver, J., Trainor, L.J., (2005). Feeling the beat: movement influences infants' rhythm perception. Science, 308, 1430) demonstrated an early cross-modal interaction between body movement and auditory encoding of musical rhythm in infants. Here we show that the way adults move their bodies to music influences their auditory perception of the rhythm structure. We trained adults, while listening to an ambiguous rhythm with no accented beats, to bounce by bending their knees to interpret the rhythm either as a march or as a waltz. At test, adults identified as similar an auditory version of the rhythm pattern with accented strong beats that matched their previous bouncing experience in comparison with a version whose accents did not match. In subsequent experiments we showed that this effect does not depend on visual information, but that movement of the body is critical. Parallel results from adults and infants suggest that the movement-sound interaction develops early and is fundamental to music processing throughout life.","author":[{"family":"Phillips-Silver","given":"Jessica"},{"family":"Trainor","given":"Laurel J."}],"citation-key":"phillips-silverHearingWhatBody2007","container-title":"Cognition","DOI":"10.1016/j.cognition.2006.11.006","ISSN":"0010-0277","issue":"3","issued":{"date-parts":[[2007,12]]},"page":"533–546","PMID":"17196580","title":"Hearing what the body feels: auditory encoding of rhythmic movement.","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.cognition.2006.11.006","volume":"105"}, + {"id":"PianoRoll2017","abstract":"A piano roll is a music storage medium used to operate a player piano, piano player or reproducing piano. A piano roll is a continuous roll of paper with perforations (holes) punched into it. The perforations represent note control data. The roll moves over a reading system known as a 'tracker bar' and the playing cycle for each musical note is triggered when a perforation crosses the bar and is read.\n\nThe majority of piano rolls play on three distinct musical scales. The 65-note (with a playing range of A1 to C♯7) format was introduced in 1896 in the USA specifically for piano music. In 1900 an American format playing all 88 notes (A0 to C8) of the standard piano scale was introduced. In 1902 a German 72-note scale (F1, G1 to E7) was introduced. All of these scales were subject to being operated by piano rolls of varying dimensions. The 1908 Buffalo Convention of US manufacturers standardized the US industry to the 88-note scale and fixed the physical dimensions for that scale.\nPiano rolls were in continuous mass production from around 1896 to 2008, and are still available today, with QRS Music claiming to have 45,000 titles available with \"new titles being added on a regular basis\". Largely replacing piano rolls, which are no longer mass-produced today, MIDI files represent a modern way in which musical performance data can be stored. MIDI files accomplish digitally and electronically what piano rolls do mechanically. Software for editing a performance stored as MIDI data often has a feature to show the music in a piano roll representation.\nThe first paper rolls were used commercially by Welte & Sons in their Orchestrions beginning in 1883.\nA rollography is a listing of piano rolls, especially made by a single performer, analogous to a discography.","accessed":{"date-parts":[[2017,4,12]]},"citation-key":"PianoRoll2017","container-title":"Wikipedia","issued":{"date-parts":[[2017,3,6]]},"language":"en","note":"Page Version ID: 768942539","source":"Wikipedia","title":"Piano roll","type":"entry-encyclopedia","URL":"https://en.wikipedia.org/w/index.php?title=Piano_roll&oldid=768942539"}, + {"id":"pierrecoupriGraphicalRepresentationAnalytical2004","abstract":"When, in 1998, I began my research into the analysis of electroacoustic music, analysis and representation were two distinct disciplines. One was an integral part of music research and the other was just a possible option for publication.","author":[{"family":"Pierre Coupri","given":"E."}],"citation-key":"pierrecoupriGraphicalRepresentationAnalytical2004","container-title":"Organised Sound","DOI":"10.1017/s1355771804000147","issue":"01","issued":{"date-parts":[[2004]]},"page":"109–113","title":"Graphical representation: an analytical and publication tool for electroacoustic music","type":"article-journal","URL":"http://dx.doi.org/10.1017/s1355771804000147","volume":"9"}, + {"id":"pillsburyPlaceMovementConsciousness1911","author":[{"family":"Pillsbury","given":"W. B."}],"citation-key":"pillsburyPlaceMovementConsciousness1911","container-title":"Psychological review","issued":{"date-parts":[[1911]]},"page":"83–99","title":"The place of movement in consciousness","type":"article-journal","volume":"18"}, + {"id":"PindarPaeansReading2001","abstract":"The paean, or sacred hymn to Apollo, had a central place in the song-dance culture of classical Greece. The most celebrated examples of the genre in antiquity were Pindar's paeans. These became known to twentieth century scholars thanks to the discovery of papyrus fragments; this book offers the first comprehensive re-evaluation of the poems. It includes the Greek text and translation of all the paeans of Pindar with a supplement comprising fragments from poems of uncertain genres. Ian Rutherford accompanies each fragment with an interpretation regarding issues of religion, performance, and genre.","citation-key":"PindarPaeansReading2001","event-place":"Oxford, New York","ISBN":"978-0-19-814381-9","issued":{"date-parts":[[2001,4,19]]},"number-of-pages":"568","publisher":"Oxford University Press","publisher-place":"Oxford, New York","source":"Oxford University Press","title":"Pindar's Paeans: A Reading of the Fragments with a Survey of the Genre","title-short":"Pindar's Paeans","type":"book"}, + {"id":"platinumOltramarWarpweightedLoom2009","accessed":{"date-parts":[[2018,8,20]]},"author":[{"family":"Platinum","given":""}],"citation-key":"platinumOltramarWarpweightedLoom2009","container-title":"Oltramar","issued":{"date-parts":[[2009,6,13]]},"title":"Oltramar: The Warp-weighted Loom","title-short":"Oltramar","type":"post-weblog","URL":"http://oltramar.blogspot.com/2009/06/warp-weighted-loom.html"}, + {"id":"pluckerAssessmentCreativity2010","author":[{"family":"Plucker","given":"Jonathan A."},{"family":"Makel","given":"Matthew C."}],"citation-key":"pluckerAssessmentCreativity2010","collection-title":"Cambridge Handbooks in Psychology","container-title":"The Cambridge Handbook of Creativity","editor":[{"family":"Kaufman","given":"James C."},{"family":"Sternberg","given":"Robert J."}],"issued":{"date-parts":[[2010]]},"page":"48–73","publisher":"Cambridge University Press","title":"Assessment of Creativity","type":"chapter"}, + {"id":"polanskyHMSLHierarchicalMusic1990","author":[{"family":"Polansky","given":"Larry"},{"family":"Burk","given":"Phil"},{"family":"Rosenboom","given":"David"}],"citation-key":"polanskyHMSLHierarchicalMusic1990","container-title":"Perspectives of New Music","DOI":"10.2307/833016","ISSN":"00316016","issue":"2","issued":{"date-parts":[[1990]]},"page":"136–178","title":"HMSL (Hierarchical Music Specification Language): A Theoretical Overview","type":"article-journal","URL":"http://dx.doi.org/10.2307/833016","volume":"28"}, + {"id":"polgarFreaxBriefHistory2005","author":[{"family":"Polgár","given":"Tamár"}],"citation-key":"polgarFreaxBriefHistory2005","ISBN":"3-9810494-0-3","issued":{"date-parts":[[2005,8]]},"note":"Published: Hardcover","publisher":"CSW-Verlag","title":"Freax: The Brief History of the Computer Demoscene","type":"book","URL":"http://www.worldcat.org/isbn/3981049403"}, + {"id":"prandoniAnalysisbasedTimbreSpace1994","author":[{"family":"Prandoni","given":"Paolo"}],"citation-key":"prandoniAnalysisbasedTimbreSpace1994","issued":{"date-parts":[[1994]]},"note":"Published: online; http://lcavwww.epfl.ch/∼prandoni/documents/timbre1.pdf","title":"An analysis-based timbre space","type":"manuscript"}, + {"id":"pressingCognitiveProcessesImprovisation1984","author":[{"family":"Pressing","given":"Jeff"}],"citation-key":"pressingCognitiveProcessesImprovisation1984","container-title":"Cognitive Processes in the Perception of Art","editor":[{"family":"Crozier","given":"R."},{"family":"Chapman","given":"A."}],"issued":{"date-parts":[[1984]]},"page":"345–363","publisher":"Elsevier Science Publishers","title":"Cognitive Processes in Improvisation","type":"chapter"}, + {"id":"pressingImprovisationMethodsModels1987","author":[{"family":"Pressing","given":"Jeff"}],"citation-key":"pressingImprovisationMethodsModels1987","container-title":"Generative Processes in Music","editor":[{"family":"Sloboda","given":"John A."}],"issued":{"date-parts":[[1987]]},"page":"129–178","publisher":"Oxford University Press","title":"Improvisation: Methods and Models","type":"chapter"}, + {"id":"pressingReferentialDynamicsCognition1999","author":[{"family":"Pressing","given":"Jeff"}],"citation-key":"pressingReferentialDynamicsCognition1999","container-title":"Psychological Review","issue":"4","issued":{"date-parts":[[1999]]},"page":"714–747","title":"The Referential Dynamics of Cognition and Action","type":"article-journal","volume":"106"}, + {"id":"priest-dormanScutulisDividereGallia1998","author":[{"family":"Priest-Dorman","given":"Carolyn"}],"citation-key":"priest-dormanScutulisDividereGallia1998","container-title":"Creating Textiles: Makers, Methods, Markets. Proceedings of the Sixth Biennial Symposium of the Textile Society of America","event-place":"New York City","issued":{"date-parts":[[1998]]},"page":"51-60","publisher-place":"New York City","title":"Scutulis Dividere Gallia: Weaving on Tablets in Western Europe","type":"paper-conference"}, + {"id":"priest-dormanScutulisDividereGallia1998a","author":[{"family":"Priest-Dorman","given":"Carolyn"}],"citation-key":"priest-dormanScutulisDividereGallia1998a","issued":{"date-parts":[[1998]]},"title":"Scutulis Dividere Gallia: Weaving on Tablets in Western Europe","title-short":"Scutulis Dividere Gallia","type":"webpage"}, + {"id":"princetonRealTimePerformanceControllers2005","author":[{"family":"Princeton","given":"Perry C."}],"citation-key":"princetonRealTimePerformanceControllers2005","issued":{"date-parts":[[2005]]},"title":"Real-Time Performance Controllers for Synthesized Singing","type":"book","URL":"#"}, + {"id":"prinzFurnishingMindConcepts2004","abstract":"Western philosophy has long been divided between empiricists, who argue thathuman understanding has its basis in experience, and rationalists, who arguethat reason is the source of knowledge. A central issue in the debate is thenature of concepts, the internal representations we use to think about theworld. The traditional empiricist thesis that concepts are built up fromsensory input has fallen out of favor. Mainstream cognitive science tends toecho the rationalist tradition, with its emphasis on innateness. In_Furnishing the Mind_, Jesse Prinz attempts to swing the pendulum back towardempiricism.Prinz provides a critical survey of leading theories of concepts, includingimagism, definitionism, prototype theory, exemplar theory, the theory theory,and informational atomism. He sets forth a new defense of concept empiricismthat draws on philosophy, neuroscience, and psychology and introduces a newversion of concept empiricism called proxytype theory. He also providesaccounts of abstract concepts, intentionality, narrow content, and conceptcombination. In an extended discussion of innateness, he covers Noam Chomsky'sarguments for the innateness of grammar, developmental psychologists'arguments for innate cognitive domains, and Jerry Fodor's argument for radicalconcept nativism.","author":[{"family":"Prinz","given":"J. J."}],"citation-key":"prinzFurnishingMindConcepts2004","edition":"New edition","ISBN":"0-262-66185-3","issued":{"date-parts":[[2004,9]]},"note":"Published: Paperback","publisher":"MIT Press","title":"Furnishing the Mind: Concepts and Their Perceptual Basis (Representation and Mind Series)","type":"book","URL":"http://www.worldcat.org/isbn/0262661853"}, + {"id":"puckettePatcher1988","author":[{"family":"Puckette","given":"M."}],"citation-key":"puckettePatcher1988","container-title":"Proceedings of International Computer Music Conference 1988","issued":{"date-parts":[[1988]]},"page":"420–429","title":"The Patcher","type":"paper-conference"}, + {"id":"puckettePureDataAnother1996","author":[{"family":"Puckette","given":"M."}],"citation-key":"puckettePureDataAnother1996","container-title":"In Proceedings, International Computer Music Conference","issued":{"date-parts":[[1996]]},"page":"269–272","title":"Pure data: another integrated computer music environment","type":"paper-conference"}, + {"id":"pullumNaturalLanguagesContextfree1982","abstract":"Notice that this paper has not claimed that all natural languages are CFL's. What it has shown is that every published argument purporting to demonstrate the non-context-freeness of some natural language is invalid, either formally or empirically or both.18 Whether non-context-free characteristics can be found in the stringset of some natural language remains an open question, just as it was a quarter century ago.","author":[{"family":"Pullum","given":"Geoffrey K."},{"family":"Gazdar","given":"Gerald"}],"citation-key":"pullumNaturalLanguagesContextfree1982","container-title":"Linguistics and Philosophy","DOI":"10.1007/bf00360802","ISSN":"0165-0157","issue":"4","issued":{"date-parts":[[1982,12]]},"page":"471–504","title":"Natural languages and context-free languages","type":"article-journal","URL":"http://dx.doi.org/10.1007/bf00360802","volume":"4"}, + {"id":"pylyshynThingsPlacesHow2007","abstract":"In Things and Places, Zenon Pylyshyn argues that the process of incrementally constructing perceptual representations, solving the binding problem (determining which properties go together), and, more generally, grounding perceptual representations in experience arise from the nonconceptual capacity to pick out and keep track of a small number of sensory individuals. He proposes a mechanism in early vision that allows us to select a limited number of sensory objects, to reidentify each of them under certain conditions as the same individual seen before, and to keep track of their enduring individuality despite radical changes in their properties–all without the machinery of concepts, identity, and tenses. This mechanism, which he calls FINSTs (for \"Fingers of Instantiation\"), is responsible for our capacity to individuate and track several independently moving sensory objects–an ability that we exercise every waking minute, and one that can be understood as fundamental to the way we see and understand the world and to our sense of space.

Pylyshyn examines certain empirical phenomena of early vision in light of the FINST mechanism, including tracking and attentional selection. He argues provocatively that the initial selection of perceptual individuals is our primary nonconceptual contact with the perceptual world (a contact that does not depend on prior encoding of any properties of the thing selected) and then draws on a wide range of empirical data to support a radical externalist theory of spatial representation that grows out of his indexing theory.","author":[{"family":"Pylyshyn","given":"Zenon W."}],"citation-key":"pylyshynThingsPlacesHow2007","edition":"First","ISBN":"0-262-16245-8","issued":{"date-parts":[[2007,10]]},"note":"Published: Hardcover","publisher":"The MIT Press","title":"Things and Places: How the Mind Connects with the World (Jean Nicod Lectures)","type":"book","URL":"http://www.worldcat.org/isbn/0262162458"}, + {"id":"radcliffeRevolutionChallengingAutomaton2012","abstract":"This chapter examines a performance devised and developed collaboratively by the authors between 2007 -11 which uses a repetitious, machine-inspired nineteenth-century dance to control a digital arts piece, exploring the performative interface between human machine workers and technology. The performance was awarded a Quake contemporary dance festival award in 2008. The dance, the The Machinery, traceable to the1820s, is striking as possibly the earliest example of the creative expression of alienation and dehumanization in the industrial workspace. Nineteenth-century cotton mill workers surrendered to the pace of the machine through necessity; in The Machinery, workers find a means of expression by coalescing with the machine, rather than escaping it, reflecting De Certeau's theories of ?the everyday?. A means of addressing boredom and repetition, the predominantly female workers responded performatively to the otherwise potentially overpowering and isolating noises and actions of ?the uniform and unceasing motion of the automaton? (Marx). The dance can be viewed as a way of maintaining the body's control, interaction and creativity, rather than allowing the body to become solely an extension of the capitalist means of production. Paralleling the working conditions of the nineteenth-century textile workers with those of today's computer operators, Radcliffe and Angliss created a mixed media performance piece inspired by women's interaction with technology. Taking the steps of the early nineteenth-century clog dance, they re-contextualised its history, using it to control a machine of the twenty-first century, the digital computer. Thus, the performers - dancer and computer operator - work together to create an intermedial space where the real world, occupied by the human worker, and virtual world of the machine are coupled to each other and acting in equal partnership. The extreme, machine-like control, virtuosity and physical endurance of the dance reflect the stamina required to survive repetitive labour in both the industrial and the post-industrial workplace.","author":[{"family":"Radcliffe","given":"Caroline"},{"family":"Angliss","given":"Sarah"}],"citation-key":"radcliffeRevolutionChallengingAutomaton2012","container-title":"Performance Research","DOI":"10.1080/13528165.2013.775758","issue":"6","issued":{"date-parts":[[2012,12]]},"page":"40–47","title":"Revolution: Challenging the automaton: Repetitive labour and dance in the industrial workspace","type":"article-journal","URL":"http://dx.doi.org/10.1080/13528165.2013.775758","volume":"17"}, + {"id":"ramachandranMirrorNeuronsImitation2000","author":[{"family":"Ramachandran","given":"V. S."}],"citation-key":"ramachandranMirrorNeuronsImitation2000","container-title":"Third Culture","issued":{"date-parts":[[2000]]},"note":"Published: Online; http://www.edge.org/3rd_culture/ramachandran/ramachandran_index.html","title":"Mirror neurons and imitation learning as the driving force behind \"the great leap forward\" in human evolution","type":"article-journal"}, + {"id":"ramachandranPsychophysicalInvestigationsNeural2001","abstract":"We studied two otherwise normal, synaesthetic subjects who 'saw' a specific colour every time they saw a specific number or letter. We conducted four experiments in order to show that this was a genuine perceptual experience rather than merely a memory association. (i) The synaesthetically induced colours could lead to perceptual grouping, even though the inducing numerals or letters did not. (ii) Synaesthetically induced colours were not experienced if the graphemes were presented peripherally. (iii) Roman numerals were ineffective: the actual number grapheme was required. (iv) If two graphemes were alternated the induced colours were also seen in alternation. However, colours were no longer experienced if the graphemes were alternated at more than 4 Hz. We propose that grapheme colour synaesthesia arises from 'cross-wiring' between the 'colour centre' (area V4 or V8) and the 'number area', both of which lie in the fusiform gyrus. We also suggest a similar explanation for the representation of metaphors in the brain: hence, the higher incidence of synaesthesia among artists and poets.","author":[{"family":"Ramachandran","given":"V. S."},{"family":"Hubbard","given":"E. M."}],"citation-key":"ramachandranPsychophysicalInvestigationsNeural2001","container-title":"Proceedings. Biological sciences / The Royal Society","DOI":"10.1098/rspb.2000.1576","ISSN":"0962-8452","issue":"1470","issued":{"date-parts":[[2001,5]]},"page":"979–983","PMCID":"PMC1088697","PMID":"11370973","title":"Psychophysical investigations into the neural basis of synaesthesia.","type":"article-journal","URL":"http://dx.doi.org/10.1098/rspb.2000.1576","volume":"268"}, + {"id":"ramachandranSynaesthesiaWindowPerception2001","abstract":"We investigated grapheme-colour synaesthesia and found that (1) The induced colours led to perceptual grouping and pop-out, (2) a number rendered invisible through 'crowding' or lateral masking can induce synaesthetic colours – a form of blindsight – and (3) peripherally presented graphemes did not induce colours even when they were clearly visible. Taken collectively, these and other experiments prove conclusively that synaesthesia is a genuine perceptual phenomenon, not an effect based on memory associations from childhood or on vague metaphorical speech. We identify different subtypes of number-colour synaesthesia and propose that they are caused by hyperconnectivity between colour and number areas at different stages in processing; lower synaesthetes may have cross-wiring (or cross-activation) within the fusiform gyrus whereas higher synaesthetes may have cross-activation in the angular gyrus. This hyperconnectivity might be caused by a genetic mutation that causes defective pruning of connections between brain maps. The mutation may further be expressed selectively (due to transcription factors) in the fusiform or angular gyri, and this may explain the existence of different forms of synaesthesia. If expressed very diffusely, there may be extensive cross-wiring between brain regions that represent abstract concepts, which would explain the link between creativity, metaphor and synaesthesia (and the higher incidence of synaesthesia among artists and poets). Also, hyperconnectivity between the sensory cortex and amygdala would explain the heightened aversion synaesthetes experience when seeing numbers printed in the 'wrong' colour. Lastly, kindling – induced hyperconnectivity in the temporal lobes of temporal lobe epilepsy (TLE) patients – may explain the purported higher incidence of synaesthesia in these patients. We conclude with a synaesthesia-based theory of the evolution of language. Thus, our experiments on synaesthesia and our theoretical framework attempt to link several seemingly unrelated facts about the human mind. Far from being a mere curiosity, synaesthesia may provide a window into perception, thought and language.","author":[{"family":"Ramachandran","given":"V. S."},{"family":"Hubbard","given":"E. M."}],"citation-key":"ramachandranSynaesthesiaWindowPerception2001","container-title":"Journal of Consciousness Studies","ISSN":"1355-8250","issue":"12","issued":{"date-parts":[[2001]]},"page":"3–34","title":"Synaesthesia – A window into perception, thought and language","type":"article-journal","URL":"http://www.ingentaconnect.com/content/imp/jcs/2001/00000008/00000012/1244","volume":"8"}, + {"id":"ramachandranSynesthesia2008","author":[{"family":"Ramachandran","given":"V. S."},{"family":"Brang","given":"D."}],"citation-key":"ramachandranSynesthesia2008","container-title":"Scholarpedia","issue":"6","issued":{"date-parts":[[2008]]},"page":"3981","title":"Synesthesia","type":"article-journal","volume":"3"}, + {"id":"ramseyPraisePattern2005","author":[{"family":"Ramsey","given":"Stephen"}],"citation-key":"ramseyPraisePattern2005","container-title":"TEXT Technology","issue":"2","issued":{"date-parts":[[2005]]},"page":"177–190","title":"In Praise of Pattern","type":"article-journal","URL":"http://digitalcommons.unl.edu/englishfacpubs/57/","volume":"14"}, + {"id":"randolphMethodologicalReviewComputer2008","abstract":"Methodological reviews have been used successfully to identify research trends and improve research practice in a variety of academic fields. Although there have been three methodological reviews of the emerging field of computer science education research, they lacked reliability or generalizability. Therefore, because of the capacity for a methodological review to improve practice in computer science education and because the previous methodological reviews were lacking, a large scale, reliable, and generalizable methodological review of the recent research on computer science education is reported here. Our overall research question, which has nine subquestions, involved the methodological properties of research reported in articles in major computer science education research forums from the years 2000-2005. The purpose of this methodological review is to provide a methodologically rigorous basis on which to make recommendations for the improvement of computer science education research and to promote informed dialogue about its practice. Material published as part of this publication, either on-line or in print, is copyrighted by the Informing Science Institute. Permission to make digital or paper copy of part or all of these works for personal or classroom use is granted without fee provided that the copies are not made or distributed for profit or commercial advantage AND that copies 1) bear this notice in full and 2) give the full citation on the first page. It is permissible to abstract these works so long as credit is given. To copy in all other cases or to republish or to post on a server or to redistribute to lists requires specific permission and payment of a fee. Contact","author":[{"family":"Randolph","given":"Justus"},{"family":"Sutinen","given":"Erkki"},{"family":"Julnes","given":"George"},{"family":"Lehman","given":"Steve"}],"citation-key":"randolphMethodologicalReviewComputer2008","container-title":"Journal of Information Technology Education","issued":{"date-parts":[[2008]]},"page":"135–162","title":"A Methodological Review of Computer Science Education Research","type":"article-journal","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.161.5657","volume":"7"}, + {"id":"raubalRepresentingConceptsTime2008","abstract":"People make use of concepts in all aspects of their lives. Concepts are mental entities, which structure our experiences and support reasoning in the world. They are usually regarded as static, although there is ample evidence that they change over time with respect to structure, content, and relation to real-world objects and processes. Recent research considers concepts as dynamical systems, emphasizing this potential for change. In order to analyze the alteration of concepts in time, a formal representation of this process is necessary. This paper proposes an algebraic model for representing dynamic conceptual structures, which integrates two theories from geography and cognitive science, i.e., time geography and conceptual spaces. Such representation allows for investigating the development of a conceptual structure along space-time paths and serves as a foundation for querying the structure of concepts at a specific point in time or for a time interval. The geospatial concept of 'landmark' is used to demonstrate the formal specifications.","author":[{"family":"Raubal","given":"Martin"}],"citation-key":"raubalRepresentingConceptsTime2008","container-title":"Proceedings of the international conference on Spatial Cognition VI","DOI":"10.1007/978-3-540-87601-4_24","event-place":"Freiburg, Germany","ISBN":"978-3-540-87600-7","issued":{"date-parts":[[2008]]},"page":"328–343","publisher":"Springer-Verlag","publisher-place":"Freiburg, Germany","title":"Representing Concepts in Time","type":"chapter","URL":"http://dx.doi.org/10.1007/978-3-540-87601-4_24"}, + {"id":"rauscherMusicSpatialTask1993","author":[{"family":"Rauscher","given":"Frances H."},{"family":"Shaw","given":"Gordon L."},{"family":"Ky","given":"Catherine N."}],"citation-key":"rauscherMusicSpatialTask1993","container-title":"Nature","DOI":"10.1038/365611a0","ISSN":"0028-0836","issue":"6447","issued":{"date-parts":[[1993,10]]},"page":"611","PMID":"8413624","title":"Music and spatial task performance","type":"article-journal","URL":"http://dx.doi.org/10.1038/365611a0","volume":"365"}, + {"id":"raynerWordPerception1994","author":[{"family":"Rayner","given":"Keith"},{"family":"Pollatsek","given":"Alexander"}],"citation-key":"raynerWordPerception1994","container-title":"The Psychology of Reading","ISBN":"0-8058-1872-3","issued":{"date-parts":[[1994,11]]},"note":"Published: Paperback","publisher":"Routledge","title":"Word Perception","type":"chapter","URL":"http://www.worldcat.org/isbn/0805818723"}, + {"id":"reasProcessingProgrammingHandbook2007","abstract":"It has been more than twenty years since desktop publishing reinvented design, and it's clear that there is a growing need for designers and artists to learn programming skills to fill the widening gap between their ideas and the capability of their purchased software. This book is an introduction to the concepts of computer programming within the context of the visual arts. It offers a comprehensive reference and text for Processing (www.processing.org), an open-source programming language that can be used by students, artists, designers, architects, researchers, and anyone who wants to program images, animation, and interactivity.

The ideas in Processing have been tested in classrooms, workshops, and arts institutions, including UCLA, Carnegie Mellon, New York University, and Harvard University. Tutorial units make up the bulk of the book and introduce the syntax and concepts of software (including variables, functions, and object-oriented programming), cover such topics as photography and drawing in relation to software, and feature many short, prototypical example programs with related images and explanations. More advanced professional projects from such domains as animation, performance, and typography are discussed in interviews with their creators. \"Extensions\" present concise introductions to further areas of investigation, including computer vision, sound, and electronics. Appendixes, references to other material, and a glossary contain additional technical details. Processing can be used by reading each unit in order, or by following each category from the beginning of the book to the end. The Processing software and all of the code presented can be downloaded and run for future exploration.

With essays by:
Alexander R. Galloway, Golan Levin, R. Luke DuBois, Simon Greenwold, Francis Li, and Hernando Barragán and interviews with Jared Tarbell, Martin Wattenberg, James Paterson, Erik van Blockland, Ed Burton, Josh On, Jürg Lehni, Auriea Harvey and Michaël Samyn, Mathew Cullen and Grady Hall, Bob Sabiston, Jennifer Steinkamp, Ruth Jarman and Joseph Gerhardt, Sue Costabile, Chris Csikszentmihályi, Golan Levin and Zachary Lieberman, and Mark Hansen.","author":[{"family":"Reas","given":"Casey"},{"family":"Fry","given":"Ben"}],"citation-key":"reasProcessingProgrammingHandbook2007","ISBN":"0-262-18262-9","issued":{"date-parts":[[2007,8]]},"note":"Published: Hardcover","publisher":"The MIT Press","title":"Processing: A Programming Handbook for Visual Designers and Artists","type":"book","URL":"http://www.worldcat.org/isbn/0262182629"}, + {"id":"remezBistabilitySineWave2001","abstract":"Our studies revealed two stable modes of perceptual organization, one based on attributes of auditory sensory elements and another based on attributes of patterned sensory variation composed by the aggregation of sensory elements. In a dual-task method, listeners attended concurrently to both aspects, component and pattern, of a sine wave analogue of a word. Organization of elements was indexed by several single-mode tests of auditory form perception to verify the perceptual segregation of either an individual formant of a synthetic word or a tonal component of a sinusoidal word analogue. Organization of patterned variation was indexed by a test of lexical identification. The results show the independence of the perception of auditory and phonetic form, which appear to be differently organized concurrent effects of the same acoustic cause.","author":[{"family":"Remez","given":"Robert E."},{"family":"Pardo","given":"Jennifer S."},{"family":"Piorkowski","given":"Rebecca L."},{"family":"Rubin","given":"Philip E."}],"citation-key":"remezBistabilitySineWave2001","container-title":"Psychological Science","DOI":"10.1111/1467-9280.00305","issue":"1","issued":{"date-parts":[[2001]]},"page":"24–29","title":"On the Bistability of Sine Wave Analogues of Speech","type":"article-journal","URL":"http://dx.doi.org/10.1111/1467-9280.00305","volume":"12"}, + {"id":"renesseInquiryBasedLearningArt2015","abstract":"Our particular flavor of inquiry-based learning (IBL) uses mathematical discourse, conversations, and discussions to empower students to deepen their mathematical thinking, building on strengths of students in the humanities. We present an organized catalog of powerful questions, discussion prompts, and talk moves that can help faculty facilitate a classroom focused on mathematical discourse. The paper brings this discourse alive through classroom vignettes and explores various teacher moves and their impacts. The mathematical theme of the classroom investigations, Maypole dance patterns, stems from the learning guide “Discovering the Art of Mathematics: Dance.” Both authors are part of the NSF-funded project “Discovering the Art of Mathematics,” which provides IBL materials for mathematics for liberal arts courses, see www.artofmathematics.org.","accessed":{"date-parts":[[2017,2,27]]},"author":[{"family":"Renesse","given":"Christine","dropping-particle":"von"},{"family":"Ecke","given":"Volker"}],"citation-key":"renesseInquiryBasedLearningArt2015","container-title":"PRIMUS","DOI":"10.1080/10511970.2014.921799","ISSN":"1051-1970","issue":"3","issued":{"date-parts":[[2015,3,16]]},"page":"221-237","source":"Taylor and Francis+NEJM","title":"Inquiry-Based Learning and the Art of Mathematical Discourse","type":"article-journal","URL":"http://dx.doi.org/10.1080/10511970.2014.921799","volume":"25"}, + {"id":"reppEmbodimentMusicalStructure2002","author":[{"family":"Repp","given":"B. H."}],"citation-key":"reppEmbodimentMusicalStructure2002","container-title":"Common mechanisms in perception and action: Attention and Performance XIX","editor":[{"family":"Prinz","given":"W."},{"family":"Hommel","given":"B."}],"issued":{"date-parts":[[2002]]},"page":"245–265","publisher":"Oxford University Press","title":"The embodiment of musical structure: Effects of musical context on sensorimotor synchronization with complex timing patterns","type":"chapter"}, + {"id":"reppTappingVerySlow2007","author":[{"family":"Repp","given":"Bruno H."},{"family":"Doggett","given":"Rebecca"}],"citation-key":"reppTappingVerySlow2007","container-title":"Music Perception","DOI":"10.1525/mp.2007.24.4.367","issue":"4","issued":{"date-parts":[[2007]]},"page":"367–376","title":"Tapping to a Very Slow Beat: A Comparison of Musicians and Nonmusicians","type":"article-journal","URL":"http://caliber.ucpress.net/doi/abs/10.1525/mp.2007.24.4.367","volume":"24"}, + {"id":"resnickScratchProgrammingAll2009","abstract":"\"Digital fluency\" should mean designing, creating, and remixing, not just browsing, chatting, and interacting.","author":[{"family":"Resnick","given":"Mitchel"},{"family":"Maloney","given":"John"},{"family":"Hernández","given":"Andrés M."},{"family":"Rusk","given":"Natalie"},{"family":"Eastmond","given":"Evelyn"},{"family":"Brennan","given":"Karen"},{"family":"Millner","given":"Amon"},{"family":"Rosenbaum","given":"Eric"},{"family":"Silver","given":"Jay"},{"family":"Silverman","given":"Brian"},{"family":"Kafai","given":"Yasmin"}],"citation-key":"resnickScratchProgrammingAll2009","container-title":"Commun. ACM","DOI":"10.1145/1592761.1592779","ISSN":"0001-0782","issue":"11","issued":{"date-parts":[[2009,11]]},"page":"60–67","title":"Scratch: Programming for All","type":"article-journal","URL":"http://dx.doi.org/10.1145/1592761.1592779","volume":"52"}, + {"id":"reynoldsEnergyFlash2013","author":[{"family":"Reynolds","given":"Simon"}],"citation-key":"reynoldsEnergyFlash2013","ISBN":"0-571-28913-4","issued":{"date-parts":[[2013,6]]},"note":"Published: Paperback","publisher":"Faber and Faber","title":"Energy Flash","type":"book","URL":"http://www.worldcat.org/isbn/0571289134"}, + {"id":"reznikoffSoundResonancePrehistoric2008","abstract":"Caves have natural properties of resonance: some parts sound very well, the sound lasts for some seconds or gives several echoes, some other parts have a dull resonance or no resonance at all. It is extremely interesting to compare in a given cave the map of the most resonant locations with the map of the locations of the paintings: are there correlations between resonance and paintings? We have studied many Paleolithic caves in France in which the answer was remarkably positive; stated shortly: the more resonant the location, the more paintings or signs are situated in this location. Here are presented some studies and results in the caves of Isturitz and Oxocelhaya in Pays Basque and in some other caves. Some considerations are given about the resonance ‐ pictures relationship in open spaces with prehistoric painted rocks. Bibliography I. Reznikoff: Prehistoric Paintings, Sound and Rocks in Studien zur Musikarchäologie III: 2nd International Symposium on Music Archaeology, Sept. 2000, ed. E. Hickmann, Berlin, Rahden, 2002, 39‐56. The Evidence of the Use of Sound Resonance from Palaeolithic to Medieval Times, Archaeoacoustics, C. Scarre & G. Lawson ed., University of Cambridge, Cambridge, 2006, 77‐84. On Primitive Elements of Musical Meaning, www.musicandmeaning.net, JMM 3 (Invited papers), 2005.","author":[{"family":"Reznikoff","given":"Iegor"}],"citation-key":"reznikoffSoundResonancePrehistoric2008","DOI":"10.1121/1.2934773","issue":"5","issued":{"date-parts":[[2008,5]]},"page":"3603","title":"Sound resonance in prehistoric times: A study of Paleolithic painted caves and rocks","type":"article-journal","URL":"http://dx.doi.org/10.1121/1.2934773","volume":"123"}, + {"id":"RicardoPrinciplesPolitical","accessed":{"date-parts":[[2017,10,13]]},"citation-key":"RicardoPrinciplesPolitical","title":"Ricardo: Principles of political economy and taxation - Google Scholar","type":"webpage","URL":"https://scholar.google.com/scholar_lookup?publication_year=1817&issue=3&author=David+Ricardo&title=On+the+Principles+of+Political+Economy+and+Taxation&"}, + {"id":"RicardoPrinciplesPoliticala","accessed":{"date-parts":[[2017,5,19]]},"citation-key":"RicardoPrinciplesPoliticala","title":"Ricardo, On the Principles of Political Economy and Taxation, Chapters 28-32 | Library of Economics and Liberty","type":"webpage","URL":"http://www.econlib.org/library/Ricardo/ricP7.html#Ch.31,%20On%20Machinery"}, + {"id":"richardsAgriculturePerformance1989","accessed":{"date-parts":[[2022,2,7]]},"author":[{"family":"Richards","given":"Paul"}],"citation-key":"richardsAgriculturePerformance1989","container-title":"Farmer first: farmer innovation and agricultural research","editor":[{"family":"Chambers","given":"Robert"},{"family":"Pacey","given":"Arnold"},{"family":"Thrupp","given":"Lori Ann"}],"issued":{"date-parts":[[1989]]},"language":"en","note":"Accepted: 2011-04-14T13:17:39Z","page":"39-42","publisher":"Intermediate Technology Publications","source":"opendocs.ids.ac.uk","title":"Agriculture as Performance","type":"chapter","URL":"https://opendocs.ids.ac.uk/opendocs/handle/20.500.12413/701"}, + {"id":"richardsonRESTfulWebServices2007","author":[{"family":"Richardson","given":"Leonard"},{"family":"Ruby","given":"Sam"}],"citation-key":"richardsonRESTfulWebServices2007","issued":{"date-parts":[[2007]]},"title":"RESTful Web Services","type":"article-journal","URL":"http://www.amazon.co.uk/RESTful-Web-Services-Leonard-Richardson/dp/0596529260/ref=pd_bbs_sr_1/203-7038940-8568756?ie=UTF8&s=books&qid=1186069838&sr=8-1"}, + {"id":"rizzolattiMirrorNeuronSystem2004","abstract":"A category of stimuli of great importance for primates, humans in particular, is that formed by actions done by other individuals. If we want to survive, we must understand the actions of others. Furthermore, without action understanding, social organization is impossible. In the case of humans, there is another faculty that depends on the observation of others' actions: imitation learning. Unlike most species, we are able to learn by imitation, and this faculty is at the basis of human culture. In this review we present data on a neurophysiological mechanism–the mirror-neuron mechanism–that appears to play a fundamental role in both action understanding and imitation. We describe first the functional properties of mirror neurons in monkeys. We review next the characteristics of the mirror-neuron system in humans. We stress, in particular, those properties specific to the human mirror-neuron system that might explain the human capacity to learn by imitation. We conclude by discussing the relationship between the mirror-neuron system and language.","author":[{"family":"Rizzolatti","given":"Giacomo"},{"family":"Craighero","given":"Laila"}],"citation-key":"rizzolattiMirrorNeuronSystem2004","container-title":"Annual review of neuroscience","DOI":"10.1146/annurev.neuro.27.070203.144230","ISSN":"0147-006X","issue":"1","issued":{"date-parts":[[2004]]},"page":"169–192","PMID":"15217330","title":"The Mirror-Neuron System","type":"article-journal","URL":"http://dx.doi.org/10.1146/annurev.neuro.27.070203.144230","volume":"27"}, + {"id":"roachDistinctionStresstimedSyllabletimed1982","author":[{"family":"Roach","given":"Peter"}],"citation-key":"roachDistinctionStresstimedSyllabletimed1982","container-title":"Linguistic controversies : essays in linguistic theory and practice","editor":[{"family":"Crystal","given":"D."}],"issued":{"date-parts":[[1982]]},"page":"73–79","title":"On the distinction between 'stress-timed' and 'syllable-timed' languages","type":"chapter","URL":"https://www.alibris.com/search/books/isbn/0713163496"}, + {"id":"roachTranscriptionProsodicParalinguistic1998","abstract":"A study of emotional speech has resulted in a collection of some five hours of recorded material. The analysis of this material has required computer-based annotation incorporating prosodic and paralinguistic transcription as well as the coding of various psychological variables. A version of the prosodic and paralinguistic transcription devised by Crystal and Quirk was developed for use within the xwaves environment. This paper describes this transcription system and its application.","author":[{"family":"Roach","given":"Peter J."},{"family":"Osborne","given":"J."},{"family":"Stibbard","given":"Richard M."},{"family":"Arnfield","given":"S."},{"family":"Setter","given":"J."}],"citation-key":"roachTranscriptionProsodicParalinguistic1998","container-title":"Journal of the International Phonetic Association","issue":"28","issued":{"date-parts":[[1998]]},"page":"83–94","title":"Transcription of Prosodic and Paralinguistic Features of Emotional Speech","type":"article-journal"}, + {"id":"robertsEditingExtendedInteraction2015","abstract":"We describe research extending the interactive affordances of textual code fragments in creative coding environments. In particular we examine the potential of source code both to display the state of running processes and also to alter state using means other than traditional text editing. In contrast to previous research that has focused on the inclusion of additional interactive widgets inside or alongside text editors, our research adds a parsing stage to the runtime evaluation of code fragments and imparts additional interactive capabilities on the source code itself. After implementing various techniques in the creative coding environment Gibber, we evaluate our research through a survey on the various methods of visual feedback provided by our research. In addition to results quantifying preferences for certain techniques over others, we found near unanimous support among survey respondents for including similar techniques in other live coding environments.","accessed":{"date-parts":[[2021,1,27]]},"author":[{"family":"Roberts","given":"Charles"},{"family":"Wright","given":"Matthew"},{"family":"Kuchera-Morin","given":"JoAnn"}],"citation-key":"robertsEditingExtendedInteraction2015","collection-title":"NIME 2015","container-title":"Proceedings of the international conference on New Interfaces for Musical Expression","event-place":"Baton Rouge, Louisiana, USA","ISBN":"978-0-692-49547-6","issued":{"date-parts":[[2015,5,30]]},"page":"126–131","publisher":"The School of Music and the Center for Computation and Technology (CCT), Louisiana State University","publisher-place":"Baton Rouge, Louisiana, USA","source":"ACM Digital Library","title":"Beyond Editing: Extended Interaction with Textual Code Fragments","title-short":"Beyond Editing","type":"paper-conference"}, + {"id":"robertsGibberLiveCoding2012","abstract":"We present Gibber: a live coding environment for web browsers. Gibber performances are written in pure Java-Script with no syntactical additions or modifications; this enables Gibber code to be executed in any web page viewed inside a browser implementing a realtime audio API. Gib-ber offers an array of synthesis options (FM, granular, subtractive, physical modeling), audio effects and sequenc-ing objects to control them. The Gibber environment en-ables simple networked performances where multiple users simultaneously control a remote instance of Gibber. We strove to make the syntax of Gibber clear and concise; when coupled with the ability to run examples in any web page this gives Gibber interesting possibilities as an edu-cational tool. 1.","author":[{"family":"Roberts","given":"Charles"},{"family":"Kuchera-morin","given":"Joann"}],"citation-key":"robertsGibberLiveCoding2012","container-title":"In Proceedings of the 2012 International Computer Music Conference","issued":{"date-parts":[[2012]]},"source":"CiteSeer","title":"Gibber: Live coding audio in the browser","title-short":"Gibber","type":"paper-conference"}, + {"id":"rocchessoSoundingObjects2003","abstract":"Interactive systems, virtual environments, and information display applications need dynamic sound models rather than faithful audio reproductions. This implies three levels of research: auditory perception, physics-based sound modeling, and expressive parametric control. Parallel progress along these three lines leads to effective auditory displays that can complement or substitute visual displays. This article aims to shed some light on how psychologists, computer scientists, acousticians, and engineers can work together and address these and other questions arising in sound design for interactive multimedia systems.","author":[{"family":"Rocchesso","given":"D."},{"family":"Bresin","given":"R."},{"family":"Fernstrom","given":"M."}],"citation-key":"rocchessoSoundingObjects2003","container-title":"IEEE Multimedia","DOI":"10.1109/mmul.2003.1195160","ISSN":"1070-986X","issue":"2","issued":{"date-parts":[[2003,4]]},"page":"42–52","title":"Sounding objects","type":"article-journal","URL":"http://dx.doi.org/10.1109/mmul.2003.1195160","volume":"10"}, + {"id":"rodetCHANTProjectSynthesis1984","author":[{"family":"Rodet","given":"Xavier"},{"family":"Potard","given":"Yves"},{"family":"Barriere","given":"Jean B."}],"citation-key":"rodetCHANTProjectSynthesis1984","container-title":"Computer Music Journal","issue":"3","issued":{"date-parts":[[1984]]},"title":"The CHANT Project: From the Synthesis of the Singing Voice to Synthesis in General","type":"article-journal","volume":"8"}, + {"id":"rohrhuberAlgorithmicComplementarityImpossibility2014","author":[{"family":"Rohrhuber","given":"Julian"}],"citation-key":"rohrhuberAlgorithmicComplementarityImpossibility2014","container-title":"Collaboration and learning through live coding (Dagstuhl Seminar 13382)","DOI":"http://dx.doi.org/10.4230/DagRep.3.9.130","issue":"9","issued":{"date-parts":[[2014]]},"page":"140-142","title":"Algorithmic Complementarity, or the Impossibility of “Live” Coding","type":"article-journal","URL":"http://drops.dagstuhl.de/opus/volltexte/2014/4420","volume":"3"}, + {"id":"rohrhuberAlgorithmsTodayNotes2005","author":[{"family":"Rohrhuber","given":"Julian"},{"family":"Campo","given":"Alberto","non-dropping-particle":"de"},{"family":"Wieser","given":"Renate"}],"citation-key":"rohrhuberAlgorithmsTodayNotes2005","container-title":"Proceedings of International Computer Music Conference 2005","event-place":"San Francisco","issued":{"date-parts":[[2005]]},"publisher-place":"San Francisco","title":"Algorithms Today: Notes On Language Design for Just In Time Programming","type":"paper-conference"}, + {"id":"rohrhuberCodingKnots2017","abstract":"In this paper we explore new ways to approach understanding of the mysterious Precolumbian quipus, using both visual and sonic interpretations. We base our investigation on the Harvard Quipu Archive, starting with graphical visualisation techniques that give us an overall view so we can compare textile structures and perform basic cryptanalysis. We use listening and sonification in order to filter and compare the different modes of data representation (knot type, colour, twist and material). This provides new ways to explore both currently understood and unknown patterns of meaning in quipus. This is the open-access author’s version of a closed access article published by Taylor and Francis in TEXTILE: Journal of Cloth and Culture, May 2017. It is shared under the terms of the Creative Commons Attribution 4.0 license, with doi: 10.5281/zenodo.1098248.","accessed":{"date-parts":[[2018,3,1]]},"author":[{"family":"Rohrhuber","given":"Julian"},{"family":"Griffiths","given":"David"}],"citation-key":"rohrhuberCodingKnots2017","container-title":"TEXTILE Journal of Cloth and Culture","DOI":"10.5281/zenodo.1098248","issue":"2: Weaving Codes, Coding Weaves","issued":{"date-parts":[[2017,7,20]]},"page":"143-157","source":"Zenodo","title":"Coding with Knots","type":"article-journal","URL":"https://zenodo.org/record/1098248"}, + {"id":"rohrhuberPurloinedLettersDistributed2007","author":[{"family":"Rohrhuber","given":"Julian"},{"family":"Campo","given":"Alberto","non-dropping-particle":"de"},{"family":"Wieser","given":"Renate"},{"family":"Kampen","given":"Jan-Kees","non-dropping-particle":"van"},{"family":"Ho","given":"Echo"},{"family":"Hölzl","given":"Hannes"}],"citation-key":"rohrhuberPurloinedLettersDistributed2007","container-title":"Music in the Global Village Conference 2007","issued":{"date-parts":[[2007]]},"title":"Purloined Letters and Distributed Persons","type":"paper-conference"}, + {"id":"rosenblumAudiovisualTestKinematic1996","abstract":"Isolated kinematic properties of visible speech can provide information for lip reading. Kinematic facial information is isolated by darkening an actor's face and attaching dots to various articulators so that only moving dots can be seen with no facial features present. To test the salience of these images, the authors conducted experiments to determine whether the images could visually influence the perception of discrepant auditory syllables. Results showed that these images can influence auditory speech independently of the participant's knowledge of the stimuli. In other experiments, single frozen frames of visible syllables were presented with discrepant auditory syllables to test the salience of static facial features. Although the influence of the kinematic stimuli was perceptual, any influence of the static featural stimuli was likely based on participant's misunderstanding or postperceptual response bias.","author":[{"family":"Rosenblum","given":"L. D."},{"family":"Saldaña","given":"H. M."}],"citation-key":"rosenblumAudiovisualTestKinematic1996","container-title":"Journal of experimental psychology. Human perception and performance","ISSN":"0096-1523","issue":"2","issued":{"date-parts":[[1996,4]]},"page":"318–331","PMID":"8934846","title":"An audiovisual test of kinematic primitives for visual speech perception.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/8934846","volume":"22"}, + {"id":"rossierWiringPlumbingBrain2009","author":[{"family":"Rossier","given":"Jean"}],"citation-key":"rossierWiringPlumbingBrain2009","container-title":"Frontiers in human neuroscience","issued":{"date-parts":[[2009]]},"title":"Wiring and Plumbing in the Brain","type":"article-journal","volume":"3"}, + {"id":"rossMusicalIntervalsSpeech2007","abstract":"Throughout history and across cultures, humans have created music using pitch intervals that divide octaves into the 12 tones of the chromatic scale. Why these specific intervals in music are preferred, however, is not known. In the present study, we analyzed a database of individually spoken English vowel phones to examine the hypothesis that musical intervals arise from the relationships of the formants in speech spectra that determine the perceptions of distinct vowels. Expressed as ratios, the frequency relationships of the first two formants in vowel phones represent all 12 intervals of the chromatic scale. Were the formants to fall outside the ranges found in the human voice, their relationships would generate either a less complete or a more dilute representation of these specific intervals. These results imply that human preference for the intervals of the chromatic scale arises from experience with the way speech formants modulate laryngeal harmonics to create different phonemes.","author":[{"family":"Ross","given":"Deborah"},{"family":"Choi","given":"Jonathan"},{"family":"Purves","given":"Dale"}],"citation-key":"rossMusicalIntervalsSpeech2007","container-title":"Proceedings of the National Academy of Sciences of the United States of America","DOI":"10.1073/pnas.0703140104","ISSN":"0027-8424","issue":"23","issued":{"date-parts":[[2007,6]]},"page":"9852–9857","PMCID":"PMC1876656","PMID":"17525146","title":"Musical intervals in speech.","type":"article-journal","URL":"http://dx.doi.org/10.1073/pnas.0703140104","volume":"104"}, + {"id":"rowellMachineDreams1995","author":[{"family":"Rowell","given":"Mike"}],"citation-key":"rowellMachineDreams1995","container-title":"SF Weekly","issue":"39","issued":{"date-parts":[[1995]]},"title":"Machine Dreams","type":"article-journal","volume":"14"}, + {"id":"roweMachineMusicianship2001","author":[{"family":"Rowe","given":"Robert"}],"citation-key":"roweMachineMusicianship2001","ISBN":"0-262-18206-8","issued":{"date-parts":[[2001,3]]},"note":"Published: Hardcover","publisher":"The MIT Press","title":"Machine Musicianship","type":"book","URL":"http://www.worldcat.org/isbn/0262182068"}, + {"id":"rushkoffProgramBeProgrammed2010","author":[{"family":"Rushkoff","given":"Douglas"}],"citation-key":"rushkoffProgramBeProgrammed2010","edition":"First Edition","ISBN":"1-935928-15-5","issued":{"date-parts":[[2010,11]]},"note":"Published: Paperback","publisher":"OR Books","title":"Program or Be Programmed: Ten Commands for a Digital Age","type":"book","URL":"http://www.worldcat.org/isbn/1935928155"}, + {"id":"russellArtificialIntelligenceModern2002","author":[{"family":"Russell","given":"Stuart J."},{"family":"Norvig","given":"Peter"}],"citation-key":"russellArtificialIntelligenceModern2002","ISBN":"0-13-080302-2","issued":{"date-parts":[[2002,11]]},"note":"Published: Paperback","publisher":"Pearson US Imports & PHIPEs","title":"Artificial Intelligence: A Modern Approach (International Edition)","type":"book","URL":"http://www.worldcat.org/isbn/0130803022"}, + {"id":"sackHandbookComputationalGeometry2000","author":[{"family":"Sack","given":"J. R."},{"family":"Urrutia","given":"J."}],"citation-key":"sackHandbookComputationalGeometry2000","event-place":"Amsterdam, The Netherlands, The Netherlands","issued":{"date-parts":[[2000]]},"publisher":"North-Holland Publishing Co.","publisher-place":"Amsterdam, The Netherlands, The Netherlands","title":"Handbook of computational geometry","type":"book"}, + {"id":"sadoskiImageryTextDual2000","author":[{"family":"Sadoski","given":"Mark"},{"family":"Paivio","given":"Allan"}],"citation-key":"sadoskiImageryTextDual2000","ISBN":"0-8058-3438-9","issued":{"date-parts":[[2000,12]]},"note":"Published: Hardcover","publisher":"Routledge","title":"Imagery and Text: A Dual Coding Theory of Reading and Writing","type":"book","URL":"http://www.worldcat.org/isbn/0805834389"}, + {"id":"saramagoStoneRaftPanther2000","author":[{"family":"Saramago","given":"Jose"}],"citation-key":"saramagoStoneRaftPanther2000","ISBN":"1-86046-721-0","issued":{"date-parts":[[2000,6]]},"note":"Published: Paperback","publisher":"The Harvill Press","title":"The Stone Raft (Panther)","type":"book","URL":"http://www.worldcat.org/isbn/1860467210"}, + {"id":"sauerNotations212009","abstract":"Drawing inspiration from John Cages Notations, Notations 21 features illustrated musical scores from more than 100 composers from every continent, all of whom are making amazing breakthroughs in the art of notation. These spectacularly beautiful and fascinatingly creative visual pieces not only make for exciting music, but inspiring visual art as well. Every score is accompanied by written contributions from the artists, which explain how the music manifested visually. Included in this anthology are famous composers such as Karlheinz Stockhausen, Steve Reich, Yuji Takahashi and Kathleen St. John, as well as lesser-known but no less important composers whose compositions are also visually astounding and important. Notations 21 coincides with an exhibit and concert series that will open at the Chelsea Art Museum in New York City and then move across the globe. In the spirit of honoring John Cages book, while furthering it in a 21st century context, a portion of this books sales will be donated to the Foundation for Contemporary Performing Arts.","author":[{"family":"Sauer","given":"Theresa"}],"citation-key":"sauerNotations212009","edition":"1st edition","event-place":"New York, NY","ISBN":"978-0-9795546-4-3","issued":{"date-parts":[[2009,5,18]]},"language":"English","number-of-pages":"318","publisher":"Mark Batty Publisher","publisher-place":"New York, NY","source":"Amazon","title":"Notations 21","type":"book"}, + {"id":"sawyerExplainingCreativityScience2006","abstract":"Explaining Creativity is an accessible introduction to the latest scientific research on creativity. In the last 50 yearss, psychologists, anthropologists, and sociologists have increasingly studied creativity, and we now know more about creativity that at any point in history. Explaining Creativity considers not only arts like painting and writing, but also science, stage performance, and business innovation. Until about a decade ago, creativity researchers tended to focus on highly valued activities like fine art painting and Nobel prize winning science. Sawyer brings this research up to date by including movies, music videos, cartoons, videogames, hypertext fiction, and computer technology. For example, this is the first book on creativity to include studies of performance and improvisation. Sawyer draws on the latest research findings to show the importance of collaboration and context in all of these creative activities. Today's science of creativity is interdisciplinary; in addition to psychological studies of creativity, Explaining Creativity includes research by anthropologists on creativity in non-Western cultures, and research by sociologists about the situations, contexts, and networks of creative activity. Explaining Creativity brings these approaches together within the sociocultural approach to creativity pioneered by Howard Becker, Mihaly Csikszentmihalyi and Howard Gardner. The sociocultural approach moves beyond the individual to consider the social and cultural contexts of creativity, emphasizing the role of collaboration and context in the creative process.","author":[{"family":"Sawyer","given":"Keith R."}],"citation-key":"sawyerExplainingCreativityScience2006","ISBN":"0-19-530445-4","issued":{"date-parts":[[2006,1]]},"note":"Published: Paperback","publisher":"Oxford University Press, USA","title":"Explaining Creativity: The Science of Human Innovation","type":"book","URL":"http://www.worldcat.org/isbn/0195304454"}, + {"id":"schiettecatteRealTimeAcousticsSimulation2003","author":[{"family":"Schiettecatte","given":"B."},{"family":"Nackaerts","given":"A."},{"family":"De Moor","given":"B."}],"citation-key":"schiettecatteRealTimeAcousticsSimulation2003","container-title":"Proceedings of the International Computer Music Conference 2003","issued":{"date-parts":[[2003]]},"title":"Real-Time Acoustics Simulation using Mesh-Tracing","type":"paper-conference"}, + {"id":"schiffmanAestheticsComputationUnveiling1999","author":[{"family":"Schiffman","given":"Jared"}],"citation-key":"schiffmanAestheticsComputationUnveiling1999","issued":{"date-parts":[[1999]]},"publisher":"School of Architecture and Planning, Massachusetts Institute of Technology","title":"Aesthetics of Computation - Unveiling the Visual Machine","type":"thesis"}, + {"id":"schmolder-veitPENELOPELabor2019","accessed":{"date-parts":[[2021,4,30]]},"citation-key":"schmolder-veitPENELOPELabor2019","container-title":"Lebendiger Gips: 150 Jahre Museum für Abgüsse Klassischer Bildwerke München","DOI":"10.11588/PROPYLAEUM.549","editor":[{"family":"Schmölder-Veit","given":"Andrea"},{"family":"Schröder-Griebel","given":"Nele"},{"family":"Harlizius-Klück","given":"Ellen"}],"issued":{"date-parts":[[2019]]},"page":"166-171","publisher":"University Library Heidelberg","source":"DOI.org (Datacite)","title":"Das PENELOPE-Labor","title-short":"Lebendiger Gips","type":"article-journal","URL":"https://books.ub.uni-heidelberg.de/index.php/propylaeum/catalog/book/549","version":"1"}, + {"id":"schonReflectivePractitionerHow1984","abstract":"A leading MIT social scientist and consultant examines five professions–engineering, architecture, management, psychotherapy, and town planning–toshow how professionals really go about solving problems.","author":[{"family":"Schon","given":"Donald A."}],"citation-key":"schonReflectivePractitionerHow1984","edition":"1","ISBN":"0-465-06878-2","issued":{"date-parts":[[1984,9]]},"note":"Published: Paperback","publisher":"Basic Books","title":"The Reflective Practitioner: How Professionals Think In Action","type":"book","URL":"http://www.worldcat.org/isbn/0465068782"}, + {"id":"schwanenflugelOrganizationMentalVerbs1994","abstract":"Folk theories of knowing in North American adults were studied by examining the organization of mental verbs in two tasks: (a) a Similarity Judgment Task in which subjects rated the similarity of verb pairs in terms of the way the mind is used, and (b) a Verb Extension Task in which subjects identified the mental verbs applicable to a variety of scenarios requiring specific mental activities. Organizational structure was assessed using multidimensional scaling and additive similarity tree analyses. An Attribute Rating Task was used to describe the characteristics which organized the various dimensions and clusters obtained in the scaling solutions. The folk theory of mind displayed was a naive information processing model with interactive and constructive components.","author":[{"family":"Schwanenflugel","given":"P."}],"citation-key":"schwanenflugelOrganizationMentalVerbs1994","container-title":"Journal of Memory and Language","DOI":"10.1006/jmla.1994.1018","ISSN":"0749596X","issue":"3","issued":{"date-parts":[[1994,6]]},"page":"376–395","title":"The Organization of Mental Verbs and Folk Theories of Knowing","type":"article-journal","URL":"http://dx.doi.org/10.1006/jmla.1994.1018","volume":"33"}, + {"id":"schwarzDataDrivenConcatenativeSound2004","author":[{"family":"Schwarz","given":"Diemo"}],"citation-key":"schwarzDataDrivenConcatenativeSound2004","issued":{"date-parts":[[2004]]},"publisher":"Universite Paris","title":"Data-Driven Concatenative Sound Synthesis","type":"thesis"}, + {"id":"schwittersUrsonate1932","author":[{"family":"Schwitters","given":"Kurt"}],"citation-key":"schwittersUrsonate1932","container-title":"Merz","issued":{"date-parts":[[1932]]},"title":"Ursonate","type":"article-journal","volume":"24"}, + {"id":"seabrookNobrowCultureMarketing2001","author":[{"family":"Seabrook","given":"John"}],"citation-key":"seabrookNobrowCultureMarketing2001","edition":"1ST","ISBN":"0-375-70451-5","issued":{"date-parts":[[2001,2]]},"note":"Published: Paperback","publisher":"Vintage","title":"Nobrow : The Culture of Marketing, the Marketing of Culture","type":"book","URL":"http://www.worldcat.org/isbn/0375704515"}, + {"id":"senghasChildrenCreatingLanguage2001","abstract":"It has long been postulated that language is not purely learned, but arises from an interaction between environmental exposure and innate abilities. The innate component becomes more evident in rare situations in which the environment is markedly impoverished. The present study investigated the language production of a generation of deaf Nicaraguans who had not been exposed to a developed language. We examined the changing use of early linguistic structures (specifically, spatial modulations) in a sign language that has emerged since the Nicaraguan group first came together. In under two decades, sequential cohorts of learners systematized the grammar of this new sign language. We examined whether the systematicity being added to the language stems from children or adults; our results indicate that such changes originate in children aged 10 and younger. Thus, sequential cohorts of interacting young children collectively possess the capacity not only to learn, but also to create, language.","author":[{"family":"Senghas","given":"A."},{"family":"Coppola","given":"M."}],"citation-key":"senghasChildrenCreatingLanguage2001","container-title":"Psychological Science","DOI":"10.1111/1467-9280.00359","ISSN":"1467-9280","issue":"4","issued":{"date-parts":[[2001,7]]},"page":"323–328","PMID":"11476100","title":"Children Creating Language: How Nicaraguan Sign Language Acquired a Spatial Grammar","type":"article-journal","URL":"http://dx.doi.org/10.1111/1467-9280.00359","volume":"12"}, + {"id":"serajScratchGoogleBlockly2019","abstract":"Block-based programming has become popular to teach programming to young students in introductory programming environments. Nevertheless, in most western countries, girls show a lack of interest in computer science, including programming. This paper presents the results of two user studies with 24 female German secondary school students in two programming workshops. We use and compare two environments based on Scratch and Google Blockly in fostering the students' programming skills and changing their attitudes towards programming. The two block-based programming editors have been chosen as they are popular in the current educational use of block-based programming. The results support the usage of Scratch-based environment in order to support the acquisition of programming skills. However, those students who used the Blockly-based environment showed greater interest in future programming learning opportunities. The contribution of this paper is showing the different impacts of Scratch and Google Blockly on young female students' interest in programming and the acquisition of programming skills in extra-curricular programming workshops.","accessed":{"date-parts":[[2021,4,30]]},"author":[{"family":"Seraj","given":"Mazyar"},{"family":"Katterfeldt","given":"Eva-Sophie"},{"family":"Bub","given":"Kerstin"},{"family":"Autexier","given":"Serge"},{"family":"Drechsler","given":"Rolf"}],"citation-key":"serajScratchGoogleBlockly2019","collection-title":"Koli Calling '19","container-title":"Proceedings of the 19th Koli Calling International Conference on Computing Education Research","DOI":"10.1145/3364510.3364515","event-place":"New York, NY, USA","ISBN":"978-1-4503-7715-7","issued":{"date-parts":[[2019,11,21]]},"page":"1–10","publisher":"Association for Computing Machinery","publisher-place":"New York, NY, USA","source":"ACM Digital Library","title":"Scratch and Google Blockly: How Girls' Programming Skills and Attitudes are Influenced","title-short":"Scratch and Google Blockly","type":"paper-conference","URL":"https://doi.org/10.1145/3364510.3364515"}, + {"id":"sezovLiferayActionOfficial2011","author":[{"family":"Sezov","given":"Rich"}],"citation-key":"sezovLiferayActionOfficial2011","edition":"1","ISBN":"1-935182-82-X","issued":{"date-parts":[[2011,9]]},"note":"Published: Paperback","publisher":"Manning Publications","title":"Liferay in Action: The Official Guide to Liferay Portal Development","type":"book","URL":"http://www.worldcat.org/isbn/193518282X"}, + {"id":"shamosClosestPointProblems1975","author":[{"family":"Shamos","given":"M. I."},{"family":"Hoey","given":"D."}],"citation-key":"shamosClosestPointProblems1975","container-title":"Proceedings 16th IEEE Symposium on Foundations of Computer Science","issued":{"date-parts":[[1975]]},"page":"151–162","title":"Closest-Point Problems","type":"paper-conference"}, + {"id":"shamsIllusionsWhatYou2000","abstract":"Vision is believed to dominate our multisensory perception of the world. Here we overturn this established view by showing that auditory information can qualitatively alter the perception of an unambiguous visual stimulus to create a striking visual illusion. Our findings indicate that visual perception can be manipulated by other sensory modalities.","author":[{"family":"Shams","given":"Ladan"},{"family":"Kamitani","given":"Yukiyasu"},{"family":"Shimojo","given":"Shinsuke"}],"citation-key":"shamsIllusionsWhatYou2000","container-title":"Nature","DOI":"10.1038/35048669","ISSN":"0028-0836","issue":"6814","issued":{"date-parts":[[2000,12]]},"page":"788","PMID":"11130706","title":"Illusions: What you see is what you hear","type":"article-journal","URL":"http://dx.doi.org/10.1038/35048669","volume":"408"}, + {"id":"shapiroPrimerTB303Bassline2009","author":[{"family":"Shapiro","given":"Peter"}],"citation-key":"shapiroPrimerTB303Bassline2009","container-title":"The Wire Magazine","issue":"303","issued":{"date-parts":[[2009,5]]},"page":"40–45","title":"The Primer: The TB-303 Bassline","type":"article-journal"}, + {"id":"shepardAnalysisProximitiesMultidimensional1962","abstract":"Abstract A computer program is described that is designed to reconstruct the metric configuration of a set of points in Euclidean space on the basis of essentially nonmetric information about that configuration. A minimum set of Cartesian coordinates for the points is determined when the only available information specifies for each pair of those points—not the distance between them—but some unknown, fixed monotonic function of that distance. The program is proposed as a tool for reductively analyzing several types of psychological data, particularly measures of interstimulus similarity or confusability, by making explicit the multidimensional structure underlying such data.","author":[{"family":"Shepard","given":"Roger"}],"citation-key":"shepardAnalysisProximitiesMultidimensional1962","container-title":"Psychometrika","container-title-short":"Psychometrika","DOI":"10.1007/bf02289630","issue":"2","issued":{"date-parts":[[1962,6]]},"page":"125–140","title":"The analysis of proximities: Multidimensional scaling with an unknown distance function. I.","type":"article-journal","URL":"http://dx.doi.org/10.1007/bf02289630","volume":"27"}, + {"id":"shepardMentalRotationThreeDimensional1971","abstract":"The time required to recognize that two perspective drawings portray objects of the same three-dimensional shape is found to be (i) a linearly increasing function of the angular difference in the portrayed orientations of the two objects and (ii) no shorter for differences corresponding simply to a rigid rotation of one of the two-dimensional drawings in its own picture plane than for differences corresponding to a rotation of the three-dimensional object in depth.","author":[{"family":"Shepard","given":"Roger N."},{"family":"Metzler","given":"Jacqueline"}],"citation-key":"shepardMentalRotationThreeDimensional1971","container-title":"Science","DOI":"10.1126/science.171.3972.701","ISSN":"1095-9203","issue":"3972","issued":{"date-parts":[[1971,2]]},"page":"701–703","PMID":"5540314","title":"Mental Rotation of Three-Dimensional Objects","type":"article-journal","URL":"http://dx.doi.org/10.1126/science.171.3972.701","volume":"171"}, + {"id":"shepardUniversalLawGeneralization1987","author":[{"family":"Shepard","given":"Roger N."}],"citation-key":"shepardUniversalLawGeneralization1987","collection-title":"New Series","container-title":"Science","issue":"4820","issued":{"date-parts":[[1987]]},"page":"1317–1323","title":"Toward a Universal Law of Generalization for Psychological Science","type":"article-journal","URL":"http://www.jstor.org/stable/1700004","volume":"237"}, + {"id":"shintelSoundMotionSpoken2007","abstract":"Language is generally viewed as conveying information through symbols whose form is arbitrarily related to their meaning. This arbitrary relation is often assumed to also characterize the mental representations underlying language comprehension. We explore the idea that visuo-spatial information can be analogically conveyed through acoustic properties of speech and that such information is integrated into an analog perceptual representation as a natural part of comprehension. Listeners heard sentences describing objects, spoken at varying speaking rates. After each sentence, participants saw a picture of an object and judged whether it had been mentioned in the sentence. Participants were faster to recognize the object when motion implied by speaking rate matched the motion implied by the picture. Results suggest that visuo-spatial referential information can be analogically conveyed and represented.","author":[{"family":"Shintel","given":"H."},{"family":"Nusbaum","given":"H."}],"citation-key":"shintelSoundMotionSpoken2007","container-title":"Cognition","DOI":"10.1016/j.cognition.2006.11.005","ISSN":"00100277","issue":"3","issued":{"date-parts":[[2007,12]]},"page":"681–690","title":"The sound of motion in spoken language: Visual information conveyed by acoustic properties of speech","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.cognition.2006.11.005","volume":"105"}, + {"id":"shulginListenToolsInterview2003","author":[{"family":"Shulgin","given":"Alexei"}],"citation-key":"shulginListenToolsInterview2003","container-title":"read_me 2.3 reader","issued":{"date-parts":[[2003]]},"publisher":"NIFCA","title":"Listen to the tools, interview with Alex McLean and Adrian Ward","type":"chapter"}, + {"id":"sicchioDataManagementPart2014","author":[{"family":"Sicchio","given":"Kate"}],"citation-key":"sicchioDataManagementPart2014","container-title":"Media-N: Journal of the New Media Caucus","editor":[{"family":"Badani","given":"Pat"},{"family":"Hamilton","given":"Kevin"},{"family":"Weissman","given":"Terri"}],"issue":"3","issued":{"date-parts":[[2014]]},"title":"Data Management Part III: An Artistic Framework for Understanding Technology without Technology","type":"article-journal","volume":"10"}, + {"id":"sicchioExploringSoftwareProgrammer2010","author":[{"family":"Sicchio","given":"Kate"}],"citation-key":"sicchioExploringSoftwareProgrammer2010","container-title":"Digital Resources for Humanities and Arts","issued":{"date-parts":[[2010]]},"title":"Exploring the software programmer as choreographer","type":"paper-conference"}, + {"id":"sicchioHackingChoreographyDance2014","abstract":"This article explores the intersection of live coding and choreography, discussing the ?practice as research? project Hacking Choreography. It examines the use of computer programming languages within dance scores, the creation of scores in real time, and the transparency of these scores to the audience during performance. Four pieces created by the author are discussed in terms of these elements and compared to live-coding practices for computer music. Through this, not only does live coding emerge as a performance practice related to sound or visuals, but it also continues its trajectory as a transdisciplinary approach to live performance events.","author":[{"family":"Sicchio","given":"Kate"}],"citation-key":"sicchioHackingChoreographyDance2014","container-title":"Computer Music Journal","DOI":"10.1162/comj_a_00218","issue":"1","issued":{"date-parts":[[2014,3]]},"page":"31–39","title":"Hacking Choreography: Dance and Live Coding","type":"article-journal","URL":"http://dx.doi.org/10.1162/comj_a_00218","volume":"38"}, + {"id":"sicchioSoundChoreographyBody2017","accessed":{"date-parts":[[2018,3,30]]},"author":[{"family":"Sicchio","given":"Kate"},{"family":"McLean","given":"Alex"}],"citation-key":"sicchioSoundChoreographyBody2017","container-title":"Contemporary Theatre Review","DOI":"10.1080/10486801.2017.1343244","ISSN":"1048-6801","issue":"3","issued":{"date-parts":[[2017,7,3]]},"page":"405-410","source":"Taylor and Francis+NEJM","title":"Sound Choreography <> Body Code: Software Deployment and Notational Engagement without Trace","title-short":"Sound Choreography <> Body Code","type":"article-journal","URL":"https://doi.org/10.1080/10486801.2017.1343244","volume":"27"}, + {"id":"SignsInkaKhipu","citation-key":"SignsInkaKhipu","source":"Amazon","title":"Signs of the Inka Khipu: Binary Coding in the Andean Knotted-String Records","title-short":"Signs of the Inka Khipu","type":"book"}, + {"id":"simonPatternMusic1992","author":[{"family":"Simon","given":"Herbert A."},{"family":"Sumner","given":"Richard K."}],"citation-key":"simonPatternMusic1992","container-title":"Machine models of music","editor":[{"family":"Schwanauer","given":"Stephen"},{"family":"Levitt","given":"David"}],"event-place":"Cambridge, MA, USA","ISBN":"0-262-19319-1","issued":{"date-parts":[[1992]]},"page":"83–110","publisher":"MIT Press","publisher-place":"Cambridge, MA, USA","title":"Pattern in music","type":"chapter","URL":"http://portal.acm.org/citation.cfm?id=167781"}, + {"id":"singerMutualAssessmentSocial2013","abstract":"The multitude of social media channels that programmers can use to participate in software development has given rise to online developer profiles that aggregate activity across many services. Studying members of such developer profile aggregators, we found an ecosystem that revolves around the social programmer. Developers are assessing each other to evaluate whether other developers are interesting, worth following, or worth collaborating with. They are self-conscious about being assessed, and thus manage their public images. They value passion for software development, new technologies, and learning. Some recruiters participate in the ecosystem and use it to find candidates for hiring; other recruiters struggle with the interpretation of signals and issues of trust. This mutual assessment is changing how software engineers collaborate and how they advance their skills.","author":[{"family":"Singer","given":"Leif"},{"family":"Filho","given":"Fernando F."},{"family":"Cleary","given":"Brendan"},{"family":"Treude","given":"Christoph"},{"family":"Storey","given":"Margaret A."},{"family":"Schneider","given":"Kurt"}],"citation-key":"singerMutualAssessmentSocial2013","collection-title":"CSCW '13","container-title":"Proceedings of the 2013 Conference on Computer Supported Cooperative Work","DOI":"10.1145/2441776.2441791","event-place":"San Antonio, Texas, USA","ISBN":"978-1-4503-1331-5","issued":{"date-parts":[[2013]]},"page":"103–116","publisher":"ACM","publisher-place":"San Antonio, Texas, USA","title":"Mutual Assessment in the Social Programmer Ecosystem: An Empirical Investigation of Developer Profile Aggregators","type":"paper-conference","URL":"http://dx.doi.org/10.1145/2441776.2441791"}, + {"id":"siySegmentationbasedApproachTemporal2008","abstract":"Time series segmentation is a promising approach to discover temporal patterns from time-stamped numeric data. A novel approach to apply time series segmentation to discern temporal information from software version repositories is proposed. Data from such repositories, both numeric and non-numeric, are represented as item-set time series data. A dynamic programming algorithm for optimal segmentation is presented. The algorithm automatically produces a compacted item-set time series that can be analyzed to identify temporal patterns. The effectiveness of the approach is illustrated by analyzing version control repositories of several open-source projects to identify time-varying patterns of developer activity. The experimental results show that the segmentation algorithm produces segments that capture meaningful information and is superior to the information content obtained by arbitrarily segmenting software history into regular time intervals. Copyright \\copyright 2008 John Wiley & Sons, Ltd. A preliminary version [1] of this paper appears in the proceedings of the 2007 International Conference On Software Maintenance (ICSM '07), Paris, France.","author":[{"family":"Siy","given":"Harvey"},{"family":"Chundi","given":"Parvathi"},{"family":"Rosenkrantz","given":"Daniel J."},{"family":"Subramaniam","given":"Mahadevan"}],"citation-key":"siySegmentationbasedApproachTemporal2008","container-title":"J. Softw. Maint. Evol.","ISSN":"1532-060X","issued":{"date-parts":[[2008,5]]},"page":"199–222","title":"A segmentation-based approach for temporal analysis of software version repositories","type":"article-journal","URL":"http://portal.acm.org/citation.cfm?id=1379054","volume":"20"}, + {"id":"SketchAnalyticalEngine","citation-key":"SketchAnalyticalEngine","language":"en","page":"63","source":"Zotero","title":"Sketch of the Analytical Engine Invented by Charles Babbage","type":"article-journal"}, + {"id":"SketchAnalyticalEnginea","accessed":{"date-parts":[[2021,2,17]]},"citation-key":"SketchAnalyticalEnginea","title":"Sketch of the analytical engine invented by Cha...","type":"webpage","URL":"https://repository.ou.edu/uuid/6235e086-c11a-56f6-b50d-1b1f5aaa3f5e#page/1/mode/2up"}, + {"id":"slawsonSoundColour1985","author":[{"family":"Slawson","given":"Wayne"}],"citation-key":"slawsonSoundColour1985","ISBN":"0-520-05185-8","issued":{"date-parts":[[1985]]},"note":"Published: Hardcover","publisher":"University of California Press","title":"Sound Colour","type":"book","URL":"http://www.worldcat.org/isbn/0520051858"}, + {"id":"smalleyDefiningTimbreRefining1994","abstract":"Timbre is defined as the attribution of spectromorphological identity. Electroacoustic music experience, particularly acousmatic music, questions the viability of a notion of timbre. Of primary significance is the traditional linking of timbre to the source and cause of a sound: the concept of source-cause texture is introduced to define this link. The ambiguous relationship between pitch and timbre indicates that timbre cannot be defined as that part of the sound which is not pitch. Problems in establishing the existence of sonic identities within the musical context, and of maintaining the coherence of identities are discussed, opening up questions relating to musical discourse. Two types of discourse transformational and typological are defined, leading to the notion of generic timbre. In a spectromorphological music where defining identities becomes problematic it becomes impossible to disentangle timbre from discourse: here the notion of timbre has a limited viability.","author":[{"family":"Smalley","given":"Denis"}],"citation-key":"smalleyDefiningTimbreRefining1994","container-title":"Contemporary Music Review","DOI":"10.1080/07494469400640281","issue":"2","issued":{"date-parts":[[1994]]},"page":"35–48","title":"Defining timbre Refining timbre","type":"article-journal","URL":"http://dx.doi.org/10.1080/07494469400640281","volume":"10"}, + {"id":"smalleyPracticalCommentsComposers1989","author":[{"family":"Smalley","given":"Dennis"}],"citation-key":"smalleyPracticalCommentsComposers1989","container-title":"Structure and Perception of Electroacoustic Sound and Music, Proceedings of the Marcus Wallenberg symposium 1998","editor":[{"family":"Nielzén","given":"Sören"},{"family":"Olsson","given":"Olle"}],"issued":{"date-parts":[[1989]]},"page":"195–196","publisher":"Excerpta Medica","title":"Practical comments on composers and scientists","type":"paper-conference"}, + {"id":"smallMusickingMeaningsPerforming1998","abstract":"Extending the inquiry of his early groundbreaking books, Christopher Small strikes at the heart of traditional studies of Western music by asserting that music is not a thing, but rather an activity. In this new book, Small outlines a theory of what he terms \"musicking,\" a verb that encompasses all musical activity from composing to performing to listening to a Walkman to singing in the shower.

Using Gregory Bateson's philosophy of mind and a Geertzian thick description of a typical concert in a typical symphony hall, Small demonstrates how musicking forms a ritual through which all the participants explore and celebrate the relationships that constitute their social identity. This engaging and deftly written trip through the concert hall will have readers rethinking every aspect of their musical worlds.","author":[{"family":"Small","given":"Christopher"}],"citation-key":"smallMusickingMeaningsPerforming1998","edition":"First","ISBN":"0-8195-2257-0","issued":{"date-parts":[[1998,6]]},"note":"Published: Paperback","publisher":"Wesleyan","title":"Musicking: The Meanings of Performing and Listening (Music Culture)","type":"book","URL":"http://www.worldcat.org/isbn/0819522570"}, + {"id":"smallMusicSocietyEducation1996","abstract":"Cited by Soundpost as \"remarkable and revolutionary\" upon its publication in1977, Music, Society, Education has become a classic in the study of music asa social force. Christopher Small sets out to examine the social implicationsof Western classical music, effects that until recently have been largelyignored or dismissed by most musicologists. He strives to view the Westernmusical tradition \"through the mirror of these other musics [Balinese andAfrican] as it were from the outside, and in so doing to learn something ofthe inner unspoken nature of Western culture as a whole.\"As series co-editor Robert Walser writes, \"By pointing to the complicity ofWestern culture with Western imperialism, Small challenges us to create afuture that is more humane than the past. And by writing a book that enablesus to rethink so fundamentally our involvements with music, he teaches us howwe might get there.\"","author":[{"family":"Small","given":"Christopher"}],"citation-key":"smallMusicSocietyEducation1996","edition":"New edition","ISBN":"0-8195-6307-2","issued":{"date-parts":[[1996,10]]},"note":"Published: Paperback","publisher":"Wesleyan University Press","title":"Music, Society, Education (Music/Culture)","type":"book","URL":"http://www.worldcat.org/isbn/0819563072"}, + {"id":"smithProgrammingExperienceInspiration1995","abstract":"The Self system attempts to integrate intellectual and nonintellectual aspects of programming to create an overall experience. The language semantics, user interface, and implementation each help create this integrated experience. The language semantics embed the programmer in a uniform world of simple objects that can be modified without appealing to definitions of abstractions. In a similar way, the graphical interface puts the user into a uniform world of tangible objects that can be direcdy manipulated and changed without switching modes. The implementation strives to support the world-of-objects illusion by minimizing perceptible pauses and by providing true source-level semantics without sacrificing performance. As a side benefit, it encourages factoring. Although we see areas that fall short of the vision, on the whole, the language, interface, and implementation conspire so that die Self programmer lives and acts in a consistent and malleable world of objects.","author":[{"family":"Smith","given":"Randall B."},{"family":"Ungar","given":"David"}],"citation-key":"smithProgrammingExperienceInspiration1995","collection-title":"ECOOP '95","container-title":"Proceedings of the 9th European Conference on Object-Oriented Programming","event-place":"London, UK, UK","ISBN":"3-540-60160-0","issued":{"date-parts":[[1995]]},"page":"303–330","publisher":"Springer-Verlag","publisher-place":"London, UK, UK","title":"Programming as an Experience: The Inspiration for Self","type":"paper-conference","URL":"http://portal.acm.org/citation.cfm?id=679530"}, + {"id":"smithReflectingDevelopmentInterpretative2004","abstract":"This paper reflects on the development of interpretative phenomenological analysis (IPA) as one particular qualitative approach to psychology. After a brief introduction to IPA, the paper outlines what can be described as its characteristic features: idiographic, inductive, interrogative, illustrating each feature with examples from studies which have been conducted with IPA. The paper then considers the different levels of interpretation, which are possible with IPA and discusses the notion of when an interpretation is ?good enough?. It goes on to consider issues around the types of topics for which IPA is suitable and the emerging pattern of work using the approach. The next section considers how IPA studies can widen the type of participants included and also examines the suitability of different data collection methods. The paper finishes by bringing together some thoughts on the future development of IPA.","author":[{"family":"Smith","given":"Jonathan A."}],"citation-key":"smithReflectingDevelopmentInterpretative2004","container-title":"Qualitative Research in Psychology","DOI":"10.1191/1478088704qp004oa","issue":"1","issued":{"date-parts":[[2004,1]]},"page":"39–54","title":"Reflecting on the development of interpretative phenomenological analysis and its contribution to qualitative research in psychology","type":"article-journal","URL":"http://dx.doi.org/10.1191/1478088704qp004oa","volume":"1"}, + {"id":"snyderWebSongWeaving1981","author":[{"family":"Snyder","given":"Jane M."}],"citation-key":"snyderWebSongWeaving1981","container-title":"The Classical Journal","issue":"3","issued":{"date-parts":[[1981]]},"title":"The Web of Song: Weaving Imagery in Homer and the Lyric Poets","type":"article-journal","URL":"http://www.jstor.org/stable/3297321","volume":"76"}, + {"id":"solomonPurescriptocarina2022","abstract":"Web audio graphs as a stream","accessed":{"date-parts":[[2022,6,24]]},"author":[{"family":"Solomon","given":"Mike"}],"citation-key":"solomonPurescriptocarina2022","genre":"PureScript","issued":{"date-parts":[[2022,6,20]]},"original-date":{"date-parts":[[2021,3,25]]},"source":"GitHub","title":"purescript-ocarina","type":"book","URL":"https://github.com/mikesol/purescript-ocarina"}, + {"id":"sorensenAacellPracticeApproach2007","author":[{"family":"Sorensen","given":"A."},{"family":"Brown","given":"A. R."}],"citation-key":"sorensenAacellPracticeApproach2007","container-title":"Proceedings of the International Computer Music Conference","event-place":"Copenhagen, Denmark","issued":{"date-parts":[[2007]]},"publisher-place":"Copenhagen, Denmark","title":"aa-cell in Practice: An approach to musical live coding","type":"paper-conference"}, + {"id":"sorensenDistributedMemoryNetworked2010","author":[{"family":"Sorensen","given":"Andrew"}],"citation-key":"sorensenDistributedMemoryNetworked2010","container-title":"Proceedings of International Computer Music Conference 2010","issued":{"date-parts":[[2010]]},"title":"A Distributed Memory For Networked Livecoding Performance","type":"paper-conference"}, + {"id":"sorensenImpromptuInteractiveProgramming2005","author":[{"family":"Sorensen","given":"Andrew"}],"citation-key":"sorensenImpromptuInteractiveProgramming2005","container-title":"Proceedings of the Australasian Computer Music Conference 2005","issued":{"date-parts":[[2005]]},"page":"149–153","title":"Impromptu: An interactive programming environment for composition and performance","type":"paper-conference"}, + {"id":"sorensenProgrammingTimeCyberphysical2010","abstract":"The act of computer programming is generally considered to be temporally removed from a computer program's execution. In this paper we discuss the idea of programming as an activity that takes place within the temporal bounds of a real-time computational process and its interactions with the physical world. We ground these ideas within the con- text of livecoding – a live audiovisual performance practice. We then describe how the development of the programming environment \"Impromptu\" has addressed our ideas of programming with time and the notion of the programmer as an agent in a cyber-physical system.","author":[{"family":"Sorensen","given":"Andrew"},{"family":"Gardner","given":"Henry"}],"citation-key":"sorensenProgrammingTimeCyberphysical2010","container-title":"Proceedings of ACM OOPLSA","DOI":"10.1145/1869459.1869526","ISBN":"978-1-4503-0203-6","issued":{"date-parts":[[2010]]},"page":"822–834","title":"Programming with time: cyber-physical programming with impromptu","type":"paper-conference","URL":"http://dx.doi.org/10.1145/1869459.1869526"}, + {"id":"SoundChoreographerBody2017","author":[{"family":"","given":"CTR"}],"citation-key":"SoundChoreographerBody2017","container-title":"Contemporary Theatre Review","issued":{"date-parts":[[2017,11,1]]},"language":"English","title":"Sound Choreographer <> Body Code","type":"post-weblog","URL":"https://www.contemporarytheatrereview.org/2017/sound-choreographer-body-code/"}, + {"id":"spencerSpeedAnalysesStimulus1996","abstract":"The functional substitutability of stimuli in equivalence classes was examined through analyses of the speed of college students' accurate responding. After training subjects to respond to 18 conditional relations, subjects' accuracy and speed of accurate responding were compared across trial types (baseline, symmetry, transitivity, and combined transitivity and symmetry) and nodal distance (one- through five-node transitive and combined transitive and symmetric relations). Differences in accuracy across nodal distance and trial type were significant only on the first tests of equivalence, whereas differences in speed were significant even after extended testing. Response speed was inversely related to the number of nodes on which the tested relations were based. Significant differences in response speed were also found across trial types, except between transitivity and combined trials. To determine the generality of these comparisons, three groups of subjects were included: An instructed group was given an instruction that specified the interchangeability of stimuli related through training; a queried group was queried about the basis for test-trial responding: and a standard group was neither instructed nor queried. There were no significant differences among groups. These results suggest the use of response speed and response accuracy to measure the strength of matching relations.","author":[{"family":"Spencer","given":"T. J."},{"family":"Chase","given":"P. N."}],"citation-key":"spencerSpeedAnalysesStimulus1996","container-title":"Journal of the experimental analysis of behavior","DOI":"10.1901/jeab.1996.65-643","ISSN":"0022-5002","issue":"3","issued":{"date-parts":[[1996,5]]},"page":"643–659","PMID":"8636663","title":"Speed analyses of stimulus equivalence.","type":"article-journal","URL":"http://dx.doi.org/10.1901/jeab.1996.65-643","volume":"65"}, + {"id":"spiegelManipulationsMusicalPatterns1981","author":[{"family":"Spiegel","given":"Laurie"}],"citation-key":"spiegelManipulationsMusicalPatterns1981","container-title":"Proceedings of the Symposium on Small Computers and the Arts","issued":{"date-parts":[[1981]]},"page":"19–22","title":"Manipulations of Musical Patterns","type":"paper-conference"}, + {"id":"spiegelShortHistoryIntelligent1987","author":[{"family":"Spiegel","given":"Laurie"}],"citation-key":"spiegelShortHistoryIntelligent1987","container-title":"Computer Music Journal","issue":"3","issued":{"date-parts":[[1987]]},"title":"A Short History of Intelligent Instruments","type":"article-journal","volume":"11"}, + {"id":"spolskyDonLetArchitecture2004","author":[{"family":"Spolsky","given":"Joel"}],"citation-key":"spolskyDonLetArchitecture2004","container-title":"Joel on Software","ISBN":"1-59059-389-8","issued":{"date-parts":[[2004,8]]},"note":"Published: Paperback","page":"111–114","publisher":"Apress","title":"Don't Let Architecture Astronauts Scare You","type":"chapter","URL":"http://www.worldcat.org/isbn/1590593898"}, + {"id":"standageReturnMachineryQuestion2016","accessed":{"date-parts":[[2017,5,18]]},"author":[{"family":"Standage","given":"Tom"}],"citation-key":"standageReturnMachineryQuestion2016","container-title":"The Economist, edição de","issued":{"date-parts":[[2016]]},"source":"Google Scholar","title":"The return of the machinery question","type":"article-journal","URL":"http://www.egr.msu.edu/aesc310/resources/Big%20data%20and%20AI/Artificial%20Intelligence%20-%20Economist.pdf","volume":"25"}, + {"id":"steadUserConfigurableMachine2011","author":[{"family":"Stead","given":"Alistair G."}],"citation-key":"steadUserConfigurableMachine2011","container-title":"Proceedings of Psychology of Programming Interest Group 2011","issued":{"date-parts":[[2011]]},"title":"User configurable machine vision for mobiles","type":"paper-conference"}, + {"id":"steeleMysteryMozartEffect1999","abstract":"The Mozart effect is the purported increase in spatial-reasoning performance immediately after exposure to a Mozart piano sonata. Several laboratories have been unable to confirm the existence of the effect despite two positive reports from the original laboratory. The authors of the original studies have provided a list of key procedural components to produce the effect. This experiment attempted to produce a Mozart effect by following those procedural instructions and replicating the procedure of one of the original positive reports. The experiment failed to produce either a statistically significant Mozart effect or an effect size suggesting practical significance. This general lack of effect is consistent with previous work by other investigators. We conclude that there is little evidence to support basing intellectual intervention programs on the existence of the Mozart effect.","author":[{"family":"Steele","given":"Kenneth M."},{"family":"Bass","given":"Karen E."},{"family":"Crook","given":"Melissa D."}],"citation-key":"steeleMysteryMozartEffect1999","container-title":"Psychological Science","DOI":"10.1111/1467-9280.00169","ISSN":"0956-7976","issued":{"date-parts":[[1999,7]]},"page":"366–369","title":"The Mystery of the Mozart Effect: Failure to Replicate","type":"article-journal","URL":"http://dx.doi.org/10.1111/1467-9280.00169"}, + {"id":"stefanowitschCorpusBasedApproachesMetaphor2006","citation-key":"stefanowitschCorpusBasedApproachesMetaphor2006","collection-title":"Trends in Linguistics. Studies and Monographs 171","editor":[{"family":"Stefanowitsch","given":"Anatol"},{"family":"Th","given":"Stefan"}],"event-place":"Berlin","issued":{"date-parts":[[2006]]},"publisher":"Mouton de Gruyter","publisher-place":"Berlin","title":"Corpus-Based Approaches to Metaphor and Metonymy","type":"book","URL":"http://linguistlist.org/pubs/books/get-book.cfm?BookID=19056"}, + {"id":"steinbeisSharedNeuralResources2008","abstract":"Harmonic tension-resolution patterns have long been hypothesized to be meaningful to listeners familiar with Western music. Even though it has been shown that specifically chosen musical pieces can prime meaningful concepts, the empirical evidence in favor of such a highly specific semantic pathway has been lacking. Here we show that 2 event-related potentials in response to harmonic expectancy violations, the early right anterior negativity (ERAN) and the N500, could be systematically modulated by simultaneously presented language material containing either a syntactic or a semantic violation. Whereas the ERAN was reduced only when presented concurrently with a syntactic language violation and not with a semantic language violation, this pattern was reversed for the N500. This is the first piece of evidence showing that tension- resolution patterns represent a route to meaning in music.","author":[{"family":"Steinbeis","given":"Nikolaus"},{"family":"Koelsch","given":"Stefan"}],"citation-key":"steinbeisSharedNeuralResources2008","container-title":"Cerebral cortex (New York, N.Y. : 1991)","DOI":"10.1093/cercor/bhm149","ISSN":"1460-2199","issue":"5","issued":{"date-parts":[[2008,5]]},"page":"1169–1178","PMID":"17720685","title":"Shared neural resources between music and language indicate semantic processing of musical tension-resolution patterns.","type":"article-journal","URL":"http://dx.doi.org/10.1093/cercor/bhm149","volume":"18"}, + {"id":"stenningCognitiveTheoryGraphical1995","abstract":"We discuss external and internal graphical and linguistic representational systems. We argue that a cognitive theory of peoples' reasoning performance must account for (a) the logical equivalence of inferences expressed in graphical and linguistic form, and (b) the implementational differences that affect facility of inference. Our theory proposes that graphical representation limit abstraction and thereby aid ” processibility”. We discuss the ideas of specificity and abstraction, and their cognitive relevance. Empirical support both comes from tasks which involve the manipulation of external graphics and tasks that do not. For the former, we take Euler's (1772) circles, provide a novel computational reconstruction, show how it captures abstractions, and contrast it with earlier construals and with Johnson-Laird's (1983) mental models representations. We demonstrate equivalence of the graphical Euler system, and the nongraphical mental models system. For tasks not involving manipulation of external graphics, we discuss text comprehension, and the mental performance of syllogisms. By positing an internal system with the same specificity as Euler's circles, we cover the mental models data, and generate new empirical predictions. Finally, we consider how the architecture of working memory explains why such specific representations are relatively easy to store.","author":[{"family":"Stenning","given":"Keith"},{"family":"Oberlander","given":"Jon"}],"citation-key":"stenningCognitiveTheoryGraphical1995","container-title":"Cognitive Science","DOI":"10.1207/s15516709cog1901_3","issue":"1","issued":{"date-parts":[[1995,1]]},"page":"97–140","title":"A Cognitive Theory of Graphical and Linguistic Reasoning: Logic and Implementation","type":"article-journal","URL":"http://dx.doi.org/10.1207/s15516709cog1901_3","volume":"19"}, + {"id":"sterlingArtPrologAdvanced1994","abstract":"This second edition contains revised chapters taking into account recent research advances. More advanced exercises have been included, and \"Part II The Prolog Language\" has been modified to be compatible with the new Prolog standard. This is a graduate level text that can be used for self-study.","author":[{"family":"Sterling","given":"Leon"},{"family":"Shapiro","given":"Ehud"}],"citation-key":"sterlingArtPrologAdvanced1994","edition":"Second","ISBN":"0-262-19338-8","issued":{"date-parts":[[1994,3]]},"note":"Published: Hardcover","publisher":"MIT Press","title":"The art of Prolog : advanced programming techniques","type":"book","URL":"http://www.worldcat.org/isbn/0262193388"}, + {"id":"stewartCiboV2Realtime2020","abstract":"Cibo v2 is a live-coding artificial intelligence (AI) agent that performs  TidalCycles and is trained on recorded performances by several TidalCycles performers. This paper presents an entirely new architecture from the original Cibo agent for realizing autonomous performing agents.","accessed":{"date-parts":[[2021,1,21]]},"author":[{"family":"Stewart","given":"Jeremy"},{"family":"Lawson","given":"Shawn"},{"family":"Hodnick","given":"Mike"},{"family":"Gold","given":"Ben"}],"citation-key":"stewartCiboV2Realtime2020","DOI":"10.5281/zenodo.3939174","event-place":"Limerick, Ireland","ISBN":"9781911620235","issued":{"date-parts":[[2020,2,5]]},"page":"20-31","publisher":"University of Limerick","publisher-place":"Limerick, Ireland","title":"Cibo v2: Realtime Livecoding A.I. Agent","title-short":"Cibo v2","type":"speech","URL":"https://zenodo.org/record/3939174#.YAldAFn7SV4"}, + {"id":"stewartDynamicApplicationsGround2005","abstract":"Some Lisp programs such as Emacs, but also the Linux kernel (when fully modularised) are mostly dynamic; i.e., apart from a small static core, the significant functionality is dynamically loaded. In this paper, we explore fully dynamic applications in Haskell where the static core is minimal and code is hot swappable. We demonstrate the feasibility of this architecture by two applications: Yi, an extensible editor, and Lambdabot, a plugin-based IRC robot. Benefits of the approach include hot swappable code and sophisticated application configuration and extension via embedded DSLs. We illustrate both benefits in detail at the example of a novel embedded DSL for editor interfaces.","author":[{"family":"Stewart","given":"Don"},{"family":"Chakravarty","given":"Manuel M. T."}],"citation-key":"stewartDynamicApplicationsGround2005","container-title":"Proceedings of ACM SIGPLAN workshop on Haskell 2005","DOI":"10.1145/1088348.1088352","event-place":"Tallinn, Estonia","ISBN":"1-59593-071-X","issued":{"date-parts":[[2005]]},"page":"27–38","publisher":"ACM","publisher-place":"Tallinn, Estonia","title":"Dynamic applications from the ground up","type":"paper-conference","URL":"http://dx.doi.org/10.1145/1088348.1088352"}, + {"id":"stewartFearfulSymmetryGod2010","abstract":"From the shapes of clouds to dewdrops on a spider's web, this accessible book employs the mathematical concepts of symmetry to portray fascinating facets of the physical and biological world. More than 120 illustrations.","author":[{"family":"Stewart","given":"Ian"}],"citation-key":"stewartFearfulSymmetryGod2010","event-place":"Mineola, N.Y","ISBN":"978-0-486-47758-9","issued":{"date-parts":[[2010,9,24]]},"language":"English","number-of-pages":"320","publisher":"Dover Publications Inc.","publisher-place":"Mineola, N.Y","source":"Amazon","title":"Fearful Symmetry: Is God a Geometer?","title-short":"Fearful Symmetry","type":"book"}, + {"id":"stewartMusicBrainDisorders2006","author":[{"family":"Stewart","given":"Lauren"},{"family":"Kriegstein","given":"Katharina","non-dropping-particle":"von"},{"family":"Warren","given":"Jason D."},{"family":"Griffiths","given":"Timothy D."}],"citation-key":"stewartMusicBrainDisorders2006","container-title":"Brain","DOI":"10.1093/brain/awl171","ISSN":"0006-8950","issue":"10","issued":{"date-parts":[[2006,10]]},"page":"2533–2553","PMID":"16845129","title":"Music and the brain: disorders of musical listening","type":"article-journal","URL":"http://dx.doi.org/10.1093/brain/awl171","volume":"129"}, + {"id":"stewartMusicPerceptionSounds2007","abstract":"A recent study of spatial processing in amusia makes a controversial claim that such musical deficits may be understood in terms of a problem in the representation of space. If such a link is demonstrated to be causal, it would challenge the prevailing view that deficits in amusia are specific to the musical or even the auditory domain.","author":[{"family":"Stewart","given":"L."},{"family":"Walsh","given":"V."}],"citation-key":"stewartMusicPerceptionSounds2007","container-title":"Current biology : CB","DOI":"10.1016/j.cub.2007.08.012","ISSN":"0960-9822","issue":"20","issued":{"date-parts":[[2007,10]]},"PMID":"17956751","title":"Music perception: sounds lost in space.","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.cub.2007.08.012","volume":"17"}, + {"id":"stockhausenStockhausenMusic2000","author":[{"family":"Stockhausen","given":"Karlheinz"},{"family":"Maconie","given":"Robin"}],"citation-key":"stockhausenStockhausenMusic2000","ISBN":"0-7145-2918-4","issued":{"date-parts":[[2000,5]]},"note":"Published: Paperback","publisher":"Marion Boyars Publishers Ltd","title":"Stockhausen on Music","type":"book","URL":"http://www.worldcat.org/isbn/0714529184"}, + {"id":"stoffregenSpecificationSenses2001","author":[{"family":"Stoffregen","given":"Thomas"},{"family":"Bardy","given":"Benoit"}],"citation-key":"stoffregenSpecificationSenses2001","container-title":"Behavioral and Brain Sciences","event-place":"USA","issued":{"date-parts":[[2001]]},"page":"195–265","publisher-place":"USA","title":"On specification and the senses","type":"paper-conference","URL":"http://www.bbsonline.org/documents/a/00/00/04/75/bbs00000475-00/bbs.stoffregen.html","volume":"24"}, + {"id":"storeyTheoriesToolsResearch2006","author":[{"family":"Storey","given":"Margaret-Anne"}],"citation-key":"storeyTheoriesToolsResearch2006","container-title":"Software Quality Journal","DOI":"10.1007/s11219-006-9216-4","issued":{"date-parts":[[2006]]},"page":"187–208","title":"Theories, tools and research methods in program comprehension: past, present and future","type":"article-journal","URL":"http://dx.doi.org/10.1007/s11219-006-9216-4","volume":"14"}, + {"id":"stowellCharacteristicsBeatboxingVocal2008","abstract":"Nice and short description of beatboxing techniques, including IPA (where possible). The requirement to produce convincing imitations of drum tracks, in part by suppressing vocal cues differentiates beat-boxing from e.g. bol syllables and scat singing. This is done in part by inhalation, unusual trills and clicks and close micing techniques.","author":[{"family":"Stowell","given":"Dan"}],"citation-key":"stowellCharacteristicsBeatboxingVocal2008","issued":{"date-parts":[[2008]]},"publisher":"Queen Mary, University of London","title":"Characteristics of the beatboxing vocal style, C4DM-TR-08-01","type":"report"}, + {"id":"stowellEvaluationLiveHuman2009","abstract":"Live music-making using interactive systems is not completely amenable to traditional HCI evaluation metrics such as task-completion rates. In this paper we discuss quantitative and qualitative approaches which provide opportunities to evaluate the music-making interaction, accounting for aspects which cannot be directly measured or expressed numerically, yet which may be important for participants. We present case studies in the application of a qualitative method based on Discourse Analysis, and a quantitative method based on the Turing Test. We compare and contrast these methods with each other, and with other evaluation approaches used in the literature, and discuss factors affecting which evaluation methods are appropriate in a given context.","author":[{"family":"Stowell","given":"D."},{"family":"Robertson","given":"A."},{"family":"Bryan-Kinns","given":"N."},{"family":"Plumbley","given":"M. D."}],"citation-key":"stowellEvaluationLiveHuman2009","container-title":"International Journal of Human-Computer Studies","DOI":"10.1016/j.ijhcs.2009.05.007","ISSN":"10715819","issue":"11","issued":{"date-parts":[[2009,11]]},"page":"960–975","title":"Evaluation of live human–computer music-making: Quantitative and qualitative approaches","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.ijhcs.2009.05.007","volume":"67"}, + {"id":"stowellLiveMusicmakingRich2011","abstract":"In this position paper we present some themes of our research, strands of which reflect our title's assertion in various ways. Our focus here is on live musicmaking, in particular improvised or part-improvised performances which incorporate digital technologies.","author":[{"family":"Stowell","given":"Dan"},{"family":"McLean","given":"Alex"}],"citation-key":"stowellLiveMusicmakingRich2011","container-title":"Proceedings of BCS HCI 2011 Workshop - When Words Fail: What can Music Interaction tell us about HCI?","issued":{"date-parts":[[2011]]},"title":"Live music-making: a rich open task requires a rich open interface","type":"paper-conference"}, + {"id":"stowellLiveMusicMakingRich2012","author":[{"family":"Stowell","given":"Dan"},{"family":"McLean","given":"Alex"}],"citation-key":"stowellLiveMusicMakingRich2012","container-title":"Music and Human-Computer Interaction","editor":[{"family":"Holland","given":"S."},{"family":"Wilkie","given":"K."},{"family":"Mulholland","given":"P."},{"family":"Seago","given":"A."}],"ISBN":"978-1-4471-2989-9","issued":{"date-parts":[[2012,5]]},"page":"139–152","publisher":"Springer","title":"Live Music-Making: a Rich Open Task Requires a Rich Open Interface","type":"chapter"}, + {"id":"stringfellowDerivingChangeArchitectures2004","author":[{"family":"Stringfellow","given":"C."},{"family":"Amory","given":"C. D."},{"family":"Potnuri","given":"D."},{"family":"Georg","given":"M."},{"family":"Andrews","given":"A."}],"citation-key":"stringfellowDerivingChangeArchitectures2004","issued":{"date-parts":[[2004]]},"number-of-pages":"210+","title":"Deriving change architectures from RCS history","type":"book"}, + {"id":"stroopStudiesInterferenceSerial1935","author":[{"family":"Stroop","given":"J. R."}],"citation-key":"stroopStudiesInterferenceSerial1935","container-title":"Journal of Experimental Psychology","issue":"6","issued":{"date-parts":[[1935]]},"title":"Studies of interference in serial verbal reactions.","type":"article-journal","volume":"18"}, + {"id":"sundbergMusicalSignificanceMusicians1994","author":[{"family":"Sundberg","given":"J."}],"citation-key":"sundbergMusicalSignificanceMusicians1994","container-title":"Phonetica","issue":"51","issued":{"date-parts":[[1994]]},"page":"132–145","title":"Musical significance of musicians' syllable choice in improvized nonsense-text singing. A preliminary study","type":"article-journal","volume":"1-3"}, + {"id":"SuperDirt2022","abstract":"Tidal Audio Engine","accessed":{"date-parts":[[2022,6,24]]},"citation-key":"SuperDirt2022","genre":"SuperCollider","issued":{"date-parts":[[2022,6,24]]},"original-date":{"date-parts":[[2015,11,3]]},"publisher":"musikinformatik","source":"GitHub","title":"SuperDirt","type":"book","URL":"https://github.com/musikinformatik/SuperDirt"}, + {"id":"sutton-spenceLinguisticsBritishSign1999","abstract":"This is the first textbook dealing specifically with British sign linguistics. It provides essential support for learners of British Sign Language and others interested in the structure and use of BSL, and assumes no previous knowledge of linguistics and sign language. Technical terms and linguistic jargon are kept to a minimum. The book contains over three hundred illustrations and an index of signs and sign phrases. There are also exercises and a reading list for further independent study.","author":[{"family":"Sutton-Spence","given":"Rachel"},{"family":"Woll","given":"Bencie"}],"citation-key":"sutton-spenceLinguisticsBritishSign1999","ISBN":"0-521-63718-X","issued":{"date-parts":[[1999,3]]},"note":"Published: Paperback","publisher":"Cambridge University Press","title":"The Linguistics of British Sign Language: An Introduction","type":"book","URL":"http://www.worldcat.org/isbn/052163718X"}, + {"id":"SweetAnticipation","accessed":{"date-parts":[[2017,10,23]]},"citation-key":"SweetAnticipation","container-title":"MIT Press","title":"Sweet Anticipation","type":"webpage","URL":"https://mitpress.mit.edu/books/sweet-anticipation"}, + {"id":"szaboAnfaengeGriechischenMathematik1969","abstract":"Gerade heute, wo sich die Aufmerksamkeit der führenden Philosophen, Logiker und Mathematiker erneut auf die Grundlagen der systematisch-deduktiven Mathematik richtet, ist dieses Buch von zeitnaher und tiefer Bedeutung.","author":[{"family":"Szabo","given":"Arpad"}],"citation-key":"szaboAnfaengeGriechischenMathematik1969","edition":"Reprint 2015","event-place":"München","ISBN":"978-3-486-47201-1","issued":{"date-parts":[[1969,12,1]]},"language":"Deutsch","number-of-pages":"494","publisher":"De Gruyter Oldenbourg","publisher-place":"München","source":"Amazon","title":"Anfänge der griechischen Mathematik","type":"book"}, + {"id":"takateraColorOrderWeave1988","abstract":"An efficient algorithm is developed for determining the color ordering of the warp and weft threads which yields a given pattern of color-and-weave effect. The conditions for the interlacement matrix determined by the color order of the threads are also given. All of the weaves satisfy the conditions which can be briefly represented by a design of “conditional weave”.The pattern of a two colored color-and-weave effect can be classified into three types by an adaptation of the Newton's8) weave classification scheme. It was found that only type 3 (that classified as a multilayer weave without stitching) is a pattern suitable for color-and-weave effect.","author":[{"family":"Takatera","given":"Masayuki"},{"family":"Shinohara","given":"Akira"}],"citation-key":"takateraColorOrderWeave1988","container-title":"Sen'i Gakkaishi","DOI":"10.2115/fiber.44.7_339","issue":"7","issued":{"date-parts":[[1988]]},"page":"339-346","source":"J-Stage","title":"Color Order and Weave on a Given Color-and-Weave Effect","type":"article-journal","volume":"44"}, + {"id":"TalaMusic2016","abstract":"A Tala (IAST tāla), sometimes spelled Taala, Taal or Tal, literally means a \"clap, tapping one's hand on one's arm, a musical measure\". It is the term used in Indian classical music to refer to musical meter, that is any rhythmic beat or strike that measures musical time. The measure is typically established by hand clapping, waving, touching fingers on thigh or the other hand, verbally, striking of small cymbals, or a percussion instrument in the South Asian traditions. Along with raga which forms the fabric of a melodic structure, the tala forms the time cycle and thereby constitutes one of the two foundational elements of Indian music.\nTala is an ancient music concept traceable to Vedic era texts of Hinduism, such as the Samaveda and methods for singing the Vedic hymns. The music traditions of the North and South India, particularly the raga and tala systems, were not considered as distinct till about the 16th century. There on, during the turmoils of Islamic rule period of the Indian subcontinent, the traditions separated and evolved into distinct forms. The tala system of the north is called Hindustani, while the south is called Carnatic. However, the tala system between them continues to have more common features than differences.\nTala in the Indian tradition embraces the time dimension of music, the means by which musical rhythm and form were guided and expressed. While a tala carries the musical meter, it does not necessarily imply a regularly recurring pattern. In the major classical Indian music traditions, the beats are hierarchically arranged based on how the music piece is to performed. The most widely used tala in the South Indian system is adi tala. In the North Indian system, the most common tala is teental.\nTala has other contextual meanings in ancient Sanskrit texts of Hinduism. For example, it means trochee in Sanskrit prosody.","accessed":{"date-parts":[[2017,3,22]]},"citation-key":"TalaMusic2016","container-title":"Wikipedia","issued":{"date-parts":[[2016,12,17]]},"language":"en","note":"Page Version ID: 755258067","source":"Wikipedia","title":"Tala (music)","type":"entry-encyclopedia","URL":"https://en.wikipedia.org/w/index.php?title=Tala_(music)&oldid=755258067"}, + {"id":"tamarizExploringAdaptiveStructure2005","author":[{"family":"Tamariz","given":"Monica"}],"citation-key":"tamarizExploringAdaptiveStructure2005","issued":{"date-parts":[[2005]]},"publisher":"Department of theoretical and applied linguistics, Univerisity of Edinburgh","title":"Exploring the Adaptive Structure of the Mental Lexicon","type":"thesis","URL":"http://www.isrl.uiuc.edu/∼amag/langev/paper/tamariz05phd.html"}, + {"id":"tanimotoVIVAVisualLanguage1990","abstract":"Visual languages have been developed to help new programmers express algorithms easily. They also help to make experienced programmers more productive by simplifying the organization of a program through the use of visual representations. However, visual languages have not reached their full potential because of several problems including the following: difficulty of producing visual representations for the more abstract computing constructs; the lack of adequate computing power to update the visual representations in response to user actions; the immaturity of the subfield of visual programming and need for additional breakthroughs and standardization of existing mechanisms. Visualization of Vision Algorithms (VIVA) is a proposed visual language for image processing. Its main purpose is to serve as an effective teaching tool for students of image processing. Its design also takes account of several secondary goals, including the completion of a software platform for research in human/image interaction, the creation of a vehicle for studying algorithms and architectures for parallel image processing, and the establishment of a presentation medium for image-processing algorithms.","author":[{"family":"Tanimoto","given":"Steven L."}],"citation-key":"tanimotoVIVAVisualLanguage1990","container-title":"J. Vis. Lang. Comput.","DOI":"10.1016/s1045-926x(05)80012-6","ISSN":"1045-926X","issued":{"date-parts":[[1990,6]]},"page":"127–139","title":"VIVA: A visual language for image processing","type":"article-journal","URL":"http://dx.doi.org/10.1016/s1045-926x(05)80012-6","volume":"1"}, + {"id":"taubeNotesMetalevelIntroduction2004","author":[{"family":"Taube","given":"Heinrich K."}],"citation-key":"taubeNotesMetalevelIntroduction2004","event-place":"Lisse, The Netherlands","ISBN":"90-265-1957-5","issued":{"date-parts":[[2004]]},"publisher":"Swets & Zeitlinger","publisher-place":"Lisse, The Netherlands","title":"Notes from the Metalevel: Introduction to Algorithmic Music Composition","type":"book","URL":"http://portal.acm.org/citation.cfm?id=993717"}, + {"id":"TaxReturnAlex","accessed":{"date-parts":[[2021,1,29]]},"citation-key":"TaxReturnAlex","title":"Tax Return - alex@slab.org - Slab Mail","type":"webpage","URL":"https://mail.google.com/mail/u/0/#search/duncan+accountants/FMfcgxwKkRCgfbjpdlxGdPjSVhxGwrXx"}, + {"id":"TaxReturnAlexa","accessed":{"date-parts":[[2021,1,29]]},"citation-key":"TaxReturnAlexa","title":"Tax Return - alex@slab.org - Slab Mail","type":"webpage","URL":"https://mail.google.com/mail/u/0/#search/duncan+accountants/FMfcgxwKkRCgfbjpdlxGdPjSVhxGwrXx"}, + {"id":"tedreLongQuestComputational2016","abstract":"Computational thinking (CT) is a popular phrase that refers to a collection of computational ideas and habits of mind that people in computing disciplines acquire through their work in designing programs, software, simulations, and computations performed by machinery. Recently a computational thinking for K-12 movement has spawned initiatives across the education sector, and educational reforms are under way in many countries. However, modern CT initiatives should be well aware of the broad and deep history of computational thinking, or risk repeating already refuted claims, past mistakes, and already solved problems, or losing some of the richest and most ambitious ideas in CT. This paper presents an overview of three important historical currents from which CT has developed: evolution of computing's disciplinary ways of thinking and practicing, educational research and efforts in computing, and emergence of computational science and digitalization of society. The paper examines a number of threats to CT initiatives: lack of ambition, dogmatism, knowing versus doing, exaggerated claims, narrow views of computing, overemphasis on formulation, and lost sight of computational models.","accessed":{"date-parts":[[2020,4,9]]},"author":[{"family":"Tedre","given":"Matti"},{"family":"Denning","given":"Peter J."}],"citation-key":"tedreLongQuestComputational2016","collection-title":"Koli Calling '16","container-title":"Proceedings of the 16th Koli Calling International Conference on Computing Education Research","DOI":"10.1145/2999541.2999542","event-place":"Koli, Finland","ISBN":"978-1-4503-4770-9","issued":{"date-parts":[[2016,11,24]]},"page":"120–129","publisher":"Association for Computing Machinery","publisher-place":"Koli, Finland","source":"ACM Digital Library","title":"The long quest for computational thinking","type":"paper-conference","URL":"https://doi.org/10.1145/2999541.2999542"}, + {"id":"tenenbaumGeneralizationSimilarityBayesian2001","author":[{"family":"Tenenbaum","given":"Joshua B."},{"family":"Griffiths","given":"Thomas L."}],"citation-key":"tenenbaumGeneralizationSimilarityBayesian2001","container-title":"Behavioral and Brain Sciences","DOI":"10.1017/S0140525X01000061","issue":"04","issued":{"date-parts":[[2001]]},"page":"629–640","title":"Generalization, similarity, and Bayesian inference","type":"article-journal","URL":"http://journals.cambridge.org/action/displayAbstract?fromPage=online&aid=117253&fulltextType=RA&fileId=S0140525X01000061","volume":"24"}, + {"id":"terasawaPerceptualDistanceTimbre2005","author":[{"family":"Terasawa","given":"Hiroko"},{"family":"Slaney","given":"Malcolm"},{"family":"Berger","given":"Jonathan"}],"citation-key":"terasawaPerceptualDistanceTimbre2005","container-title":"Proceedings of ICAD 05-Eleventh Meeting of the International Conference on Auditory Display","issued":{"date-parts":[[2005]]},"title":"Perceptual Distance in Timbre Space","type":"paper-conference"}, + {"id":"terasawaThirteenColorsTimbre2005","abstract":"We describe a perceptual space for timbre, define an objective metric that takes into account perceptual orthogonality and measure the quality of timbre interpolation. We discuss three timbre representations and measure perceptual judgments. We determine that a timbre space based on mel-frequency cepstral coefficients (MFCC) is a good model for a perceptual timbre space.","author":[{"family":"Terasawa","given":"H."},{"family":"Slaney","given":"M."},{"family":"Berger","given":"J."}],"citation-key":"terasawaThirteenColorsTimbre2005","container-title":"Applications of Signal Processing to Audio and Acoustics, 2005. IEEE Workshop on","issued":{"date-parts":[[2005]]},"title":"The thirteen colors of timbre","type":"paper-conference","URL":"http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1540234"}, + {"id":"terzidisExpressiveFormConceptual2003","author":[{"family":"Terzidis","given":"Kostas"}],"citation-key":"terzidisExpressiveFormConceptual2003","edition":"1","ISBN":"0-415-31744-4","issued":{"date-parts":[[2003,11]]},"note":"Published: Paperback","publisher":"Routledge","title":"Expressive Form: A Conceptual Approach to Computational Design","type":"book","URL":"http://www.worldcat.org/isbn/0415317444"}, + {"id":"thielemannLiveMusikprogrammierungHaskell2012","author":[{"family":"Thielemann","given":"Henning"}],"citation-key":"thielemannLiveMusikprogrammierungHaskell2012","container-title":"CoRR","issued":{"date-parts":[[2012]]},"title":"Live-Musikprogrammierung in Haskell","type":"article-journal","volume":"abs/1202.4269"}, + {"id":"toddComputationalModelRubato1989","abstract":"Presented is a model of rubato, implemented in Lisp, in which expression is viewed as the mapping of musical structure into the variables of expression. The basic idea is that the performer uses “phrase final lengthening” as a device to reflect some internal representation of the phrase structure. The representation is based on Lardahl and Jackendoff's time-span reduction. The basic heuristic in the model is recursive involving look-ahead and planning at a number of levels. The planned phrasings are superposed beat by beat and the output from the program is a list of durations which could easily be adapted to be sent to a synthesiser given a suitable system.","author":[{"family":"Todd","given":"Neil"}],"citation-key":"toddComputationalModelRubato1989","container-title":"Contemporary Music Review","DOI":"10.1080/07494468900640061","ISSN":"0749-4467","issued":{"date-parts":[[1989]]},"page":"69–88","title":"A computational model of rubato","type":"article-journal","URL":"http://dx.doi.org/10.1080/07494468900640061"}, + {"id":"toopHauntedWeatherMusic2005","author":[{"family":"Toop","given":"David"}],"citation-key":"toopHauntedWeatherMusic2005","edition":"Main edition","event-place":"London","ISBN":"978-1-85242-789-4","issued":{"date-parts":[[2005,10,13]]},"language":"English","number-of-pages":"352","publisher":"Serpent's Tail","publisher-place":"London","source":"Amazon","title":"Haunted Weather: Music, Silence, and Memory","title-short":"Haunted Weather","type":"book"}, + {"id":"toplaPrehistoryLiveCoding2007","author":[{"family":"Topla","given":"P."}],"citation-key":"toplaPrehistoryLiveCoding2007","issued":{"date-parts":[[2007]]},"note":"Published: Audio CD","title":"A prehistory of live coding","type":"book"}, + {"id":"toussaintEuclideanAlgorithmGenerates2005","abstract":"The Euclidean algorithm (which comes down to us from Euclid's Elements) computes the greatest common divisor of two given integers. It is shown here that the structure of the Euclidean algorithm may be used to automatically generate, very efficiently, a large family of rhythms used as timelines (ostinatos), in traditional world music. These rhythms, here dubbed Euclidean rhythms, have the property that their onset patterns are distributed as evenly as possible in a mathematically precise sense, and optimal manner.","author":[{"family":"Toussaint","given":"Godfried"}],"citation-key":"toussaintEuclideanAlgorithmGenerates2005","container-title":"In Proceedings of BRIDGES: Mathematical Connections in Art, Music and Science","issued":{"date-parts":[[2005]]},"page":"47–56","title":"The Euclidean Algorithm Generates Traditional Musical Rhythms","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.62.231"}, + {"id":"toussaintGeometryMusicalRhythm2019","abstract":"The original edition of The Geometry of Musical Rhythm was the first book to provide a systematic and accessible computational geometric analysis of the musical rhythms of the world. It explained how the study of the mathematical properties of musical rhythm generates common mathematical problems that arise in a variety of seemingly disparate fields. The book also introduced the distance approach to phylogenetic analysis and illustrated its application to the study of musical rhythm. The new edition retains all of this, while also adding 100 pages, 93 figures, 225 new references, and six new chapters covering topics such as meter and metric complexity, rhythmic grouping, expressive timbre and timing in rhythmic performance, and evolution phylogenetic analysis of ancient Greek paeonic rhythms. In addition, further context is provided to give the reader a fuller and richer insight into the historical connections between music and mathematics.","author":[{"family":"Toussaint","given":"Godfried T."}],"citation-key":"toussaintGeometryMusicalRhythm2019","edition":"2nd edition","ISBN":"978-0-8153-7097-0","issued":{"date-parts":[[2019,12,13]]},"language":"English","number-of-pages":"370","publisher":"Routledge","source":"Amazon","title":"The Geometry of Musical Rhythm: What Makes a \"Good\" Rhythm Good?, Second Edition","title-short":"The Geometry of Musical Rhythm","type":"book"}, + {"id":"trainorInfantDirectedSpeechProsody2000","abstract":"Many studies have found that infant-directed (ID) speech has higher pitch, has more exaggerated pitch contours, has a larger pitch range, has a slower tempo, and is more rhythmic than typical adult-directed (AD) speech. We show that the ID speech style reflects free vocal expression of emotion to infants, in comparison with more inhibited expression of emotion in typical AD speech. When AD speech does express emotion, the same acoustic features are used as in ID speech. We recorded ID and AD samples of speech expressing love-comfort, fear, and surprise. The emotions were equally discriminable in the ID and AD samples. Acoustic analyses showed few differences between the ID and AD samples, but robust differences across the emotions. We conclude that ID prosody itself is not special. What is special is the widespread expression of emotion to infants in comparison with the more inhibited expression of emotion in typical adult interactions.","author":[{"family":"Trainor","given":"Laurel J."},{"family":"Austin","given":"Caren M."},{"family":"Desjardins","given":"Renée N."}],"citation-key":"trainorInfantDirectedSpeechProsody2000","container-title":"Psychological Science","DOI":"10.1111/1467-9280.00240","issue":"3","issued":{"date-parts":[[2000]]},"page":"188–195","title":"Is Infant-Directed Speech Prosody a Result of the Vocal Expression of Emotion?","type":"article-journal","URL":"http://dx.doi.org/10.1111/1467-9280.00240","volume":"11"}, + {"id":"traubePhoneticGesturesUnderlying2004","author":[{"family":"Traube","given":"Caroline"},{"family":"Depalle","given":"Philippe"}],"citation-key":"traubePhoneticGesturesUnderlying2004","container-title":"8th International Conference on Music Perception and Cognition (ICMPC8)","event-place":"Evanston, IL, USA","issued":{"date-parts":[[2004]]},"publisher-place":"Evanston, IL, USA","title":"Phonetic Gestures underlying Guitar Timbre Description","type":"paper-conference"}, + {"id":"traubeTimbralAnalogiesVowels2004","abstract":"Classical guitarists vary plucking position to achieve different timbres from nasal and metallic - closer to the bridge - to round and mellow -closer to the middle of the string. An interesting set of timbre descriptors commonly used by guitarists seem to refer to phonetic gestures: thin, nasal, round, open, etc. The magnitude spectrum of guitar tones being comb-filter shaped, we propose to see the local maxima of that comb filter structure as vocal formants. When guitarists talk about a guitar sound as being round, it would mean that it sounds like a round-shaped-mouth sound, such as the vowel /O/. Although the acoustic systems of the guitar and of the voice mechanism are structurally different, we highlight the fact that guitar tones and a particular set of vowels display similar formant regions. We also investigate the possibility of applying some distinctive features of speech sounds to guitar sounds.","author":[{"family":"Traube","given":"Caroline"},{"family":"Depalle","given":"Philippe"}],"citation-key":"traubeTimbralAnalogiesVowels2004","container-title":"Proceedings of IEEE International Conference on Acoustics, Speech, and Signal Processing.","issued":{"date-parts":[[2004]]},"title":"Timbral analogies between vowels and plucked string tones","type":"paper-conference","volume":"4"}, + {"id":"traubeVerbalDescriptorsTimbre2004","author":[{"family":"Traube","given":"Caroline"},{"family":"McCutcheon","given":"Peter"},{"family":"Depalle","given":"Philippe"}],"citation-key":"traubeVerbalDescriptorsTimbre2004","container-title":"Conference on Interdisciplinary Musicology (CIM04)","event-place":"Graz, Austria","issued":{"date-parts":[[2004]]},"publisher-place":"Graz, Austria","title":"Verbal descriptors for the timbre of the classical guitar","type":"paper-conference"}, + {"id":"traubeVocalSynthesisGraphical2005","author":[{"family":"Traube","given":"Caroline"},{"family":"D'Alessandro","given":"Nicolas"}],"citation-key":"traubeVocalSynthesisGraphical2005","container-title":"8th International Conference on Digital Audio Effects (DAFx'05)","event-place":"Madrid, Spain","issued":{"date-parts":[[2005]]},"page":"104–109","publisher-place":"Madrid, Spain","title":"Vocal Synthesis and Graphical Representation of the Phonetic Gestures underlying Guitar Timbre Description","type":"paper-conference"}, + {"id":"trehubMusicSpeechProcessing1993","author":[{"family":"Trehub","given":"S. E."},{"family":"Trainor","given":"L. J."},{"family":"Unyk","given":"A. M."}],"citation-key":"trehubMusicSpeechProcessing1993","container-title":"Advances in child development and behavior","ISSN":"0065-2407","issued":{"date-parts":[[1993]]},"page":"1–35","PMID":"8447246","title":"Music and speech processing in the first year of life.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/8447246","volume":"24"}, + {"id":"tressetSketchesPaulRobot2012","accessed":{"date-parts":[[2017,5,18]]},"author":[{"family":"Tresset","given":"Patrick A."},{"family":"Leymarie","given":"F."}],"citation-key":"tressetSketchesPaulRobot2012","container-title":"Proceedings of the Eighth Annual Symposium on Computational Aesthetics in Graphics, Visualization, and Imaging","issued":{"date-parts":[[2012]]},"page":"17–24","publisher":"Eurographics Association","source":"Google Scholar","title":"Sketches by Paul the robot","type":"paper-conference","URL":"http://dl.acm.org/citation.cfm?id=2328892"}, + {"id":"tuckerClassificationTransientSonar2005","abstract":"This paper describes a novel framework for classifying underwater transient signals recorded by passive sonar. The proposed approach involves two key ideas. Firstly, a feature-selection algorithm is used to identify those acoustic features that optimally model each class of transient sound. Secondly, features that are perceptually motivated are proposed, i.e., they encode information that human listeners are likely to use in transient classification tasks. Three perceptual features are proposed, which encode timbre, the physical material of the sound source, and the temporal context (pattern) in which the transient occurred. The authors show how these features, which are computed over different temporal windows, can be combined to make classification decisions. The performance of the proposed classifier is evaluated on a corpus of transient signals extracted from passive sonar recordings. Specifically, the performance of the perceptual features is compared with spectral features and with those that encode statistics of time, frequency, and power. The present results show that the perceptual features provide valuable cues to the class of a transient. However, the best performing classifier was obtained by selecting a subset of perceptual, spectral, and statistical features in a class-dependent manner.","author":[{"family":"Tucker","given":"S."},{"family":"Brown","given":"G. J."}],"citation-key":"tuckerClassificationTransientSonar2005","container-title":"IEEE Journal of Oceanic Engineering","DOI":"10.1109/joe.2005.850910","ISSN":"0364-9059","issue":"3","issued":{"date-parts":[[2005,7]]},"page":"588–600","title":"Classification of Transient Sonar Sounds Using Perceptually Motivated Features","type":"article-journal","URL":"http://dx.doi.org/10.1109/joe.2005.850910","volume":"30"}, + {"id":"turingComputingMachineryIntelligence1950","author":[{"family":"Turing","given":"Alan M."}],"citation-key":"turingComputingMachineryIntelligence1950","container-title":"Mind","issued":{"date-parts":[[1950]]},"page":"433–460","title":"Computing Machinery and Intelligence","type":"article-journal","volume":"LIX"}, + {"id":"turingIntelligentMachineryReport1992","author":[{"family":"Turing","given":"A. M."}],"citation-key":"turingIntelligentMachineryReport1992","container-title":"Collected Works of A. M. Turing: Mechanical Intelligence","editor":[{"family":"Ince","given":"D. C."}],"event-place":"Amsterdam","issued":{"date-parts":[[1992]]},"page":"107–127","publisher":"Elsevier","publisher-place":"Amsterdam","title":"Intelligent Machinery. Report, National Physics Laboratory","type":"chapter"}, + {"id":"turkleEpistemologicalPluralismRevaluation1992","author":[{"family":"Turkle","given":"Sherry"},{"family":"Papert","given":"Seymour"}],"citation-key":"turkleEpistemologicalPluralismRevaluation1992","container-title":"Journal of Mathematical Behavior","issue":"1","issued":{"date-parts":[[1992,3]]},"page":"3–33","title":"Epistemological Pluralism and the Revaluation of the Concrete","type":"article-journal","volume":"11"}, + {"id":"turkleEpistemologicalPluralismStyles1990","author":[{"family":"Turkle","given":"Sherry"},{"family":"Papert","given":"Seymour"}],"citation-key":"turkleEpistemologicalPluralismStyles1990","container-title":"Signs","DOI":"10.2307/3174610","ISSN":"00979740","issue":"1","issued":{"date-parts":[[1990]]},"page":"128–157","title":"Epistemological Pluralism: Styles and Voices within the Computer Culture","type":"article-journal","URL":"http://dx.doi.org/10.2307/3174610","volume":"16"}, + {"id":"turkleSecondSelfComputers2005","abstract":"In The Second Self, Sherry Turkle looks at the computer not as a \"tool,\" but as part of our social and psychological lives; she looks beyond how we use computer games and spreadsheets to explore how the computer affects our awareness of ourselves, of one another, and of our relationship with the world. \"Technology,\" she writes, \"catalyzes changes not only in what we do but in how we think.\" First published in 1984, The Second Self is still essential reading as a primer in the psychology of computation. This twentieth anniversary edition allows us to reconsider two decades of computer culture–to (re)experience what was and is most novel in our new media culture and to view our own contemporary relationship with technology with fresh eyes. Turkle frames this classic work with a new introduction, a new epilogue, and extensive notes added to the original text.

Turkle talks to children, college students, engineers, AI scientists, hackers, and personal computer owners–people confronting machines that seem to think and at the same time suggest a new way for us to think–about human thought, emotion, memory, and understanding. Her interviews reveal that we experience computers as being on the border between inanimate and animate, as both an extension of the self and part of the external world. Their special place betwixt and between traditional categories is part of what makes them compelling and evocative. (In the introduction to this edition, Turkle quotes a PDA user as saying, \"When my Palm crashed, it was like a death. I thought I had lost my mind.\") Why we think of the workings of a machine in psychological terms–how this happens, and what it means for all of us–is the ever more timely subject of The Second Self.","author":[{"family":"Turkle","given":"Sherry"}],"citation-key":"turkleSecondSelfComputers2005","edition":"Twentieth Anniversary","ISBN":"0-262-70111-1","issued":{"date-parts":[[2005,9]]},"note":"Published: Paperback","publisher":"The MIT Press","title":"The Second Self: Computers and the Human Spirit","type":"book","URL":"http://www.worldcat.org/isbn/0262701111"}, + {"id":"tverskyCognitiveOriginsGraphic1995","author":[{"family":"Tversky","given":"B."}],"citation-key":"tverskyCognitiveOriginsGraphic1995","container-title":"In F. T. Marchese (Editor). Understanding images. Pp","issued":{"date-parts":[[1995]]},"page":"29–53","publisher":"Springer-Verlag","title":"Cognitive origins of graphic conventions","type":"paper-conference"}, + {"id":"tverskyFeaturesSimilarity1977","abstract":"Questions the metric and dimensional assumptions that underlie the geometric representation of similarity on both theoretical and empirical grounds. A new set-theoretical approach to similarity is developed in which objects are represented as collections of features and similarity is described as a feature-matching process. Specifically, a set of qualitative assumptions is shown to imply the contrast model, which expresses the similarity between objects as a linear combination of the measures of their common and distinctive features. Several predictions of the contrast model are tested in studies of similarity with both semantic and perceptual stimuli. The model is used to uncover, analyze, and explain a variety of empirical phenomena such as the role of common and distinctive features, the relations between judgments of similarity and difference, the presence of asymmetric similarities, and the effects of context on judgments of similarity. The contrast model generalizes standard representations of similarity data in terms of clusters and trees. It is also used to analyze the relations of prototypicality and family resemblance.","author":[{"family":"Tversky","given":"A."}],"citation-key":"tverskyFeaturesSimilarity1977","container-title":"Psychological Review","issue":"4","issued":{"date-parts":[[1977]]},"page":"327–352","title":"Features of Similarity","type":"article-journal","URL":"http://psycnet.apa.org/index.cfm?fa=search.displayRecord&uid=1978-09287-001","volume":"84"}, + {"id":"tyteStandardBeatboxNotation2008","author":[{"family":"Tyte","given":"T."}],"citation-key":"tyteStandardBeatboxNotation2008","issued":{"date-parts":[[2008]]},"note":"Published: online; http://www.humanbeatbox.com/tips/p2_articleid/2","title":"Standard Beatbox Notation","type":"book","URL":"http://www.google.co.uk/search?q=standard+beatbox+notation&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-GB:unofficial&client=firefox-a"}, + {"id":"uehleckeTanzMaschinencode2006","author":[{"family":"Uehlecke","given":"Jens"}],"citation-key":"uehleckeTanzMaschinencode2006","container-title":"Zeitwissen","issued":{"date-parts":[[2006]]},"title":"Tanz den Maschinencode","type":"article-journal"}, + {"id":"unknownPsychologyProgrammingComputers1990","author":[{"family":"Unknown","given":"Author"}],"citation-key":"unknownPsychologyProgrammingComputers1990","editor":[{"family":"Hoc","given":"J. M."},{"family":"Green","given":"T. R. G."},{"family":"Samurçay","given":"R."},{"family":"Gilmore","given":"D. J."}],"ISBN":"0-12-350772-3","issued":{"date-parts":[[1990,2]]},"note":"Published: Hardcover","publisher":"Academic Press","title":"Psychology of Programming (Computers and People Series)","type":"book","URL":"http://www.worldcat.org/isbn/0123507723"}, + {"id":"urtonInkaHistoryKnots2017","abstract":"Winner, PROSE Award, Biological Anthropology, Ancient History, Archaeology, Association of American Publishers (AAP), 2018Inka khipus―spun and plied cords that record information through intricate patterns of knots and colors―constitute the only available primary sources on the Inka empire not mediated by the hands, minds, and motives of the conquering Europeans. As such, they offer direct insight into the worldview of the Inka―a view that differs from European thought as much as khipus differ from alphabetic writing, which the Inka did not possess. Scholars have spent decades attempting to decipher the Inka khipus, and Gary Urton has become the world's leading authority on these artifacts.In Inka History in Knots, Urton marshals a lifetime of study to offer a grand overview of the types of quantative information recorded in khipus and to show how these records can be used as primary sources for an Inka history of the empire that focuses on statistics, demography, and the \"longue durée\" social processes that characterize a civilization continuously adapting to and exploiting its environment. Whether the Inka khipu keepers were registering census data, recording tribute, or performing many other administrative tasks, Urton asserts that they were key players in the organization and control of subject populations throughout the empire and that khipu record-keeping vitally contributed to the emergence of political complexity in the Andes. This new view of the importance of khipus promises to fundamentally reorient our understanding of the development of the Inka state and the possibilities for writing its history.","author":[{"family":"Urton","given":"Gary"}],"citation-key":"urtonInkaHistoryKnots2017","event-place":"Austin","ISBN":"978-1-4773-1199-8","issued":{"date-parts":[[2017,4,4]]},"language":"English","number-of-pages":"319","publisher":"University of Texas Press","publisher-place":"Austin","source":"Amazon","title":"Inka History in Knots: Reading Khipus as Primary Sources","title-short":"Inka History in Knots","type":"book"}, + {"id":"UsingActiveColloids","abstract":"National Academy of Sciences","accessed":{"date-parts":[[2017,3,9]]},"citation-key":"UsingActiveColloids","container-title":"Proceedings of the National Academy of Sciences","title":"Using active colloids as machines to weave and braid on the micrometer scale","type":"webpage","URL":"http://www.pnas.org/content/114/2/257.full"}, + {"id":"usselmannDilemmaMediaArt2003","author":[{"family":"Usselmann","given":"Rainer"}],"citation-key":"usselmannDilemmaMediaArt2003","container-title":"Leonardo","issue":"5","issued":{"date-parts":[[2003]]},"page":"389–396","title":"The Dilemma of Media Art: Cybernetic Serendipity at the ICA London","type":"article-journal","URL":"http://muse.jhu.edu/journals/leonardo/v036/36.5usselmann.pdf","volume":"36"}, + {"id":"valimakiInterpolatedWarped2D2000","author":[{"family":"Välimäki","given":"Vesa"},{"family":"Savioja","given":"Lauri"}],"citation-key":"valimakiInterpolatedWarped2D2000","container-title":"DAFX-00","issued":{"date-parts":[[2000]]},"title":"Interpolated and warped 2D digital waveguide mesh algorithms","type":"paper-conference"}, + {"id":"vandeursenDomainspecificLanguagesAnnotated2000","abstract":"We survey the literature available on the topic of domain-specific languages as used for the construction and maintenance of software systems. We list a selection of 75 key publications in the area, and provide a summary for each of the papers. Moreover, we discuss terminology, risks and benefits, example domain-specific languages, design methodologies, and implementation techniques.","author":[{"family":"Deursen","given":"Arie","non-dropping-particle":"van"},{"family":"Klint","given":"Paul"},{"family":"Visser","given":"Joost"}],"citation-key":"vandeursenDomainspecificLanguagesAnnotated2000","container-title":"SIGPLAN Not.","DOI":"10.1145/352029.352035","ISSN":"0362-1340","issue":"6","issued":{"date-parts":[[2000,6]]},"page":"26–36","title":"Domain-specific Languages: An Annotated Bibliography","type":"article-journal","URL":"http://dx.doi.org/10.1145/352029.352035","volume":"35"}, + {"id":"vanduyne2DDigitalWaveguide1993","abstract":"An extremely efficient method for modeling wave propagation in a membrane is provided by the multidimensional extension of the digital waveguide. The 2-D digital waveguide mesh is constructed out of bi-directional delay units and scattering junctions. We show that it coincides with the standard finite difference scheme in the lossless case. Wave propagation in the mesh is compared with wave propagation in an ideal membrane; the dissipation and dispersion error is derived","author":[{"family":"Van Duyne","given":"Scott A."},{"family":"Smith","given":"Julius O."}],"citation-key":"vanduyne2DDigitalWaveguide1993","container-title":"Applications of Signal Processing to Audio and Acoustics","issued":{"date-parts":[[1993]]},"page":"177–180","title":"The 2-D digital waveguide mesh","type":"paper-conference","URL":"http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=379968"}, + {"id":"vangulikLoreChineseLute1940","author":[{"family":"Van Gulik","given":"R. H."}],"citation-key":"vangulikLoreChineseLute1940","edition":"2","issued":{"date-parts":[[1940]]},"publisher":"The Voyagers' Press","title":"The Lore of the Chinese Lute","type":"book"}, + {"id":"victorBretVictorFuture2013","abstract":"For references and more information, see http://worrydream.com/dbx Presented at Dropbox's DBX conference on July 9, 2013. Bret Victor -- http://worrydream.com","accessed":{"date-parts":[[2020,6,22]]},"citation-key":"victorBretVictorFuture2013","dimensions":"PT00H32M55S","director":[{"family":"Victor","given":"Bret"}],"issued":{"date-parts":[[2013,7,29]]},"source":"Vimeo","title":"Bret Victor - The Future of Programming","type":"motion_picture","URL":"https://vimeo.com/71278954"}, + {"id":"victorHumaneRepresentationThought2014","abstract":"New representations of thought – written language, mathematical notation, information graphics, etc – have been responsible for some of the most significant leaps in the progress of civilization, by expanding humanity's collectively-thinkable territory. But at debilitating cost. These representations, having been invented for static media such as paper, tap into a small subset of human capabilities and neglect the rest. Knowledge work means sitting at a desk, interpreting and manipulating symbols. The human body is reduced to an eye staring at tiny rectangles and fingers on a pen or keyboard. Like any severely unbalanced way of living, this is crippling to mind and body. But less obviously, and more importantly, it is enormously wasteful of the vast human potential. Human beings naturally have many powerful modes of thinking and understanding. Most are incompatible with static media. In a culture that has contorted itself around the limitations of marks on paper, these modes are undeveloped, unrecognized, or scorned. We are now seeing the start of a dynamic medium. To a large extent, people today are using this medium merely to emulate and extend static representations from the era of paper, and to further constrain the ways in which the human body can interact with external representations of thought. But the dynamic medium offers the opportunity to deliberately invent a humane and empowering form of knowledge work. We can design dynamic representations which draw on the entire range of human capabilities – all senses, all forms of movement, all forms of understanding – instead of straining a few and atrophying the rest. This talk suggests how each of the human activities in which thought is externalized (conversing, presenting, reading, writing, etc) can be redesigned around such representations.","author":[{"family":"Victor","given":"Bret"}],"citation-key":"victorHumaneRepresentationThought2014","collection-title":"SPLASH '14","container-title":"Proceedings of the Companion Publication of the 2014 ACM SIGPLAN Conference on Systems, Programming, and Applications: Software for Humanity","DOI":"10.1145/2660252.2661746","event-place":"Portland, Oregon, USA","ISBN":"978-1-4503-3208-8","issued":{"date-parts":[[2014]]},"page":"5","publisher":"ACM","publisher-place":"Portland, Oregon, USA","title":"Humane Representation of Thought: A Trail Map for the 21st Century","type":"paper-conference","URL":"http://dx.doi.org/10.1145/2660252.2661746"}, + {"id":"viroPeachnoteMusicScore2011","author":[{"family":"Viro","given":"Vladimir"}],"citation-key":"viroPeachnoteMusicScore2011","container-title":"Proceedings of the 12th International Society for Music Information Retrieval Conference","event-place":"Miami (Florida), USA","issued":{"date-parts":[[2011,10]]},"page":"359–362","publisher-place":"Miami (Florida), USA","title":"Peachnote: Music Score Search and Analysis Platform","type":"paper-conference"}, + {"id":"voelterLanguageModularizationComposition2010","author":[{"family":"Voelter","given":"Markus"},{"family":"Solomatov","given":"Konstantin"}],"citation-key":"voelterLanguageModularizationComposition2010","collection-title":"Lecture Notes in Computer Science","container-title":"Software Language Engineering, Third International Conference, SLE 2010","editor":[{"family":"Brand","given":"Mark","non-dropping-particle":"van den"},{"family":"Malloy","given":"Brian"},{"family":"Staab","given":"Steffen"}],"issued":{"date-parts":[[2010]]},"publisher":"Springer","title":"Language Modularization and Composition with Projectional Language Workbenches illustrated with MPS","type":"paper-conference"}, + {"id":"vogelCerebralLateralizationSpatial2003","abstract":"There is a substantial disagreement in the existing literature regarding which hemisphere of the brain controls spatial abilities. In an attempt to resolve this dispute, we conducted a meta-analysis to decipher which hemisphere truly dominates and under what circumstances. It was found that across people and situations, the right hemisphere is the more dominant for spatial processing. However, consideration of specific moderator variables yielded a more complex picture. For example, females showed no hemisphere preference while males showed a right hemisphere advantage. Also, no hemisphere preference was indicated for spatial visualization tasks while subjects performing spatial orientation and manual manipulation tasks displayed a predictable right hemisphere preference. These findings are discussed in terms of their implications for exiting theoretical positions as well as future empirical research.","author":[{"family":"Vogel","given":"J."}],"citation-key":"vogelCerebralLateralizationSpatial2003","container-title":"Brain and Cognition","DOI":"10.1016/s0278-2626(03)00056-3","ISSN":"02782626","issue":"2","issued":{"date-parts":[[2003,7]]},"page":"197–204","title":"Cerebral lateralization of spatial abilities: A meta-analysis","type":"article-journal","URL":"http://dx.doi.org/10.1016/s0278-2626(03)00056-3","volume":"52"}, + {"id":"vontycowiczMalleableDrumPoster2008","author":[{"family":"Tycowicz","given":"Christoph","non-dropping-particle":"von"},{"family":"Loviscach\\dag","given":"Jörn"}],"citation-key":"vontycowiczMalleableDrumPoster2008","container-title":"Proceedings of SIGGRAPH 2008","issued":{"date-parts":[[2008]]},"title":"A Malleable Drum (poster)","type":"paper-conference"}, + {"id":"vul1VoodooCorrelationsSocial2008","abstract":"The newly emerging field of Social Neuroscience has drawn much attention in recent years, with high-profile studies frequently reporting extremely high (e.g., >.8) correlations between behavioral and self-report measures of personality or emotion and measures of brain activation obtained using fMRI. We show that these correlations often exceed what is statistically possible assuming the (evidently rather limited) reliability of both fMRI and personality/emotion measures. The implausibly high correlations are all the more puzzling because social-neuroscience method sections rarely contain sufficient detail to ascertain how these correlations were obtained. We surveyed authors of 54 articles that reported findings of this kind to determine the details of their analyses. More than half acknowledged using a strategy that computes separate correlations for individual voxels, and reports means of just the subset of voxels exceeding chosen thresholds. We show how this non-independent analysis grossly inflates correlations, while yielding reassuring-looking scattergrams. This analysis technique was used to obtain the vast majority of the implausibly high correlations in our survey sample. In addition, we argue that other analysis problems likely created entirely spurious correlations in some cases. We outline how the data from these studies could be reanalyzed with unbiased methods to provide the field with accurate estimates of the correlations in question. We urge authors to perform such reanalyses and to correct the scientific record.","author":[{"family":"Vul1","given":"Edward"},{"family":"Harris","given":"Christine"},{"family":"Winkielman","given":"Piotr"},{"family":"Pashler","given":"Harold"}],"citation-key":"vul1VoodooCorrelationsSocial2008","container-title":"Perspectives on Psychological Science","issued":{"date-parts":[[2008]]},"title":"Voodoo Correlations in Social Neuroscience","type":"article-journal"}, + {"id":"vygotskyImaginationCreativityChildhood2004","author":[{"family":"Vygotsky","given":"Lev"}],"citation-key":"vygotskyImaginationCreativityChildhood2004","container-title":"Journal of Russian and East European Psychology","issue":"1","issued":{"date-parts":[[2004]]},"title":"Imagination and Creativity in Childhood","type":"article-journal","volume":"42"}, + {"id":"vygotskyThoughtLanguageStudies1962","author":[{"family":"Vygotsky","given":"Lev"}],"citation-key":"vygotskyThoughtLanguageStudies1962","editor":[{"family":"Hanfmann","given":"Eugenia"},{"family":"Vakar","given":"Gertrude E."}],"issued":{"date-parts":[[1962]]},"title":"Thought and language. Studies in communication.","type":"article-journal"}, + {"id":"waisviszComposingNowNotes2003","author":[{"family":"Waisvisz","given":"Michel"}],"citation-key":"waisviszComposingNowNotes2003","container-title":"IPEM Symposium","event-place":"Gent","issued":{"date-parts":[[2003]]},"publisher-place":"Gent","title":"Composing the now - notes for a lecture","type":"paper-conference","URL":"http://crackle.org/composingthenow.htm"}, + {"id":"walensteinObservingMeasuringCognitive2003","abstract":"A key desideratum for many software comprehension tools is to reduce the mental burdens of software engineers. That is, the tools should support cognition. This key benefit is difficult to directly observe and measure, so evaluating such tools has been problematic. This paper describes an investigation into the application of distributed cognition theories to analyzing and observing cognitive support. Theories of cognitive support are used to generate an analysis of potential cognitive benefits provided by the compilation-error tracking facilities of a commercial software development environment. This analysis is used to generate a scheme for coding user observations such that cognitive support related activity can be tracked. Experiences in applying the technique on data from a field study are reported. The study also serves to provide a glimpse into the ways that programmers and tools cooperate. Implications are drawn for future practices of tool evaluation and engineering.","author":[{"family":"Walenstein","given":"Andrew"}],"citation-key":"walensteinObservingMeasuringCognitive2003","collection-title":"IWPC '03","container-title":"Proceedings of the 11th IEEE International Workshop on Program Comprehension","event-place":"Washington, DC, USA","ISBN":"0-7695-1883-4","issued":{"date-parts":[[2003]]},"publisher":"IEEE Computer Society","publisher-place":"Washington, DC, USA","title":"Observing and Measuring Cognitive Support: Steps Toward Systematic Tool Evaluation and Engineering","type":"paper-conference","URL":"http://portal.acm.org/citation.cfm?id=851042.857038"}, + {"id":"wallasArtThought","author":[{"family":"Wallas","given":"Graham"}],"citation-key":"wallasArtThought","note":"Published: Hardcover","publisher":"Harcourt","title":"The art of Thought","type":"book"}, + {"id":"waltonEducationSkillDevelopment2010","abstract":"This paper examines an intervention in Europe which enables untypical individuals to acquire skills and competences in order to enter IT related employment. To do this they need to acquire a threshold level of intellectual capital so that they are considered sufficiently competent to gain employment. This can therefore provide the industry with a solid foundation of the necessary support staff, capable of providing services to the local community supporting such educational initiatives. This initiative can then release the more conventionally educated to work at the cutting edge of industry. As a driver for wealth generation in India, the IT industry is remarkable. It demands a wide spectrum of intellectual capital. As diffusion of IT technology is predicted to pervade throughout the subcontinent, the demand for all levels of competence would seem to be buoyant. The training environment covered in this case study complements the traditional educational system and could furnish alternative career opportunities to certain sections of the community.\\ensuremath\\ensuremath This paper takes a strategic view throughout. The fallacy of composition has to be taken seriously. What is true for a part is not true of the whole. To place this in the context of this paper; whilst a workshop to help unemployed people build computers in Sheffield may work, it is not necessarily appropriate to draw the conclusions that it will be effective when implemented over the whole of the Indian Subcontinent.","author":[{"family":"Walton","given":"J."}],"citation-key":"waltonEducationSkillDevelopment2010","container-title":"Proceedings of the International conference on Challenges to Inclusive Growth in the Emerging Economies","issued":{"date-parts":[[2010]]},"publisher":"Indian Institute of management","title":"Education and Skill Development through the Reconfiguration of Discarded Hardware: Turning Base Metal into intellectual Capital","type":"paper-conference","URL":"http://shura.shu.ac.uk/2903/"}, + {"id":"wangOntheflyProgrammingUsing2004","author":[{"family":"Wang","given":"Ge"},{"family":"Cook","given":"Perry R."}],"citation-key":"wangOntheflyProgrammingUsing2004","container-title":"Proceedings of New interfaces for musical expression 2004","issued":{"date-parts":[[2004]]},"page":"138–143","publisher":"National University of Singapore","title":"On-the-fly programming: using code as an expressive musical instrument","type":"paper-conference"}, + {"id":"ward4x4GenerativeDesign2002","author":[{"family":"Ward","given":"Adrian"},{"family":"Levin","given":"Golan"},{"literal":"Lia"},{"literal":"Meta"}],"citation-key":"ward4x4GenerativeDesign2002","edition":"First","ISBN":"1-903450-47-0","issued":{"date-parts":[[2002]]},"note":"Published: Paperback","publisher":"Apress","title":"4x4 Generative Design (with Auto-Illustrator, Java, DBN, Lingo): Life/Oblivion","type":"book","URL":"http://www.worldcat.org/isbn/1903450470"}, + {"id":"wardLiveAlgorithmProgramming2004","author":[{"family":"Ward","given":"Adrian"},{"family":"Rohrhuber","given":"Julian"},{"family":"Olofsson","given":"Fredrik"},{"family":"McLean","given":"Alex"},{"family":"Griffiths","given":"Dave"},{"family":"Collins","given":"Nick"},{"family":"Alexander","given":"Amy"}],"citation-key":"wardLiveAlgorithmProgramming2004","container-title":"read_me — Software Art and Cultures","editor":[{"family":"Goriunova","given":"Olga"},{"family":"Shulgin","given":"Alexei"}],"issued":{"date-parts":[[2004]]},"title":"Live Algorithm Programming and a Temporary Organisation for its Promotion","type":"paper-conference"}, + {"id":"wardSynaesthesiaCreativityArt2008","author":[{"family":"Ward","given":"Jamie"},{"family":"Thompson-Lake","given":"Daisy"},{"family":"Ely","given":"Roxanne"},{"family":"Kaminski","given":"Flora"}],"citation-key":"wardSynaesthesiaCreativityArt2008","container-title":"British Journal of Psychology","DOI":"10.1348/000712607x204164","ISSN":"0007-1269","issue":"1","issued":{"date-parts":[[2008,2]]},"page":"127–141","title":"Synaesthesia, creativity and art: What is the link?","type":"article-journal","URL":"http://dx.doi.org/10.1348/000712607x204164","volume":"99"}, + {"id":"wareDesignAppliedPerception2003","abstract":"Finallya thorough pedagogical survey of the multidisciplinary science of HCI.

Human-Computer Interaction spans many disciplines, from the social and behavioral sciences to information and computer technology. But of all the textbooks on HCI technology and applications, none has adequately addressed HCI's multidisciplinary foundationsuntil now.

HCI Models, Theories, and Frameworks fills a huge void in the education and training of advanced HCI students. Its authors comprise a veritable house of diamondsinternationally known HCI researchers, every one of whom has successfully applied a unique scientific method to solve practical problems.

Each chapter focuses on a different scientific analysis or approach, but all in an identical format, especially designed to facilitate comparison of the various models.

HCI Models, Theories, and Frameworks answers the question raised by the other HCI textbooks:
How can HCI theory can support practice in HCI?
* Traces HCI research from its origins
* Surveys 14 different successful research approaches in HCI
* Presents each approach in a common format to facilitate comparisons
* Web-enhanced with teaching tools at http://www.HCImodels.com

*Contributors are leading researchers in the field of Human-Comptuter Interaction

*Fills a major gap in current literature about the rich scientific foundations of HCI

*Provides a thorough pedogological survey of the science of HCI","author":[{"family":"Ware","given":"Colin"}],"citation-key":"wareDesignAppliedPerception2003","container-title":"HCI Models, Theories, and Frameworks: Toward a Multidisciplinary Science","edition":"1","editor":[{"family":"Carroll","given":"John M."}],"ISBN":"1-55860-808-7","issued":{"date-parts":[[2003,4]]},"note":"Published: Hardcover","page":"11–26","publisher":"Morgan Kaufmann","title":"Design as Applied Perception","type":"chapter","URL":"http://www.worldcat.org/isbn/1558608087"}, + {"id":"wareInformationVisualizationSecond2004","abstract":"Most designers know that yellow text presented against a blue background reads clearly and easily, but how many can explain why? Information Visualization: Perception for Design explores the art and science of why we see objects the way we do.

Although more technical than most graphic design books, the book \"is intended to make [the data from the science and study of visualization] available to the non-specialist.\" Each chapter focuses on a different facet of human vision, like \"Lightness, Brightness, Contrast, and Constancy\" in chapter 3, or \"Static and Moving Patterns\" in chapter 4.

Although the author tries to put a great deal of scientific research data into pedestrian terms, the nature of the subject matter and the papers from which he culls his information make this task an uphill battle from the start. As a result, the book is full of valuable information, but it may not necessarily be right for the average graphic designer looking for a new inspirational spin. Serious interface designers, presentation designers, data analyzers, or any artist tasked with presenting ideas in a visual format, though, should come away from Information Visualization with a clearer understanding of the inner workings of perception. At the very least, they'll be able to explain why yellow text against blue is a good combination. –Mike Caputo Most designers know that yellow text presented against a blue background reads clearly and easily, but how many can explain why, and what really are the best ways to help others and ourselves clearly see key patterns in a bunch of data?

This book explores the art and science of why we see objects the way we do. Based on the science of perception and vision, the author presents the key principles at work for a wide range of applications–resulting in visualization of improved clarity, utility, and persuasiveness. The book offers practical guidelines that can be applied by anyone: interaction designers, graphic designers of all kinds (including web designers), data miners, and financial analysts.

*First work to use the science of perception to help serious designers and analysts optimize understanding and perception of their data visualizations.

* Major revision of this classic work, with a new chapter on visual thinking, new sections on face perception and flow visualization, and a much expanded chapter on color and color sequences.

*New to this edition is the full color treatment throughout, to better display over 400 illustrations. Most designers know that yellow text presented against a blue background reads clearly and easily, but how many can explain why, and what really are the best ways to help others and ourselves clearly see key patterns in a bunch of data? When we use software, access a web site, or view business or scientific graphics, our understanding is greatly enhanced or impeded by the way the information is presented. This book explores the art and science of why we see objects the way we do. Based on the science of perception and vision, the author presents the key principles at work for a wide range of applications–resulting in visualization of improved clarity, utility, and persuasiveness. The book offers practical guidelines that can be applied by anyone: interaction designers, graphic designers of all kinds (including web designers), data miners, and financial analysts.","author":[{"family":"Ware","given":"Colin"}],"citation-key":"wareInformationVisualizationSecond2004","edition":"2","ISBN":"1-55860-819-2","issued":{"date-parts":[[2004,4]]},"note":"Published: Hardcover","publisher":"Morgan Kaufmann","title":"Information Visualization, Second Edition: Perception for Design (Interactive Technologies)","type":"book","URL":"http://www.worldcat.org/isbn/1558608192"}, + {"id":"washburnSymmetryComesAge2004","abstract":"This is the companion volume to the authors' groundbreaking Symmetries of Culture, the classic reference for symmetry analysis of pattern for anthropologists, archaeologists, art historians, mathematicians, and designers. Central to symmetry analysis is the use of symmetry in the more precise sense of its geometrical isometries in contrast to its everyday meaning of balance. For this volume, Donald Crowe and Dorothy Washburn invited colleagues from several disciplines to apply the method of symmetry analysis to actual case studies from cultures around the world. The essays compiled here explore how cultural information is embedded in the symmetrical structure of pattern. From descriptions of patterns on objects as diverse as Nasca embroideries, Ica Valley ceramics, Quechua textiles, Yombe mats, and Zulu beadwork, as well as from Amazonian shamanic therapy, ceramic design among the Shipibo, and Turkish Yörük weaving, the contributors reveal how the symmetrical structures in the patterns describe aspects of each culture's fundamental principles for living in the world. This approach offers a profoundly fresh way to read the meaning in pattern by arguing that pattern communicates through the structural metaphors embedded in the symmetrical relationship of the pattern parts. The two volumes together offer readers a revolutionary new window into the communicative importance of design.","author":[{"family":"Washburn","given":"Washburn","suffix":"Dorothy Koster"},{"family":"Washburn","given":"Dorothy Koster"},{"family":"Crowe","given":"Donald W."},{"family":"Crowe","given":"Donald Warren"}],"citation-key":"washburnSymmetryComesAge2004","ISBN":"978-0-295-98366-0","issued":{"date-parts":[[2004]]},"language":"en","number-of-pages":"396","publisher":"University of Washington Press","source":"Google Books","title":"Symmetry Comes of Age: The Role of Pattern in Culture","title-short":"Symmetry Comes of Age","type":"book"}, + {"id":"weberVisualImageryWords1974","author":[{"family":"Weber","given":"R. J."},{"family":"Harnish","given":"R."}],"citation-key":"weberVisualImageryWords1974","container-title":"Journal of experimental psychology","ISSN":"0022-1015","issue":"3","issued":{"date-parts":[[1974,3]]},"page":"409–414","PMID":"4815188","title":"Visual imagery for words: the Hebb test.","type":"article-journal","URL":"http://view.ncbi.nlm.nih.gov/pubmed/4815188","volume":"102"}, + {"id":"weisbergCreativityUnderstandingInnovation2006","abstract":"How cognitive psychology explains human creativity

Conventional wisdom holds that creativity is a mysterious quality present in a select few individuals. The rest of us, the common view goes, can only stand in awe of great creative achievements: we could never paint Guernica or devise the structure of the DNA molecule because we lack access to the rarified thoughts and inspirations that bless geniuses like Picasso or Watson and Crick. Presented with this view, today's cognitive psychologists largely differ finding instead that \"ordinary\" people employ the same creative thought processes as the greats. Though used and developed differently by different people, creativity can and should be studied as a positive psychological feature shared by all humans.

Creativity: Understanding Innovation in Problem Solving, Science, Invention, and the Arts presents the major psychological theories of creativity and illustrates important concepts with vibrant and detailed case studies that exemplify how to study creative acts with scientific rigor.

Creativity includes:

  • Two in-depth case studies—Watson and Crick's modeling of the DNA structure and Picasso's painting of Guernica— serve as examples throughout the text
  • Methods used by psychologists to study the multiple facets of creativity
  • The \"ordinary thinking\" or cognitive view of creativity and its challengers
  • How problem–solving and experience relate to creative thinking
  • Genius and madness and the relationship between creativity and psychopathology
  • The possible role of the unconscious in creativity
  • Psychometrics—testing for creativity and how personality factors affect creativity
  • Confluence theories that use cognitive, personality, environmental, and other components to describe creativity

Clearly and engagingly written by noted creativity expert Robert Weisberg, Creativity: Understanding Innovation in Problem Solving, Science, Invention, and the Arts takes both students and lay readers on an in-depth journey through contemporary cognitive psychology, showing how the discipline understands one of the most fundamental and fascinating human abilities.

\"This book will be a hit. It fills a large gap in the literature. It is a well-written, scholarly, balanced, and engaging book that will be enjoyed by students and faculty alike.\"
—David Goldstein, University of Toronto","author":[{"family":"Weisberg","given":"Robert W."}],"citation-key":"weisbergCreativityUnderstandingInnovation2006","ISBN":"0-471-73999-5","issued":{"date-parts":[[2006,4]]},"note":"Published: Hardcover","publisher":"Wiley","title":"Creativity: Understanding Innovation in Problem Solving, Science, Invention, and the Arts","type":"book","URL":"http://www.worldcat.org/isbn/0471739995"}, + {"id":"weissteinNotation2010","author":[{"family":"Weisstein","given":"Eric W."}],"citation-key":"weissteinNotation2010","issued":{"date-parts":[[2010]]},"note":"Published: From MathWorld–A Wolfram Web Resource http://mathworld.wolfram.com/Notation.html","title":"Notation","type":"book","URL":"http://mathworld.wolfram.com/Notation.html"}, + {"id":"wellerSystematicDataCollection1988","author":[{"family":"Weller","given":"Susan C."},{"family":"Romney","given":"A. Kimball"}],"citation-key":"wellerSystematicDataCollection1988","edition":"First","ISBN":"0-8039-3074-7","issued":{"date-parts":[[1988,2]]},"note":"Published: Paperback","publisher":"Sage Publications, Inc","title":"Systematic Data Collection (Qualitative Research Methods Series 10)","type":"book","URL":"http://www.worldcat.org/isbn/0803930747"}, + {"id":"wesselTimbreSpaceMusical1979","author":[{"family":"Wessel","given":"David L."}],"citation-key":"wesselTimbreSpaceMusical1979","container-title":"Computer Music Journal","issue":"2","issued":{"date-parts":[[1979]]},"page":"45–52","title":"Timbre Space as a Musical Control Structure","type":"article-journal","volume":"3"}, + {"id":"WhatComputationalThinking","abstract":"Introducing computational thinking","accessed":{"date-parts":[[2020,4,15]]},"citation-key":"WhatComputationalThinking","container-title":"BBC Bitesize","language":"en-GB","source":"www.bbc.co.uk","title":"What is computational thinking? - Introduction to computational thinking - KS3 Computer Science Revision","title-short":"What is computational thinking?","type":"webpage","URL":"https://www.bbc.co.uk/bitesize/guides/zp92mp3/revision/1"}, + {"id":"whelanEffectiveAnalysisReaction2008","abstract":"Most analyses of reaction time (RT) data are conducted by using the statistical techniques with which psychologists are most familiar, such as analysis of vari- ance on the sample mean. Unfortunately, these methods are usually inappropri- ate for RT data, because they have little power to detect genuine differences in RT between conditions. In addition, some statistical approaches can, under cer- tain circumstances, result in findings that are artifacts of the analysis method itself. A corpus of research has shown more effective analytical methods, such as analyzing the whole RT distribution, although this research has had limited influence. The present article will summarize these advances in methods for analyzing RT data.","author":[{"family":"Whelan","given":"Robert"}],"citation-key":"whelanEffectiveAnalysisReaction2008","container-title":"The Psychological Record","issued":{"date-parts":[[2008]]},"page":"475–482","title":"Effective analysis of reaction time data","type":"article-journal","volume":"58"}, + {"id":"whiteheadDialoguesAlfredNorth2001","author":[{"family":"Whitehead","given":"Alfred N."}],"citation-key":"whiteheadDialoguesAlfredNorth2001","ISBN":"1-56792-129-9","issued":{"date-parts":[[2001,8]]},"note":"Published: Paperback","publisher":"David R Godine","title":"Dialogues of Alfred North Whitehead (A Nonpareil Book)","type":"book","URL":"http://www.worldcat.org/isbn/1567921299"}, + {"id":"whitneyDigitalHarmonyComplementarity1981","author":[{"family":"Whitney","given":"John"}],"citation-key":"whitneyDigitalHarmonyComplementarity1981","event-place":"USA","ISBN":"978-0-07-070015-4","issued":{"date-parts":[[1981]]},"number-of-pages":"200","publisher":"McGraw-Hill, Inc.","publisher-place":"USA","source":"ACM Digital Library","title":"Digital Harmony: On the Complementarity of Music and Visual Art","title-short":"Digital Harmony","type":"book"}, + {"id":"wigginsMusicSyntaxMeaning1998","abstract":"I discuss the issue of meaning, and the definition of ” meaning ” in music. I propose that it is a mistake to import the linguistic notion of semantics into a musical context on the grounds that musical communication serves a different function and is of a different nature from linguistic communication, and that there is no evidence to support the suggestion that the two should function in a strongly similar way. 1","author":[{"family":"Wiggins","given":"Geraint A."}],"citation-key":"wigginsMusicSyntaxMeaning1998","container-title":"Proceedings of the First Symposium on Music and Computers","issued":{"date-parts":[[1998]]},"page":"18–23","title":"Music, syntax, and the Meaning of \"Meaning\"","type":"paper-conference","URL":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.734"}, + {"id":"wigginsPreliminaryFrameworkDescription2006","author":[{"family":"Wiggins","given":"G. A."}],"citation-key":"wigginsPreliminaryFrameworkDescription2006","container-title":"Journal of Knowledge Based Systems","issue":"7","issued":{"date-parts":[[2006]]},"page":"449–470","title":"A Preliminary Framework for Description, Analysis and Comparison of Creative Systems","type":"article-journal","volume":"19"}, + {"id":"wigginsSearchingComputationalCreativity2006","author":[{"family":"Wiggins","given":"G. A."}],"citation-key":"wigginsSearchingComputationalCreativity2006","container-title":"New Generation Computing","issue":"3","issued":{"date-parts":[[2006]]},"page":"209–222","title":"Searching for Computational Creativity","type":"article-journal","volume":"24"}, + {"id":"williamsDataMiningSurvivor","author":[{"family":"Williams","given":"Graham"}],"citation-key":"williamsDataMiningSurvivor","title":"Data Mining Survivor: dmsurvivor - Contents","type":"book","URL":"http://datamining.togaware.com/survivor/Contents.html"}, + {"id":"williamsPhenomenologyError1981","author":[{"family":"Williams","given":"Joseph M."}],"citation-key":"williamsPhenomenologyError1981","container-title":"College Composition and Communication","DOI":"10.2307/356689","ISSN":"0010096X","issue":"2","issued":{"date-parts":[[1981]]},"page":"152–168","title":"The Phenomenology of Error","type":"article-journal","URL":"http://dx.doi.org/10.2307/356689","volume":"32"}, + {"id":"wingComputationalThinking2006","abstract":"It represents a universally applicable attitude and skill set everyone, not just computer scientists, would be eager to learn and use.","author":[{"family":"Wing","given":"Jeannette M."}],"citation-key":"wingComputationalThinking2006","container-title":"Commun. ACM","DOI":"10.1145/1118178.1118215","ISSN":"0001-0782","issue":"3","issued":{"date-parts":[[2006,3]]},"page":"33–35","title":"Computational Thinking","type":"article-journal","URL":"http://dx.doi.org/10.1145/1118178.1118215","volume":"49"}, + {"id":"wingComputationalThinking2006a","abstract":"It represents a universally applicable attitude and skill set everyone, not just computer scientists, would be eager to learn and use.","accessed":{"date-parts":[[2020,4,9]]},"author":[{"family":"Wing","given":"Jeannette M."}],"citation-key":"wingComputationalThinking2006a","issued":{"date-parts":[[2006,3,1]]},"publisher":"Association for Computing Machinery","source":"ACM Digital Library","title":"Computational thinking","type":"document","URL":"https://doi.org/10.1145/1118178.1118215"}, + {"id":"winklerModelingAuditoryScene2009","abstract":"Predictive processing of information is essential for goal-directed behavior. We offer an account of auditory perception suggesting that representations of predictable patterns, or 'regularities', extracted from the incoming sounds serve as auditory perceptual objects. The auditory system continuously searches for regularities within the acoustic signal. Primitive regularities may be encoded by neurons adapting their response to specific sounds. Such neurons have been observed in many parts of the auditory system. Representations of the detected regularities produce predictions of upcoming sounds as well as alternative solutions for parsing the composite input into coherent sequences potentially emitted by putative sound sources. Accuracy of the predictions can be utilized for selecting the most likely interpretation of the auditory input. Thus in our view, perception generates hypotheses about the causal structure of the world.","author":[{"family":"Winkler","given":"István"},{"family":"Denham","given":"Susan L."},{"family":"Nelken","given":"Israel"}],"citation-key":"winklerModelingAuditoryScene2009","container-title":"Trends in cognitive sciences","DOI":"10.1016/j.tics.2009.09.003","ISSN":"1879-307X","issue":"12","issued":{"date-parts":[[2009,12]]},"page":"532–540","PMID":"19828357","title":"Modeling the auditory scene: predictive regularity representations and perceptual objects.","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.tics.2009.09.003","volume":"13"}, + {"id":"winklerNewbornInfantsDetect2009","abstract":"To shed light on how humans can learn to understand music, we need to discover what the perceptual capabilities with which infants are born. Beat induction, the detection of a regular pulse in an auditory signal, is considered a fundamental human trait that, arguably, played a decisive role in the origin of music. Theorists are divided on the issue whether this ability is innate or learned. We show that newborn infants develop expectation for the onset of rhythmic cycles (the downbeat), even when it is not marked by stress or other distinguishing spectral features. Omitting the downbeat elicits brain activity associated with violating sensory expectations. Thus, our results strongly support the view that beat perception is innate.","author":[{"family":"Winkler","given":"István"},{"family":"Háden","given":"Gábor P. P."},{"family":"Ladinig","given":"Olivia"},{"family":"Sziller","given":"István"},{"family":"Honing","given":"Henkjan"}],"citation-key":"winklerNewbornInfantsDetect2009","container-title":"Proceedings of the National Academy of Sciences of the United States of America","DOI":"10.1073/pnas.0809035106","ISSN":"1091-6490","issue":"7","issued":{"date-parts":[[2009,2]]},"page":"2468–2471","PMCID":"PMC2631079","PMID":"19171894","title":"Newborn infants detect the beat in music.","type":"article-journal","URL":"http://dx.doi.org/10.1073/pnas.0809035106","volume":"106"}, + {"id":"winsbergLatentClassApproach1993","abstract":"Abstract A weighted Euclidean distance model for analyzing three-way proximity data is proposed that incorporates a latent class approach. In this latent class weighted Euclidean model, the contribution to the distance function between two stimuli is per dimension weighted identically by all subjects in the same latent class. This model removes the rotational invariance of the classical multidimensional scaling model retaining psychologically meaningful dimensions, and drastically reduces the number of parameters in the traditional INDSCAL model. The probability density function for the data of a subject is posited to be a finite mixture of spherical multivariate normal densities. The maximum likelihood function is optimized by means of an EM algorithm; a modified Fisher scoring method is used to update the parameters in the M-step. A model selection strategy is proposed and illustrated on both real and artificial data.","author":[{"family":"Winsberg","given":"Suzanne"},{"family":"De Soete","given":"Geert"}],"citation-key":"winsbergLatentClassApproach1993","container-title":"Psychometrika","DOI":"10.1007/bf02294578","issue":"2","issued":{"date-parts":[[1993,6]]},"page":"315–330","title":"A latent class approach to fitting the weighted Euclidean model, clascal","type":"article-journal","URL":"http://dx.doi.org/10.1007/bf02294578","volume":"58"}, + {"id":"wishartSonicArtContemporary1996","abstract":"In this newly revised book On Sonic Art, Trevor Wishart takes a wide-ranging look at the new developments in music-making and musical aesthetics made possible by the advent of the computer and digital information processing. His emphasis is on musical rather than technical matters. Beginning with a critical analysis of the assumptions underlying the Western musical tradition and the traditional acoustic theories of Pythagoras and Helmholtz, he goes on to look in detail at such topics as the musical organization of complex sound-objects, using and manipulating representational sounds and the various dimensions of human and non-human utterance. In so doing, he seeks to learn lessons from areas (poetry and sound-poetry, film, sound effects and animal communication) not traditionally associated with the field of music.
About the Author
Trevor Wishart is a composer, living and working in the North of England. His musical works cover a wide range, from environmental music events staged in spe","author":[{"family":"Wishart","given":"Trevor"}],"citation-key":"wishartSonicArtContemporary1996","ISBN":"3-7186-5847-X","issued":{"date-parts":[[1996,7]]},"note":"Published: Hardcover","publisher":"Routledge","title":"On Sonic Art (Contemporary Music Studies)","type":"book","URL":"http://www.worldcat.org/isbn/371865847X"}, + {"id":"wittgensteinPhilosophicalInvestigations2009","author":[{"family":"Wittgenstein","given":"Ludwig"}],"citation-key":"wittgensteinPhilosophicalInvestigations2009","edition":"Fourth","ISBN":"1-4051-5928-6","issued":{"date-parts":[[2009,10]]},"note":"Published: Hardcover","publisher":"Wiley-Blackwell","title":"Philosophical Investigations","type":"book","URL":"http://www.worldcat.org/isbn/1405159286"}, + {"id":"wolframNewKindScience2002","abstract":"Physics and computer science genius Stephen Wolfram, whose Mathematica computer language launched a multimillion-dollar company, now sets his sights on a more daunting goal: understanding the universe. Wolfram lets the world see his work in A New Kind of Science, a gorgeous, 1,280-page tome more than a decade in the making. With patience, insight, and self-confidence to spare, Wolfram outlines a fundamental new way of modeling complex systems.

On the frontier of complexity science since he was a boy, Wolfram is a champion of cellular automata–256 \"programs\" governed by simple nonmathematical rules. He points out that even the most complex equations fail to accurately model biological systems, but the simplest cellular automata can produce results straight out of nature–tree branches, stream eddies, and leopard spots, for instance. The graphics in A New Kind of Science show striking resemblance to the patterns we see in nature every day.

Wolfram wrote the book in a distinct style meant to make it easy to read, even for nontechies; a basic familiarity with logic is helpful but not essential. Readers will find themselves swept away by the elegant simplicity of Wolfram's ideas and the accidental artistry of the cellular automaton models. Whether or not Wolfram's revolution ultimately gives us the keys to the universe, his new science is absolutely awe-inspiring. –Therese Littleton This long-awaited work from one of the world's most respected scientists presents a series of dramatic discoveries never before made public. Starting from a collection of simple computer experiments—illustrated in the book by striking computer graphics—Wolfram shows how their unexpected results force a whole new way of looking at the operation of our universe.

Wolfram uses his approach to tackle a remarkable array of fundamental problems in science: from the origin of the Second Law of thermodynamics, to the development of complexity in biology, the computational limitations of mathematics, the possibility of a truly fundamental theory of physics, and the interplay between free will and determinism.

Written with exceptional clarity, and illustrated by more than a thousand original pictures, this seminal book allows scientists and non-scientists alike to participate in what promises to be a major intellectual revolution.","author":[{"family":"Wolfram","given":"Stephen"}],"citation-key":"wolframNewKindScience2002","edition":"First","ISBN":"1-57955-008-8","issued":{"date-parts":[[2002,5]]},"note":"Published: Hardcover","publisher":"Wolfram Media","title":"A New Kind of Science","type":"book","URL":"http://www.worldcat.org/isbn/1579550088"}, + {"id":"wolfSpielenUndBedienen2016","abstract":"Author: Wolf, Rebecca; Genre: Book Chapter; Published in Print: 2016; Title: Spielen und bedienen : das selbstspielende Klavier als virtuose Maschine","accessed":{"date-parts":[[2021,1,28]]},"author":[{"family":"Wolf","given":"Rebecca"}],"citation-key":"wolfSpielenUndBedienen2016","ISBN":"978-3-8376-3036-7","issued":{"date-parts":[[2016]]},"language":"deu","page":"137-156","publisher":"Transcript Verlag","source":"pure.mpg.de","title":"Spielen und bedienen : das selbstspielende Klavier als virtuose Maschine","title-short":"Spielen und bedienen","type":"book","URL":"https://pure.mpg.de/pubman/faces/ViewItemOverviewPage.jsp?itemId=item_2430330_5"}, + {"id":"woodWomenWorkWomen2019","abstract":"Several surviving artifacts of Roman imperial date consist of two small plaques designed for connection by balks (rectangular beams) and cylindrical dowels. All but one of the surviving specimens are of ivory and were probably luxurious versions of utilitarian objects. All have decorative details; three particularly lavish specimens bear mythological narratives in relief on both sides of each plaque. The original function of these objects is controversial, but the strongest evidence supports their identification as looms for weaving narrow strips to be used as decorative trim. If this reconstruction is correct, then their intended owners were primarily women, and the viewers of them were the members of those women's private households. Although most of the craftsmen who carved these very technically demanding works were probably male, the iconography of the decorated examples may reflect the social roles of their owners. The relief-decorated specimens in the Museo Archeologico Nazionale di Napoli and the Römisch-Germanisches Museum in Cologne appear to depict myths that concern childbirth and motherhood. This essay examines how the functions of these objects dictated the reading of their narrative content as their viewers interacted physically with them. The narratives delivered didactic, comforting, and stimulating messages.","accessed":{"date-parts":[[2019,10,21]]},"archive":"JSTOR","author":[{"family":"Wood","given":"Susan"}],"citation-key":"woodWomenWorkWomen2019","container-title":"American Journal of Archaeology","DOI":"10.3764/aja.123.3.0411","ISSN":"0002-9114","issue":"3","issued":{"date-parts":[[2019]]},"page":"411-438","source":"JSTOR","title":"Women's Work and Women's Myths: Mothers and Children on Ivory Looms","title-short":"Women's Work and Women's Myths","type":"article-journal","URL":"https://www.jstor.org/stable/10.3764/aja.123.3.0411","volume":"123"}, + {"id":"woolfordCraftingCriticalTechnical2010","abstract":"Abstract In recent years, the category of ?practice-based research? has become an essential component of discourse around public funding and evaluation of the arts in British higher education. When included under the umbrella of public policy concerned with ?the creative industries\", technology researchers often find themselves collaborating with artists who consider their own participation to be a form of practice-based research. We are conducting a study under the ?Creator? Digital Economies project asking whether technologists, themselves, should be considered as engaging in ?practice-based? research, whether this occurs in collaborative situations, or even as a component of their own personal research [1]. Abstract In recent years, the category of ?practice-based research? has become an essential component of discourse around public funding and evaluation of the arts in British higher education. When included under the umbrella of public policy concerned with ?the creative industries\", technology researchers often find themselves collaborating with artists who consider their own participation to be a form of practice-based research. We are conducting a study under the ?Creator? Digital Economies project asking whether technologists, themselves, should be considered as engaging in ?practice-based? research, whether this occurs in collaborative situations, or even as a component of their own personal research [1].","author":[{"family":"Woolford","given":"Kirk"},{"family":"Blackwell","given":"Alan F."},{"family":"Norman","given":"Sally J."},{"family":"Chevalier","given":"Cecile"}],"citation-key":"woolfordCraftingCriticalTechnical2010","container-title":"Leonardo","DOI":"10.1162/leon.2010.43.2.202","issue":"2","issued":{"date-parts":[[2010,4]]},"page":"202–203","title":"Crafting a Critical Technical Practice","type":"article-journal","URL":"http://dx.doi.org/10.1162/leon.2010.43.2.202","volume":"43"}, + {"id":"wrightOpenSoundControlSpecification2002","author":[{"family":"Wright","given":"Matt"}],"citation-key":"wrightOpenSoundControlSpecification2002","issued":{"date-parts":[[2002]]},"publisher":"Center for New Music and Audio Technologies, UC Berkeley","title":"OpenSound Control Specification","type":"book"}, + {"id":"wylieMindfCkCambridge2019","abstract":"For the first time, the Cambridge Analytica whistleblower tells the inside story of the data mining and psychological manipulation behind the election of Donald Trump and the Brexit referendum, connecting Facebook, WikiLeaks, Russian intelligence, and international hackers.“Mindf*ck demonstrates how digital influence operations, when they converged with the nasty business of politics, managed to hollow out democracies.”—The Washington Post Mindf*ck goes deep inside Cambridge Analytica’s “American operations,” which were driven by Steve Bannon’s vision to remake America and fueled by mysterious billionaire Robert Mercer’s money, as it weaponized and wielded the massive store of data it had harvested on individuals—in excess of 87 million—to disunite the United States and set Americans against each other. Bannon had long sensed that deep within America’s soul lurked an explosive tension. Cambridge Analytica had the data to prove it, and in 2016 Bannon had a presidential campaign to use as his proving ground. Christopher Wylie might have seemed an unlikely figure to be at the center of such an operation. Canadian and liberal in his politics, he was only twenty-four when he got a job with a London firm that worked with the U.K. Ministry of Defense and was charged putatively with helping to build a team of data scientists to create new tools to identify and combat radical extremism online. In short order, those same military tools were turned to political purposes, and Cambridge Analytica was born. Wylie’s decision to become a whistleblower prompted the largest data-crime investigation in history. His story is both exposé and dire warning about a sudden problem born of very new and powerful capabilities. It has not only laid bare the profound vulnerabilities—and profound carelessness—in the enormous companies that drive the attention economy, it has also exposed the profound vulnerabilities of democracy itself. What happened in 2016 was just a trial run. Ruthless actors are coming for your data, and they want to control what you think.","author":[{"family":"Wylie","given":"Christopher"}],"citation-key":"wylieMindfCkCambridge2019","ISBN":"978-1-984854-64-3","issued":{"date-parts":[[2019,10,8]]},"language":"en","number-of-pages":"290","publisher":"Random House Publishing Group","source":"Google Books","title":"Mindf*ck: Cambridge Analytica and the Plot to Break America","title-short":"Mindf*ck","type":"book"}, + {"id":"wylieMindfCkCambridge2019a","abstract":"'Freewheeling and profane ... Wylie covers plenty of ground, explaining in illuminating and often scary detail how Cambridge Analytica exploited the data to create Facebook pages that would needle \"neurotic, conspiratorial citizens\", propagating an outraged solidarity.'Jennifer Szalai, New York TimesWhat if you could peer into the minds of an entire population? What if you could target the weakest with rumours that only they saw? In 2016, an obscure British military contractor turned the world upside down. Funded by a billionaire on a crusade to start his own far-right insurgency, Cambridge Analytica combined psychological research with private Facebook data to make an invisible weapon with the power to change what voters perceived as real. The firm was created to launch the then unknown Steve Bannon's ideological assault on America. But as it honed its dark arts in elections from Trinidad to Nigeria, 24-year-old research director Christopher Wylie began to see what he and his colleagues were unleashing. He had heard the disturbing visions of the investors. He saw what CEO Alexander Nix did behind closed doors. When Britain shocked the world by voting to leave the EU, Wylie realised it was time to expose his old associates. The political crime of the century had just taken place - the weapon had been tested - and nobody knew.","author":[{"family":"Wylie","given":"Christopher"}],"citation-key":"wylieMindfCkCambridge2019a","edition":"Main edition","event-place":"S.l.","ISBN":"978-1-78816-499-3","issued":{"date-parts":[[2019,10,8]]},"language":"English","number-of-pages":"288","publisher":"Profile Books","publisher-place":"S.l.","source":"Amazon","title":"Mindf*ck: Inside Cambridge Analytica’s Plot to Break the World","title-short":"Mindf*ck","type":"book"}, + {"id":"yamadaAppreciatingArtVerbally2009","abstract":"Two experiments examined whether appreciating art verbally would aesthetically confuse viewers. Participants were asked to verbalize why they either liked or disliked two different kinds of paintings; one piece was representational, the other piece was abstract. Those who verbalized their reasons for liking the artworks were more likely to prefer the representational painting, whereas those who verbalized their reasons for disliking the paintings were also more likely to dislike the representational painting. While it was easy to describe reasons for both liking and disliking representational art, the same proved difficult for abstract art. The findings suggest that due to its figurative qualities people will be encouraged to generate reasons to describe representational art, rather than abstract art, and that these reasons could potentially be biased and cause them to change their preferences in line with these reasons.","author":[{"family":"Yamada","given":"Ayumi"}],"citation-key":"yamadaAppreciatingArtVerbally2009","container-title":"Journal of Experimental Social Psychology","DOI":"10.1016/j.jesp.2009.06.016","ISSN":"00221031","issue":"5","issued":{"date-parts":[[2009,9]]},"page":"1140–1143","title":"Appreciating art verbally: Verbalization can make a work of art be both undeservedly loved and unjustly maligned","type":"article-journal","URL":"http://dx.doi.org/10.1016/j.jesp.2009.06.016","volume":"45"}, + {"id":"youngbloodExpandedCinema1970","author":[{"family":"Youngblood","given":"Gene"}],"citation-key":"youngbloodExpandedCinema1970","edition":"First","ISBN":"0-525-47263-0","issued":{"date-parts":[[1970]]},"note":"Published: Paperback","publisher":"E P Dutton","title":"Expanded Cinema","type":"book","URL":"http://www.worldcat.org/isbn/0525472630"}, + {"id":"youngHowCriticallyAppraise2009","author":[{"family":"Young","given":"Jane M."},{"family":"Solomon","given":"Michael J."}],"citation-key":"youngHowCriticallyAppraise2009","container-title":"Nat Clin Pract Gastroenterol Hepatol","DOI":"10.1038/ncpgasthep1331","issue":"2","issued":{"date-parts":[[2009,2]]},"page":"82–91","title":"How to critically appraise an article","type":"article-journal","URL":"http://dx.doi.org/10.1038/ncpgasthep1331","volume":"6"}, + {"id":"youngNNMusicImprovising2008","abstract":"A live algorithm describes an ideal autonomous performance system able to engage in performance with abilities analogous, if not identical, to a human musician. This paper proposes five attributes of a live algorithm: adaptability, empowerment, intimacy, opacity and unimagined music. These attributes are explored in NN Music, a performer-machine system for Max/MSP that fosters listening and learning. Live improvisation is encoded statistically to train a feed-forward neural network, mapped to stochastic processes for musical output. Through adaptation, mappings are learnt and covertly assigned, to be revisited by both player and machine as a performance develops.","author":[{"family":"Young","given":"Michael"}],"citation-key":"youngNNMusicImprovising2008","collection-title":"Lecture Notes in Computer Science","container-title":"Computer Music Modeling and Retrieval. Sense of Sounds","DOI":"10.1007/978-3-540-85035-9_23","editor":[{"family":"Kronland-Martinet","given":"Richard"},{"family":"Ystad","given":"Sølvi"},{"family":"Jensen","given":"Kristoffer"}],"issued":{"date-parts":[[2008]]},"page":"337–350","publisher":"Springer Berlin Heidelberg","title":"NN Music: Improvising with a 'Living' Computer","type":"chapter","URL":"http://dx.doi.org/10.1007/978-3-540-85035-9_23","volume":"4969"}, + {"id":"yuillAllProblemsNotation2008","abstract":"In the 1960s and '70s musicians devised innovative forms of notation and protocol to liberate themselves from aesthetic and social conventions. Today's digital devotees of code based production and improvisation are continuing this tradition, argues Simon Yuill*","accessed":{"date-parts":[[2021,1,25]]},"author":[{"family":"Yuill","given":"Simon"}],"citation-key":"yuillAllProblemsNotation2008","container-title":"Mute","genre":"Text","ISSN":"1356-7748","issued":{"literal":"23/05/2008 - 17:56"},"language":"en","publisher":"Mute Publishing Limited","title":"All Problems of Notation Will Be Solved By the Masses","type":"webpage","URL":"https://www.metamute.org/editorial/articles/all-problems-notation-will-be-solved-masses"}, + {"id":"zareeiNoiseGridRhythmic2013","author":[{"family":"Zareei","given":"Mohammadhossein"},{"family":"Kapur","given":"Dr A."},{"family":"Carnegie","given":"Prof D."}],"citation-key":"zareeiNoiseGridRhythmic2013","container-title":"Proceedings of the International Computer Music Conference","issued":{"date-parts":[[2013]]},"publisher":"ICMC","title":"Noise on the Grid: Rhythmic Pulse in Experimental and Electronic Noise Music","type":"paper-conference"}, + {"id":"zatorreNeuralSpecializationsSpeech2008","abstract":"The idea that speech processing relies on unique, encapsulated, domain-specific mechanisms has been around for some time. Another well-known idea, often espoused as being in opposition to the first proposal, is that processing of speech sounds entails general-purpose neural mechanisms sensitive to the acoustic features that are present in speech. Here, we suggest that these dichotomous views need not be mutually exclusive. Specifically, there is now extensive evidence that spectral and temporal acoustical properties predict the relative specialization of right and left auditory cortices, and that this is a parsimonious way to account not only for the processing of speech sounds, but also for non-speech sounds such as musical tones. We also point out that there is equally compelling evidence that neural responses elicited by speech sounds can differ depending on more abstract, linguistically relevant properties of a stimulus (such as whether it forms part of one's language or not). Tonal languages provide a particularly valuable window to understand the interplay between these processes. The key to reconciling these phenomena probably lies in understanding the interactions between afferent pathways that carry stimulus information, with top-down processing mechanisms that modulate these processes. Although we are still far from the point of having a complete picture, we argue that moving forward will require us to abandon the dichotomy argument in favour of a more integrated approach.","author":[{"family":"Zatorre","given":"Robert J."},{"family":"Gandour","given":"Jackson T."}],"citation-key":"zatorreNeuralSpecializationsSpeech2008","container-title":"Philosophical Transactions of the Royal Society B: Biological Sciences","DOI":"10.1098/rstb.2007.2161","ISSN":"1471-2970","issue":"1493","issued":{"date-parts":[[2008,3]]},"page":"1087–1104","PMID":"17890188","title":"Neural specializations for speech and pitch: moving beyond the dichotomies","type":"article-journal","URL":"http://dx.doi.org/10.1098/rstb.2007.2161","volume":"363"}, + {"id":"zatorreWhenBrainPlays2007","abstract":"Music performance is both a natural human activity, present in all societies, and one of the most complex and demanding cognitive challenges that the human mind can undertake. Unlike most other sensory–motor activities, music performance requires precise timing of several hierarchically organized actions, as well as precise control over pitch interval production, implemented through diverse effectors according to the instrument involved. We review the cognitive neuroscience literature of both motor and auditory domains, highlighting the value of studying interactions between these systems in a musical context, and propose some ideas concerning the role of the premotor cortex in integration of higher order features of music with appropriately timed and organized actions.","author":[{"family":"Zatorre","given":"Robert J."},{"family":"Chen","given":"Joyce L."},{"family":"Penhune","given":"Virginia B."}],"citation-key":"zatorreWhenBrainPlays2007","container-title":"Nature Reviews Neuroscience","DOI":"10.1038/nrn2152","ISSN":"1471-003X","issue":"7","issued":{"date-parts":[[2007,7]]},"page":"547–558","PMID":"17585307","title":"When the brain plays music: auditory–motor interactions in music perception and production","type":"article-journal","URL":"http://dx.doi.org/10.1038/nrn2152","volume":"8"}, + {"id":"zbikowskiMetaphorMusic2008","author":[{"family":"Zbikowski","given":"Lawrence M."}],"citation-key":"zbikowskiMetaphorMusic2008","container-title":"The Cambridge Handbook of Metaphor and Thought","editor":[{"family":"Gibbs","given":"Raymond W."}],"issued":{"date-parts":[[2008]]},"page":"502–524","publisher":"Cambridge University Press","title":"Metaphor and music","type":"chapter"}, + {"id":"zbikowskiMetaphorMusicTheory1998","abstract":"A recent discussion on the smt-list focused on Nicholas Cook's claim in Music, Imagination, and Culture that musical analysis is essentially metaphorical. This essay investigates this claim through a review of recent work on metaphor by cognitive scientists. This work both supports and modifies Cook's original claim. The latter portion of the essay presents examples of two applications of research on metaphor to music theory.","author":[{"family":"Zbikowski","given":"Lawrence M."}],"citation-key":"zbikowskiMetaphorMusicTheory1998","container-title":"The Online Journal of the Society for Music Theory","editor":[{"family":"Rothfarb","given":"Lee"}],"issue":"1","issued":{"date-parts":[[1998]]},"title":"Metaphor and Music Theory: Reflections from Cognitive Science","type":"article-journal","URL":"http://mto.societymusictheory.org/issues/mto.98.4.1/mto.98.4.1.zbikowski.html","volume":"4"}, + {"id":"zbikowskiOleKuhlMusical","author":[{"family":"Zbikowski","given":"Lawrence"}],"citation-key":"zbikowskiOleKuhlMusical","container-title":"Music\\a e Scienti\\a e","title":"Ole Kühl's Musical Semantics: Cognitive Musicology and the Challenge of Musical Meaning","type":"article-journal"}, + {"id":"zhangCreativeTryComposing2010","abstract":"Woven fabrics are widely used in clothing because of their parallel and interlaced properties, which are formed by weaving. Creating a weaving pattern, especially hand weaving for interlacing yarns is a cumbersome task in the textile industry. In this paper, we propose two kinds of playing for creating weaving patterns on multi-input devices: the tie-up plan and the lift plan. Discrete notes on the treble staff are translated into signatures of treadling sequences and discrete notes in the bass staff are translated into signatures of theadling sequences. Artists can use their right hand to compose a treadling sequence for weft yarns and their left hand to play a threading sequence for warp yarns. The treadling and threading sequences become the notes on the full gamut of shafts and treadles. Our result shows that we are able to compose a family of weaving patterns in a similar way to playing the piano in a short time.","author":[{"family":"Zhang","given":"Jiahua"},{"family":"Baciu","given":"George"},{"family":"Liang","given":"Shuang"},{"family":"Liang","given":"Cheng"}],"citation-key":"zhangCreativeTryComposing2010","collection-title":"VRST '10","container-title":"Proceedings of the 17th ACM Symposium on Virtual Reality Software and Technology","DOI":"10.1145/1889863.1889890","event-place":"Hong Kong","ISBN":"978-1-4503-0441-2","issued":{"date-parts":[[2010]]},"page":"127–130","publisher":"ACM","publisher-place":"Hong Kong","title":"A Creative Try: Composing Weaving Patterns by Playing on a Multi-input Device","type":"paper-conference","URL":"http://dx.doi.org/10.1145/1889863.1889890"}, + {"id":"zhangDynamicFMRIStudy2006","abstract":"Functional MRI (fMRI) combined with the paired-stimuli paradigms (referred as dynamic fMRI) was used to study the illusory double-flash effect on brain activity in the human visual cortex. Three experiments were designed. The first two experiments aimed to examine the cross-modal neural interaction between the visual and auditory sensory systems caused by the illusory double-flash effect using combined auditory (beep sound) and visual (light flash) stimuli. The fMRI signal in the visual cortex was significantly increased in response to the illusory double flashes compared to the physical single flash when the inter-stimuli delay between the auditory and visual stimuli was 25 ms. This increase disappeared when the delay was prolonged to ∼300 ms. These results reveal that the illusory double-flash effect can significantly affect the brain activity in the visual cortex, and the degree of this effect is dynamically sensitive to the inter-stimuli delay. The third experiment was to address the spatial differentiation of brain activation in the visual cortex in response to the illusory double-flash stimulation. It was found that the illusory double-flash effect in the human visual cortex is much stronger in the periphery than the fovea. This finding suggests that the periphery may be involved in high-level brain processing beyond the retinotopic visual perception. The behavioral measures conducted in this study indicate an excellent correlation between the fMRI results and behavioral performance. Finally, this work demonstrates a unique merit of fMRI for providing both temporal and spatial information regarding cross-modal neural interaction between different sensory systems.","author":[{"family":"Zhang","given":"Nanyin"},{"family":"Chen","given":"Wei"}],"citation-key":"zhangDynamicFMRIStudy2006","container-title":"Experimental Brain Research","DOI":"10.1007/s00221-005-0304-7","ISSN":"0014-4819","issue":"1","issued":{"date-parts":[[2006,6]]},"page":"57–66","title":"A dynamic fMRI study of illusory double-flash effect on human visual cortex","type":"article-journal","URL":"http://dx.doi.org/10.1007/s00221-005-0304-7","volume":"172"}, + {"id":"zimmermannMiningVersionHistories2005","abstract":"We apply data mining to version histories in order to guide programmers along related changes: \"Programmers who changed these functions also changed....\" Given a set of existing changes, the mined association rules 1) suggest and predict likely further changes, 2) show up item coupling that is undetectable by program analysis, and 3) can prevent errors due to incomplete changes. After an initial change, our ROSE prototype can correctly predict further locations to be changed; the best predictive power is obtained for changes to existing software. In our evaluation based on the history of eight popular open source projects, ROSE's topmost three suggestions contained a correct location with a likelihood of more than 70 percent.","author":[{"family":"Zimmermann","given":"T."},{"family":"Zeller","given":"A."},{"family":"Weissgerber","given":"P."},{"family":"Diehl","given":"S."}],"citation-key":"zimmermannMiningVersionHistories2005","container-title":"Software Engineering, IEEE Transactions on","container-title-short":"Software Engineering, IEEE Transactions on","DOI":"10.1109/tse.2005.72","ISSN":"0098-5589","issue":"6","issued":{"date-parts":[[2005,6]]},"page":"429–445","title":"Mining version histories to guide software changes","type":"article-journal","URL":"http://dx.doi.org/10.1109/tse.2005.72","volume":"31"}, + {"id":"zittrainFutureInternetHow2009","author":[{"family":"Zittrain","given":"Jonathan"}],"citation-key":"zittrainFutureInternetHow2009","ISBN":"0-300-15124-1","issued":{"date-parts":[[2009,3]]},"note":"Published: Paperback","publisher":"Yale University Press","title":"The Future of the Internet–And How to Stop It","type":"book","URL":"http://www.worldcat.org/isbn/0300151241"}, + {"id":"zivanovicDevelopmentCyberneticSculptor2005","abstract":"Edward Ihnatowicz (1926-1988) built one of the world's first computer-controlled robotic sculptures, The Senster, in 1968-70. Rather than concentrate entirely on this groundbreaking and influential piece of work, this paper describes the stages he went through in developing his ideas, as an illustration of how a conventional artist became a cybernetic sculptor.","author":[{"family":"Zivanovic","given":"Aleksandar"}],"citation-key":"zivanovicDevelopmentCyberneticSculptor2005","container-title":"C&C '05: Proceedings of the 5th conference on Creativity & cognition","DOI":"10.1145/1056224.1056240","event-place":"London, United Kingdom","ISBN":"1-59593-025-6","issued":{"date-parts":[[2005]]},"page":"102–108","publisher":"ACM","publisher-place":"London, United Kingdom","title":"The development of a cybernetic sculptor: Edward Ihnatowicz and the senster","type":"paper-conference","URL":"http://dx.doi.org/10.1145/1056224.1056240"} +] diff --git a/paper/demo-preprocessed.md b/paper/demo-preprocessed.md index 23642b8c..c7b316f6 100644 --- a/paper/demo-preprocessed.md +++ b/paper/demo-preprocessed.md @@ -1,354 +1,7 @@ --- -date: 2022-04-15 -references: -- abstract: In this artist statement, I will discuss the tension between - source code as an interactive system for performers and source code - as information and entertainment for audiences in live-coding - performances. I then describe augmentations I developed for the - presentation of source code in the live-coding environment Gibber, - including animations and annotations that visually reveal aspects of - system state during performances. I briefly describe audience - responses to these techniques and, more importantly, how they are - critical to my own artistic practice. - accessed: - date-parts: - - - 2022 - - 3 - - 24 - author: - - family: Roberts - given: Charles - container-title: International Journal of Performance Arts and Digital - Media - DOI: 10.1080/14794713.2016.1227602 - id: "https://www.tandfonline.com/doi/abs/10.1080/14794713.2016.1227602?journalCode_x61_rpdm20" - ISSN: 1479-4713 - issue: 2 - issued: - date-parts: - - - 2016 - - 7 - keyword: Live coding, psychology of programming, notation, audiences, - algorithms - page: 201-206 - title: Code as information and code as spectacle - type: article-journal - URL: "https://doi.org/10.1080/14794713.2016.1227602" - volume: 12 -- abstract: The TidalCycles (or Tidal for short) live coding environment - has been developed since around 2009, via several rewrites of its - core representation. Rather than having fixed goals, this - development has been guided by use, motivated by the open aim to - make music. This development process can be seen as a long-form - improvisation, with insights into the nature of Tidal gained through - the process of writing it, feeding back to guide the next steps of - development. This brings the worrying thought that key insights will - have been missed along this development journey, that would - otherwise have lead to very different software. Indeed participants - at beginners' workshops that I have lead or co-lead have often asked - questions without good answers, because they made deficiencies or - missing features in the software clear. It is well known that a - beginner's mind is able to see much that an expert has become blind - to. Running workshops are an excellent way to find new development - ideas, but the present paper explores a different technique -- the - rewrite. - accessed: - date-parts: - - - 2022 - - 3 - - 24 - id: "https://zenodo.org/record/5788732" - issued: - date-parts: - - - 2021 - - 12 - keyword: live coding, algorithmic pattern, tidalcycles, haskell, - python - publisher-place: Valdivia, Chile - title: Alternate Timelines for TidalCycles - URL: "https://zenodo.org/record/5788732" -- abstract: A JavaScript dialect of its mini-notation for pattern is - created, enabling easy integration with creative coding tools and an - accompanying technique for visually annotating the playback of - TidalCycles patterns over time. TidalCycles has rapidly become the - most popular system for many styles of live coding performance, in - particular Algoraves. We created a JavaScript dialect of its - mini-notation for pattern, enabling easy integration with creative - coding tools. Our research pairs a formalism describing the - mini-notation with a small JavaScript library for generating events - over time; this library is suitable for generating events inside of - an AudioWorkletProcessor thread and for assisting with scheduling in - JavaScript environments more generally. We describe integrating the - library into the two live coding systems, Gibber and Hydra, and - discuss an accompanying technique for visually annotating the - playback of TidalCycles patterns over time. - accessed: - date-parts: - - - 2022 - - 4 - - 12 - author: - - family: Roberts - given: Charles - container-title: www.semanticscholar.org - id: "https://www.semanticscholar.org/paper/Bringing-the-TidalCycles-Mini-Notation-to-the-Roberts/74965efadd572ae3f40d14c633a5c8581c1b9f42" - issued: - date-parts: - - - 2019 - title: Bringing the TidalCycles Mini-Notation to the Browser - URL: "https://www.semanticscholar.org/paper/Bringing-the-TidalCycles-Mini-Notation-to-the-Roberts/74965efadd572ae3f40d14c633a5c8581c1b9f42" -- abstract: In this paper we introduce "version zero" of TidalVortex, an - alternative implementation of the TidalCycles live coding system, - using the Python programming language.  This is open-ended work, - exploring what happens when we try to extract the 'essence' of a - system like TidalCycles and translate it into another programming - language, while taking advantage of the affordance of its new host. - First, we review the substantial prior art in porting TidalCycles, - and in representing musical patterns in Python. We then compare - equivalent patterns written in Haskell (TidalCycles) and Python - (TidalVortex), and relate implementation details of how functional - reactive paradigms have translated from the pure functional, - strongly typed Haskell to the more multi-paradigm, dynamically typed - Python. Finally, we conclude with reflections and generalisable - outcomes. - accessed: - date-parts: - - - 2022 - - 4 - - 14 - id: "https://zenodo.org/record/6456380" - issued: - date-parts: - - - 2022 - - 4 - publisher-place: Limerick, Ireland - title: TidalVortex Zero - URL: "https://zenodo.org/record/6456380" -- abstract: This paper brings together two main perspectives on - algorithmic pattern. First, the writing of musical patterns in live - coding performance, and second, the weaving of patterns in textiles. - In both cases, algorithmic pattern is an interface between the human - and the outcome, where small changes have far-reaching impact on the - results. By bringing contemporary live coding and ancient textile - approaches together, we reach a common view of pattern as - algorithmic movement (e.g. looping, shifting, reflecting, - interfering) in the making of things. This works beyond the usual - definition of pattern used in musical interfaces, of mere repeating - sequences. We conclude by considering the place of algorithmic - pattern in a wider activity of making. - accessed: - date-parts: - - - 2022 - - 4 - - 15 - id: "https://zenodo.org/record/4299661" - issued: - date-parts: - - - 2020 - - 7 - keyword: pattern, tidalcycles, algorithmic music, textiles, live - coding, algorave - publisher-place: Birmingham UK - title: Algorithmic Pattern - URL: "https://zenodo.org/record/4299661" -- accessed: - date-parts: - - - 2022 - - 4 - - 15 - author: - - family: Charlie - given: Roberts - - family: Joann - given: Kuchera-Morin - container-title: International Computer Music Conference Proceedings - id: "https://quod.lib.umich.edu/i/icmc/bbp2372.2012.011/2/--gibber-live-coding-audio-in-the-browser?page_x61_root;size_x61_150;view_x61_text" - ISSN: 2223-3881 - issued: - date-parts: - - - 2012 - title: "GIBBER: LIVE CODING AUDIO IN THE BROWSER" - title-short: GIBBER - type: article-journal - URL: "https://quod.lib.umich.edu/i/icmc/bbp2372.2012.011/2/%E2%80%93gibber-live-coding-audio-in-the-browser?page=root;size=150;view=text" - volume: 2012 -- abstract: Estuary is a browser-based collaborative projectional - editing environment built on top of the popular TidalCycles language - for the live coding of musical pattern that includes a strict form - of structure editing, a click-only border-free approach to interface - design, and explicit notations to modulate the liveness of different - parts of the code. This paper describes the initial design and - development of Estuary, a browser-based collaborative projectional - editing environment built on top of the popular TidalCycles language - for the live coding of musical pattern. Key features of Estuary - include a strict form of structure editing (making syntactical - errors impossible), a click-only border-free approach to interface - design, explicit notations to modulate the liveness of different - parts of the code, and a server-based network collaboration system - that can be used for many simultaneous collaborative live coding - performances, as well as to present different views of the same live - coding activity. Estuary has been developed using Reflex-DOM, a - Haskell-based framework for web development whose strictness - promises robustness and security advantages. - accessed: - date-parts: - - - 2022 - - 4 - - 15 - author: - - family: Ogborn - given: David - - family: Beverley - given: J. - container-title: www.semanticscholar.org - id: "https://www.semanticscholar.org/paper/Estuary_x37_3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b" - issued: - date-parts: - - - 2017 - title: "Estuary: Browser-based Collaborative Projectional Live Coding - of Musical Patterns" - title-short: Estuary - URL: "https://www.semanticscholar.org/paper/Estuary%3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b" -- abstract: This is an improvised, from-scratch live coding performance. - The NIME interface which this performance showcases is the new - Feedfoward editor for the TidalCycles live coding environment. - Feedforward is written in Haskell using the ncurses library for - terminal-based user interfaces. It runs on low-powered hardware - including the Raspberry Pi Zero, with formative testing of - prototypes conducted with several groups of children between the - ages of 8 and 14. Feedforward has a number of features designed to - support improvised, multi-pattern live coding. Individual Tidal - patterns are addressable with hotkeys for fast mute and unmuting. - Each pattern has a stereo VU meter, to aid the quick matching of - sound to pattern within a mix. In addition, TidalCycles has been - extended to store context with each event, so that source code - positions in its polyrhythmic sequence mini-notation are tracked. - This allows steps to be highlighted in the source code when- ever - they are active. This works even when Tidal combinators have been - applied to manipulate the timeline. Formal evaluation has yet to - take place, but this feature appears to support learning of how - pattern manipulations work in Tidal. Feedforward and TidalCycles is - free/open source software under a GPL licence version 3.0. - accessed: - date-parts: - - - 2022 - - 4 - - 15 - id: "https://zenodo.org/record/6353969" - issued: - date-parts: - - - 2020 - - 7 - publisher-place: Birmingham - title: Feedforward - URL: "https://zenodo.org/record/6353969" -- abstract: The Euclidean algorithm (which comes down to us from - Euclid's Elements) computes the greatest common divisor of two given - integers. It is shown here that the structure of the Euclidean - algorithm may be used to automatically generate, very efficiently, a - large family of rhythms used as timelines (rhythmic ostinatos), in - traditional world music. These rhythms, here dubbed Euclidean - rhythms, have the property that their onset patterns are distributed - as evenly as possible in a mathematically precise sense, and optimal - manner. Euclidean rhythms are closely related to the family of Aksak - rhythms studied by ethnomusicologists, and occur in a wide variety - of other disciplines as well. For example they characterize - algorithms for drawing digital straight lines in computer graphics, - as well as algorithms for calculating leap years in calendar design. - Euclidean rhythms also find application in nuclear physics - accelerators and in computer science, and are closely related to - several families of words and sequences of interest in the study of - the combinatorics of words, such as mechanical words, Sturmian - words, two-distance sequences, and Euclidean strings, to which the - Euclidean rhythms are compared. 1. - accessed: - date-parts: - - - 2022 - - 4 - - 24 - author: - - family: Toussaint - given: Godfried - container-title: "In Proceedings of BRIDGES: Mathematical Connections - in Art, Music and Science" - id: "https://citeseerx.ist.psu.edu/viewdoc/summary?doi_x61_10.1.1.72.1340" - issued: - date-parts: - - - 2005 - page: 47-56 - title: The Euclidean algorithm generates traditional musical rhythms - type: paper-conference - URL: "https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.72.1340" -- accessed: - date-parts: - - - 2022 - - 4 - - 24 - container-title: webaudioconf.com - id: "https://webaudioconf.com/posts/2021_8/" - title: "WAC Glicol: A Graph-oriented Live Coding Language Developed - with Rust, WebAssembly and AudioWorklet" - title-short: WAC Glicol - URL: "https://webaudioconf.com/posts/2021_8/" -- accessed: - date-parts: - - - 2022 - - 4 - - 24 - container-title: webaudioconf.com - id: "https://webaudioconf.com/posts/2019_38/" - title: "WAC FAUST online IDE: Dynamically compile and publish FAUST - code as WebAudio Plugins" - title-short: WAC FAUST online IDE - URL: "https://webaudioconf.com/posts/2019_38/" -- abstract: Strudel REPL - accessed: - date-parts: - - - 2022 - - 4 - - 24 - container-title: strudel.tidalcycles.org - id: "https://strudel.tidalcycles.org" - title: Strudel REPL - URL: "https://strudel.tidalcycles.org/" -- abstract: Description - accessed: - date-parts: - - - 2022 - - 4 - - 25 - container-title: hydra.ojack.xyz - id: "https://hydra.ojack.xyz/docs/\\_x35\\_/" - title: Hydra - URL: "https://hydra.ojack.xyz/docs/#/" -- accessed: - date-parts: - - - 2022 - - 4 - - 25 - container-title: mikesol.github.io - id: "https://mikesol.github.io/purescript-wags/" - title: Wags documentation - URL: "https://mikesol.github.io/purescript-wags/" -- abstract: Experimental port of tidalcycles to Javascript - accessed: - date-parts: - - - 2022 - - 4 - - 25 - id: "https://github.com/tidalcycles/strudel" - issued: - date-parts: - - - 2022 - - 4 - keyword: javascript, livecoding, tidal, tidalcycles, algorave, - algorithmic-patterns - note: "original-date: 2022-01-22T20:24:35Z" - publisher: TidalCycles - title: Strudel - URL: "https://github.com/tidalcycles/strudel" +bibliography: citations.json +date: 2022-06-24 title: "Strudel: Algorithmic Patterns for the Web" -url2cite: all-links --- # Introduction @@ -358,9 +11,9 @@ alternative implementation of the Tidal (or 'TidalCycles') live coding system, using the JavaScript programming language. Strudel is an attempt to make live coding more accessible, by creating a system that runs entirely in the browser, while opening Tidal's approach to algorithmic -patterns [@https://zenodo.org/record/4299661] up to modern audio/visual -web technologies. The Strudel REPL is a live code editor dedicated to -manipulating strudel patterns while they play, with builtin visual +patterns [@mcleanAlgorithmicPattern2020a] up to modern audio/visual web +technologies. The Strudel REPL is a live code editor dedicated to +manipulating Strudel patterns while they play, with builtin visual feedback. While Strudel is written in JavaScript, the API is optimized for simplicity and readability by applying code transformations on the syntax tree level, allowing language operations that would otherwise be @@ -369,13 +22,11 @@ including Tone.js, Web Audio nodes, OSC (Open Sound Control) messages, Web Serial and Web MIDI. The project is split into multiple packages, allowing granular reuse in other applications. Apart from TidalCycles, Strudel draws inspiration from many prior existing projects like -TidalVortex [@https://zenodo.org/record/6456380], Gibber -[@{https://quod.lib.umich.edu/i/icmc/bbp2372.2012.011/2/–gibber-live-coding-audio-in-the-browser?page_x61_root;size_x61_150;view_x61_text}], -Estuary -[@https://www.semanticscholar.org/paper/Estuary_x37_3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b], -Hydra [@{https://hydra.ojack.xyz/docs/_x35_/}], Wags -[@{https://mikesol.github.io/purescript-wags/}] and Feedforward -[@https://zenodo.org/record/6353969]. +TidalVortex [@mcleanTidalVortexZero2022], Gibber +[@robertsGibberLiveCoding2012], Estuary +[@ogbornEstuaryBrowserbasedCollaborative2017], Hydra [@jackHydra2022], +Ocarina [@solomonPurescriptocarina2022] and Feedforward +[@mcleanFeedforward2020]. # Porting from Haskell @@ -387,12 +38,12 @@ with a dynamic type system. Because Tidal leans heavily on many of Haskell's more unique features, it was not always clear that it could meaningfully be ported to a multi-paradigm scripting language. However, this already proved to be the case with an earlier port to Python -\[TidalVortex; @https://zenodo.org/record/6456380\], and we have now +\[TidalVortex; @mcleanTidalVortexZero2022\], and we have now successfully implemented Tidal's pure functional representation of patterns in Strudel, including partial application, and functor, applicative and monad structures. Over the past few months since the project started in January 2022, a large part of Tidal's functionality -has already been ported, including it's mini-notation for polymetric +has already been ported, including its mini-notation for polymetric sequences, and a large part of its library of pattern manipulations. The result is a terse and highly composable system, where just about everything is a pattern, that may be transformed and combined with other @@ -478,20 +129,53 @@ This line could also be expressed without mini notation: Here is a short description of all the functions used: -- slowcat: play elements sequentially, where each lasts one cycle -- brackets: elements inside brackets are divided equally over the time - of their parent -- euclid(p, s, o): place p pulses evenly over s steps, with offset o - [@https://citeseerx.ist.psu.edu/viewdoc/summary?doi_x61_10.1.1.72.1340] -- fast(n): speed up by n. `g3.fast(2)` will play g3 two times. -- off(n, f): copy each event, offset it by n cycles and apply function - f -- legato(n): multiply duration of event with n -- echo(t, n, v): copy each event t times, with n cycles in between +- `slowcat`: play elements sequentially, where each lasts one cycle +- `brackets`: elements inside brackets are divided equally over the + time of their parent +- `euclid(p, s, o)`: place p pulses evenly over s steps, with offset o + [@toussaintEuclideanAlgorithmGenerates2005] +- `fast(n)`: speed up by n. `g3.fast(2)` will play g3 two times. +- `off(n, f)`: copy each event, offset it by n cycles and apply + function f +- `legato(n)`: multiply duration of event with n +- `echo(t, n, v)`: copy each event t times, with n cycles in between each copy, decreasing velocity by v -- tone(instrument): play back each event with the given Tone.js +- `tone(instrument)`: play back each event with the given Tone.js instrument -- pianoroll(): visualize events as midi notes in a pianoroll +- `pianoroll()`: visualize events as midi notes in a pianoroll + +# Ways to make Sound + +To generate sound, Strudel supports different outputs: + +- Tone.js +- Web Audio API +- WebDirt, a js recreation of Tidal's *Dirt* sample engine +- OSC via osc-js +- MIDI via WebMIDI + +Tone.js proved to be limited for the use case of Strudel, where each +individual event could potentially have a completely different audio +graph. While the Web Audio API takes a *fire-and-forget* approach, +creating a lot of Tone.js instruments and effects causes performance +issues quickly. For that reason, we chose to search for alternatives. + +Strudel's Web Audio API output creates a new audio graph for each event. +It currently supports basic oscillators, sample playback, envelopes, +filters and an experimental support for soundfonts. + +WebDirt [@ogbornDktr0WebDirt2022] was created as part of the Estuary +Live Coding System [@ogbornEstuaryBrowserbasedCollaborative2017], and +proved to be a solid choice for handling samples in Strudel as well. + +Using OSC, it is possible to send messages to SuperDirt +[@SuperDirt2022], which is what Tidal does to generate sound. The +downside of using OSC is that it requires the user to install +SuperCollider and its sc3plugins library, which can be difficult. + +The MIDI output can be used to send MIDI messages to either external +instruments or to other programs on the same device. Web MIDI is +currently only supported on Chromium-based browsers. # Future Outlook @@ -502,45 +186,23 @@ general guiding principles, Strudel aims to be 2. consistent with Tidal's approach to pattern 3. modular and extensible -The main accessibility advantage over Tidal is the zero install browser -environment. It is not yet accessible to screen reader users, but will -be soon with the integration of the CodeMirror 6 editor. While Strudel -can control Tidal's SuperDirt audio system via OSC, it requires the user -to install SuperCollider and its sc3plugins library, which can be -difficult. Without SuperDirt, Strudel is able to output sound itself via -Tone.js, however this is limited both in terms of available features and -runtime performance. For the future, it is planned to integrate -alternative sound engines such as glicol -[@{https://webaudioconf.com/posts/2021_8/}] and faust -[@{https://webaudioconf.com/posts/2019_38/}]. To improve compatibility -with Tidal, more Tidal functions are planned to be ported, as well as -full compatibility with SuperDirt. Besides sound, other ways to render -events are being explored, such as graphical, and choreographic output. -We are also looking into alternative ways of editing patterns, including +For the future, it is planned to integrate alternative sound engines +such as Glicol [@lanChaosprintGlicol2022] and Faust +[@FaustProgrammingLanguage2022]. To improve compatibility with Tidal, +more Tidal functions are planned to be ported, as well as full +compatibility with SuperDirt. Besides sound, other ways to render events +are being explored, such as graphical, and choreographic output. We are +also looking into alternative ways of editing patterns, including multi-user editing for network music, parsing a novel syntax to escape the constraints of javascript, and developing hardware/e-textile interfaces. # Links -The Strudel REPL is available at [https://strudel.tidalcycles.org -[@https://strudel.tidalcycles.org]](https://strudel.tidalcycles.org){.uri -cite-meta="{\"URL\":\"https://strudel.tidalcycles.org/\",\"abstract\":\"Strudel REPL\",\"accessed\":{\"date-parts\":[[2022,4,24]]},\"container-title\":\"strudel.tidalcycles.org\",\"id\":\"https://strudel.tidalcycles.org\",\"title\":\"Strudel REPL\",\"type\":\"\"}"}, +The Strudel REPL is available at , including an interactive tutorial. The repository is at -[https://github.com/tidalcycles/strudel -[@https://github.com/tidalcycles/strudel]](https://github.com/tidalcycles/strudel){.uri -cite-meta="{\"URL\":\"https://github.com/tidalcycles/strudel\",\"abstract\":\"Experimental port of tidalcycles to Javascript\",\"accessed\":{\"date-parts\":[[2022,4,25]]},\"id\":\"https://github.com/tidalcycles/strudel\",\"issued\":{\"date-parts\":[[2022,4]]},\"keyword\":\"javascript, livecoding, tidal, tidalcycles, algorave, algorithmic-patterns\",\"note\":\"original-date: 2022-01-22T20:24:35Z\",\"publisher\":\"TidalCycles\",\"title\":\"Strudel\",\"type\":\"\"}"}, -all the code is open source under the GPL-3.0 License. - -# Technical requirements - -- Space for one laptop + small audio interface (20 cm x 20cm), with - mains power. -- Stereo sound system, either placed behind presenter (for direct - monitoring) or with additional stereo monitors. -- Audio from audio interface: stereo pair 6,3mm jack outputs - (balanced) -- Projector / screen (HDMI.) +, all the code is open source +under the GPL-3.0 License. # Acknowledgments @@ -549,4 +211,4 @@ free/open source software communities for inspiration and support. Alex McLean's work on this project is supported by a UKRI Future Leaders Fellowship \[grant number MR/V025260/1\]. -# References +# References {#references .unnumbered} diff --git a/paper/demo.md b/paper/demo.md index 266c6bce..9e3e5237 100644 --- a/paper/demo.md +++ b/paper/demo.md @@ -1,16 +1,16 @@ --- title: 'Strudel: Algorithmic Patterns for the Web' -date: '2022-04-15' -url2cite: all-links +date: '2022-06-24' +bibliography: citations.json --- # Introduction -This paper introduces Strudel (or sometimes 'StrudelCycles'), an alternative implementation of the Tidal (or 'TidalCycles') live coding system, using the JavaScript programming language. Strudel is an attempt to make live coding more accessible, by creating a system that runs entirely in the browser, while opening Tidal's approach to algorithmic patterns [@algorithmicpattern] up to modern audio/visual web technologies. The Strudel REPL is a live code editor dedicated to manipulating strudel patterns while they play, with builtin visual feedback. While Strudel is written in JavaScript, the API is optimized for simplicity and readability by applying code transformations on the syntax tree level, allowing language operations that would otherwise be impossible. The application supports multiple ways to output sound, including Tone.js, Web Audio nodes, OSC (Open Sound Control) messages, Web Serial and Web MIDI. The project is split into multiple packages, allowing granular reuse in other applications. Apart from TidalCycles, Strudel draws inspiration from many prior existing projects like TidalVortex [@tidalvortex], Gibber [@gibber], Estuary [@estuary], Hydra [@hydra], Wags [@wags] and Feedforward [@feedforward]. +This paper introduces Strudel (or sometimes 'StrudelCycles'), an alternative implementation of the Tidal (or 'TidalCycles') live coding system, using the JavaScript programming language. Strudel is an attempt to make live coding more accessible, by creating a system that runs entirely in the browser, while opening Tidal's approach to algorithmic patterns [@mcleanAlgorithmicPattern2020a] up to modern audio/visual web technologies. The Strudel REPL is a live code editor dedicated to manipulating Strudel patterns while they play, with builtin visual feedback. While Strudel is written in JavaScript, the API is optimized for simplicity and readability by applying code transformations on the syntax tree level, allowing language operations that would otherwise be impossible. The application supports multiple ways to output sound, including Tone.js, Web Audio nodes, OSC (Open Sound Control) messages, Web Serial and Web MIDI. The project is split into multiple packages, allowing granular reuse in other applications. Apart from TidalCycles, Strudel draws inspiration from many prior existing projects like TidalVortex [@mcleanTidalVortexZero2022], Gibber [@robertsGibberLiveCoding2012], Estuary [@ogbornEstuaryBrowserbasedCollaborative2017], Hydra [@jackHydra2022], Ocarina [@solomonPurescriptocarina2022] and Feedforward [@mcleanFeedforward2020]. # Porting from Haskell -The original Tidal is implemented as a domain specific language (DSL), embedded in the Haskell pure functional programming language, taking advantage of Haskell's terse syntax and advanced, 'strong' type system. Javascript on the other hand, is a multi-paradigm programming language, with a dynamic type system. Because Tidal leans heavily on many of Haskell's more unique features, it was not always clear that it could meaningfully be ported to a multi-paradigm scripting language. However, this already proved to be the case with an earlier port to Python [TidalVortex; @tidalvortex], and we have now successfully implemented Tidal's pure functional representation of patterns in Strudel, including partial application, and functor, applicative and monad structures. Over the past few months since the project started in January 2022, a large part of Tidal's functionality has already been ported, including it's mini-notation for polymetric sequences, and a large part of its library of pattern manipulations. The result is a terse and highly composable system, where just about everything is a pattern, that may be transformed and combined with other patterns in a myriad of ways. +The original Tidal is implemented as a domain specific language (DSL), embedded in the Haskell pure functional programming language, taking advantage of Haskell's terse syntax and advanced, 'strong' type system. Javascript on the other hand, is a multi-paradigm programming language, with a dynamic type system. Because Tidal leans heavily on many of Haskell's more unique features, it was not always clear that it could meaningfully be ported to a multi-paradigm scripting language. However, this already proved to be the case with an earlier port to Python [TidalVortex; @mcleanTidalVortexZero2022], and we have now successfully implemented Tidal's pure functional representation of patterns in Strudel, including partial application, and functor, applicative and monad structures. Over the past few months since the project started in January 2022, a large part of Tidal's functionality has already been ported, including its mini-notation for polymetric sequences, and a large part of its library of pattern manipulations. The result is a terse and highly composable system, where just about everything is a pattern, that may be transformed and combined with other patterns in a myriad of ways. # Representing Patterns @@ -81,15 +81,39 @@ slowcat(d3, f3, [a3, c3].euclid(3, 4, 1), g3.fast(2)) Here is a short description of all the functions used: -- slowcat: play elements sequentially, where each lasts one cycle -- brackets: elements inside brackets are divided equally over the time of their parent -- euclid(p, s, o): place p pulses evenly over s steps, with offset o [@godfried] -- fast(n): speed up by n. `g3.fast(2)` will play g3 two times. -- off(n, f): copy each event, offset it by n cycles and apply function f -- legato(n): multiply duration of event with n -- echo(t, n, v): copy each event t times, with n cycles in between each copy, decreasing velocity by v -- tone(instrument): play back each event with the given Tone.js instrument -- pianoroll(): visualize events as midi notes in a pianoroll +- `slowcat`: play elements sequentially, where each lasts one cycle +- `brackets`: elements inside brackets are divided equally over the time of their parent +- `euclid(p, s, o)`: place p pulses evenly over s steps, with offset o [@toussaintEuclideanAlgorithmGenerates2005] +- `fast(n)`: speed up by n. `g3.fast(2)` will play g3 two times. +- `off(n, f)`: copy each event, offset it by n cycles and apply function f +- `legato(n)`: multiply duration of event with n +- `echo(t, n, v)`: copy each event t times, with n cycles in between each copy, decreasing velocity by v +- `tone(instrument)`: play back each event with the given Tone.js instrument +- `pianoroll()`: visualize events as midi notes in a pianoroll + +# Ways to make Sound + +To generate sound, Strudel supports different outputs: + +- Tone.js +- Web Audio API +- WebDirt, a js recreation of Tidal's *Dirt* sample engine +- OSC via osc-js +- MIDI via WebMIDI + +Tone.js proved to be limited for the use case of Strudel, where each individual event could potentially have a completely different audio graph. +While the Web Audio API takes a *fire-and-forget* approach, creating a lot of Tone.js instruments and effects causes performance issues quickly. For that reason, we chose to search for alternatives. + +Strudel's Web Audio API output creates a new audio graph for each event. It currently supports basic oscillators, sample playback, envelopes, filters and +an experimental support for soundfonts. + +WebDirt [@ogbornDktr0WebDirt2022] was created as part of the Estuary Live Coding System [@ogbornEstuaryBrowserbasedCollaborative2017], and proved to be a solid choice for handling samples in Strudel as well. + +Using OSC, it is possible to send messages to SuperDirt [@SuperDirt2022], which is what Tidal does to generate sound. +The downside of using OSC is that it requires the user to install SuperCollider and its sc3plugins library, which can be difficult. + +The MIDI output can be used to send MIDI messages to either external instruments or to other programs on the same device. +Web MIDI is currently only supported on Chromium-based browsers. # Future Outlook @@ -99,42 +123,15 @@ The project is still young, with many features on the horizon. As general guidin 2. consistent with Tidal's approach to pattern 3. modular and extensible -The main accessibility advantage over Tidal is the zero install browser environment. It is not yet accessible to screen reader users, but will be soon with the integration of the CodeMirror 6 editor. While Strudel can control Tidal's SuperDirt audio system via OSC, it requires the user to install SuperCollider and its sc3plugins library, which can be difficult. Without SuperDirt, Strudel is able to output sound itself via Tone.js, however this is limited both in terms of available features and runtime performance. For the future, it is planned to integrate alternative sound engines such as glicol [@glicol] and faust [@faust]. To improve compatibility with Tidal, more Tidal functions are planned to be ported, as well as full compatibility with SuperDirt. Besides sound, other ways to render events are being explored, such as graphical, and choreographic output. We are also looking into alternative ways of editing patterns, including multi-user editing for network music, parsing a novel syntax to escape the constraints of javascript, and developing hardware/e-textile interfaces. +For the future, it is planned to integrate alternative sound engines such as Glicol [@lanChaosprintGlicol2022] and Faust [@FaustProgrammingLanguage2022]. To improve compatibility with Tidal, more Tidal functions are planned to be ported, as well as full compatibility with SuperDirt. Besides sound, other ways to render events are being explored, such as graphical, and choreographic output. We are also looking into alternative ways of editing patterns, including multi-user editing for network music, parsing a novel syntax to escape the constraints of javascript, and developing hardware/e-textile interfaces. # Links The Strudel REPL is available at , including an interactive tutorial. The repository is at , all the code is open source under the GPL-3.0 License. -# Technical requirements - -- Space for one laptop + small audio interface (20 cm x 20cm), with mains power. -- Stereo sound system, either placed behind presenter (for direct monitoring) or with additional stereo monitors. -- Audio from audio interface: stereo pair 6,3mm jack outputs (balanced) -- Projector / screen (HDMI.) - # Acknowledgments Thanks to the Strudel and wider Tidal, live coding, webaudio and free/open source software communities for inspiration and support. Alex McLean's work on this project is supported by a UKRI Future Leaders Fellowship [grant number MR/V025260/1]. # References - -[@roberts2016]: https://www.tandfonline.com/doi/abs/10.1080/14794713.2016.1227602?journalCode=rpdm20 -[@gibber]: https://quod.lib.umich.edu/i/icmc/bbp2372.2012.011/2/--gibber-live-coding-audio-in-the-browser?page=root;size=150;view=text -[@alternate-timelines]: https://zenodo.org/record/5788732 -[@tidal.pegjs]: https://www.semanticscholar.org/paper/Bringing-the-TidalCycles-Mini-Notation-to-the-Roberts/74965efadd572ae3f40d14c633a5c8581c1b9f42 -[@tidalvortex]: https://zenodo.org/record/6456380 -[@estuary]: https://www.semanticscholar.org/paper/Estuary%3A-Browser-based-Collaborative-Projectional-Ogborn-Beverley/c6b5d34575d6230dfd8751ca4af8e5f6e44d916b -[@tidalcycles]: https://dl.acm.org/doi/10.1145/2633638.2633647 -[@hession]: https://www.scopus.com/record/display.uri?eid=2-s2.0-84907386880&origin=inward&txGid=03307e26fba02a27bdc68bda462016f6266316467_Extending_Instruments_with_Live_Algorithms_in_a_Percussion_Code_Duo -[@spiegel]: https://www.academia.edu/664807/Manipulations_of_musical_patterns -[@bel]: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.517.7129 -[@algorithmicpattern]: https://zenodo.org/record/4299661 -[@fabricating]: https://zenodo.org/record/2155745 -[@cyclic-patterns]: https://zenodo.org/record/1548969 -[@feedforward]: https://zenodo.org/record/6353969 -[@godfried]: https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.72.1340 -[@glicol]: https://webaudioconf.com/posts/2021_8/ -[@faust]: https://webaudioconf.com/posts/2019_38/ -[@wags]: https://mikesol.github.io/purescript-wags/ -[@hydra]: https://hydra.ojack.xyz/docs/#/ \ No newline at end of file diff --git a/paper/demo.pdf b/paper/demo.pdf index f52cd93c..4dcd4818 100644 Binary files a/paper/demo.pdf and b/paper/demo.pdf differ diff --git a/paper/make.sh b/paper/make.sh index 18f36526..3df7ee91 100755 --- a/paper/make.sh +++ b/paper/make.sh @@ -8,10 +8,10 @@ fi pandoc -s demo.md \ --from markdown+auto_identifiers --pdf-engine=xelatex --template tex/latex-template.tex -V colorlinks --number-sections \ - --filter=pandoc-url2cite --citeproc --pdf-engine=xelatex \ + --citeproc --pdf-engine=xelatex \ --dpi=300 -o demo.pdf -pandoc -s demo.md --filter bin/code-filter.py --filter=pandoc-url2cite \ +pandoc -s demo.md --filter bin/code-filter.py \ --citeproc \ -t markdown-citations -t markdown-fenced_divs \ -o demo-preprocessed.md diff --git a/repl/.gitignore b/repl/.gitignore index a547bf36..b9ef2472 100644 --- a/repl/.gitignore +++ b/repl/.gitignore @@ -22,3 +22,6 @@ dist-ssr *.njsproj *.sln *.sw? + +oldtunes.mjs +public/samples/EMU World/ \ No newline at end of file diff --git a/repl/package-lock.json b/repl/package-lock.json index c983ec80..261892f0 100644 --- a/repl/package-lock.json +++ b/repl/package-lock.json @@ -8,6 +8,8 @@ "name": "@strudel.cycles/repl", "version": "0.0.0", "dependencies": { + "@supabase/supabase-js": "^1.35.3", + "nanoid": "^4.0.0", "react": "^17.0.2", "react-dom": "^17.0.2" }, @@ -16,8 +18,9 @@ "@vitejs/plugin-react": "^1.3.0", "autoprefixer": "^10.4.7", "postcss": "^8.4.13", + "rollup-plugin-visualizer": "^5.8.1", "tailwindcss": "^3.0.24", - "vite": "^2.9.9" + "vite": "^3.2.2" } }, "node_modules/@ampproject/remapping": { @@ -414,6 +417,38 @@ "node": ">=6.9.0" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", + "integrity": "sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz", + "integrity": "sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -509,20 +544,79 @@ "node": ">= 8.0.0" } }, + "node_modules/@supabase/functions-js": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-1.3.3.tgz", + "integrity": "sha512-35vO9niHRtzGe1QSvXKdOfvGPiX2KC44dGpWU6y0/gZCfTIgog/soU9HqABzQC/maVowO3hGLWfez5aN0MKfow==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@supabase/gotrue-js": { + "version": "1.22.16", + "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-1.22.16.tgz", + "integrity": "sha512-t/tR87anihvyc9ePk53NF2CG8yzTDiWOt0ReZpr7sRKV91sHNLbghVMsMDwPONWnVQ9V2/qfKutuAvPGTB/Dew==", + "dependencies": { + "cross-fetch": "^3.0.6" + } + }, + "node_modules/@supabase/postgrest-js": { + "version": "0.37.3", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-0.37.3.tgz", + "integrity": "sha512-Iqwv9D80YGkCi60Zl2lsV04WxOmjFqxpFmxoZ5xUqsVZHvIoAbJ9tMM3+0F7VkZZbsjnaYHrpJ58xLxU7cgy2w==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-1.7.2.tgz", + "integrity": "sha512-DMUaFIKj7KszGtWTTQbhMmUzZf7UnwYqySsmY+G8HgYxvY3ZaVa+DZD0I6ofgr4OLNr0po/ODM2a4lf5m5GNBg==", + "dependencies": { + "@types/phoenix": "^1.5.4", + "websocket": "^1.0.34" + } + }, + "node_modules/@supabase/storage-js": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-1.7.1.tgz", + "integrity": "sha512-0ZlKlGgB3Qzhu07fts5pr2Y+c4xW58d7sDOB9m6nSfltS6SSfBPmqtdhU0zV9vy3vAjC74XeqUcpMhHP5E+aoA==", + "dependencies": { + "cross-fetch": "^3.1.0" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "1.35.3", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-1.35.3.tgz", + "integrity": "sha512-uwO8OVdMFsGZNZ1xQhFz22+PSW0EWYZ5xVq+jQeGz8nhabEu+Q9Uyep/bcNzOpyPJRzbGfxSPRzgAdAxfJgFhw==", + "dependencies": { + "@supabase/functions-js": "^1.3.3", + "@supabase/gotrue-js": "^1.22.14", + "@supabase/postgrest-js": "^0.37.2", + "@supabase/realtime-js": "^1.7.2", + "@supabase/storage-js": "^1.7.0" + } + }, "node_modules/@tailwindcss/typography": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.2.tgz", - "integrity": "sha512-coq8DBABRPFcVhVIk6IbKyyHUt7YTEC/C992tatFB+yEx5WGBQrCgsSFjxHUr8AWXphWckadVJbominEduYBqw==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.7.tgz", + "integrity": "sha512-JTTSTrgZfp6Ki4svhPA4mkd9nmQ/j9EfE7SbHJ1cLtthKkpW2OxsFXzSmxbhYbEkfNIyAyhle5p4SYyKRbz/jg==", "dev": true, "dependencies": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2" + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" }, "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || insiders" + "tailwindcss": ">=3.0.0 || insiders" } }, + "node_modules/@types/phoenix": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", + "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" + }, "node_modules/@vitejs/plugin-react": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.3.2.tgz", @@ -574,6 +668,15 @@ "node": ">=0.4.0" } }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -600,15 +703,15 @@ } }, "node_modules/arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, "node_modules/autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "dev": true, "funding": [ { @@ -621,8 +724,8 @@ } ], "dependencies": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -660,9 +763,9 @@ } }, "node_modules/browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "dev": true, "funding": [ { @@ -675,11 +778,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" }, "bin": { "browserslist": "cli.js" @@ -688,6 +790,18 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -698,9 +812,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001341", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", - "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==", + "version": "1.0.30001430", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz", + "integrity": "sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg==", "dev": true, "funding": [ { @@ -766,6 +880,17 @@ "node": ">= 6" } }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -790,6 +915,14 @@ "safe-buffer": "~5.1.1" } }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -802,6 +935,15 @@ "node": ">=4" } }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -819,21 +961,33 @@ } } }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dev": true, "dependencies": { - "acorn-node": "^1.6.1", + "acorn-node": "^1.8.2", "defined": "^1.0.0", - "minimist": "^1.1.1" + "minimist": "^1.2.6" }, "bin": { "detective": "bin/detective.js" @@ -855,15 +1009,54 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", "dev": true }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, "node_modules/esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.13.tgz", + "integrity": "sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==", "dev": true, "hasInstallScript": true, "bin": { @@ -873,32 +1066,34 @@ "node": ">=12" }, "optionalDependencies": { - "esbuild-android-64": "0.14.39", - "esbuild-android-arm64": "0.14.39", - "esbuild-darwin-64": "0.14.39", - "esbuild-darwin-arm64": "0.14.39", - "esbuild-freebsd-64": "0.14.39", - "esbuild-freebsd-arm64": "0.14.39", - "esbuild-linux-32": "0.14.39", - "esbuild-linux-64": "0.14.39", - "esbuild-linux-arm": "0.14.39", - "esbuild-linux-arm64": "0.14.39", - "esbuild-linux-mips64le": "0.14.39", - "esbuild-linux-ppc64le": "0.14.39", - "esbuild-linux-riscv64": "0.14.39", - "esbuild-linux-s390x": "0.14.39", - "esbuild-netbsd-64": "0.14.39", - "esbuild-openbsd-64": "0.14.39", - "esbuild-sunos-64": "0.14.39", - "esbuild-windows-32": "0.14.39", - "esbuild-windows-64": "0.14.39", - "esbuild-windows-arm64": "0.14.39" + "@esbuild/android-arm": "0.15.13", + "@esbuild/linux-loong64": "0.15.13", + "esbuild-android-64": "0.15.13", + "esbuild-android-arm64": "0.15.13", + "esbuild-darwin-64": "0.15.13", + "esbuild-darwin-arm64": "0.15.13", + "esbuild-freebsd-64": "0.15.13", + "esbuild-freebsd-arm64": "0.15.13", + "esbuild-linux-32": "0.15.13", + "esbuild-linux-64": "0.15.13", + "esbuild-linux-arm": "0.15.13", + "esbuild-linux-arm64": "0.15.13", + "esbuild-linux-mips64le": "0.15.13", + "esbuild-linux-ppc64le": "0.15.13", + "esbuild-linux-riscv64": "0.15.13", + "esbuild-linux-s390x": "0.15.13", + "esbuild-netbsd-64": "0.15.13", + "esbuild-openbsd-64": "0.15.13", + "esbuild-sunos-64": "0.15.13", + "esbuild-windows-32": "0.15.13", + "esbuild-windows-64": "0.15.13", + "esbuild-windows-arm64": "0.15.13" } }, "node_modules/esbuild-android-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", - "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz", + "integrity": "sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==", "cpu": [ "x64" ], @@ -912,9 +1107,9 @@ } }, "node_modules/esbuild-android-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", - "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz", + "integrity": "sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==", "cpu": [ "arm64" ], @@ -928,9 +1123,9 @@ } }, "node_modules/esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz", + "integrity": "sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==", "cpu": [ "x64" ], @@ -944,9 +1139,9 @@ } }, "node_modules/esbuild-darwin-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", - "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz", + "integrity": "sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==", "cpu": [ "arm64" ], @@ -960,9 +1155,9 @@ } }, "node_modules/esbuild-freebsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", - "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz", + "integrity": "sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==", "cpu": [ "x64" ], @@ -976,9 +1171,9 @@ } }, "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", - "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz", + "integrity": "sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==", "cpu": [ "arm64" ], @@ -992,9 +1187,9 @@ } }, "node_modules/esbuild-linux-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", - "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz", + "integrity": "sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==", "cpu": [ "ia32" ], @@ -1008,9 +1203,9 @@ } }, "node_modules/esbuild-linux-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", - "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz", + "integrity": "sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==", "cpu": [ "x64" ], @@ -1024,9 +1219,9 @@ } }, "node_modules/esbuild-linux-arm": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", - "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz", + "integrity": "sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==", "cpu": [ "arm" ], @@ -1040,9 +1235,9 @@ } }, "node_modules/esbuild-linux-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", - "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz", + "integrity": "sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==", "cpu": [ "arm64" ], @@ -1056,9 +1251,9 @@ } }, "node_modules/esbuild-linux-mips64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", - "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz", + "integrity": "sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==", "cpu": [ "mips64el" ], @@ -1072,9 +1267,9 @@ } }, "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", - "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz", + "integrity": "sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==", "cpu": [ "ppc64" ], @@ -1088,9 +1283,9 @@ } }, "node_modules/esbuild-linux-riscv64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", - "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz", + "integrity": "sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==", "cpu": [ "riscv64" ], @@ -1104,9 +1299,9 @@ } }, "node_modules/esbuild-linux-s390x": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", - "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz", + "integrity": "sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==", "cpu": [ "s390x" ], @@ -1120,9 +1315,9 @@ } }, "node_modules/esbuild-netbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", - "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz", + "integrity": "sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==", "cpu": [ "x64" ], @@ -1136,9 +1331,9 @@ } }, "node_modules/esbuild-openbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", - "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz", + "integrity": "sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==", "cpu": [ "x64" ], @@ -1152,9 +1347,9 @@ } }, "node_modules/esbuild-sunos-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", - "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz", + "integrity": "sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==", "cpu": [ "x64" ], @@ -1168,9 +1363,9 @@ } }, "node_modules/esbuild-windows-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", - "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz", + "integrity": "sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==", "cpu": [ "ia32" ], @@ -1184,9 +1379,9 @@ } }, "node_modules/esbuild-windows-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", - "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz", + "integrity": "sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==", "cpu": [ "x64" ], @@ -1200,9 +1395,9 @@ } }, "node_modules/esbuild-windows-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", - "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz", + "integrity": "sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==", "cpu": [ "arm64" ], @@ -1239,10 +1434,23 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -1330,6 +1538,15 @@ "node": ">=6.9.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -1396,6 +1613,21 @@ "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==", + "dev": true, + "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", @@ -1405,6 +1637,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -1426,6 +1667,23 @@ "node": ">=0.12.0" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "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==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1456,9 +1714,9 @@ } }, "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", "dev": true, "engines": { "node": ">=10" @@ -1516,10 +1774,13 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/ms": { "version": "2.1.2", @@ -1528,21 +1789,54 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", + "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==", "bin": { - "nanoid": "bin/nanoid.cjs" + "nanoid": "bin/nanoid.js" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, "node_modules/node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, "node_modules/normalize-path": { @@ -1580,6 +1874,23 @@ "node": ">= 6" } }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "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/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -1604,10 +1915,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "dev": true, "funding": [ { @@ -1620,7 +1940,7 @@ } ], "dependencies": { - "nanoid": "^3.3.3", + "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -1628,6 +1948,23 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, "node_modules/postcss-js": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", @@ -1677,12 +2014,12 @@ } }, "node_modules/postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.6" + "postcss-selector-parser": "^6.0.10" }, "engines": { "node": ">=12.0" @@ -1714,6 +2051,18 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -1780,6 +2129,15 @@ "node": ">=0.10.0" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1792,13 +2150,22 @@ "node": ">=8.10.0" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -1820,9 +2187,9 @@ } }, "node_modules/rollup": { - "version": "2.73.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.73.0.tgz", - "integrity": "sha512-h/UngC3S4Zt28mB3g0+2YCMegT5yoftnQplwzPqGZcKvlld5e+kT/QRmJiL+qxGyZKOYpgirWGdLyEO1b0dpLQ==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -1834,6 +2201,31 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-visualizer": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.8.3.tgz", + "integrity": "sha512-QGJk4Bqe4AOat5AjipOh8esZH1nck5X2KFpf4VytUdSUuuuSwvIQZjMGgjcxe/zXexltqaXp5Vx1V3LmnQH15Q==", + "dev": true, + "dependencies": { + "open": "^8.4.0", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "rollup": "2.x || 3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -1881,6 +2273,15 @@ "semver": "bin/semver.js" } }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "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", @@ -1890,6 +2291,32 @@ "node": ">=0.10.0" } }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1915,32 +2342,34 @@ } }, "node_modules/tailwindcss": { - "version": "3.0.24", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", - "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.1.tgz", + "integrity": "sha512-Uw+GVSxp5CM48krnjHObqoOwlCt5Qo6nw1jlCRwfGy68dSYb/LwS9ZFidYGRiM+w6rMawkZiu1mEMAsHYAfoLg==", "dev": true, "dependencies": { - "arg": "^5.0.1", + "arg": "^5.0.2", "chokidar": "^3.5.3", "color-name": "^1.1.4", - "detective": "^5.2.0", + "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.11", + "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "lilconfig": "^2.0.5", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.12", + "postcss": "^8.4.17", + "postcss-import": "^14.1.0", "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", + "postcss-nested": "6.0.0", "postcss-selector-parser": "^6.0.10", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "resolve": "^1.22.0" + "resolve": "^1.22.1" }, "bin": { "tailwind": "lib/cli.js", @@ -1980,28 +2409,84 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "node_modules/vite": { - "version": "2.9.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.9.tgz", - "integrity": "sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", + "integrity": "sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==", "dev": true, "dependencies": { - "esbuild": "^0.14.27", - "postcss": "^8.4.13", - "resolve": "^1.22.0", - "rollup": "^2.59.0" + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": ">=12.2.0" + "node": "^14.18.0 || >=16.0.0" }, "optionalDependencies": { "fsevents": "~2.3.2" @@ -2009,7 +2494,9 @@ "peerDependencies": { "less": "*", "sass": "*", - "stylus": "*" + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" }, "peerDependenciesMeta": { "less": { @@ -2020,9 +2507,108 @@ }, "stylus": { "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true } } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/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/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/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==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/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==", + "dev": true + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -2032,6 +2618,23 @@ "node": ">=0.4" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -2040,6 +2643,33 @@ "engines": { "node": ">= 6" } + }, + "node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } } }, "dependencies": { @@ -2328,6 +2958,20 @@ "to-fast-properties": "^2.0.0" } }, + "@esbuild/android-arm": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.13.tgz", + "integrity": "sha512-RY2fVI8O0iFUNvZirXaQ1vMvK0xhCcl0gqRj74Z6yEiO1zAUa7hbsdwZM1kzqbxHK7LFyMizipfXT3JME+12Hw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.13.tgz", + "integrity": "sha512-+BoyIm4I8uJmH/QDIH0fu7MG0AEx9OXEDXnqptXCwKOlOqZiS4iraH1Nr7/ObLMokW3sOCeBNyD68ATcV9b9Ag==", + "dev": true, + "optional": true + }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -2402,17 +3046,76 @@ "picomatch": "^2.2.2" } }, + "@supabase/functions-js": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-1.3.3.tgz", + "integrity": "sha512-35vO9niHRtzGe1QSvXKdOfvGPiX2KC44dGpWU6y0/gZCfTIgog/soU9HqABzQC/maVowO3hGLWfez5aN0MKfow==", + "requires": { + "cross-fetch": "^3.1.5" + } + }, + "@supabase/gotrue-js": { + "version": "1.22.16", + "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-1.22.16.tgz", + "integrity": "sha512-t/tR87anihvyc9ePk53NF2CG8yzTDiWOt0ReZpr7sRKV91sHNLbghVMsMDwPONWnVQ9V2/qfKutuAvPGTB/Dew==", + "requires": { + "cross-fetch": "^3.0.6" + } + }, + "@supabase/postgrest-js": { + "version": "0.37.3", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-0.37.3.tgz", + "integrity": "sha512-Iqwv9D80YGkCi60Zl2lsV04WxOmjFqxpFmxoZ5xUqsVZHvIoAbJ9tMM3+0F7VkZZbsjnaYHrpJ58xLxU7cgy2w==", + "requires": { + "cross-fetch": "^3.1.5" + } + }, + "@supabase/realtime-js": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-1.7.2.tgz", + "integrity": "sha512-DMUaFIKj7KszGtWTTQbhMmUzZf7UnwYqySsmY+G8HgYxvY3ZaVa+DZD0I6ofgr4OLNr0po/ODM2a4lf5m5GNBg==", + "requires": { + "@types/phoenix": "^1.5.4", + "websocket": "^1.0.34" + } + }, + "@supabase/storage-js": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-1.7.1.tgz", + "integrity": "sha512-0ZlKlGgB3Qzhu07fts5pr2Y+c4xW58d7sDOB9m6nSfltS6SSfBPmqtdhU0zV9vy3vAjC74XeqUcpMhHP5E+aoA==", + "requires": { + "cross-fetch": "^3.1.0" + } + }, + "@supabase/supabase-js": { + "version": "1.35.3", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-1.35.3.tgz", + "integrity": "sha512-uwO8OVdMFsGZNZ1xQhFz22+PSW0EWYZ5xVq+jQeGz8nhabEu+Q9Uyep/bcNzOpyPJRzbGfxSPRzgAdAxfJgFhw==", + "requires": { + "@supabase/functions-js": "^1.3.3", + "@supabase/gotrue-js": "^1.22.14", + "@supabase/postgrest-js": "^0.37.2", + "@supabase/realtime-js": "^1.7.2", + "@supabase/storage-js": "^1.7.0" + } + }, "@tailwindcss/typography": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.2.tgz", - "integrity": "sha512-coq8DBABRPFcVhVIk6IbKyyHUt7YTEC/C992tatFB+yEx5WGBQrCgsSFjxHUr8AWXphWckadVJbominEduYBqw==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.7.tgz", + "integrity": "sha512-JTTSTrgZfp6Ki4svhPA4mkd9nmQ/j9EfE7SbHJ1cLtthKkpW2OxsFXzSmxbhYbEkfNIyAyhle5p4SYyKRbz/jg==", "dev": true, "requires": { "lodash.castarray": "^4.4.0", "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2" + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" } }, + "@types/phoenix": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.4.tgz", + "integrity": "sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==" + }, "@vitejs/plugin-react": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.3.2.tgz", @@ -2452,6 +3155,12 @@ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -2472,19 +3181,19 @@ } }, "arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, "autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", "dev": true, "requires": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", "fraction.js": "^4.2.0", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", @@ -2507,16 +3216,23 @@ } }, "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "requires": { + "node-gyp-build": "^4.3.0" } }, "camelcase-css": { @@ -2526,9 +3242,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001341", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", - "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==", + "version": "1.0.30001430", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001430.tgz", + "integrity": "sha512-IB1BXTZKPDVPM7cnV4iaKaHxckvdr/3xtctB3f7Hmenx3qYBhGtTZ//7EllK66aKXW98Lx0+7Yr0kxBtIt3tzg==", "dev": true }, "chalk": { @@ -2569,6 +3285,17 @@ } } }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2593,12 +3320,29 @@ "safe-buffer": "~5.1.1" } }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "requires": { + "node-fetch": "2.6.7" + } + }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -2608,21 +3352,27 @@ "ms": "2.1.2" } }, + "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==", + "dev": true + }, "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", "dev": true }, "detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", "dev": true, "requires": { - "acorn-node": "^1.6.1", + "acorn-node": "^1.8.2", "defined": "^1.0.0", - "minimist": "^1.1.1" + "minimist": "^1.2.6" } }, "didyoumean": { @@ -2638,176 +3388,213 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==", + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", "dev": true }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "es5-ext": { + "version": "0.10.61", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", + "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, "esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.13.tgz", + "integrity": "sha512-Cu3SC84oyzzhrK/YyN4iEVy2jZu5t2fz66HEOShHURcjSkOSAVL8C/gfUT+lDJxkVHpg8GZ10DD0rMHRPqMFaQ==", "dev": true, "requires": { - "esbuild-android-64": "0.14.39", - "esbuild-android-arm64": "0.14.39", - "esbuild-darwin-64": "0.14.39", - "esbuild-darwin-arm64": "0.14.39", - "esbuild-freebsd-64": "0.14.39", - "esbuild-freebsd-arm64": "0.14.39", - "esbuild-linux-32": "0.14.39", - "esbuild-linux-64": "0.14.39", - "esbuild-linux-arm": "0.14.39", - "esbuild-linux-arm64": "0.14.39", - "esbuild-linux-mips64le": "0.14.39", - "esbuild-linux-ppc64le": "0.14.39", - "esbuild-linux-riscv64": "0.14.39", - "esbuild-linux-s390x": "0.14.39", - "esbuild-netbsd-64": "0.14.39", - "esbuild-openbsd-64": "0.14.39", - "esbuild-sunos-64": "0.14.39", - "esbuild-windows-32": "0.14.39", - "esbuild-windows-64": "0.14.39", - "esbuild-windows-arm64": "0.14.39" + "@esbuild/android-arm": "0.15.13", + "@esbuild/linux-loong64": "0.15.13", + "esbuild-android-64": "0.15.13", + "esbuild-android-arm64": "0.15.13", + "esbuild-darwin-64": "0.15.13", + "esbuild-darwin-arm64": "0.15.13", + "esbuild-freebsd-64": "0.15.13", + "esbuild-freebsd-arm64": "0.15.13", + "esbuild-linux-32": "0.15.13", + "esbuild-linux-64": "0.15.13", + "esbuild-linux-arm": "0.15.13", + "esbuild-linux-arm64": "0.15.13", + "esbuild-linux-mips64le": "0.15.13", + "esbuild-linux-ppc64le": "0.15.13", + "esbuild-linux-riscv64": "0.15.13", + "esbuild-linux-s390x": "0.15.13", + "esbuild-netbsd-64": "0.15.13", + "esbuild-openbsd-64": "0.15.13", + "esbuild-sunos-64": "0.15.13", + "esbuild-windows-32": "0.15.13", + "esbuild-windows-64": "0.15.13", + "esbuild-windows-arm64": "0.15.13" } }, "esbuild-android-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", - "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.13.tgz", + "integrity": "sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==", "dev": true, "optional": true }, "esbuild-android-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", - "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.13.tgz", + "integrity": "sha512-TKzyymLD6PiVeyYa4c5wdPw87BeAiTXNtK6amWUcXZxkV51gOk5u5qzmDaYSwiWeecSNHamFsaFjLoi32QR5/w==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.13.tgz", + "integrity": "sha512-WAx7c2DaOS6CrRcoYCgXgkXDliLnFv3pQLV6GeW1YcGEZq2Gnl8s9Pg7ahValZkpOa0iE/ojRVQ87sbUhF1Cbg==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", - "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.13.tgz", + "integrity": "sha512-U6jFsPfSSxC3V1CLiQqwvDuj3GGrtQNB3P3nNC3+q99EKf94UGpsG9l4CQ83zBs1NHrk1rtCSYT0+KfK5LsD8A==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", - "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.13.tgz", + "integrity": "sha512-whItJgDiOXaDG/idy75qqevIpZjnReZkMGCgQaBWZuKHoElDJC1rh7MpoUgupMcdfOd+PgdEwNQW9DAE6i8wyA==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", - "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.13.tgz", + "integrity": "sha512-6pCSWt8mLUbPtygv7cufV0sZLeylaMwS5Fznj6Rsx9G2AJJsAjQ9ifA+0rQEIg7DwJmi9it+WjzNTEAzzdoM3Q==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", - "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.13.tgz", + "integrity": "sha512-VbZdWOEdrJiYApm2kkxoTOgsoCO1krBZ3quHdYk3g3ivWaMwNIVPIfEE0f0XQQ0u5pJtBsnk2/7OPiCFIPOe/w==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", - "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.13.tgz", + "integrity": "sha512-rXmnArVNio6yANSqDQlIO4WiP+Cv7+9EuAHNnag7rByAqFVuRusLbGi2697A5dFPNXoO//IiogVwi3AdcfPC6A==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", - "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.13.tgz", + "integrity": "sha512-Ac6LpfmJO8WhCMQmO253xX2IU2B3wPDbl4IvR0hnqcPrdfCaUa2j/lLMGTjmQ4W5JsJIdHEdW12dG8lFS0MbxQ==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", - "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.13.tgz", + "integrity": "sha512-alEMGU4Z+d17U7KQQw2IV8tQycO6T+rOrgW8OS22Ua25x6kHxoG6Ngry6Aq6uranC+pNWNMB6aHFPh7aTQdORQ==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", - "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.13.tgz", + "integrity": "sha512-47PgmyYEu+yN5rD/MbwS6DxP2FSGPo4Uxg5LwIdxTiyGC2XKwHhHyW7YYEDlSuXLQXEdTO7mYe8zQ74czP7W8A==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", - "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.13.tgz", + "integrity": "sha512-z6n28h2+PC1Ayle9DjKoBRcx/4cxHoOa2e689e2aDJSaKug3jXcQw7mM+GLg+9ydYoNzj8QxNL8ihOv/OnezhA==", "dev": true, "optional": true }, "esbuild-linux-riscv64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", - "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.13.tgz", + "integrity": "sha512-+Lu4zuuXuQhgLUGyZloWCqTslcCAjMZH1k3Xc9MSEJEpEFdpsSU0sRDXAnk18FKOfEjhu4YMGaykx9xjtpA6ow==", "dev": true, "optional": true }, "esbuild-linux-s390x": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", - "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.13.tgz", + "integrity": "sha512-BMeXRljruf7J0TMxD5CIXS65y7puiZkAh+s4XFV9qy16SxOuMhxhVIXYLnbdfLrsYGFzx7U9mcdpFWkkvy/Uag==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", - "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.13.tgz", + "integrity": "sha512-EHj9QZOTel581JPj7UO3xYbltFTYnHy+SIqJVq6yd3KkCrsHRbapiPb0Lx3EOOtybBEE9EyqbmfW1NlSDsSzvQ==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", - "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.13.tgz", + "integrity": "sha512-nkuDlIjF/sfUhfx8SKq0+U+Fgx5K9JcPq1mUodnxI0x4kBdCv46rOGWbuJ6eof2n3wdoCLccOoJAbg9ba/bT2w==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", - "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.13.tgz", + "integrity": "sha512-jVeu2GfxZQ++6lRdY43CS0Tm/r4WuQQ0Pdsrxbw+aOrHQPHV0+LNOLnvbN28M7BSUGnJnHkHm2HozGgNGyeIRw==", "dev": true, "optional": true }, "esbuild-windows-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", - "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.13.tgz", + "integrity": "sha512-XoF2iBf0wnqo16SDq+aDGi/+QbaLFpkiRarPVssMh9KYbFNCqPLlGAWwDvxEVz+ywX6Si37J2AKm+AXq1kC0JA==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", - "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.13.tgz", + "integrity": "sha512-Et6htEfGycjDrtqb2ng6nT+baesZPYQIW+HUEHK4D1ncggNrDNk3yoboYQ5KtiVrw/JaDMNttz8rrPubV/fvPQ==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", - "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", + "version": "0.15.13", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.13.tgz", + "integrity": "sha512-3bv7tqntThQC9SWLRouMDmZnlOukBhOCTlkzNqzGCmrkCJI7io5LLjwJBOVY6kOUlIvdxbooNZwjtBvj+7uuVg==", "dev": true, "optional": true }, @@ -2829,10 +3616,25 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" + } + } + }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -2896,6 +3698,12 @@ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -2944,12 +3752,24 @@ "has": "^1.0.3" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2965,6 +3785,20 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -2983,9 +3817,9 @@ "dev": true }, "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", "dev": true }, "lodash.castarray": { @@ -3031,9 +3865,9 @@ } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true }, "ms": { @@ -3043,15 +3877,32 @@ "dev": true }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.0.tgz", + "integrity": "sha512-IgBP8piMxe/gf73RTQx7hmnhwz0aaEXYakvqZyE302IXW3HyVNhdNGC+O2MwMAVhLEnvXlvKtGbtJf6wvHihCg==" + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" }, "node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, "normalize-path": { @@ -3077,6 +3928,17 @@ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -3095,15 +3957,40 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, "postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", "dev": true, "requires": { - "nanoid": "^3.3.3", + "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" + }, + "dependencies": { + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + } + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" } }, "postcss-js": { @@ -3126,12 +4013,12 @@ } }, "postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.6" + "postcss-selector-parser": "^6.0.10" } }, "postcss-selector-parser": { @@ -3187,6 +4074,15 @@ "integrity": "sha512-XP8A9BT0CpRBD+NYLLeIhld/RqG9+gktUjW1FkE+Vm7OCinbG1SshcK5tb9ls4kzvjZr9mOQc7HYgBngEyPAXg==", "dev": true }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3196,13 +4092,19 @@ "picomatch": "^2.2.1" } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -3214,14 +4116,25 @@ "dev": true }, "rollup": { - "version": "2.73.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.73.0.tgz", - "integrity": "sha512-h/UngC3S4Zt28mB3g0+2YCMegT5yoftnQplwzPqGZcKvlld5e+kT/QRmJiL+qxGyZKOYpgirWGdLyEO1b0dpLQ==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, "requires": { "fsevents": "~2.3.2" } }, + "rollup-plugin-visualizer": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.8.3.tgz", + "integrity": "sha512-QGJk4Bqe4AOat5AjipOh8esZH1nck5X2KFpf4VytUdSUuuuSwvIQZjMGgjcxe/zXexltqaXp5Vx1V3LmnQH15Q==", + "dev": true, + "requires": { + "open": "^8.4.0", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + } + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3252,12 +4165,38 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, "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==", "dev": true }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -3274,32 +4213,34 @@ "dev": true }, "tailwindcss": { - "version": "3.0.24", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", - "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.1.tgz", + "integrity": "sha512-Uw+GVSxp5CM48krnjHObqoOwlCt5Qo6nw1jlCRwfGy68dSYb/LwS9ZFidYGRiM+w6rMawkZiu1mEMAsHYAfoLg==", "dev": true, "requires": { - "arg": "^5.0.1", + "arg": "^5.0.2", "chokidar": "^3.5.3", "color-name": "^1.1.4", - "detective": "^5.2.0", + "detective": "^5.2.1", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.11", + "fast-glob": "^3.2.12", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "lilconfig": "^2.0.5", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.12", + "postcss": "^8.4.17", + "postcss-import": "^14.1.0", "postcss-js": "^4.0.0", "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", + "postcss-nested": "6.0.0", "postcss-selector-parser": "^6.0.10", "postcss-value-parser": "^4.2.0", "quick-lru": "^5.1.1", - "resolve": "^1.22.0" + "resolve": "^1.22.1" }, "dependencies": { "color-name": { @@ -3325,23 +4266,138 @@ "is-number": "^7.0.0" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "vite": { - "version": "2.9.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.9.tgz", - "integrity": "sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.2.tgz", + "integrity": "sha512-pLrhatFFOWO9kS19bQ658CnRYzv0WLbsPih6R+iFeEEhDOuYgYCX2rztUViMz/uy/V8cLCJvLFeiOK7RJEzHcw==", "dev": true, "requires": { - "esbuild": "^0.14.27", + "esbuild": "^0.15.9", "fsevents": "~2.3.2", - "postcss": "^8.4.13", - "resolve": "^1.22.0", - "rollup": "^2.59.0" + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "dependencies": { + "debug": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "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==", + "dev": true + } } }, "xtend": { @@ -3350,11 +4406,43 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + }, "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true } } } diff --git a/repl/package.json b/repl/package.json index 42238c0b..6f3c06a9 100644 --- a/repl/package.json +++ b/repl/package.json @@ -3,18 +3,21 @@ "private": true, "version": "0.0.0", "scripts": { - "dev": "vite", + "dev": "vite --host", "start": "vite", "build": "vite build", "preview": "vite preview", - "test": "mocha ./src/test --colors", - "snapshot": "cd ./src/ && rm -f ./tunes.snapshot.mjs && node ./shoot.mjs > ./tunes.snapshot.mjs", + "test": "vitest run --reporter verbose -v --no-isolate", + "snapshot": "vitest run -u --silent", "add-license": "cat etc/agpl-header.txt ../docs/static/js/*LICENSE.txt > /tmp/strudel-license.txt && cp /tmp/strudel-license.txt ../docs/static/js/*LICENSE.txt", "predeploy": "npm run build", "deploy": "gh-pages -d ../docs", - "static": "npx serve ../docs" + "static": "npx serve ../docs", + "dbdump": "node src/test/dbdump.js > src/test/dbdump.json" }, "dependencies": { + "@supabase/supabase-js": "^1.35.3", + "nanoid": "^4.0.0", "react": "^17.0.2", "react-dom": "^17.0.2" }, @@ -23,7 +26,8 @@ "@vitejs/plugin-react": "^1.3.0", "autoprefixer": "^10.4.7", "postcss": "^8.4.13", + "rollup-plugin-visualizer": "^5.8.1", "tailwindcss": "^3.0.24", - "vite": "^2.9.9" + "vite": "^3.2.2" } } diff --git a/repl/public/EmuSP12.json b/repl/public/EmuSP12.json new file mode 100644 index 00000000..69746bed --- /dev/null +++ b/repl/public/EmuSP12.json @@ -0,0 +1,16 @@ +{ +"bd": ["bd/Bassdrum-01.wav","bd/Bassdrum-02.wav","bd/Bassdrum-03.wav","bd/Bassdrum-04.wav","bd/Bassdrum-05.wav","bd/Bassdrum-06.wav","bd/Bassdrum-07.wav","bd/Bassdrum-08.wav","bd/Bassdrum-09.wav","bd/Bassdrum-10.wav","bd/Bassdrum-11.wav","bd/Bassdrum-12.wav","bd/Bassdrum-13.wav","bd/Bassdrum-14.wav"], +"cb": ["cb/Cowbell.wav"], +"cp": ["cp/Clap.wav"], +"cr": ["cr/Crash.wav"], +"hh": ["hh/Hat Closed-01.wav","hh/Hat Closed-02.wav"], +"ht": ["ht/Tom H-01.wav","ht/Tom H-02.wav","ht/Tom H-03.wav","ht/Tom H-04.wav","ht/Tom H-05.wav","ht/Tom H-06.wav"], +"lt": ["lt/Tom L-01.wav","lt/Tom L-02.wav","lt/Tom L-03.wav","lt/Tom L-04.wav","lt/Tom L-05.wav","lt/Tom L-06.wav"], +"misc": ["misc/Metal-01.wav","misc/Metal-02.wav","misc/Metal-03.wav","misc/Scratch.wav","misc/Shot-01.wav","misc/Shot-02.wav","misc/Shot-03.wav"], +"mt": ["mt/Tom M-01.wav","mt/Tom M-02.wav","mt/Tom M-03.wav","mt/Tom M-05.wav"], +"oh": ["oh/Hhopen1.wav"], +"perc": ["perc/Blow1.wav"], +"rd": ["rd/Ride.wav"], +"rim": ["rim/zRim Shot-01.wav","rim/zRim Shot-02.wav"], +"sd": ["sd/Snaredrum-01.wav","sd/Snaredrum-02.wav","sd/Snaredrum-03.wav","sd/Snaredrum-04.wav","sd/Snaredrum-05.wav","sd/Snaredrum-06.wav","sd/Snaredrum-07.wav","sd/Snaredrum-08.wav","sd/Snaredrum-09.wav","sd/Snaredrum-10.wav","sd/Snaredrum-11.wav","sd/Snaredrum-12.wav","sd/Snaredrum-13.wav","sd/Snaredrum-14.wav","sd/Snaredrum-15.wav","sd/Snaredrum-16.wav","sd/Snaredrum-17.wav","sd/Snaredrum-18.wav","sd/Snaredrum-19.wav","sd/Snaredrum-20.wav","sd/Snaredrum-21.wav"] +} diff --git a/repl/public/EmuSP12/bd/Bassdrum-01.wav b/repl/public/EmuSP12/bd/Bassdrum-01.wav new file mode 100644 index 00000000..48e93676 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-01.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-02.wav b/repl/public/EmuSP12/bd/Bassdrum-02.wav new file mode 100644 index 00000000..52cd0afc Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-02.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-03.wav b/repl/public/EmuSP12/bd/Bassdrum-03.wav new file mode 100644 index 00000000..5c524ad7 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-03.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-04.wav b/repl/public/EmuSP12/bd/Bassdrum-04.wav new file mode 100644 index 00000000..9f9365d4 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-04.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-05.wav b/repl/public/EmuSP12/bd/Bassdrum-05.wav new file mode 100644 index 00000000..a4c80945 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-05.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-06.wav b/repl/public/EmuSP12/bd/Bassdrum-06.wav new file mode 100644 index 00000000..283d2f76 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-06.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-07.wav b/repl/public/EmuSP12/bd/Bassdrum-07.wav new file mode 100644 index 00000000..24f26186 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-07.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-08.wav b/repl/public/EmuSP12/bd/Bassdrum-08.wav new file mode 100644 index 00000000..51661252 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-08.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-09.wav b/repl/public/EmuSP12/bd/Bassdrum-09.wav new file mode 100644 index 00000000..3c6487c3 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-09.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-10.wav b/repl/public/EmuSP12/bd/Bassdrum-10.wav new file mode 100644 index 00000000..34a9b924 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-10.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-11.wav b/repl/public/EmuSP12/bd/Bassdrum-11.wav new file mode 100644 index 00000000..256555c2 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-11.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-12.wav b/repl/public/EmuSP12/bd/Bassdrum-12.wav new file mode 100644 index 00000000..8c29f046 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-12.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-13.wav b/repl/public/EmuSP12/bd/Bassdrum-13.wav new file mode 100644 index 00000000..a0291102 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-13.wav differ diff --git a/repl/public/EmuSP12/bd/Bassdrum-14.wav b/repl/public/EmuSP12/bd/Bassdrum-14.wav new file mode 100644 index 00000000..eecea2f1 Binary files /dev/null and b/repl/public/EmuSP12/bd/Bassdrum-14.wav differ diff --git a/repl/public/EmuSP12/cb/Cowbell.wav b/repl/public/EmuSP12/cb/Cowbell.wav new file mode 100644 index 00000000..470763c6 Binary files /dev/null and b/repl/public/EmuSP12/cb/Cowbell.wav differ diff --git a/repl/public/EmuSP12/cp/Clap.wav b/repl/public/EmuSP12/cp/Clap.wav new file mode 100644 index 00000000..27517d79 Binary files /dev/null and b/repl/public/EmuSP12/cp/Clap.wav differ diff --git a/repl/public/EmuSP12/cr/Crash.wav b/repl/public/EmuSP12/cr/Crash.wav new file mode 100644 index 00000000..6d1e2939 Binary files /dev/null and b/repl/public/EmuSP12/cr/Crash.wav differ diff --git a/repl/public/EmuSP12/hh/Hat Closed-01.wav b/repl/public/EmuSP12/hh/Hat Closed-01.wav new file mode 100644 index 00000000..1f18ccac Binary files /dev/null and b/repl/public/EmuSP12/hh/Hat Closed-01.wav differ diff --git a/repl/public/EmuSP12/hh/Hat Closed-02.wav b/repl/public/EmuSP12/hh/Hat Closed-02.wav new file mode 100644 index 00000000..cc40c03f Binary files /dev/null and b/repl/public/EmuSP12/hh/Hat Closed-02.wav differ diff --git a/repl/public/EmuSP12/ht/Tom H-01.wav b/repl/public/EmuSP12/ht/Tom H-01.wav new file mode 100644 index 00000000..82706785 Binary files /dev/null and b/repl/public/EmuSP12/ht/Tom H-01.wav differ diff --git a/repl/public/EmuSP12/ht/Tom H-02.wav b/repl/public/EmuSP12/ht/Tom H-02.wav new file mode 100644 index 00000000..9cfe221c Binary files /dev/null and b/repl/public/EmuSP12/ht/Tom H-02.wav differ diff --git a/repl/public/EmuSP12/ht/Tom H-03.wav b/repl/public/EmuSP12/ht/Tom H-03.wav new file mode 100644 index 00000000..a6eef5cd Binary files /dev/null and b/repl/public/EmuSP12/ht/Tom H-03.wav differ diff --git a/repl/public/EmuSP12/ht/Tom H-04.wav b/repl/public/EmuSP12/ht/Tom H-04.wav new file mode 100644 index 00000000..8c38b3b1 Binary files /dev/null and b/repl/public/EmuSP12/ht/Tom H-04.wav differ diff --git a/repl/public/EmuSP12/ht/Tom H-05.wav b/repl/public/EmuSP12/ht/Tom H-05.wav new file mode 100644 index 00000000..2e0899d2 Binary files /dev/null and b/repl/public/EmuSP12/ht/Tom H-05.wav differ diff --git a/repl/public/EmuSP12/ht/Tom H-06.wav b/repl/public/EmuSP12/ht/Tom H-06.wav new file mode 100644 index 00000000..9dccec23 Binary files /dev/null and b/repl/public/EmuSP12/ht/Tom H-06.wav differ diff --git a/repl/public/EmuSP12/lt/Tom L-01.wav b/repl/public/EmuSP12/lt/Tom L-01.wav new file mode 100644 index 00000000..cfa4067f Binary files /dev/null and b/repl/public/EmuSP12/lt/Tom L-01.wav differ diff --git a/repl/public/EmuSP12/lt/Tom L-02.wav b/repl/public/EmuSP12/lt/Tom L-02.wav new file mode 100644 index 00000000..68624f5f Binary files /dev/null and b/repl/public/EmuSP12/lt/Tom L-02.wav differ diff --git a/repl/public/EmuSP12/lt/Tom L-03.wav b/repl/public/EmuSP12/lt/Tom L-03.wav new file mode 100644 index 00000000..f1439d8c Binary files /dev/null and b/repl/public/EmuSP12/lt/Tom L-03.wav differ diff --git a/repl/public/EmuSP12/lt/Tom L-04.wav b/repl/public/EmuSP12/lt/Tom L-04.wav new file mode 100644 index 00000000..46d614a0 Binary files /dev/null and b/repl/public/EmuSP12/lt/Tom L-04.wav differ diff --git a/repl/public/EmuSP12/lt/Tom L-05.wav b/repl/public/EmuSP12/lt/Tom L-05.wav new file mode 100644 index 00000000..c9566585 Binary files /dev/null and b/repl/public/EmuSP12/lt/Tom L-05.wav differ diff --git a/repl/public/EmuSP12/lt/Tom L-06.wav b/repl/public/EmuSP12/lt/Tom L-06.wav new file mode 100644 index 00000000..c1edf374 Binary files /dev/null and b/repl/public/EmuSP12/lt/Tom L-06.wav differ diff --git a/repl/public/EmuSP12/misc/Metal-01.wav b/repl/public/EmuSP12/misc/Metal-01.wav new file mode 100644 index 00000000..0f306e70 Binary files /dev/null and b/repl/public/EmuSP12/misc/Metal-01.wav differ diff --git a/repl/public/EmuSP12/misc/Metal-02.wav b/repl/public/EmuSP12/misc/Metal-02.wav new file mode 100644 index 00000000..8a05af0e Binary files /dev/null and b/repl/public/EmuSP12/misc/Metal-02.wav differ diff --git a/repl/public/EmuSP12/misc/Metal-03.wav b/repl/public/EmuSP12/misc/Metal-03.wav new file mode 100644 index 00000000..0ae2ba80 Binary files /dev/null and b/repl/public/EmuSP12/misc/Metal-03.wav differ diff --git a/repl/public/EmuSP12/misc/Scratch.wav b/repl/public/EmuSP12/misc/Scratch.wav new file mode 100644 index 00000000..11bde1a5 Binary files /dev/null and b/repl/public/EmuSP12/misc/Scratch.wav differ diff --git a/repl/public/EmuSP12/misc/Shot-01.wav b/repl/public/EmuSP12/misc/Shot-01.wav new file mode 100644 index 00000000..e4ecfef3 Binary files /dev/null and b/repl/public/EmuSP12/misc/Shot-01.wav differ diff --git a/repl/public/EmuSP12/misc/Shot-02.wav b/repl/public/EmuSP12/misc/Shot-02.wav new file mode 100644 index 00000000..80f67cb2 Binary files /dev/null and b/repl/public/EmuSP12/misc/Shot-02.wav differ diff --git a/repl/public/EmuSP12/misc/Shot-03.wav b/repl/public/EmuSP12/misc/Shot-03.wav new file mode 100644 index 00000000..0cc84c28 Binary files /dev/null and b/repl/public/EmuSP12/misc/Shot-03.wav differ diff --git a/repl/public/EmuSP12/mt/Tom M-01.wav b/repl/public/EmuSP12/mt/Tom M-01.wav new file mode 100644 index 00000000..a650caf5 Binary files /dev/null and b/repl/public/EmuSP12/mt/Tom M-01.wav differ diff --git a/repl/public/EmuSP12/mt/Tom M-02.wav b/repl/public/EmuSP12/mt/Tom M-02.wav new file mode 100644 index 00000000..cbd7d16c Binary files /dev/null and b/repl/public/EmuSP12/mt/Tom M-02.wav differ diff --git a/repl/public/EmuSP12/mt/Tom M-03.wav b/repl/public/EmuSP12/mt/Tom M-03.wav new file mode 100644 index 00000000..e5c4b133 Binary files /dev/null and b/repl/public/EmuSP12/mt/Tom M-03.wav differ diff --git a/repl/public/EmuSP12/mt/Tom M-05.wav b/repl/public/EmuSP12/mt/Tom M-05.wav new file mode 100644 index 00000000..841cac02 Binary files /dev/null and b/repl/public/EmuSP12/mt/Tom M-05.wav differ diff --git a/repl/public/EmuSP12/oh/Hhopen1.wav b/repl/public/EmuSP12/oh/Hhopen1.wav new file mode 100644 index 00000000..73811991 Binary files /dev/null and b/repl/public/EmuSP12/oh/Hhopen1.wav differ diff --git a/repl/public/EmuSP12/perc/Blow1.wav b/repl/public/EmuSP12/perc/Blow1.wav new file mode 100644 index 00000000..8021d0d1 Binary files /dev/null and b/repl/public/EmuSP12/perc/Blow1.wav differ diff --git a/repl/public/EmuSP12/rd/Ride.wav b/repl/public/EmuSP12/rd/Ride.wav new file mode 100644 index 00000000..da0e33eb Binary files /dev/null and b/repl/public/EmuSP12/rd/Ride.wav differ diff --git a/repl/public/EmuSP12/rim/zRim Shot-01.wav b/repl/public/EmuSP12/rim/zRim Shot-01.wav new file mode 100644 index 00000000..98088cf2 Binary files /dev/null and b/repl/public/EmuSP12/rim/zRim Shot-01.wav differ diff --git a/repl/public/EmuSP12/rim/zRim Shot-02.wav b/repl/public/EmuSP12/rim/zRim Shot-02.wav new file mode 100644 index 00000000..c0f1a12d Binary files /dev/null and b/repl/public/EmuSP12/rim/zRim Shot-02.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-01.wav b/repl/public/EmuSP12/sd/Snaredrum-01.wav new file mode 100644 index 00000000..008bbf1d Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-01.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-02.wav b/repl/public/EmuSP12/sd/Snaredrum-02.wav new file mode 100644 index 00000000..4711ff70 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-02.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-03.wav b/repl/public/EmuSP12/sd/Snaredrum-03.wav new file mode 100644 index 00000000..643cf237 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-03.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-04.wav b/repl/public/EmuSP12/sd/Snaredrum-04.wav new file mode 100644 index 00000000..bb8c4c34 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-04.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-05.wav b/repl/public/EmuSP12/sd/Snaredrum-05.wav new file mode 100644 index 00000000..678db12e Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-05.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-06.wav b/repl/public/EmuSP12/sd/Snaredrum-06.wav new file mode 100644 index 00000000..a89a1d60 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-06.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-07.wav b/repl/public/EmuSP12/sd/Snaredrum-07.wav new file mode 100644 index 00000000..fdc1fb03 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-07.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-08.wav b/repl/public/EmuSP12/sd/Snaredrum-08.wav new file mode 100644 index 00000000..324eafac Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-08.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-09.wav b/repl/public/EmuSP12/sd/Snaredrum-09.wav new file mode 100644 index 00000000..35b617d7 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-09.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-10.wav b/repl/public/EmuSP12/sd/Snaredrum-10.wav new file mode 100644 index 00000000..85d13e91 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-10.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-11.wav b/repl/public/EmuSP12/sd/Snaredrum-11.wav new file mode 100644 index 00000000..d296fea5 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-11.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-12.wav b/repl/public/EmuSP12/sd/Snaredrum-12.wav new file mode 100644 index 00000000..b4fc9ca4 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-12.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-13.wav b/repl/public/EmuSP12/sd/Snaredrum-13.wav new file mode 100644 index 00000000..fbe745f9 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-13.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-14.wav b/repl/public/EmuSP12/sd/Snaredrum-14.wav new file mode 100644 index 00000000..fd321482 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-14.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-15.wav b/repl/public/EmuSP12/sd/Snaredrum-15.wav new file mode 100644 index 00000000..703a23cd Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-15.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-16.wav b/repl/public/EmuSP12/sd/Snaredrum-16.wav new file mode 100644 index 00000000..ef6c1f9c Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-16.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-17.wav b/repl/public/EmuSP12/sd/Snaredrum-17.wav new file mode 100644 index 00000000..df7e282e Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-17.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-18.wav b/repl/public/EmuSP12/sd/Snaredrum-18.wav new file mode 100644 index 00000000..0950c300 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-18.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-19.wav b/repl/public/EmuSP12/sd/Snaredrum-19.wav new file mode 100644 index 00000000..46b8e0d8 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-19.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-20.wav b/repl/public/EmuSP12/sd/Snaredrum-20.wav new file mode 100644 index 00000000..4c211a7c Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-20.wav differ diff --git a/repl/public/EmuSP12/sd/Snaredrum-21.wav b/repl/public/EmuSP12/sd/Snaredrum-21.wav new file mode 100644 index 00000000..246ea401 Binary files /dev/null and b/repl/public/EmuSP12/sd/Snaredrum-21.wav differ diff --git a/repl/public/piano.json b/repl/public/piano.json new file mode 100644 index 00000000..5f0c62c3 --- /dev/null +++ b/repl/public/piano.json @@ -0,0 +1,33 @@ +{ + "piano": { + "A0": "A0v8.mp3", + "C1": "C1v8.mp3", + "Ds1": "Ds1v8.mp3", + "Fs1": "Fs1v8.mp3", + "A1": "A1v8.mp3", + "C2": "C2v8.mp3", + "Ds2": "Ds2v8.mp3", + "Fs2": "Fs2v8.mp3", + "A2": "A2v8.mp3", + "C3": "C3v8.mp3", + "Ds3": "Ds3v8.mp3", + "Fs3": "Fs3v8.mp3", + "A3": "A3v8.mp3", + "C4": "C4v8.mp3", + "Ds4": "Ds4v8.mp3", + "Fs4": "Fs4v8.mp3", + "A4": "A4v8.mp3", + "C5": "C5v8.mp3", + "Fs5": "Fs5v8.mp3", + "A5": "A5v8.mp3", + "C6": "C6v8.mp3", + "Ds6": "Ds6v8.mp3", + "Fs6": "Fs6v8.mp3", + "A6": "A6v8.mp3", + "C7": "C7v8.mp3", + "Ds7": "Ds7v8.mp3", + "Fs7": "Fs7v8.mp3", + "A7": "A7v8.mp3", + "C8": "C8v8.mp3" + } +} diff --git a/repl/public/piano/A0v8.mp3 b/repl/public/piano/A0v8.mp3 new file mode 100644 index 00000000..a70ced60 Binary files /dev/null and b/repl/public/piano/A0v8.mp3 differ diff --git a/repl/public/piano/A1v8.mp3 b/repl/public/piano/A1v8.mp3 new file mode 100644 index 00000000..4c77113d Binary files /dev/null and b/repl/public/piano/A1v8.mp3 differ diff --git a/repl/public/piano/A2v8.mp3 b/repl/public/piano/A2v8.mp3 new file mode 100644 index 00000000..a336ba9a Binary files /dev/null and b/repl/public/piano/A2v8.mp3 differ diff --git a/repl/public/piano/A3v8.mp3 b/repl/public/piano/A3v8.mp3 new file mode 100644 index 00000000..cdbf3e9a Binary files /dev/null and b/repl/public/piano/A3v8.mp3 differ diff --git a/repl/public/piano/A4v8.mp3 b/repl/public/piano/A4v8.mp3 new file mode 100644 index 00000000..374a9a85 Binary files /dev/null and b/repl/public/piano/A4v8.mp3 differ diff --git a/repl/public/piano/A5v8.mp3 b/repl/public/piano/A5v8.mp3 new file mode 100644 index 00000000..66a90365 Binary files /dev/null and b/repl/public/piano/A5v8.mp3 differ diff --git a/repl/public/piano/A6v8.mp3 b/repl/public/piano/A6v8.mp3 new file mode 100644 index 00000000..4caee72b Binary files /dev/null and b/repl/public/piano/A6v8.mp3 differ diff --git a/repl/public/piano/A7v8.mp3 b/repl/public/piano/A7v8.mp3 new file mode 100644 index 00000000..64d32b4a Binary files /dev/null and b/repl/public/piano/A7v8.mp3 differ diff --git a/repl/public/piano/C1v8.mp3 b/repl/public/piano/C1v8.mp3 new file mode 100644 index 00000000..d6e17a6f Binary files /dev/null and b/repl/public/piano/C1v8.mp3 differ diff --git a/repl/public/piano/C2v8.mp3 b/repl/public/piano/C2v8.mp3 new file mode 100644 index 00000000..8ed32f55 Binary files /dev/null and b/repl/public/piano/C2v8.mp3 differ diff --git a/repl/public/piano/C3v8.mp3 b/repl/public/piano/C3v8.mp3 new file mode 100644 index 00000000..98b80e04 Binary files /dev/null and b/repl/public/piano/C3v8.mp3 differ diff --git a/repl/public/piano/C4v8.mp3 b/repl/public/piano/C4v8.mp3 new file mode 100644 index 00000000..c7aba1c2 Binary files /dev/null and b/repl/public/piano/C4v8.mp3 differ diff --git a/repl/public/piano/C5v8.mp3 b/repl/public/piano/C5v8.mp3 new file mode 100644 index 00000000..7d566154 Binary files /dev/null and b/repl/public/piano/C5v8.mp3 differ diff --git a/repl/public/piano/C6v8.mp3 b/repl/public/piano/C6v8.mp3 new file mode 100644 index 00000000..c4f30ea5 Binary files /dev/null and b/repl/public/piano/C6v8.mp3 differ diff --git a/repl/public/piano/C7v8.mp3 b/repl/public/piano/C7v8.mp3 new file mode 100644 index 00000000..178353a7 Binary files /dev/null and b/repl/public/piano/C7v8.mp3 differ diff --git a/repl/public/piano/C8v8.mp3 b/repl/public/piano/C8v8.mp3 new file mode 100644 index 00000000..3357d0ed Binary files /dev/null and b/repl/public/piano/C8v8.mp3 differ diff --git a/repl/public/piano/Ds1v8.mp3 b/repl/public/piano/Ds1v8.mp3 new file mode 100644 index 00000000..ae7da2cd Binary files /dev/null and b/repl/public/piano/Ds1v8.mp3 differ diff --git a/repl/public/piano/Ds2v8.mp3 b/repl/public/piano/Ds2v8.mp3 new file mode 100644 index 00000000..0817e581 Binary files /dev/null and b/repl/public/piano/Ds2v8.mp3 differ diff --git a/repl/public/piano/Ds3v8.mp3 b/repl/public/piano/Ds3v8.mp3 new file mode 100644 index 00000000..fda53ce0 Binary files /dev/null and b/repl/public/piano/Ds3v8.mp3 differ diff --git a/repl/public/piano/Ds4v8.mp3 b/repl/public/piano/Ds4v8.mp3 new file mode 100644 index 00000000..7894b6d0 Binary files /dev/null and b/repl/public/piano/Ds4v8.mp3 differ diff --git a/repl/public/piano/Ds5v8.mp3 b/repl/public/piano/Ds5v8.mp3 new file mode 100644 index 00000000..98d04e06 Binary files /dev/null and b/repl/public/piano/Ds5v8.mp3 differ diff --git a/repl/public/piano/Ds6v8.mp3 b/repl/public/piano/Ds6v8.mp3 new file mode 100644 index 00000000..314331f7 Binary files /dev/null and b/repl/public/piano/Ds6v8.mp3 differ diff --git a/repl/public/piano/Ds7v8.mp3 b/repl/public/piano/Ds7v8.mp3 new file mode 100644 index 00000000..c2554a9d Binary files /dev/null and b/repl/public/piano/Ds7v8.mp3 differ diff --git a/repl/public/piano/Fs1v8.mp3 b/repl/public/piano/Fs1v8.mp3 new file mode 100644 index 00000000..47d4da8b Binary files /dev/null and b/repl/public/piano/Fs1v8.mp3 differ diff --git a/repl/public/piano/Fs2v8.mp3 b/repl/public/piano/Fs2v8.mp3 new file mode 100644 index 00000000..3502c6ff Binary files /dev/null and b/repl/public/piano/Fs2v8.mp3 differ diff --git a/repl/public/piano/Fs3v8.mp3 b/repl/public/piano/Fs3v8.mp3 new file mode 100644 index 00000000..ad3546b0 Binary files /dev/null and b/repl/public/piano/Fs3v8.mp3 differ diff --git a/repl/public/piano/Fs4v8.mp3 b/repl/public/piano/Fs4v8.mp3 new file mode 100644 index 00000000..12908edd Binary files /dev/null and b/repl/public/piano/Fs4v8.mp3 differ diff --git a/repl/public/piano/Fs5v8.mp3 b/repl/public/piano/Fs5v8.mp3 new file mode 100644 index 00000000..6aa830a1 Binary files /dev/null and b/repl/public/piano/Fs5v8.mp3 differ diff --git a/repl/public/piano/Fs6v8.mp3 b/repl/public/piano/Fs6v8.mp3 new file mode 100644 index 00000000..602f4580 Binary files /dev/null and b/repl/public/piano/Fs6v8.mp3 differ diff --git a/repl/public/piano/Fs7v8.mp3 b/repl/public/piano/Fs7v8.mp3 new file mode 100644 index 00000000..8a016d98 Binary files /dev/null and b/repl/public/piano/Fs7v8.mp3 differ diff --git a/repl/public/tidal-drum-machines.json b/repl/public/tidal-drum-machines.json new file mode 100644 index 00000000..7024e57f --- /dev/null +++ b/repl/public/tidal-drum-machines.json @@ -0,0 +1,2658 @@ +{ + "AJKPercusyn_bd": ["AJKPercusyn/ajkpercusyn-bd/Bassdrum.wav"], + "AJKPercusyn_cb": ["AJKPercusyn/ajkpercusyn-cb/Cowbell.wav", "AJKPercusyn/ajkpercusyn-cb/Snarepop.wav"], + "AJKPercusyn_ht": ["AJKPercusyn/ajkpercusyn-ht/Tom.wav"], + "AJKPercusyn_sd": ["AJKPercusyn/ajkpercusyn-sd/Noise.wav"], + "AkaiLinn_bd": ["AkaiLinn/akailinn-bd/Bassdrum.wav"], + "AkaiLinn_cb": ["AkaiLinn/akailinn-cb/Cowbell.wav"], + "AkaiLinn_cp": ["AkaiLinn/akailinn-cp/Clap.wav"], + "AkaiLinn_cr": ["AkaiLinn/akailinn-cr/Crash.wav"], + "AkaiLinn_hh": ["AkaiLinn/akailinn-hh/Closed Hat.wav"], + "AkaiLinn_ht": ["AkaiLinn/akailinn-ht/Tom H.wav"], + "AkaiLinn_lt": ["AkaiLinn/akailinn-lt/Tom L.wav"], + "AkaiLinn_mt": ["AkaiLinn/akailinn-mt/Tom M.wav"], + "AkaiLinn_oh": ["AkaiLinn/akailinn-oh/Open Hat.wav"], + "AkaiLinn_rd": ["AkaiLinn/akailinn-rd/Ride.wav"], + "AkaiLinn_sd": ["AkaiLinn/akailinn-sd/SD.wav"], + "AkaiLinn_sh": ["AkaiLinn/akailinn-sh/Shuffle.wav"], + "AkaiLinn_tb": ["AkaiLinn/akailinn-tb/Tambourin.wav"], + "AkaiMPC60_bd": ["AkaiMPC60/akaimpc60-bd/0 Bassdrum.wav", "AkaiMPC60/akaimpc60-bd/Bassdrum Gated.wav"], + "AkaiMPC60_cp": ["AkaiMPC60/akaimpc60-cp/Clap.wav"], + "AkaiMPC60_cr": ["AkaiMPC60/akaimpc60-cr/Crash.wav"], + "AkaiMPC60_hh": ["AkaiMPC60/akaimpc60-hh/Closed Hat.wav"], + "AkaiMPC60_ht": ["AkaiMPC60/akaimpc60-ht/Tom H.wav"], + "AkaiMPC60_lt": ["AkaiMPC60/akaimpc60-lt/Tom L.wav"], + "AkaiMPC60_misc": ["AkaiMPC60/akaimpc60-misc/Bass.wav", "AkaiMPC60/akaimpc60-misc/Electric Piano.wav"], + "AkaiMPC60_mt": ["AkaiMPC60/akaimpc60-mt/Tom M.wav"], + "AkaiMPC60_oh": ["AkaiMPC60/akaimpc60-oh/Open Hat.wav"], + "AkaiMPC60_perc": [ + "AkaiMPC60/akaimpc60-perc/Bongo.wav", + "AkaiMPC60/akaimpc60-perc/Click.wav", + "AkaiMPC60/akaimpc60-perc/Conga H.wav", + "AkaiMPC60/akaimpc60-perc/Conga L.wav", + "AkaiMPC60/akaimpc60-perc/Timbale.wav" + ], + "AkaiMPC60_rd": ["AkaiMPC60/akaimpc60-rd/Ride.wav"], + "AkaiMPC60_rim": ["AkaiMPC60/akaimpc60-rim/Rim Gated.wav"], + "AkaiMPC60_sd": [ + "AkaiMPC60/akaimpc60-sd/Snare 1.wav", + "AkaiMPC60/akaimpc60-sd/Snare 2.wav", + "AkaiMPC60/akaimpc60-sd/Snare 3.wav" + ], + "AkaiXR10_bd": [ + "AkaiXR10/akaixr10-bd/Bassdrum-01.wav", + "AkaiXR10/akaixr10-bd/Bassdrum-02.wav", + "AkaiXR10/akaixr10-bd/Bassdrum-03.wav", + "AkaiXR10/akaixr10-bd/Bassdrum-04.wav", + "AkaiXR10/akaixr10-bd/Bassdrum-05.wav", + "AkaiXR10/akaixr10-bd/Bassdrum-06.wav", + "AkaiXR10/akaixr10-bd/Bassdrum-07.wav", + "AkaiXR10/akaixr10-bd/Bassdrum-08.wav", + "AkaiXR10/akaixr10-bd/Bassdrum-09.wav", + "AkaiXR10/akaixr10-bd/Bassdrum-10.wav" + ], + "AkaiXR10_cb": ["AkaiXR10/akaixr10-cb/Cowbell.wav"], + "AkaiXR10_cp": ["AkaiXR10/akaixr10-cp/Clap.wav"], + "AkaiXR10_cr": [ + "AkaiXR10/akaixr10-cr/Crash-01.wav", + "AkaiXR10/akaixr10-cr/Crash-02.wav", + "AkaiXR10/akaixr10-cr/Crash-03.wav" + ], + "AkaiXR10_hh": ["AkaiXR10/akaixr10-hh/Hat Closed.wav", "AkaiXR10/akaixr10-hh/Hat Middle.wav"], + "AkaiXR10_ht": ["AkaiXR10/akaixr10-ht/Tom H-02.wav"], + "AkaiXR10_lt": ["AkaiXR10/akaixr10-lt/Tom L-01.wav", "AkaiXR10/akaixr10-lt/Tom L-02.wav"], + "AkaiXR10_misc": [ + "AkaiXR10/akaixr10-misc/Hit.wav", + "AkaiXR10/akaixr10-misc/Slap Bass.wav", + "AkaiXR10/akaixr10-misc/Square Kick-01.wav", + "AkaiXR10/akaixr10-misc/Square Kick-02.wav" + ], + "AkaiXR10_mt": ["AkaiXR10/akaixr10-mt/Tom M-01.wav", "AkaiXR10/akaixr10-mt/Tom M-02.wav"], + "AkaiXR10_oh": ["AkaiXR10/akaixr10-oh/Hat Open.wav"], + "AkaiXR10_perc": [ + "AkaiXR10/akaixr10-perc/Agogo.wav", + "AkaiXR10/akaixr10-perc/Claves.wav", + "AkaiXR10/akaixr10-perc/Conga-01.wav", + "AkaiXR10/akaixr10-perc/Conga-02.wav", + "AkaiXR10/akaixr10-perc/Conga-03.wav", + "AkaiXR10/akaixr10-perc/Conga-04.wav", + "AkaiXR10/akaixr10-perc/Fingersanp.wav", + "AkaiXR10/akaixr10-perc/Guiro-01.wav", + "AkaiXR10/akaixr10-perc/Guirro-02.wav", + "AkaiXR10/akaixr10-perc/Timbale H.wav", + "AkaiXR10/akaixr10-perc/Timbale L.wav", + "AkaiXR10/akaixr10-perc/Toma H-01.wav", + "AkaiXR10/akaixr10-perc/Triangle.wav", + "AkaiXR10/akaixr10-perc/Vibrator.wav", + "AkaiXR10/akaixr10-perc/Whistle.wav" + ], + "AkaiXR10_rd": ["AkaiXR10/akaixr10-rd/Ride.wav"], + "AkaiXR10_rim": ["AkaiXR10/akaixr10-rim/Rim Shot-01.wav", "AkaiXR10/akaixr10-rim/Rim Shot-02.wav"], + "AkaiXR10_sd": [ + "AkaiXR10/akaixr10-sd/Snaredrum-01.wav", + "AkaiXR10/akaixr10-sd/Snaredrum-02.wav", + "AkaiXR10/akaixr10-sd/Snaredrum-03.wav", + "AkaiXR10/akaixr10-sd/Snaredrum-04.wav", + "AkaiXR10/akaixr10-sd/Snaredrum-05.wav", + "AkaiXR10/akaixr10-sd/Snaredrum-06.wav", + "AkaiXR10/akaixr10-sd/Snaredrum-07.wav", + "AkaiXR10/akaixr10-sd/Snaredrum-08.wav", + "AkaiXR10/akaixr10-sd/Snaredrum-09.wav", + "AkaiXR10/akaixr10-sd/Snaredrum-10.wav" + ], + "AkaiXR10_sh": ["AkaiXR10/akaixr10-sh/Cabasa.wav"], + "AkaiXR10_tb": ["AkaiXR10/akaixr10-tb/Tambourine.wav"], + "AlesisHR16_bd": ["AlesisHR16/alesishr16-bd/Bassdrum.wav"], + "AlesisHR16_cp": ["AlesisHR16/alesishr16-cp/Clap.wav"], + "AlesisHR16_hh": ["AlesisHR16/alesishr16-hh/Closed Hat.wav"], + "AlesisHR16_ht": ["AlesisHR16/alesishr16-ht/Tom-2.wav"], + "AlesisHR16_lt": ["AlesisHR16/alesishr16-lt/Tom-1.wav"], + "AlesisHR16_oh": ["AlesisHR16/alesishr16-oh/Open Hat.wav"], + "AlesisHR16_perc": [ + "AlesisHR16/alesishr16-perc/Agogo Bell.wav", + "AlesisHR16/alesishr16-perc/Claves.wav", + "AlesisHR16/alesishr16-perc/Conga H.wav", + "AlesisHR16/alesishr16-perc/Conga L.wav", + "AlesisHR16/alesishr16-perc/Timbale.wav", + "AlesisHR16/alesishr16-perc/Triangle.wav", + "AlesisHR16/alesishr16-perc/Wood Block H.wav", + "AlesisHR16/alesishr16-perc/Wood Block L.wav" + ], + "AlesisHR16_rim": ["AlesisHR16/alesishr16-rim/Rim.wav"], + "AlesisHR16_sd": ["AlesisHR16/alesishr16-sd/Snaredrum.wav"], + "AlesisHR16_sh": [ + "AlesisHR16/alesishr16-sh/Cabasa.wav", + "AlesisHR16/alesishr16-sh/Maracas.wav", + "AlesisHR16/alesishr16-sh/Shaker.wav" + ], + "AlesisSR16_bd": [ + "AlesisSR16/alesissr16-bd/Bassdrum-01.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-02.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-03.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-04.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-05.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-06.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-07.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-08.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-09.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-10.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-11.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-12.wav", + "AlesisSR16/alesissr16-bd/Bassdrum-13.wav" + ], + "AlesisSR16_cb": ["AlesisSR16/alesissr16-cb/Cowbell.wav"], + "AlesisSR16_cp": ["AlesisSR16/alesissr16-cp/Clap.wav"], + "AlesisSR16_cr": ["AlesisSR16/alesissr16-cr/Crash-01.wav", "AlesisSR16/alesissr16-cr/Crash-02.wav"], + "AlesisSR16_hh": [ + "AlesisSR16/alesissr16-hh/Hat Closed-01.wav", + "AlesisSR16/alesissr16-hh/Hat Closed-02.wav", + "AlesisSR16/alesissr16-hh/Hat Closed-03.wav" + ], + "AlesisSR16_misc": [ + "AlesisSR16/alesissr16-misc/Hit.wav", + "AlesisSR16/alesissr16-misc/Metal.wav", + "AlesisSR16/alesissr16-misc/Synth Cymbal.wav" + ], + "AlesisSR16_oh": [ + "AlesisSR16/alesissr16-oh/Hat Open-01.wav", + "AlesisSR16/alesissr16-oh/Hat Open-02.wav", + "AlesisSR16/alesissr16-oh/Hat Open-03.wav", + "AlesisSR16/alesissr16-oh/Hat Reverse.wav" + ], + "AlesisSR16_perc": [ + "AlesisSR16/alesissr16-perc/Block.wav", + "AlesisSR16/alesissr16-perc/Bongo.wav", + "AlesisSR16/alesissr16-perc/Congo.wav", + "AlesisSR16/alesissr16-perc/Finger.wav", + "AlesisSR16/alesissr16-perc/Guiro.wav", + "AlesisSR16/alesissr16-perc/Timbale.wav", + "AlesisSR16/alesissr16-perc/Triangle.wav" + ], + "AlesisSR16_rd": [ + "AlesisSR16/alesissr16-rd/Ride-01.wav", + "AlesisSR16/alesissr16-rd/Ride-02.wav", + "AlesisSR16/alesissr16-rd/Ride-03.wav" + ], + "AlesisSR16_rim": ["AlesisSR16/alesissr16-rim/Rim.wav"], + "AlesisSR16_sd": [ + "AlesisSR16/alesissr16-sd/Snaredrum-01.wav", + "AlesisSR16/alesissr16-sd/Snaredrum-02.wav", + "AlesisSR16/alesissr16-sd/Snaredrum-03.wav", + "AlesisSR16/alesissr16-sd/Snaredrum-04.wav", + "AlesisSR16/alesissr16-sd/Snaredrum-05.wav", + "AlesisSR16/alesissr16-sd/Snaredrum-06.wav", + "AlesisSR16/alesissr16-sd/Snaredrum-07.wav", + "AlesisSR16/alesissr16-sd/Snaredrum-08.wav", + "AlesisSR16/alesissr16-sd/Snaredrum-09.wav", + "AlesisSR16/alesissr16-sd/Snaredrum-10.wav", + "AlesisSR16/alesissr16-sd/Snaredrum-11.wav", + "AlesisSR16/alesissr16-sd/Snaredrum-12.wav" + ], + "AlesisSR16_sh": ["AlesisSR16/alesissr16-sh/Shaker.wav"], + "AlesisSR16_tb": ["AlesisSR16/alesissr16-tb/Tamb.wav"], + "BossDR110_bd": ["BossDR110/bossdr110-bd/Bassdrum.wav"], + "BossDR110_cp": ["BossDR110/bossdr110-cp/Clap.wav"], + "BossDR110_cr": ["BossDR110/bossdr110-cr/Crash.wav"], + "BossDR110_hh": ["BossDR110/bossdr110-hh/Hat Closed.wav"], + "BossDR110_oh": ["BossDR110/bossdr110-oh/Hat Open.wav"], + "BossDR110_rd": ["BossDR110/bossdr110-rd/Ride.wav"], + "BossDR110_sd": ["BossDR110/bossdr110-sd/Snaredrum.wav"], + "BossDR220_bd": ["BossDR220/bossdr220-bd/Bassdrum.wav"], + "BossDR220_cp": ["BossDR220/bossdr220-cp/Clap.wav"], + "BossDR220_cr": ["BossDR220/bossdr220-cr/Crash.wav"], + "BossDR220_hh": ["BossDR220/bossdr220-hh/Hat Closed.wav"], + "BossDR220_ht": ["BossDR220/bossdr220-ht/Tom H.wav"], + "BossDR220_lt": ["BossDR220/bossdr220-lt/Tom L.wav"], + "BossDR220_mt": ["BossDR220/bossdr220-mt/Tom M.wav"], + "BossDR220_oh": ["BossDR220/bossdr220-oh/Hat Open.wav"], + "BossDR220_perc": ["BossDR220/bossdr220-perc/Clave.wav"], + "BossDR220_rd": ["BossDR220/bossdr220-rd/Ride.wav"], + "BossDR220_sd": ["BossDR220/bossdr220-sd/Snaredrum.wav"], + "BossDR55_bd": ["BossDR55/bossdr55-bd/Bassdrum-01.wav", "BossDR55/bossdr55-bd/Bassdrum-02.wav"], + "BossDR55_hh": ["BossDR55/bossdr55-hh/Hihat1.wav", "BossDR55/bossdr55-hh/Hihat2.wav"], + "BossDR55_rim": ["BossDR55/bossdr55-rim/Rimshot.wav"], + "BossDR55_sd": [ + "BossDR55/bossdr55-sd/Snaredrum-01.wav", + "BossDR55/bossdr55-sd/Snaredrum-02.wav", + "BossDR55/bossdr55-sd/Snaredrum-03.wav", + "BossDR55/bossdr55-sd/Snaredrum-05.wav", + "BossDR55/bossdr55-sd/Snaredrum-06.wav", + "BossDR55/bossdr55-sd/Snaredrum-07.wav", + "BossDR55/bossdr55-sd/Snaredrum-08.wav", + "BossDR55/bossdr55-sd/Snaredrum-09.wav" + ], + "BossDR550_bd": [ + "BossDR550/bossdr550-bd/Bassdrum-01.wav", + "BossDR550/bossdr550-bd/Bassdrum-02.wav", + "BossDR550/bossdr550-bd/Bassdrum-03.wav", + "BossDR550/bossdr550-bd/Bassdrum-04.wav", + "BossDR550/bossdr550-bd/Bassdrum-05.wav" + ], + "BossDR550_cb": ["BossDR550/bossdr550-cb/Cowbell-01.wav", "BossDR550/bossdr550-cb/Cowbell-02.wav"], + "BossDR550_cp": ["BossDR550/bossdr550-cp/Clap.wav"], + "BossDR550_cr": ["BossDR550/bossdr550-cr/Crash.wav"], + "BossDR550_hh": ["BossDR550/bossdr550-hh/Hat Closed-01.wav", "BossDR550/bossdr550-hh/Hat Closed-02.wav"], + "BossDR550_ht": [ + "BossDR550/bossdr550-ht/Tom H-01.wav", + "BossDR550/bossdr550-ht/Tom H-02.wav", + "BossDR550/bossdr550-ht/Tom H-03.wav" + ], + "BossDR550_lt": [ + "BossDR550/bossdr550-lt/Tom L-01.wav", + "BossDR550/bossdr550-lt/Tom L-02.wav", + "BossDR550/bossdr550-lt/Tom L-03.wav" + ], + "BossDR550_misc": [ + "BossDR550/bossdr550-misc/Hi Q.wav", + "BossDR550/bossdr550-misc/Srcatch-01.wav", + "BossDR550/bossdr550-misc/Srcatch-02.wav" + ], + "BossDR550_mt": ["BossDR550/bossdr550-mt/Tom M-01.wav", "BossDR550/bossdr550-mt/Tom M-02.wav"], + "BossDR550_oh": ["BossDR550/bossdr550-oh/Hat Open-01.wav", "BossDR550/bossdr550-oh/Hat Open-02.wav"], + "BossDR550_perc": [ + "BossDR550/bossdr550-perc/Agogo H.wav", + "BossDR550/bossdr550-perc/Agogo L.wav", + "BossDR550/bossdr550-perc/Bongo H.wav", + "BossDR550/bossdr550-perc/Bongo L.wav", + "BossDR550/bossdr550-perc/Claves.wav", + "BossDR550/bossdr550-perc/Conga H.wav", + "BossDR550/bossdr550-perc/Conga L.wav", + "BossDR550/bossdr550-perc/Conga S.wav", + "BossDR550/bossdr550-perc/Timbale H.wav", + "BossDR550/bossdr550-perc/Timbale L.wav", + "BossDR550/bossdr550-perc/Whistle.wav" + ], + "BossDR550_rd": ["BossDR550/bossdr550-rd/Ride-01.wav", "BossDR550/bossdr550-rd/Ride-02.wav"], + "BossDR550_rim": ["BossDR550/bossdr550-rim/Rim Shot.wav"], + "BossDR550_sd": [ + "BossDR550/bossdr550-sd/Snaredrum-01.wav", + "BossDR550/bossdr550-sd/Snaredrum-02.wav", + "BossDR550/bossdr550-sd/Snaredrum-03.wav", + "BossDR550/bossdr550-sd/Snaredrum-04.wav", + "BossDR550/bossdr550-sd/Snaredrum-05.wav", + "BossDR550/bossdr550-sd/Snaredrum-06.wav" + ], + "BossDR550_sh": ["BossDR550/bossdr550-sh/Cabasa-01.wav", "BossDR550/bossdr550-sh/Cabasa-02.wav"], + "BossDR550_tb": ["BossDR550/bossdr550-tb/Tambourine.wav"], + "CasioRZ1_bd": ["CasioRZ1/casiorz1-bd/Bassdrum.wav"], + "CasioRZ1_cb": ["CasioRZ1/casiorz1-cb/Cowbell.wav"], + "CasioRZ1_cp": ["CasioRZ1/casiorz1-cp/Clap.wav"], + "CasioRZ1_cr": ["CasioRZ1/casiorz1-cr/Crash.wav"], + "CasioRZ1_hh": ["CasioRZ1/casiorz1-hh/Hat Closed.wav"], + "CasioRZ1_ht": ["CasioRZ1/casiorz1-ht/Tom H.wav"], + "CasioRZ1_lt": ["CasioRZ1/casiorz1-lt/Tom L.wav"], + "CasioRZ1_mt": ["CasioRZ1/casiorz1-mt/Tom M.wav"], + "CasioRZ1_rd": ["CasioRZ1/casiorz1-rd/Hat Open.wav", "CasioRZ1/casiorz1-rd/Ride.wav"], + "CasioRZ1_rim": ["CasioRZ1/casiorz1-rim/Rim Shot.wav"], + "CasioRZ1_sd": ["CasioRZ1/casiorz1-sd/0Snaredrum.wav"], + "CasioSK1_bd": ["CasioSK1/casiosk1-bd/Bassdrum.wav"], + "CasioSK1_hh": ["CasioSK1/casiosk1-hh/Hat Closed.wav"], + "CasioSK1_ht": ["CasioSK1/casiosk1-ht/Tom H.wav"], + "CasioSK1_mt": ["CasioSK1/casiosk1-mt/Tom L.wav"], + "CasioSK1_oh": ["CasioSK1/casiosk1-oh/Hat Open.wav"], + "CasioSK1_sd": ["CasioSK1/casiosk1-sd/Snaredrum.wav"], + "CasioVL1_bd": ["CasioVL1/casiovl1-bd/Bassdrum.wav"], + "CasioVL1_hh": ["CasioVL1/casiovl1-hh/Hi Hat.wav"], + "CasioVL1_sd": ["CasioVL1/casiovl1-sd/Snaredrum-01.wav"], + "DoepferMS404_bd": [ + "DoepferMS404/doepferms404-bd/0Bassdrum.wav", + "DoepferMS404/doepferms404-bd/Bassdrum Reverse.wav" + ], + "DoepferMS404_hh": ["DoepferMS404/doepferms404-hh/Hat Closed.wav"], + "DoepferMS404_lt": ["DoepferMS404/doepferms404-lt/Tom.wav"], + "DoepferMS404_oh": ["DoepferMS404/doepferms404-oh/Hat Open.wav"], + "DoepferMS404_sd": ["DoepferMS404/doepferms404-sd/Snaredrum.wav"], + "EmuDrumulator_bd": ["EmuDrumulator/emudrumulator-bd/Bassdrum.wav"], + "EmuDrumulator_cb": ["EmuDrumulator/emudrumulator-cb/Cowbell.wav"], + "EmuDrumulator_cp": ["EmuDrumulator/emudrumulator-cp/Clap.wav"], + "EmuDrumulator_cr": ["EmuDrumulator/emudrumulator-cr/Cymbal.wav"], + "EmuDrumulator_hh": ["EmuDrumulator/emudrumulator-hh/Hat Closed.wav"], + "EmuDrumulator_ht": ["EmuDrumulator/emudrumulator-ht/Tom H.wav"], + "EmuDrumulator_lt": ["EmuDrumulator/emudrumulator-lt/Tom L.wav"], + "EmuDrumulator_mt": ["EmuDrumulator/emudrumulator-mt/Tom M.wav"], + "EmuDrumulator_oh": ["EmuDrumulator/emudrumulator-oh/Hat Open.wav"], + "EmuDrumulator_perc": ["EmuDrumulator/emudrumulator-perc/Claves.wav"], + "EmuDrumulator_rim": ["EmuDrumulator/emudrumulator-rim/Rim Shot.wav"], + "EmuDrumulator_sd": ["EmuDrumulator/emudrumulator-sd/0Snaredrum.wav"], + "EmuModular_bd": ["EmuModular/emumodular-bd/Bassdrum-01.wav", "EmuModular/emumodular-bd/Bassdrum-02.wav"], + "EmuModular_misc": ["EmuModular/emumodular-misc/EmuPong.wav"], + "EmuModular_perc": ["EmuModular/emumodular-perc/Flick-02.wav", "EmuModular/emumodular-perc/Flick01.wav"], + "EmuSP12_bd": [ + "EmuSP12/emusp12-bd/Bassdrum-01.wav", + "EmuSP12/emusp12-bd/Bassdrum-02.wav", + "EmuSP12/emusp12-bd/Bassdrum-03.wav", + "EmuSP12/emusp12-bd/Bassdrum-04.wav", + "EmuSP12/emusp12-bd/Bassdrum-05.wav", + "EmuSP12/emusp12-bd/Bassdrum-06.wav", + "EmuSP12/emusp12-bd/Bassdrum-07.wav", + "EmuSP12/emusp12-bd/Bassdrum-08.wav", + "EmuSP12/emusp12-bd/Bassdrum-09.wav", + "EmuSP12/emusp12-bd/Bassdrum-10.wav", + "EmuSP12/emusp12-bd/Bassdrum-11.wav", + "EmuSP12/emusp12-bd/Bassdrum-12.wav", + "EmuSP12/emusp12-bd/Bassdrum-13.wav", + "EmuSP12/emusp12-bd/Bassdrum-14.wav" + ], + "EmuSP12_cb": ["EmuSP12/emusp12-cb/Cowbell.wav"], + "EmuSP12_cp": ["EmuSP12/emusp12-cp/Clap.wav"], + "EmuSP12_cr": ["EmuSP12/emusp12-cr/Crash.wav"], + "EmuSP12_hh": ["EmuSP12/emusp12-hh/Hat Closed-01.wav", "EmuSP12/emusp12-hh/Hat Closed-02.wav"], + "EmuSP12_ht": [ + "EmuSP12/emusp12-ht/Tom H-01.wav", + "EmuSP12/emusp12-ht/Tom H-02.wav", + "EmuSP12/emusp12-ht/Tom H-03.wav", + "EmuSP12/emusp12-ht/Tom H-04.wav", + "EmuSP12/emusp12-ht/Tom H-05.wav", + "EmuSP12/emusp12-ht/Tom H-06.wav" + ], + "EmuSP12_lt": [ + "EmuSP12/emusp12-lt/Tom L-01.wav", + "EmuSP12/emusp12-lt/Tom L-02.wav", + "EmuSP12/emusp12-lt/Tom L-03.wav", + "EmuSP12/emusp12-lt/Tom L-04.wav", + "EmuSP12/emusp12-lt/Tom L-05.wav", + "EmuSP12/emusp12-lt/Tom L-06.wav" + ], + "EmuSP12_misc": [ + "EmuSP12/emusp12-misc/Metal-01.wav", + "EmuSP12/emusp12-misc/Metal-02.wav", + "EmuSP12/emusp12-misc/Metal-03.wav", + "EmuSP12/emusp12-misc/Scratch.wav", + "EmuSP12/emusp12-misc/Shot-01.wav", + "EmuSP12/emusp12-misc/Shot-02.wav", + "EmuSP12/emusp12-misc/Shot-03.wav" + ], + "EmuSP12_mt": [ + "EmuSP12/emusp12-mt/Tom M-01.wav", + "EmuSP12/emusp12-mt/Tom M-02.wav", + "EmuSP12/emusp12-mt/Tom M-03.wav", + "EmuSP12/emusp12-mt/Tom M-05.wav" + ], + "EmuSP12_oh": ["EmuSP12/emusp12-oh/Hhopen1.wav"], + "EmuSP12_perc": ["EmuSP12/emusp12-perc/Blow1.wav"], + "EmuSP12_rd": ["EmuSP12/emusp12-rd/Ride.wav"], + "EmuSP12_rim": ["EmuSP12/emusp12-rim/zRim Shot-01.wav", "EmuSP12/emusp12-rim/zRim Shot-02.wav"], + "EmuSP12_sd": [ + "EmuSP12/emusp12-sd/Snaredrum-01.wav", + "EmuSP12/emusp12-sd/Snaredrum-02.wav", + "EmuSP12/emusp12-sd/Snaredrum-03.wav", + "EmuSP12/emusp12-sd/Snaredrum-04.wav", + "EmuSP12/emusp12-sd/Snaredrum-05.wav", + "EmuSP12/emusp12-sd/Snaredrum-06.wav", + "EmuSP12/emusp12-sd/Snaredrum-07.wav", + "EmuSP12/emusp12-sd/Snaredrum-08.wav", + "EmuSP12/emusp12-sd/Snaredrum-09.wav", + "EmuSP12/emusp12-sd/Snaredrum-10.wav", + "EmuSP12/emusp12-sd/Snaredrum-11.wav", + "EmuSP12/emusp12-sd/Snaredrum-12.wav", + "EmuSP12/emusp12-sd/Snaredrum-13.wav", + "EmuSP12/emusp12-sd/Snaredrum-14.wav", + "EmuSP12/emusp12-sd/Snaredrum-15.wav", + "EmuSP12/emusp12-sd/Snaredrum-16.wav", + "EmuSP12/emusp12-sd/Snaredrum-17.wav", + "EmuSP12/emusp12-sd/Snaredrum-18.wav", + "EmuSP12/emusp12-sd/Snaredrum-19.wav", + "EmuSP12/emusp12-sd/Snaredrum-20.wav", + "EmuSP12/emusp12-sd/Snaredrum-21.wav" + ], + "KorgDDM110_bd": ["KorgDDM110/korgddm110-bd/Bassdrum.wav"], + "KorgDDM110_cp": ["KorgDDM110/korgddm110-cp/Clap.wav"], + "KorgDDM110_cr": ["KorgDDM110/korgddm110-cr/Crash.wav"], + "KorgDDM110_hh": ["KorgDDM110/korgddm110-hh/Hat Closed.wav"], + "KorgDDM110_ht": ["KorgDDM110/korgddm110-ht/Tom H.wav", "KorgDDM110/korgddm110-ht/Tom-01.wav"], + "KorgDDM110_lt": ["KorgDDM110/korgddm110-lt/Tom L.wav", "KorgDDM110/korgddm110-lt/Tom-02.wav"], + "KorgDDM110_oh": ["KorgDDM110/korgddm110-oh/Hat Open.wav"], + "KorgDDM110_rim": ["KorgDDM110/korgddm110-rim/Rim Shot.wav"], + "KorgDDM110_sd": ["KorgDDM110/korgddm110-sd/0Snaredrum.wav"], + "KorgKPR77_bd": ["KorgKPR77/korgkpr77-bd/Bassdrum.wav"], + "KorgKPR77_cp": ["KorgKPR77/korgkpr77-cp/Clap.wav"], + "KorgKPR77_hh": ["KorgKPR77/korgkpr77-hh/Hat Closed.wav"], + "KorgKPR77_oh": ["KorgKPR77/korgkpr77-oh/Hat Open.wav"], + "KorgKPR77_sd": ["KorgKPR77/korgkpr77-sd/Snaredrum.wav"], + "KorgKR55_bd": ["KorgKR55/korgkr55-bd/Bassdrum.wav"], + "KorgKR55_cb": ["KorgKR55/korgkr55-cb/Cowbell.wav"], + "KorgKR55_cr": ["KorgKR55/korgkr55-cr/Cymbal.wav"], + "KorgKR55_hh": ["KorgKR55/korgkr55-hh/Hat Closed.wav"], + "KorgKR55_ht": ["KorgKR55/korgkr55-ht/Tom.wav"], + "KorgKR55_oh": ["KorgKR55/korgkr55-oh/Hat Open.wav"], + "KorgKR55_perc": ["KorgKR55/korgkr55-perc/Claves.wav", "KorgKR55/korgkr55-perc/Conga.wav"], + "KorgKR55_rim": ["KorgKR55/korgkr55-rim/Rim Shot.wav"], + "KorgKR55_sd": ["KorgKR55/korgkr55-sd/0Snaredrum.wav"], + "KorgKRZ_bd": ["KorgKRZ/korgkrz-bd/Bassdrum.wav"], + "KorgKRZ_cr": ["KorgKRZ/korgkrz-cr/Crash.wav"], + "KorgKRZ_fx": ["KorgKRZ/korgkrz-fx/FX-01.wav", "KorgKRZ/korgkrz-fx/FX-02.wav"], + "KorgKRZ_hh": ["KorgKRZ/korgkrz-hh/Hat Closed.wav"], + "KorgKRZ_ht": ["KorgKRZ/korgkrz-ht/Tom-02.wav"], + "KorgKRZ_lt": ["KorgKRZ/korgkrz-lt/Tom-01.wav"], + "KorgKRZ_misc": ["KorgKRZ/korgkrz-misc/Bell.wav"], + "KorgKRZ_oh": ["KorgKRZ/korgkrz-oh/Hat Open.wav"], + "KorgKRZ_rd": ["KorgKRZ/korgkrz-rd/Ride.wav"], + "KorgKRZ_sd": ["KorgKRZ/korgkrz-sd/Snaredrum-01.wav", "KorgKRZ/korgkrz-sd/Snaredrum-02.wav"], + "KorgM1_bd": [ + "KorgM1/korgm1-bd/Bassdrum-01.wav", + "KorgM1/korgm1-bd/Bassdrum-02.wav", + "KorgM1/korgm1-bd/Bassdrum-03.wav" + ], + "KorgM1_cb": ["KorgM1/korgm1-cb/Cowbel.wav"], + "KorgM1_cp": ["KorgM1/korgm1-cp/Clap.wav"], + "KorgM1_cr": ["KorgM1/korgm1-cr/Crash.wav"], + "KorgM1_hh": ["KorgM1/korgm1-hh/Hat Closed-01.wav", "KorgM1/korgm1-hh/Hat Closed-02.wav"], + "KorgM1_ht": ["KorgM1/korgm1-ht/Tom-02.wav", "KorgM1/korgm1-ht/Tom-03.wav"], + "KorgM1_misc": [ + "KorgM1/korgm1-misc/Belrng.wav", + "KorgM1/korgm1-misc/Drop.wav", + "KorgM1/korgm1-misc/Flexttone.wav", + "KorgM1/korgm1-misc/Hammer.wav", + "KorgM1/korgm1-misc/Metal.wav", + "KorgM1/korgm1-misc/Metronome-01.wav", + "KorgM1/korgm1-misc/Metronome-02.wav", + "KorgM1/korgm1-misc/Pole.wav", + "KorgM1/korgm1-misc/Scratch.wav", + "KorgM1/korgm1-misc/Snap.wav", + "KorgM1/korgm1-misc/Tubalar Bell-01.wav", + "KorgM1/korgm1-misc/Tubalar Bell-02.wav", + "KorgM1/korgm1-misc/Tubalar Bell-03.wav", + "KorgM1/korgm1-misc/Tubalar Bell-04.wav", + "KorgM1/korgm1-misc/Whiplash.wav", + "KorgM1/korgm1-misc/Windbells.wav" + ], + "KorgM1_mt": ["KorgM1/korgm1-mt/Tom-01.wav"], + "KorgM1_oh": ["KorgM1/korgm1-oh/Hat Open-01.wav", "KorgM1/korgm1-oh/Hat Open-02.wav"], + "KorgM1_perc": [ + "KorgM1/korgm1-perc/Conga-01.wav", + "KorgM1/korgm1-perc/Conga-02.wav", + "KorgM1/korgm1-perc/Hit.wav", + "KorgM1/korgm1-perc/Pluck.wav", + "KorgM1/korgm1-perc/Timbale-01.wav", + "KorgM1/korgm1-perc/Timbale-02.wav", + "KorgM1/korgm1-perc/Woodblock.wav" + ], + "KorgM1_rd": ["KorgM1/korgm1-rd/Ride.wav"], + "KorgM1_rim": ["KorgM1/korgm1-rim/Snaredrum-side.wav"], + "KorgM1_sd": [ + "KorgM1/korgm1-sd/Snaredrum-01.wav", + "KorgM1/korgm1-sd/Snaredrum-02.wav", + "KorgM1/korgm1-sd/Snaredrum-03.wav", + "KorgM1/korgm1-sd/Snaredrum-04.wav" + ], + "KorgM1_sh": ["KorgM1/korgm1-sh/Shakers.wav"], + "KorgM1_tb": ["KorgM1/korgm1-tb/Tambourine.wav"], + "KorgMinipops_bd": [ + "KorgMinipops/korgminipops-bd/Bassdrum-01.wav", + "KorgMinipops/korgminipops-bd/Bassdrum-02.wav", + "KorgMinipops/korgminipops-bd/Bassdrum-03.wav", + "KorgMinipops/korgminipops-bd/Bassdrum-04.wav", + "KorgMinipops/korgminipops-bd/Bassdrum-05.wav", + "KorgMinipops/korgminipops-bd/Bassdrum-06.wav", + "KorgMinipops/korgminipops-bd/Bassdrum-07.wav" + ], + "KorgMinipops_hh": [ + "KorgMinipops/korgminipops-hh/Hat Closed-01.wav", + "KorgMinipops/korgminipops-hh/Hat Closed-02.wav", + "KorgMinipops/korgminipops-hh/Hat Closed-03.wav", + "KorgMinipops/korgminipops-hh/Hat Closed-04.wav" + ], + "KorgMinipops_misc": [ + "KorgMinipops/korgminipops-misc/Tom-01.wav", + "KorgMinipops/korgminipops-misc/Tom-02.wav", + "KorgMinipops/korgminipops-misc/Woodblock-01.wav", + "KorgMinipops/korgminipops-misc/Woodblock-02.wav" + ], + "KorgMinipops_oh": [ + "KorgMinipops/korgminipops-oh/Hat Open-01.wav", + "KorgMinipops/korgminipops-oh/Hat Open-02.wav", + "KorgMinipops/korgminipops-oh/Hat Open-03.wav", + "KorgMinipops/korgminipops-oh/Hat Open-04.wav" + ], + "KorgMinipops_sd": [ + "KorgMinipops/korgminipops-sd/Snaredrum-01.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-02.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-03.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-04.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-05.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-06.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-07.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-08.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-09.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-10.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-11.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-12.wav", + "KorgMinipops/korgminipops-sd/Snaredrum-13.wav" + ], + "KorgPoly800_bd": [ + "KorgPoly800/korgpoly800-bd/Bassdrum-01.wav", + "KorgPoly800/korgpoly800-bd/Bassdrum-02.wav", + "KorgPoly800/korgpoly800-bd/Bassdrum-03.wav", + "KorgPoly800/korgpoly800-bd/Bassdrum-04.wav" + ], + "KorgT3_bd": [ + "KorgT3/korgt3-bd/Bassdrum-01.wav", + "KorgT3/korgt3-bd/Bassdrum-02.wav", + "KorgT3/korgt3-bd/Bassdrum-03.wav", + "KorgT3/korgt3-bd/Bassdrum-04.wav", + "KorgT3/korgt3-bd/Bassdrum-05.wav" + ], + "KorgT3_cp": ["KorgT3/korgt3-cp/Clap.wav"], + "KorgT3_hh": ["KorgT3/korgt3-hh/Hat Closed-01.wav", "KorgT3/korgt3-hh/Hat Closed-02.wav"], + "KorgT3_misc": [ + "KorgT3/korgt3-misc/Bell-02.wav", + "KorgT3/korgt3-misc/Bell01.wav", + "KorgT3/korgt3-misc/Click.wav", + "KorgT3/korgt3-misc/Tubular Bell.wav" + ], + "KorgT3_oh": ["KorgT3/korgt3-oh/Hat Open-01.wav", "KorgT3/korgt3-oh/Hat Open-02.wav"], + "KorgT3_perc": [ + "KorgT3/korgt3-perc/Blocks.wav", + "KorgT3/korgt3-perc/Conga.wav", + "KorgT3/korgt3-perc/Hit.wav", + "KorgT3/korgt3-perc/Stick.wav" + ], + "KorgT3_rim": ["KorgT3/korgt3-rim/Rim shot.wav"], + "KorgT3_sd": [ + "KorgT3/korgt3-sd/Snaredrum-01.wav", + "KorgT3/korgt3-sd/Snaredrum-02.wav", + "KorgT3/korgt3-sd/Snaredrum-03.wav", + "KorgT3/korgt3-sd/Snaredrum-04.wav", + "KorgT3/korgt3-sd/Snaredrum-05.wav" + ], + "KorgT3_sh": ["KorgT3/korgt3-sh/Shaker-01.wav", "KorgT3/korgt3-sh/Shaker-02.wav", "KorgT3/korgt3-sh/zCabasa.wav"], + "Linn9000_bd": ["Linn9000/linn9000-bd/BAssdrum.wav"], + "Linn9000_cb": ["Linn9000/linn9000-cb/Cowbell-01.wav", "Linn9000/linn9000-cb/Cowbell-02.wav"], + "Linn9000_cr": ["Linn9000/linn9000-cr/Crash-01.wav", "Linn9000/linn9000-cr/Crash-02.wav"], + "Linn9000_hh": ["Linn9000/linn9000-hh/Hat Closed.wav"], + "Linn9000_ht": ["Linn9000/linn9000-ht/Tom-01.wav", "Linn9000/linn9000-ht/Tom-02.wav"], + "Linn9000_lt": ["Linn9000/linn9000-lt/Tom-04.wav", "Linn9000/linn9000-lt/Tom-05.wav"], + "Linn9000_mt": ["Linn9000/linn9000-mt/Tom-03.wav"], + "Linn9000_oh": ["Linn9000/linn9000-oh/Hat Open.wav"], + "Linn9000_perc": [ + "Linn9000/linn9000-perc/Conga H.wav", + "Linn9000/linn9000-perc/Conga L.wav", + "Linn9000/linn9000-perc/Conga M.wav" + ], + "Linn9000_rd": ["Linn9000/linn9000-rd/Crash-03.wav", "Linn9000/linn9000-rd/Ping.wav"], + "Linn9000_rim": ["Linn9000/linn9000-rim/Rim Shot.wav"], + "Linn9000_sd": ["Linn9000/linn9000-sd/0Snaredrum.wav"], + "Linn9000_tb": ["Linn9000/linn9000-tb/Tambourine.wav"], + "LinnDrum_bd": ["LinnDrum/linndrum-bd/Bassdrum.wav"], + "LinnDrum_cb": ["LinnDrum/linndrum-cb/Cowbell.wav"], + "LinnDrum_cp": ["LinnDrum/linndrum-cp/Clap.wav"], + "LinnDrum_cr": ["LinnDrum/linndrum-cr/Crash.wav"], + "LinnDrum_hh": [ + "LinnDrum/linndrum-hh/Hat Closed-01.wav", + "LinnDrum/linndrum-hh/Hat Closed-02.wav", + "LinnDrum/linndrum-hh/Hat Closed-03.wav" + ], + "LinnDrum_ht": ["LinnDrum/linndrum-ht/Tom H-01.wav", "LinnDrum/linndrum-ht/Tom H-02.wav"], + "LinnDrum_lt": ["LinnDrum/linndrum-lt/Tom L-01.wav", "LinnDrum/linndrum-lt/Tom L-02.wav"], + "LinnDrum_mt": ["LinnDrum/linndrum-mt/Tom M-01.wav"], + "LinnDrum_oh": ["LinnDrum/linndrum-oh/Hat Open.wav"], + "LinnDrum_perc": [ + "LinnDrum/linndrum-perc/Conga H-01.wav", + "LinnDrum/linndrum-perc/Conga H-02.wav", + "LinnDrum/linndrum-perc/Conga L-01.wav", + "LinnDrum/linndrum-perc/Conga L-02.wav", + "LinnDrum/linndrum-perc/Conga M-01.wav", + "LinnDrum/linndrum-perc/Conga M-02.wav" + ], + "LinnDrum_rd": ["LinnDrum/linndrum-rd/Ride.wav"], + "LinnDrum_rim": [ + "LinnDrum/linndrum-rim/Sidestick-01.wav", + "LinnDrum/linndrum-rim/Sidestick-02.wav", + "LinnDrum/linndrum-rim/Sidestick-03.wav" + ], + "LinnDrum_sd": [ + "LinnDrum/linndrum-sd/0Snarderum-01.wav", + "LinnDrum/linndrum-sd/0Snarderum-02.wav", + "LinnDrum/linndrum-sd/0Snarderum-03.wav" + ], + "LinnDrum_sh": ["LinnDrum/linndrum-sh/Cabasa.wav"], + "LinnDrum_tb": ["LinnDrum/linndrum-tb/Tambourine.wav"], + "LinnLM1_bd": [ + "LinnLM1/linnlm1-bd/LM-1_BD_1_TL.wav", + "LinnLM1/linnlm1-bd/LM-1_BD_2_TL.wav", + "LinnLM1/linnlm1-bd/LM-1_BD_3_TL.wav", + "LinnLM1/linnlm1-bd/LM-1_BD_4_TL.wav" + ], + "LinnLM1_cb": ["LinnLM1/linnlm1-cb/LM-1_COWBELL_TL.wav"], + "LinnLM1_cp": ["LinnLM1/linnlm1-cp/LM-1_CLAP_1_TL.wav"], + "LinnLM1_hh": ["LinnLM1/linnlm1-hh/LM-1_HH_1_TL.wav"], + "LinnLM1_ht": ["LinnLM1/linnlm1-ht/LM-1_Tom_2_TL.wav"], + "LinnLM1_lt": ["LinnLM1/linnlm1-lt/LM-1_Tom_1_TL.wav"], + "LinnLM1_oh": ["LinnLM1/linnlm1-oh/LM-1_HH_2_TL.wav"], + "LinnLM1_perc": [ + "LinnLM1/linnlm1-perc/LM-1_BONGO_1_TL.wav", + "LinnLM1/linnlm1-perc/LM-1_BONGO_2_TL.wav", + "LinnLM1/linnlm1-perc/LM-1_WOODBLOCK_TL.wav" + ], + "LinnLM1_rim": ["LinnLM1/linnlm1-rim/LM-1_RIMSHOT_1_TL.wav"], + "LinnLM1_sd": ["LinnLM1/linnlm1-sd/LM-1_SD_1_TL.wav"], + "LinnLM1_sh": ["LinnLM1/linnlm1-sh/LM-1_SHAKER_1_TL.wav"], + "LinnLM1_tb": ["LinnLM1/linnlm1-tb/LM-1_TAMB_TL.wav"], + "LinnLM2_bd": [ + "LinnLM2/linnlm2-bd/LM-2_BD_1_TL.wav", + "LinnLM2/linnlm2-bd/LM-2_BD_2_TL.wav", + "LinnLM2/linnlm2-bd/LM-2_BD_3_TL.wav", + "LinnLM2/linnlm2-bd/LM-2_BD_4_TL.wav" + ], + "LinnLM2_cb": ["LinnLM2/linnlm2-cb/LM-2_COWBELL_1_TL.wav"], + "LinnLM2_cp": ["LinnLM2/linnlm2-cp/LM-2_CLAP_1_TL.wav"], + "LinnLM2_cr": ["LinnLM2/linnlm2-cr/LM-2_CRASH_1_TL.wav"], + "LinnLM2_hh": ["LinnLM2/linnlm2-hh/LM-2_HH_1_TL.wav", "LinnLM2/linnlm2-hh/LM-2_HH_2_TL.wav"], + "LinnLM2_ht": ["LinnLM2/linnlm2-ht/LM-2_TOM_1_TL.wav"], + "LinnLM2_lt": ["LinnLM2/linnlm2-lt/LM-2_TOM_3_TL.wav"], + "LinnLM2_mt": ["LinnLM2/linnlm2-mt/LM-2_TOM_2_TL.wav"], + "LinnLM2_oh": ["LinnLM2/linnlm2-oh/LM-2_OPEN_HH_2_TL.wav", "LinnLM2/linnlm2-oh/LM-2_OPEN_HH_TL.wav"], + "LinnLM2_rd": ["LinnLM2/linnlm2-rd/LM-2_RIDE_1_TL.wav"], + "LinnLM2_rim": ["LinnLM2/linnlm2-rim/LM-2_RIMSHOT_1_TL.wav", "LinnLM2/linnlm2-rim/LM-2_RIMSHOT_2_TL.wav"], + "LinnLM2_sd": [ + "LinnLM2/linnlm2-sd/LM-2_SD_1_TL.wav", + "LinnLM2/linnlm2-sd/LM-2_SD_2_TL.wav", + "LinnLM2/linnlm2-sd/LM-2_SD_3_TL.wav", + "LinnLM2/linnlm2-sd/LM-2_SD_4_TL.wav" + ], + "LinnLM2_sh": ["LinnLM2/linnlm2-sh/LM-2_SHAKER_1_TL.wav"], + "LinnLM2_tb": ["LinnLM2/linnlm2-tb/LM-2_TAMB_1_TL.wav"], + "MFB512_bd": ["MFB512/mfb512-bd/Bassdrum.wav"], + "MFB512_cp": ["MFB512/mfb512-cp/Clap.wav"], + "MFB512_cr": ["MFB512/mfb512-cr/Crash.wav"], + "MFB512_hh": ["MFB512/mfb512-hh/Hat Closed.wav"], + "MFB512_ht": ["MFB512/mfb512-ht/Tom H.wav"], + "MFB512_lt": ["MFB512/mfb512-lt/Tom L.wav"], + "MFB512_mt": ["MFB512/mfb512-mt/Tom M.wav"], + "MFB512_oh": ["MFB512/mfb512-oh/Hat Open.wav"], + "MFB512_sd": ["MFB512/mfb512-sd/Snaredrum.wav"], + "MPC1000_bd": [ + "MPC1000/mpc1000-bd/MPC1000_808BD_TL.wav", + "MPC1000/mpc1000-bd/MPC1000_909BD_TL.wav", + "MPC1000/mpc1000-bd/MPC1000_DB-BD2_TL.wav", + "MPC1000/mpc1000-bd/MPC1000_HH-BD_TL.wav", + "MPC1000/mpc1000-bd/MPC1000_HOUSEBD_TL.wav" + ], + "MPC1000_cp": ["MPC1000/mpc1000-cp/MPC1000_CLAP_TL.wav"], + "MPC1000_hh": [ + "MPC1000/mpc1000-hh/MPC1000_808HH1_TL.wav", + "MPC1000/mpc1000-hh/MPC1000_808HH2_TL.wav", + "MPC1000/mpc1000-hh/MPC1000_909CHH_TL.wav", + "MPC1000/mpc1000-hh/MPC1000_HHCHH1_TL.wav" + ], + "MPC1000_oh": ["MPC1000/mpc1000-oh/MPC1000_909OHH_TL.wav"], + "MPC1000_perc": ["MPC1000/mpc1000-perc/MPC1000_HHPERC_TL.wav"], + "MPC1000_sd": [ + "MPC1000/mpc1000-sd/MPC1000_808SD_TL.wav", + "MPC1000/mpc1000-sd/MPC1000_909SD_TL.wav", + "MPC1000/mpc1000-sd/MPC1000_DB-SN_TL.wav", + "MPC1000/mpc1000-sd/MPC1000_HH-SN_TL.wav" + ], + "MPC1000_sh": ["MPC1000/mpc1000-sh/MPC1000_808MRC_TL.wav"], + "MoogConcertMateMG1_bd": [ + "MoogConcertMateMG1/moogconcertmatemg1-bd/Bassdrum-01.wav", + "MoogConcertMateMG1/moogconcertmatemg1-bd/Bassdrum-02.wav", + "MoogConcertMateMG1/moogconcertmatemg1-bd/Bassdrum-03.wav" + ], + "MoogConcertMateMG1_sd": [ + "MoogConcertMateMG1/moogconcertmatemg1-sd/Snaredrum-1.wav", + "MoogConcertMateMG1/moogconcertmatemg1-sd/Snaredrum-2.wav" + ], + "OberheimDMX_": [ + "OberheimDMX/oberheimdmx--perc/Timbale H.wav", + "OberheimDMX/oberheimdmx--perc/Timbale L.wav", + "OberheimDMX/oberheimdmx--perc/Timbale M.wav" + ], + "OberheimDMX_bd": [ + "OberheimDMX/oberheimdmx-bd/Bassdrum-01.wav", + "OberheimDMX/oberheimdmx-bd/Bassdrum-02.wav", + "OberheimDMX/oberheimdmx-bd/Bassdrum-03.wav" + ], + "OberheimDMX_cp": ["OberheimDMX/oberheimdmx-cp/Clap.wav"], + "OberheimDMX_cr": ["OberheimDMX/oberheimdmx-cr/Crash.wav"], + "OberheimDMX_hh": ["OberheimDMX/oberheimdmx-hh/Hat Closed.wav"], + "OberheimDMX_ht": ["OberheimDMX/oberheimdmx-ht/Tom H.wav"], + "OberheimDMX_lt": ["OberheimDMX/oberheimdmx-lt/Tom L.wav"], + "OberheimDMX_mt": ["OberheimDMX/oberheimdmx-mt/Tom M.wav"], + "OberheimDMX_oh": ["OberheimDMX/oberheimdmx-oh/Hat Open.wav"], + "OberheimDMX_rd": ["OberheimDMX/oberheimdmx-rd/Ride.wav"], + "OberheimDMX_rim": ["OberheimDMX/oberheimdmx-rim/Rim Shot.wav"], + "OberheimDMX_sd": [ + "OberheimDMX/oberheimdmx-sd/Snaredrum-01.wav", + "OberheimDMX/oberheimdmx-sd/Snaredrum-02.wav", + "OberheimDMX/oberheimdmx-sd/Snaredrum-03.wav" + ], + "OberheimDMX_sh": ["OberheimDMX/oberheimdmx-sh/Cabasa.wav"], + "OberheimDMX_tb": ["OberheimDMX/oberheimdmx-tb/Tamborine.wav"], + "RhodesPolaris_bd": [ + "RhodesPolaris/rhodespolaris-bd/Bassdrum-01.wav", + "RhodesPolaris/rhodespolaris-bd/Bassdrum-02.wav", + "RhodesPolaris/rhodespolaris-bd/Bassdrum-03.wav", + "RhodesPolaris/rhodespolaris-bd/Bassdrum-04.wav" + ], + "RhodesPolaris_misc": [ + "RhodesPolaris/rhodespolaris-misc/Noise-1.wav", + "RhodesPolaris/rhodespolaris-misc/Noise-2.wav", + "RhodesPolaris/rhodespolaris-misc/Noise-3.wav", + "RhodesPolaris/rhodespolaris-misc/Noise-4.wav" + ], + "RhodesPolaris_sd": [ + "RhodesPolaris/rhodespolaris-sd/Snaredrum-01.wav", + "RhodesPolaris/rhodespolaris-sd/Snaredrum-02.wav", + "RhodesPolaris/rhodespolaris-sd/Snaredrum-03.wav", + "RhodesPolaris/rhodespolaris-sd/Snaredrum-04.wav" + ], + "RhythmAce_bd": [ + "RhythmAce/rhythmace-bd/Bassdrum-01.wav", + "RhythmAce/rhythmace-bd/Bassdrum-02.wav", + "RhythmAce/rhythmace-bd/Bassdrum-03.wav" + ], + "RhythmAce_hh": ["RhythmAce/rhythmace-hh/Hat Closed.wav"], + "RhythmAce_ht": ["RhythmAce/rhythmace-ht/Tom H.wav"], + "RhythmAce_lt": ["RhythmAce/rhythmace-lt/Tom L.wav"], + "RhythmAce_oh": ["RhythmAce/rhythmace-oh/Hat Open.wav"], + "RhythmAce_perc": [ + "RhythmAce/rhythmace-perc/Clave.wav", + "RhythmAce/rhythmace-perc/Click.wav", + "RhythmAce/rhythmace-perc/Percussion-01.wav", + "RhythmAce/rhythmace-perc/Percussion-02.wav", + "RhythmAce/rhythmace-perc/Percussion-03.wav", + "RhythmAce/rhythmace-perc/Percussion-04.wav" + ], + "RhythmAce_sd": [ + "RhythmAce/rhythmace-sd/Snaredrum-01.wav", + "RhythmAce/rhythmace-sd/Snaredrum-02.wav", + "RhythmAce/rhythmace-sd/Snaredrum-03.wav" + ], + "RolandCompurhythm1000_bd": ["RolandCompurhythm1000/rolandcompurhythm1000-bd/Bassdrum.wav"], + "RolandCompurhythm1000_cb": ["RolandCompurhythm1000/rolandcompurhythm1000-cb/Cowbell.wav"], + "RolandCompurhythm1000_cp": ["RolandCompurhythm1000/rolandcompurhythm1000-cp/Clap.wav"], + "RolandCompurhythm1000_cr": ["RolandCompurhythm1000/rolandcompurhythm1000-cr/Crash.wav"], + "RolandCompurhythm1000_hh": ["RolandCompurhythm1000/rolandcompurhythm1000-hh/Hat Closed.wav"], + "RolandCompurhythm1000_ht": ["RolandCompurhythm1000/rolandcompurhythm1000-ht/Tom H.wav"], + "RolandCompurhythm1000_lt": ["RolandCompurhythm1000/rolandcompurhythm1000-lt/Tom L.wav"], + "RolandCompurhythm1000_mt": ["RolandCompurhythm1000/rolandcompurhythm1000-mt/Tom M.wav"], + "RolandCompurhythm1000_oh": ["RolandCompurhythm1000/rolandcompurhythm1000-oh/Hat Open.wav"], + "RolandCompurhythm1000_perc": [ + "RolandCompurhythm1000/rolandcompurhythm1000-perc/Conga H.wav", + "RolandCompurhythm1000/rolandcompurhythm1000-perc/Conga L.wav", + "RolandCompurhythm1000/rolandcompurhythm1000-perc/Timbale.wav" + ], + "RolandCompurhythm1000_rd": ["RolandCompurhythm1000/rolandcompurhythm1000-rd/Ride.wav"], + "RolandCompurhythm1000_rim": ["RolandCompurhythm1000/rolandcompurhythm1000-rim/Rimshot.wav"], + "RolandCompurhythm1000_sd": ["RolandCompurhythm1000/rolandcompurhythm1000-sd/Snaredrum.wav"], + "RolandCompurhythm78_bd": ["RolandCompurhythm78/rolandcompurhythm78-bd/Bassdrum.wav"], + "RolandCompurhythm78_cb": ["RolandCompurhythm78/rolandcompurhythm78-cb/Cowbell.wav"], + "RolandCompurhythm78_hh": [ + "RolandCompurhythm78/rolandcompurhythm78-hh/Hat Closed-01.wav", + "RolandCompurhythm78/rolandcompurhythm78-hh/Hat Closed-02.wav" + ], + "RolandCompurhythm78_misc": [ + "RolandCompurhythm78/rolandcompurhythm78-misc/Quid-01.wav", + "RolandCompurhythm78/rolandcompurhythm78-misc/Quid-02.wav", + "RolandCompurhythm78/rolandcompurhythm78-misc/Quid-03.wav", + "RolandCompurhythm78/rolandcompurhythm78-misc/Quid-04.wav" + ], + "RolandCompurhythm78_oh": [ + "RolandCompurhythm78/rolandcompurhythm78-oh/Hat Open-01.wav", + "RolandCompurhythm78/rolandcompurhythm78-oh/Hat Open-02.wav" + ], + "RolandCompurhythm78_perc": [ + "RolandCompurhythm78/rolandcompurhythm78-perc/Conga H.wav", + "RolandCompurhythm78/rolandcompurhythm78-perc/Conga L.wav", + "RolandCompurhythm78/rolandcompurhythm78-perc/Conga M.wav", + "RolandCompurhythm78/rolandcompurhythm78-perc/Hit.wav", + "RolandCompurhythm78/rolandcompurhythm78-perc/Woodblock-01.wav", + "RolandCompurhythm78/rolandcompurhythm78-perc/Woodblock-02.wav", + "RolandCompurhythm78/rolandcompurhythm78-perc/Woodblock-03.wav", + "RolandCompurhythm78/rolandcompurhythm78-perc/Woodblock-04.wav" + ], + "RolandCompurhythm78_sd": ["RolandCompurhythm78/rolandcompurhythm78-sd/Snaredrum.wav"], + "RolandCompurhythm78_tb": ["RolandCompurhythm78/rolandcompurhythm78-tb/Tambourine.wav"], + "RolandCompurhythm8000_bd": ["RolandCompurhythm8000/rolandcompurhythm8000-bd/Bassdrum.wav"], + "RolandCompurhythm8000_cb": ["RolandCompurhythm8000/rolandcompurhythm8000-cb/Cowbell.wav"], + "RolandCompurhythm8000_cp": ["RolandCompurhythm8000/rolandcompurhythm8000-cp/Clap.wav"], + "RolandCompurhythm8000_cr": ["RolandCompurhythm8000/rolandcompurhythm8000-cr/Cymball.wav"], + "RolandCompurhythm8000_hh": ["RolandCompurhythm8000/rolandcompurhythm8000-hh/Hat Closed.wav"], + "RolandCompurhythm8000_ht": ["RolandCompurhythm8000/rolandcompurhythm8000-ht/Tom H.wav"], + "RolandCompurhythm8000_lt": ["RolandCompurhythm8000/rolandcompurhythm8000-lt/Tom L.wav"], + "RolandCompurhythm8000_mt": ["RolandCompurhythm8000/rolandcompurhythm8000-mt/Tom M.wav"], + "RolandCompurhythm8000_oh": ["RolandCompurhythm8000/rolandcompurhythm8000-oh/Hat Open.wav"], + "RolandCompurhythm8000_perc": [ + "RolandCompurhythm8000/rolandcompurhythm8000-perc/Claves.wav", + "RolandCompurhythm8000/rolandcompurhythm8000-perc/Cr8kmcng.wav" + ], + "RolandCompurhythm8000_rim": ["RolandCompurhythm8000/rolandcompurhythm8000-rim/Rimshot.wav"], + "RolandCompurhythm8000_sd": ["RolandCompurhythm8000/rolandcompurhythm8000-sd/Snarderum.wav"], + "RolandD110_bd": ["RolandD110/rolandd110-bd/Bassdrum.wav"], + "RolandD110_cb": ["RolandD110/rolandd110-cb/Cowbell H.wav", "RolandD110/rolandd110-cb/Cowbell L.wav"], + "RolandD110_cr": ["RolandD110/rolandd110-cr/Crash.wav"], + "RolandD110_hh": ["RolandD110/rolandd110-hh/Hat Closed.wav"], + "RolandD110_lt": ["RolandD110/rolandd110-lt/Tom.wav"], + "RolandD110_oh": ["RolandD110/rolandd110-oh/Hat Open.wav", "RolandD110/rolandd110-oh/Hat Pedal.wav"], + "RolandD110_perc": [ + "RolandD110/rolandd110-perc/Bongo.wav", + "RolandD110/rolandd110-perc/Conga.wav", + "RolandD110/rolandd110-perc/Woodblock.wav" + ], + "RolandD110_rd": ["RolandD110/rolandd110-rd/Ride.wav"], + "RolandD110_rim": ["RolandD110/rolandd110-rim/Rimshot.wav"], + "RolandD110_sd": [ + "RolandD110/rolandd110-sd/Snaredrum-01.wav", + "RolandD110/rolandd110-sd/Snaredrum-02.wav", + "RolandD110/rolandd110-sd/Snaredrum-03.wav" + ], + "RolandD110_sh": ["RolandD110/rolandd110-sh/Cabasa.wav"], + "RolandD110_tb": ["RolandD110/rolandd110-tb/Tambourine.wav"], + "RolandD70_bd": [ + "RolandD70/rolandd70-bd/Bassdrum-01.wav", + "RolandD70/rolandd70-bd/Bassdrum-02.wav", + "RolandD70/rolandd70-bd/Bassdrum-03.wav", + "RolandD70/rolandd70-bd/Bassdrum-04.wav" + ], + "RolandD70_cb": ["RolandD70/rolandd70-cb/Cowbell.wav"], + "RolandD70_cp": ["RolandD70/rolandd70-cp/Clap.wav"], + "RolandD70_cr": ["RolandD70/rolandd70-cr/Crash.wav"], + "RolandD70_hh": ["RolandD70/rolandd70-hh/Hat Closed.wav"], + "RolandD70_lt": ["RolandD70/rolandd70-lt/Tom-02.wav"], + "RolandD70_mt": ["RolandD70/rolandd70-mt/Tom.-01.wav"], + "RolandD70_oh": ["RolandD70/rolandd70-oh/Hat Open.wav"], + "RolandD70_perc": ["RolandD70/rolandd70-perc/Sticks.wav"], + "RolandD70_rd": ["RolandD70/rolandd70-rd/Ride.wav"], + "RolandD70_rim": ["RolandD70/rolandd70-rim/Rim Shot.wav"], + "RolandD70_sd": [ + "RolandD70/rolandd70-sd/Snaredrum-01.wav", + "RolandD70/rolandd70-sd/Snaredrum-02.wav", + "RolandD70/rolandd70-sd/Snaredrum-03.wav", + "RolandD70/rolandd70-sd/Snaredrum-04.wav", + "RolandD70/rolandd70-sd/Snaredrum-05.wav" + ], + "RolandD70_sh": ["RolandD70/rolandd70-sh/Cabasa.wav"], + "RolandDDR30_bd": [ + "RolandDDR30/rolandddr30-bd/Bassdrum-01.wav", + "RolandDDR30/rolandddr30-bd/Bassdrum-02.wav", + "RolandDDR30/rolandddr30-bd/Bassdrum-03.wav", + "RolandDDR30/rolandddr30-bd/Bassdrum-04.wav", + "RolandDDR30/rolandddr30-bd/Bassdrum-05.wav", + "RolandDDR30/rolandddr30-bd/Bassdrum-06.wav", + "RolandDDR30/rolandddr30-bd/Bassdrum-07.wav", + "RolandDDR30/rolandddr30-bd/Bassdrum-08.wav" + ], + "RolandDDR30_ht": [ + "RolandDDR30/rolandddr30-ht/Tom-01.wav", + "RolandDDR30/rolandddr30-ht/Tom-03.wav", + "RolandDDR30/rolandddr30-ht/Tom-05.wav", + "RolandDDR30/rolandddr30-ht/Tom-07.wav" + ], + "RolandDDR30_lt": [ + "RolandDDR30/rolandddr30-lt/Tom-02.wav", + "RolandDDR30/rolandddr30-lt/Tom-04.wav", + "RolandDDR30/rolandddr30-lt/Tom-06.wav", + "RolandDDR30/rolandddr30-lt/Tom-08.wav" + ], + "RolandDDR30_sd": [ + "RolandDDR30/rolandddr30-sd/Snaredrum-01.wav", + "RolandDDR30/rolandddr30-sd/Snaredrum-02.wav", + "RolandDDR30/rolandddr30-sd/Snaredrum-03.wav", + "RolandDDR30/rolandddr30-sd/Snaredrum-04.wav", + "RolandDDR30/rolandddr30-sd/Snaredrum-05.wav", + "RolandDDR30/rolandddr30-sd/Snaredrum-06.wav", + "RolandDDR30/rolandddr30-sd/Snaredrum-07.wav", + "RolandDDR30/rolandddr30-sd/Snaredrum-08.wav" + ], + "RolandJD990_bd": [ + "RolandJD990/rolandjd990-bd/Bryt-kck.wav", + "RolandJD990/rolandjd990-bd/Butt-kck.wav", + "RolandJD990/rolandjd990-bd/Gate-kck.wav", + "RolandJD990/rolandjd990-bd/Indstr-k.wav", + "RolandJD990/rolandjd990-bd/Mach-kck.wav", + "RolandJD990/rolandjd990-bd/Mondo-k.wav", + "RolandJD990/rolandjd990-bd/Room-kck.wav", + "RolandJD990/rolandjd990-bd/Smash-k.wav", + "RolandJD990/rolandjd990-bd/Solid-k.wav", + "RolandJD990/rolandjd990-bd/Tekno-k.wav" + ], + "RolandJD990_cb": ["RolandJD990/rolandjd990-cb/Cowbell.wav"], + "RolandJD990_cp": ["RolandJD990/rolandjd990-cp/Dance-cl.wav"], + "RolandJD990_cr": ["RolandJD990/rolandjd990-cr/Crsh-cym.wav"], + "RolandJD990_hh": [ + "RolandJD990/rolandjd990-hh/Chh_1.wav", + "RolandJD990/rolandjd990-hh/Chh_2.wav", + "RolandJD990/rolandjd990-hh/Lite-ch1.wav", + "RolandJD990/rolandjd990-hh/Lite-ch2.wav" + ], + "RolandJD990_ht": ["RolandJD990/rolandjd990-ht/Rim-tom1.wav"], + "RolandJD990_lt": [ + "RolandJD990/rolandjd990-lt/Blast-tm.wav", + "RolandJD990/rolandjd990-lt/Boosh-tm.wav", + "RolandJD990/rolandjd990-lt/E-tom.wav", + "RolandJD990/rolandjd990-lt/Power_tm.wav", + "RolandJD990/rolandjd990-lt/Rim-tom4.wav" + ], + "RolandJD990_misc": [ + "RolandJD990/rolandjd990-misc/Crystal.wav", + "RolandJD990/rolandjd990-misc/Digibels.wav", + "RolandJD990/rolandjd990-misc/Digichim.wav", + "RolandJD990/rolandjd990-misc/Fingbell.wav", + "RolandJD990/rolandjd990-misc/Gamelan.wav", + "RolandJD990/rolandjd990-misc/Kalimba.wav", + "RolandJD990/rolandjd990-misc/Marimwav.wav", + "RolandJD990/rolandjd990-misc/Org_bell.wav", + "RolandJD990/rolandjd990-misc/Plink.wav", + "RolandJD990/rolandjd990-misc/Plunk.wav", + "RolandJD990/rolandjd990-misc/Vibes.wav", + "RolandJD990/rolandjd990-misc/Xylo.wav" + ], + "RolandJD990_mt": ["RolandJD990/rolandjd990-mt/Rim-tom2.wav", "RolandJD990/rolandjd990-mt/Rim-tom3.wav"], + "RolandJD990_oh": ["RolandJD990/rolandjd990-oh/Lite-ohh.wav", "RolandJD990/rolandjd990-oh/Ohh.wav"], + "RolandJD990_perc": [ + "RolandJD990/rolandjd990-perc/Agogo_bl.wav", + "RolandJD990/rolandjd990-perc/Bottlhit.wav", + "RolandJD990/rolandjd990-perc/Rattles.wav", + "RolandJD990/rolandjd990-perc/Sm_metal.wav", + "RolandJD990/rolandjd990-perc/Snaps.wav", + "RolandJD990/rolandjd990-perc/Woodcrak.wav" + ], + "RolandJD990_rd": ["RolandJD990/rolandjd990-rd/Ride_cym.wav"], + "RolandJD990_sd": [ + "RolandJD990/rolandjd990-sd/90's-sd.wav", + "RolandJD990/rolandjd990-sd/Attack_s.wav", + "RolandJD990/rolandjd990-sd/Bigshots.wav", + "RolandJD990/rolandjd990-sd/Combo-sd.wav", + "RolandJD990/rolandjd990-sd/Dance-s1.wav", + "RolandJD990/rolandjd990-sd/Dance-s2.wav", + "RolandJD990/rolandjd990-sd/Disco-sd.wav", + "RolandJD990/rolandjd990-sd/Hard-sd.wav", + "RolandJD990/rolandjd990-sd/Hiphop-s.wav", + "RolandJD990/rolandjd990-sd/House-sd.wav", + "RolandJD990/rolandjd990-sd/Power_sd.wav", + "RolandJD990/rolandjd990-sd/Rap-sd.wav", + "RolandJD990/rolandjd990-sd/Splat-sd.wav", + "RolandJD990/rolandjd990-sd/Swing-sd.wav", + "RolandJD990/rolandjd990-sd/Video-sd.wav" + ], + "RolandJD990_tb": ["RolandJD990/rolandjd990-tb/Tambourn.wav"], + "RolandMC202_bd": [ + "RolandMC202/rolandmc202-bd/Bassdrum-01.wav", + "RolandMC202/rolandmc202-bd/Bassdrum-02.wav", + "RolandMC202/rolandmc202-bd/Bassdrum-03.wav", + "RolandMC202/rolandmc202-bd/Bassdrum-04.wav", + "RolandMC202/rolandmc202-bd/Bassdrum-05.wav" + ], + "RolandMC202_ht": [ + "RolandMC202/rolandmc202-ht/Tom H-02.wav", + "RolandMC202/rolandmc202-ht/Tom H-03.wav", + "RolandMC202/rolandmc202-ht/Tom H-04.wav" + ], + "RolandMC202_perc": ["RolandMC202/rolandmc202-perc/Click.wav"], + "RolandMC303_bd": [ + "RolandMC303/rolandmc303-bd/606bd1.wav", + "RolandMC303/rolandmc303-bd/606bd2.wav", + "RolandMC303/rolandmc303-bd/606bd3.wav", + "RolandMC303/rolandmc303-bd/Afrofeet.wav", + "RolandMC303/rolandmc303-bd/Blipbd.wav", + "RolandMC303/rolandmc303-bd/Cavebd.wav", + "RolandMC303/rolandmc303-bd/Cavebd2.wav", + "RolandMC303/rolandmc303-bd/Distbd1.wav", + "RolandMC303/rolandmc303-bd/Distbd2.wav", + "RolandMC303/rolandmc303-bd/Distbd3.wav", + "RolandMC303/rolandmc303-bd/Drybd1.wav", + "RolandMC303/rolandmc303-bd/Drybd2.wav", + "RolandMC303/rolandmc303-bd/Drybd3.wav", + "RolandMC303/rolandmc303-bd/Elecbd.wav", + "RolandMC303/rolandmc303-bd/Jnglebd2.wav", + "RolandMC303/rolandmc303-bd/Junglebd.wav" + ], + "RolandMC303_cb": ["RolandMC303/rolandmc303-cb/78cowbel.wav", "RolandMC303/rolandmc303-cb/Cowbell.wav"], + "RolandMC303_cp": [ + "RolandMC303/rolandmc303-cp/707clap.wav", + "RolandMC303/rolandmc303-cp/Hardclap.wav", + "RolandMC303/rolandmc303-cp/Hc2clap.wav", + "RolandMC303/rolandmc303-cp/Hipclap1.wav", + "RolandMC303/rolandmc303-cp/Rapclap1.wav", + "RolandMC303/rolandmc303-cp/Rapclap2.wav", + "RolandMC303/rolandmc303-cp/Realclap.wav", + "RolandMC303/rolandmc303-cp/Shakecla.wav" + ], + "RolandMC303_fx": ["RolandMC303/rolandmc303-fx/Hrtbeat.wav", "RolandMC303/rolandmc303-fx/Whitnoiz.wav"], + "RolandMC303_hh": [ + "RolandMC303/rolandmc303-hh/606ch.wav", + "RolandMC303/rolandmc303-hh/707ch.wav", + "RolandMC303/rolandmc303-hh/78ch.wav", + "RolandMC303/rolandmc303-hh/Realch1.wav", + "RolandMC303/rolandmc303-hh/Realch2.wav", + "RolandMC303/rolandmc303-hh/Roomch.wav" + ], + "RolandMC303_ht": [ + "RolandMC303/rolandmc303-ht/78hitom.wav", + "RolandMC303/rolandmc303-ht/Achitom1.wav", + "RolandMC303/rolandmc303-ht/Achitom2.wav", + "RolandMC303/rolandmc303-ht/Lechito1.wav", + "RolandMC303/rolandmc303-ht/Lechito2.wav" + ], + "RolandMC303_lt": [ + "RolandMC303/rolandmc303-lt/78lotom.wav", + "RolandMC303/rolandmc303-lt/Aclotom1.wav", + "RolandMC303/rolandmc303-lt/Aclotom2.wav", + "RolandMC303/rolandmc303-lt/Lecloto2.wav", + "RolandMC303/rolandmc303-lt/Losyntht.wav" + ], + "RolandMC303_misc": [ + "RolandMC303/rolandmc303-misc/Asiangon.wav", + "RolandMC303/rolandmc303-misc/Fnkygost.wav", + "RolandMC303/rolandmc303-misc/Fxsd1.wav", + "RolandMC303/rolandmc303-misc/Fxsd2.wav", + "RolandMC303/rolandmc303-misc/Mgblip1.wav", + "RolandMC303/rolandmc303-misc/Mutecuic.wav", + "RolandMC303/rolandmc303-misc/Opencuic.wav", + "RolandMC303/rolandmc303-misc/Slap.wav" + ], + "RolandMC303_mt": [ + "RolandMC303/rolandmc303-mt/78midtom.wav", + "RolandMC303/rolandmc303-mt/Acmidtm2.wav", + "RolandMC303/rolandmc303-mt/Acmidtom.wav", + "RolandMC303/rolandmc303-mt/Lecmidt1.wav", + "RolandMC303/rolandmc303-mt/Lecmidt2.wav", + "RolandMC303/rolandmc303-mt/Midsynth.wav" + ], + "RolandMC303_oh": [ + "RolandMC303/rolandmc303-oh/707oh.wav", + "RolandMC303/rolandmc303-oh/78oh.wav", + "RolandMC303/rolandmc303-oh/Realoh1.wav", + "RolandMC303/rolandmc303-oh/Realoh2.wav", + "RolandMC303/rolandmc303-oh/Roomoh.wav" + ], + "RolandMC303_perc": [ + "RolandMC303/rolandmc303-perc/78guiro.wav", + "RolandMC303/rolandmc303-perc/78metalb.wav", + "RolandMC303/rolandmc303-perc/Bamboosd.wav", + "RolandMC303/rolandmc303-perc/Bamboost.wav", + "RolandMC303/rolandmc303-perc/Brushswi.wav", + "RolandMC303/rolandmc303-perc/Claves.wav", + "RolandMC303/rolandmc303-perc/Elechibo.wav", + "RolandMC303/rolandmc303-perc/Eleclobo.wav", + "RolandMC303/rolandmc303-perc/Elecloto.wav", + "RolandMC303/rolandmc303-perc/Fingersn.wav", + "RolandMC303/rolandmc303-perc/Hiagogo.wav", + "RolandMC303/rolandmc303-perc/Hibamboo.wav", + "RolandMC303/rolandmc303-perc/Hibongoo.wav", + "RolandMC303/rolandmc303-perc/Hicongao.wav", + "RolandMC303/rolandmc303-perc/Hicongas.wav", + "RolandMC303/rolandmc303-perc/Hihyoshi.wav", + "RolandMC303/rolandmc303-perc/Hisyntht.wav", + "RolandMC303/rolandmc303-perc/Hitimbal.wav", + "RolandMC303/rolandmc303-perc/Hiwoodbl.wav", + "RolandMC303/rolandmc303-perc/Loagogo.wav", + "RolandMC303/rolandmc303-perc/Lobamboo.wav", + "RolandMC303/rolandmc303-perc/Lobongoo.wav", + "RolandMC303/rolandmc303-perc/Locongao.wav", + "RolandMC303/rolandmc303-perc/Lohyoshi.wav", + "RolandMC303/rolandmc303-perc/Longguir.wav", + "RolandMC303/rolandmc303-perc/Longwhis.wav", + "RolandMC303/rolandmc303-perc/Lotimbal.wav", + "RolandMC303/rolandmc303-perc/Lowoodbl.wav", + "RolandMC303/rolandmc303-perc/Mutepand.wav", + "RolandMC303/rolandmc303-perc/Mutesurd.wav", + "RolandMC303/rolandmc303-perc/Mutetria.wav", + "RolandMC303/rolandmc303-perc/Openpand.wav", + "RolandMC303/rolandmc303-perc/Opensurd.wav", + "RolandMC303/rolandmc303-perc/Opentria.wav", + "RolandMC303/rolandmc303-perc/Shortgui.wav", + "RolandMC303/rolandmc303-perc/Shortwhi.wav", + "RolandMC303/rolandmc303-perc/Tablabay.wav", + "RolandMC303/rolandmc303-perc/Udo.wav", + "RolandMC303/rolandmc303-perc/Vibrasla.wav" + ], + "RolandMC303_rd": ["RolandMC303/rolandmc303-rd/Ridecym2.wav", "RolandMC303/rolandmc303-rd/Ridecymb.wav"], + "RolandMC303_rim": [ + "RolandMC303/rolandmc303-rim/Rimsd1.wav", + "RolandMC303/rolandmc303-rim/Rimsd2.wav", + "RolandMC303/rolandmc303-rim/Rimshot.wav", + "RolandMC303/rolandmc303-rim/Tinyrim2.wav", + "RolandMC303/rolandmc303-rim/Tinyrim3.wav", + "RolandMC303/rolandmc303-rim/Tinyrim4.wav" + ], + "RolandMC303_sd": [ + "RolandMC303/rolandmc303-sd/606sd1.wav", + "RolandMC303/rolandmc303-sd/606sd2.wav", + "RolandMC303/rolandmc303-sd/606sd3.wav", + "RolandMC303/rolandmc303-sd/78sd.wav", + "RolandMC303/rolandmc303-sd/80809sd.wav", + "RolandMC303/rolandmc303-sd/Brushslp.wav", + "RolandMC303/rolandmc303-sd/Brushtap.wav", + "RolandMC303/rolandmc303-sd/Clipsd1.wav", + "RolandMC303/rolandmc303-sd/Clipsd2.wav", + "RolandMC303/rolandmc303-sd/Drysd1.wav", + "RolandMC303/rolandmc303-sd/Drysd2.wav", + "RolandMC303/rolandmc303-sd/Elecsd1.wav", + "RolandMC303/rolandmc303-sd/Funkysd1.wav", + "RolandMC303/rolandmc303-sd/Funkysd2.wav", + "RolandMC303/rolandmc303-sd/Hardsd1.wav", + "RolandMC303/rolandmc303-sd/Hypersd1.wav", + "RolandMC303/rolandmc303-sd/Hypersd2.wav", + "RolandMC303/rolandmc303-sd/Jnglesd1.wav", + "RolandMC303/rolandmc303-sd/Jnglesd2.wav", + "RolandMC303/rolandmc303-sd/Jnglesd3.wav", + "RolandMC303/rolandmc303-sd/Jnglesd4.wav", + "RolandMC303/rolandmc303-sd/Midbambo.wav", + "RolandMC303/rolandmc303-sd/Rapsd.wav", + "RolandMC303/rolandmc303-sd/Tambsd1.wav", + "RolandMC303/rolandmc303-sd/Tightsd.wav", + "RolandMC303/rolandmc303-sd/Tinysd.wav" + ], + "RolandMC303_sh": [ + "RolandMC303/rolandmc303-sh/626shake.wav", + "RolandMC303/rolandmc303-sh/Cabasado.wav", + "RolandMC303/rolandmc303-sh/Cabasaup.wav", + "RolandMC303/rolandmc303-sh/Maracas.wav", + "RolandMC303/rolandmc303-sh/Realph1.wav", + "RolandMC303/rolandmc303-sh/Realph2.wav", + "RolandMC303/rolandmc303-sh/Shaker.wav" + ], + "RolandMC303_tb": [ + "RolandMC303/rolandmc303-tb/78tamb.wav", + "RolandMC303/rolandmc303-tb/Hittamb.wav", + "RolandMC303/rolandmc303-tb/Jngletam.wav", + "RolandMC303/rolandmc303-tb/Shaketam.wav", + "RolandMC303/rolandmc303-tb/Tambouri.wav" + ], + "RolandMT32_bd": ["RolandMT32/rolandmt32-bd/Bassdrum.wav"], + "RolandMT32_cb": ["RolandMT32/rolandmt32-cb/Cowbell.wav"], + "RolandMT32_cp": ["RolandMT32/rolandmt32-cp/Clap.wav"], + "RolandMT32_cr": ["RolandMT32/rolandmt32-cr/Crash.wav"], + "RolandMT32_hh": ["RolandMT32/rolandmt32-hh/Hat Closed.wav"], + "RolandMT32_ht": ["RolandMT32/rolandmt32-ht/Tom H.wav"], + "RolandMT32_lt": ["RolandMT32/rolandmt32-lt/Tom L.wav"], + "RolandMT32_mt": ["RolandMT32/rolandmt32-mt/Tom M.wav"], + "RolandMT32_oh": ["RolandMT32/rolandmt32-oh/Hat Open-01.wav", "RolandMT32/rolandmt32-oh/Hat Open-02.wav"], + "RolandMT32_perc": [ + "RolandMT32/rolandmt32-perc/Agogo H.wav", + "RolandMT32/rolandmt32-perc/Agogo L.wav", + "RolandMT32/rolandmt32-perc/Bongo H.wav", + "RolandMT32/rolandmt32-perc/Bongo L.wav", + "RolandMT32/rolandmt32-perc/Claves.wav", + "RolandMT32/rolandmt32-perc/Conga H.wav", + "RolandMT32/rolandmt32-perc/Conga L.wav", + "RolandMT32/rolandmt32-perc/Conga Muted H.wav", + "RolandMT32/rolandmt32-perc/Quijada.wav", + "RolandMT32/rolandmt32-perc/Timbale H.wav", + "RolandMT32/rolandmt32-perc/Timbale L.wav", + "RolandMT32/rolandmt32-perc/Whistle Short.wav", + "RolandMT32/rolandmt32-perc/Whistle.wav" + ], + "RolandMT32_rd": ["RolandMT32/rolandmt32-rd/Ride.wav"], + "RolandMT32_rim": ["RolandMT32/rolandmt32-rim/RimShot.wav"], + "RolandMT32_sd": ["RolandMT32/rolandmt32-sd/Snaredrum-01.wav", "RolandMT32/rolandmt32-sd/Snaredrum-02.wav"], + "RolandMT32_sh": ["RolandMT32/rolandmt32-sh/Cabasa.wav", "RolandMT32/rolandmt32-sh/Maracas.wav"], + "RolandMT32_tb": ["RolandMT32/rolandmt32-tb/Tambourine.wav"], + "RolandR8_bd": [ + "RolandR8/rolandr8-bd/Bassdrum-01.wav", + "RolandR8/rolandr8-bd/Bassdrum-02.wav", + "RolandR8/rolandr8-bd/Bassdrum-03.wav", + "RolandR8/rolandr8-bd/Bassdrum-04.wav", + "RolandR8/rolandr8-bd/Bassdrum-05.wav", + "RolandR8/rolandr8-bd/Bassdrum-06.wav", + "RolandR8/rolandr8-bd/Bassdrum-07.wav" + ], + "RolandR8_cb": ["RolandR8/rolandr8-cb/Cowbell.wav"], + "RolandR8_cp": ["RolandR8/rolandr8-cp/Clap.wav"], + "RolandR8_cr": ["RolandR8/rolandr8-cr/Crash.wav"], + "RolandR8_hh": ["RolandR8/rolandr8-hh/Hat Closed.wav", "RolandR8/rolandr8-hh/Hat Pedal.wav"], + "RolandR8_ht": [ + "RolandR8/rolandr8-ht/Tom H-01.wav", + "RolandR8/rolandr8-ht/Tom H-02.wav", + "RolandR8/rolandr8-ht/Tom H-03.wav", + "RolandR8/rolandr8-ht/Tom H-04.wav" + ], + "RolandR8_lt": [ + "RolandR8/rolandr8-lt/Tom L-01.wav", + "RolandR8/rolandr8-lt/Tom L-02.wav", + "RolandR8/rolandr8-lt/Tom L-03.wav", + "RolandR8/rolandr8-lt/Tom L-04.wav" + ], + "RolandR8_mt": [ + "RolandR8/rolandr8-mt/Tom M-01.wav", + "RolandR8/rolandr8-mt/Tom M-02.wav", + "RolandR8/rolandr8-mt/Tom M-03.wav", + "RolandR8/rolandr8-mt/Tom M-04.wav" + ], + "RolandR8_oh": ["RolandR8/rolandr8-oh/Hat Open.wav"], + "RolandR8_perc": [ + "RolandR8/rolandr8-perc/Bell-01.wav", + "RolandR8/rolandr8-perc/Bell-02.wav", + "RolandR8/rolandr8-perc/Bongo H.wav", + "RolandR8/rolandr8-perc/Bongo L.wav", + "RolandR8/rolandr8-perc/Conga.wav", + "RolandR8/rolandr8-perc/Metal.wav", + "RolandR8/rolandr8-perc/Whistle.wav", + "RolandR8/rolandr8-perc/Wood Block.wav" + ], + "RolandR8_rd": ["RolandR8/rolandr8-rd/Ride-01.wav", "RolandR8/rolandr8-rd/Ride-02.wav"], + "RolandR8_rim": ["RolandR8/rolandr8-rim/Rimshot1.wav", "RolandR8/rolandr8-rim/Rimshot2.wav"], + "RolandR8_sd": [ + "RolandR8/rolandr8-sd/Snaredrum-01.wav", + "RolandR8/rolandr8-sd/Snaredrum-02.wav", + "RolandR8/rolandr8-sd/Snaredrum-03.wav", + "RolandR8/rolandr8-sd/Snaredrum-04.wav", + "RolandR8/rolandr8-sd/Snaredrum-05.wav", + "RolandR8/rolandr8-sd/Snaredrum-06.wav", + "RolandR8/rolandr8-sd/Snaredrum-07.wav", + "RolandR8/rolandr8-sd/Snaredrum-08.wav", + "RolandR8/rolandr8-sd/Snaredrum-09.wav", + "RolandR8/rolandr8-sd/Snaredrum-10.wav", + "RolandR8/rolandr8-sd/Snaredrum-11.wav", + "RolandR8/rolandr8-sd/Snaredrum-12.wav" + ], + "RolandR8_sh": ["RolandR8/rolandr8-sh/Cabasa1.wav", "RolandR8/rolandr8-sh/Cabasa2.wav"], + "RolandR8_tb": ["RolandR8/rolandr8-tb/Tambourine.wav"], + "RolandS50_bd": [ + "RolandS50/rolands50-bd/Bassdrum-01.wav", + "RolandS50/rolands50-bd/Bassdrum-02.wav", + "RolandS50/rolands50-bd/Bassdrum-03.wav", + "RolandS50/rolands50-bd/Bassdrum-04.wav" + ], + "RolandS50_cb": ["RolandS50/rolands50-cb/Cowbell.wav"], + "RolandS50_cp": ["RolandS50/rolands50-cp/Clap.wav"], + "RolandS50_cr": ["RolandS50/rolands50-cr/China.wav", "RolandS50/rolands50-cr/Crash.wav"], + "RolandS50_ht": ["RolandS50/rolands50-ht/Tom-01.wav"], + "RolandS50_lt": ["RolandS50/rolands50-lt/Tom-03.wav", "RolandS50/rolands50-lt/Tom-04.wav"], + "RolandS50_misc": [ + "RolandS50/rolands50-misc/Cuica-01.wav", + "RolandS50/rolands50-misc/Cuica-02.wav", + "RolandS50/rolands50-misc/Cuical-01.wav", + "RolandS50/rolands50-misc/Cuical-02.wav", + "RolandS50/rolands50-misc/Gong.wav", + "RolandS50/rolands50-misc/Tria-2.wav" + ], + "RolandS50_mt": ["RolandS50/rolands50-mt/Tom-02.wav"], + "RolandS50_oh": ["RolandS50/rolands50-oh/Hihat.wav"], + "RolandS50_perc": [ + "RolandS50/rolands50-perc/Agogo-01.wav", + "RolandS50/rolands50-perc/Agogo-02.wav", + "RolandS50/rolands50-perc/Bongo.wav", + "RolandS50/rolands50-perc/Claves-01.wav", + "RolandS50/rolands50-perc/Claves-02.wav", + "RolandS50/rolands50-perc/Conga-01.wav", + "RolandS50/rolands50-perc/Conga-02.wav", + "RolandS50/rolands50-perc/Conga-03.wav", + "RolandS50/rolands50-perc/Qijada.wav", + "RolandS50/rolands50-perc/Timbale H.wav", + "RolandS50/rolands50-perc/Timbale L.wav", + "RolandS50/rolands50-perc/Tria-1.wav", + "RolandS50/rolands50-perc/Wblk.wav", + "RolandS50/rolands50-perc/Whstl.wav" + ], + "RolandS50_rd": ["RolandS50/rolands50-rd/Ride.wav"], + "RolandS50_sd": [ + "RolandS50/rolands50-sd/Snaredrum-01.wav", + "RolandS50/rolands50-sd/Snaredrum-02.wav", + "RolandS50/rolands50-sd/Snaredrum-03.wav" + ], + "RolandS50_sh": [ + "RolandS50/rolands50-sh/Cabasa-01.wav", + "RolandS50/rolands50-sh/Cabasa-02.wav", + "RolandS50/rolands50-sh/Maracas-01.wav", + "RolandS50/rolands50-sh/Maracas-02.wav" + ], + "RolandS50_tb": ["RolandS50/rolands50-tb/Tambourine-01.wav", "RolandS50/rolands50-tb/Tambourine-02.wav"], + "RolandSH09_bd": [ + "RolandSH09/rolandsh09-bd/Bassdrum-01.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-02.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-03.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-04.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-05.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-06.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-07.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-08.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-09.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-10.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-11.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-12.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-13.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-14.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-15.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-16.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-17.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-18.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-19.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-20.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-21.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-22.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-23.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-24.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-25.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-26.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-27.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-28.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-29.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-30.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-31.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-32.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-33.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-34.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-35.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-36.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-37.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-38.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-39.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-40.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-41.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-42.wav", + "RolandSH09/rolandsh09-bd/Bassdrum-43.wav" + ], + "RolandSystem100_bd": [ + "RolandSystem100/rolandsystem100-bd/Bassdrum-01.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-02.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-03.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-04.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-05.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-06.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-07.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-08.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-09.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-10.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-11.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-12.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-13.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-14.wav", + "RolandSystem100/rolandsystem100-bd/Bassdrum-15.wav" + ], + "RolandSystem100_hh": [ + "RolandSystem100/rolandsystem100-hh/Hat Closed-01.wav", + "RolandSystem100/rolandsystem100-hh/Hat Closed-02.wav" + ], + "RolandSystem100_misc": [ + "RolandSystem100/rolandsystem100-misc/Tock.wav", + "RolandSystem100/rolandsystem100-misc/Triangle.wav" + ], + "RolandSystem100_oh": [ + "RolandSystem100/rolandsystem100-oh/Hat Open-01.wav", + "RolandSystem100/rolandsystem100-oh/Hat Open-02.wav", + "RolandSystem100/rolandsystem100-oh/Hat Open-03.wav" + ], + "RolandSystem100_perc": [ + "RolandSystem100/rolandsystem100-perc/Bell.wav", + "RolandSystem100/rolandsystem100-perc/Click-01.wav", + "RolandSystem100/rolandsystem100-perc/Click-02.wav", + "RolandSystem100/rolandsystem100-perc/Click-03.wav", + "RolandSystem100/rolandsystem100-perc/Click-04.wav", + "RolandSystem100/rolandsystem100-perc/Click-05.wav", + "RolandSystem100/rolandsystem100-perc/Click-06.wav", + "RolandSystem100/rolandsystem100-perc/Pling-01.wav", + "RolandSystem100/rolandsystem100-perc/Pling-02.wav", + "RolandSystem100/rolandsystem100-perc/Pling-03.wav", + "RolandSystem100/rolandsystem100-perc/Plopp-01.wav", + "RolandSystem100/rolandsystem100-perc/Plopp-02.wav", + "RolandSystem100/rolandsystem100-perc/Plopp-03.wav", + "RolandSystem100/rolandsystem100-perc/Plopp-04.wav", + "RolandSystem100/rolandsystem100-perc/Plopp-05.wav", + "RolandSystem100/rolandsystem100-perc/Plopp-06.wav", + "RolandSystem100/rolandsystem100-perc/Plopp-07.wav", + "RolandSystem100/rolandsystem100-perc/Plopp-08.wav", + "RolandSystem100/rolandsystem100-perc/Plopp-09.wav" + ], + "RolandSystem100_sd": [ + "RolandSystem100/rolandsystem100-sd/Snaredrum-01.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-02.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-03.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-04.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-05.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-06.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-07.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-08.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-09.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-10.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-11.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-12.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-14.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-15.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-16.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-17.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-18.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-19.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-20.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-21.wav", + "RolandSystem100/rolandsystem100-sd/Snaredrum-22.wav" + ], + "RolandTR505_bd": ["RolandTR505/rolandtr505-bd/Bassdrum.wav"], + "RolandTR505_cb": ["RolandTR505/rolandtr505-cb/Cowbell H.wav", "RolandTR505/rolandtr505-cb/Cowbell L.wav"], + "RolandTR505_cp": ["RolandTR505/rolandtr505-cp/Clap.wav"], + "RolandTR505_cr": ["RolandTR505/rolandtr505-cr/Crash.wav"], + "RolandTR505_hh": ["RolandTR505/rolandtr505-hh/Hat Closed.wav"], + "RolandTR505_ht": ["RolandTR505/rolandtr505-ht/Tom H.wav"], + "RolandTR505_lt": ["RolandTR505/rolandtr505-lt/Tom L.wav"], + "RolandTR505_mt": ["RolandTR505/rolandtr505-mt/Tom M.wav"], + "RolandTR505_oh": ["RolandTR505/rolandtr505-oh/Hat Open.wav"], + "RolandTR505_perc": [ + "RolandTR505/rolandtr505-perc/Conga H.wav", + "RolandTR505/rolandtr505-perc/Conga L.wav", + "RolandTR505/rolandtr505-perc/Timbale.wav" + ], + "RolandTR505_rd": ["RolandTR505/rolandtr505-rd/Ride.wav"], + "RolandTR505_rim": ["RolandTR505/rolandtr505-rim/Rimshot.wav"], + "RolandTR505_sd": ["RolandTR505/rolandtr505-sd/Snaredrum.wav"], + "RolandTR606_bd": ["RolandTR606/rolandtr606-bd/Bassdrum.wav"], + "RolandTR606_cr": ["RolandTR606/rolandtr606-cr/Cymbal.wav"], + "RolandTR606_hh": ["RolandTR606/rolandtr606-hh/Hat Closed.wav"], + "RolandTR606_ht": ["RolandTR606/rolandtr606-ht/Tom H.wav"], + "RolandTR606_lt": ["RolandTR606/rolandtr606-lt/Tom L.wav"], + "RolandTR606_oh": ["RolandTR606/rolandtr606-oh/Hat Open.wav"], + "RolandTR606_sd": ["RolandTR606/rolandtr606-sd/Snaredrum.wav"], + "RolandTR626_bd": ["RolandTR626/rolandtr626-bd/Bassdrum-01.wav", "RolandTR626/rolandtr626-bd/Bassdrum-02.wav"], + "RolandTR626_cb": ["RolandTR626/rolandtr626-cb/Cowbell.wav"], + "RolandTR626_cp": ["RolandTR626/rolandtr626-cp/Clap.wav"], + "RolandTR626_cr": ["RolandTR626/rolandtr626-cr/Crash.wav", "RolandTR626/rolandtr626-cr/zChina.wav"], + "RolandTR626_hh": ["RolandTR626/rolandtr626-hh/Hat Closed.wav"], + "RolandTR626_ht": ["RolandTR626/rolandtr626-ht/Tom H-01.wav", "RolandTR626/rolandtr626-ht/Tom H-02.wav"], + "RolandTR626_lt": ["RolandTR626/rolandtr626-lt/Tom L-01.wav", "RolandTR626/rolandtr626-lt/Tom L-02.wav"], + "RolandTR626_mt": ["RolandTR626/rolandtr626-mt/Tom M-01.wav", "RolandTR626/rolandtr626-mt/Tom M-02.wav"], + "RolandTR626_oh": ["RolandTR626/rolandtr626-oh/Hat Open.wav"], + "RolandTR626_perc": [ + "RolandTR626/rolandtr626-perc/Agogo H.wav", + "RolandTR626/rolandtr626-perc/Agogo L.wav", + "RolandTR626/rolandtr626-perc/Clave.wav", + "RolandTR626/rolandtr626-perc/Conga H.wav", + "RolandTR626/rolandtr626-perc/Conga L.wav", + "RolandTR626/rolandtr626-perc/Conga M.wav", + "RolandTR626/rolandtr626-perc/Timbale H.wav", + "RolandTR626/rolandtr626-perc/Timbale L.wav" + ], + "RolandTR626_rd": ["RolandTR626/rolandtr626-rd/Ride-01.wav", "RolandTR626/rolandtr626-rd/Ride-02.wav"], + "RolandTR626_rim": ["RolandTR626/rolandtr626-rim/Rimshot.wav"], + "RolandTR626_sd": [ + "RolandTR626/rolandtr626-sd/Snaredrum-01.wav", + "RolandTR626/rolandtr626-sd/Snaredrum-02.wav", + "RolandTR626/rolandtr626-sd/Snaredrum-03.wav" + ], + "RolandTR626_sh": ["RolandTR626/rolandtr626-sh/Shaker.wav"], + "RolandTR626_tb": ["RolandTR626/rolandtr626-tb/Tambourine.wav"], + "RolandTR707_bd": ["RolandTR707/rolandtr707-bd/Bassdrum-01.wav", "RolandTR707/rolandtr707-bd/Bassdrum-02.wav"], + "RolandTR707_cb": ["RolandTR707/rolandtr707-cb/Cowbell.wav"], + "RolandTR707_cp": ["RolandTR707/rolandtr707-cp/Clap.wav"], + "RolandTR707_cr": ["RolandTR707/rolandtr707-cr/Crash.wav"], + "RolandTR707_hh": ["RolandTR707/rolandtr707-hh/Hat Closed.wav"], + "RolandTR707_ht": ["RolandTR707/rolandtr707-ht/Tom H.wav"], + "RolandTR707_lt": ["RolandTR707/rolandtr707-lt/Tom L.wav"], + "RolandTR707_mt": ["RolandTR707/rolandtr707-mt/Tom M.wav"], + "RolandTR707_oh": ["RolandTR707/rolandtr707-oh/Hat Open.wav"], + "RolandTR707_rim": ["RolandTR707/rolandtr707-rim/Rimshot.wav"], + "RolandTR707_sd": ["RolandTR707/rolandtr707-sd/Snaredrum-01.wav", "RolandTR707/rolandtr707-sd/Snaredrum-02.wav"], + "RolandTR707_tb": ["RolandTR707/rolandtr707-tb/Tambourine.wav"], + "RolandTR727_perc": [ + "RolandTR727/rolandtr727-perc/Agogo H.wav", + "RolandTR727/rolandtr727-perc/Agogo L.wav", + "RolandTR727/rolandtr727-perc/Bongo H.wav", + "RolandTR727/rolandtr727-perc/Bongo L.wav", + "RolandTR727/rolandtr727-perc/Conga L.wav", + "RolandTR727/rolandtr727-perc/Quijada.wav", + "RolandTR727/rolandtr727-perc/Star-chimes.wav", + "RolandTR727/rolandtr727-perc/Timbale H.wav", + "RolandTR727/rolandtr727-perc/Timbale L.wav", + "RolandTR727/rolandtr727-perc/Whistle.wav" + ], + "RolandTR727_sh": ["RolandTR727/rolandtr727-sh/Cabasa.wav", "RolandTR727/rolandtr727-sh/Maracas.wav"], + "RolandTR808_bd": [ + "RolandTR808/rolandtr808-bd/BD0000.WAV", + "RolandTR808/rolandtr808-bd/BD0010.WAV", + "RolandTR808/rolandtr808-bd/BD0025.WAV", + "RolandTR808/rolandtr808-bd/BD0050.WAV", + "RolandTR808/rolandtr808-bd/BD0075.WAV", + "RolandTR808/rolandtr808-bd/BD1000.WAV", + "RolandTR808/rolandtr808-bd/BD1010.WAV", + "RolandTR808/rolandtr808-bd/BD1025.WAV", + "RolandTR808/rolandtr808-bd/BD1050.WAV", + "RolandTR808/rolandtr808-bd/BD1075.WAV", + "RolandTR808/rolandtr808-bd/BD2500.WAV", + "RolandTR808/rolandtr808-bd/BD2510.WAV", + "RolandTR808/rolandtr808-bd/BD2525.WAV", + "RolandTR808/rolandtr808-bd/BD2550.WAV", + "RolandTR808/rolandtr808-bd/BD2575.WAV", + "RolandTR808/rolandtr808-bd/BD5000.WAV", + "RolandTR808/rolandtr808-bd/BD5010.WAV", + "RolandTR808/rolandtr808-bd/BD5025.WAV", + "RolandTR808/rolandtr808-bd/BD5050.WAV", + "RolandTR808/rolandtr808-bd/BD5075.WAV", + "RolandTR808/rolandtr808-bd/BD7500.WAV", + "RolandTR808/rolandtr808-bd/BD7510.WAV", + "RolandTR808/rolandtr808-bd/BD7525.WAV", + "RolandTR808/rolandtr808-bd/BD7550.WAV", + "RolandTR808/rolandtr808-bd/BD7575.WAV" + ], + "RolandTR808_cb": ["RolandTR808/rolandtr808-cb/CB.WAV", "RolandTR808/rolandtr808-cb/Cowbell.wav"], + "RolandTR808_cp": [ + "RolandTR808/rolandtr808-cp/cp0.wav", + "RolandTR808/rolandtr808-cp/cp1.wav", + "RolandTR808/rolandtr808-cp/cp2.wav", + "RolandTR808/rolandtr808-cp/cp3.wav", + "RolandTR808/rolandtr808-cp/cp4.WAV" + ], + "RolandTR808_cr": [ + "RolandTR808/rolandtr808-cr/CY0000.WAV", + "RolandTR808/rolandtr808-cr/CY0010.WAV", + "RolandTR808/rolandtr808-cr/CY0025.WAV", + "RolandTR808/rolandtr808-cr/CY0050.WAV", + "RolandTR808/rolandtr808-cr/CY0075.WAV", + "RolandTR808/rolandtr808-cr/CY1000.WAV", + "RolandTR808/rolandtr808-cr/CY1010.WAV", + "RolandTR808/rolandtr808-cr/CY1025.WAV", + "RolandTR808/rolandtr808-cr/CY1050.WAV", + "RolandTR808/rolandtr808-cr/CY1075.WAV", + "RolandTR808/rolandtr808-cr/CY2500.WAV", + "RolandTR808/rolandtr808-cr/CY2510.WAV", + "RolandTR808/rolandtr808-cr/CY2525.WAV", + "RolandTR808/rolandtr808-cr/CY2550.WAV", + "RolandTR808/rolandtr808-cr/CY2575.WAV", + "RolandTR808/rolandtr808-cr/CY5000.WAV", + "RolandTR808/rolandtr808-cr/CY5010.WAV", + "RolandTR808/rolandtr808-cr/CY5025.WAV", + "RolandTR808/rolandtr808-cr/CY5050.WAV", + "RolandTR808/rolandtr808-cr/CY5075.WAV", + "RolandTR808/rolandtr808-cr/CY7500.WAV", + "RolandTR808/rolandtr808-cr/CY7510.WAV", + "RolandTR808/rolandtr808-cr/CY7525.WAV", + "RolandTR808/rolandtr808-cr/CY7550.WAV", + "RolandTR808/rolandtr808-cr/CY7575.WAV" + ], + "RolandTR808_hh": ["RolandTR808/rolandtr808-hh/CH.WAV"], + "RolandTR808_ht": [ + "RolandTR808/rolandtr808-ht/HT00.WAV", + "RolandTR808/rolandtr808-ht/HT10.WAV", + "RolandTR808/rolandtr808-ht/HT25.WAV", + "RolandTR808/rolandtr808-ht/HT50.WAV", + "RolandTR808/rolandtr808-ht/HT75.WAV" + ], + "RolandTR808_lt": [ + "RolandTR808/rolandtr808-lt/LT00.WAV", + "RolandTR808/rolandtr808-lt/LT10.WAV", + "RolandTR808/rolandtr808-lt/LT25.WAV", + "RolandTR808/rolandtr808-lt/LT50.WAV", + "RolandTR808/rolandtr808-lt/LT75.WAV" + ], + "RolandTR808_mt": [ + "RolandTR808/rolandtr808-mt/MT00.WAV", + "RolandTR808/rolandtr808-mt/MT10.WAV", + "RolandTR808/rolandtr808-mt/MT25.WAV", + "RolandTR808/rolandtr808-mt/MT50.WAV", + "RolandTR808/rolandtr808-mt/MT75.WAV" + ], + "RolandTR808_oh": [ + "RolandTR808/rolandtr808-oh/OH00.WAV", + "RolandTR808/rolandtr808-oh/OH10.WAV", + "RolandTR808/rolandtr808-oh/OH25.WAV", + "RolandTR808/rolandtr808-oh/OH50.WAV", + "RolandTR808/rolandtr808-oh/OH75.WAV" + ], + "RolandTR808_perc": [ + "RolandTR808/rolandtr808-perc/CL.WAV", + "RolandTR808/rolandtr808-perc/HC00.WAV", + "RolandTR808/rolandtr808-perc/HC10.WAV", + "RolandTR808/rolandtr808-perc/HC25.WAV", + "RolandTR808/rolandtr808-perc/HC50.WAV", + "RolandTR808/rolandtr808-perc/HC75.WAV", + "RolandTR808/rolandtr808-perc/LC00.WAV", + "RolandTR808/rolandtr808-perc/LC10.WAV", + "RolandTR808/rolandtr808-perc/LC25.WAV", + "RolandTR808/rolandtr808-perc/LC50.WAV", + "RolandTR808/rolandtr808-perc/LC75.WAV", + "RolandTR808/rolandtr808-perc/MC00.WAV", + "RolandTR808/rolandtr808-perc/MC10.WAV", + "RolandTR808/rolandtr808-perc/MC25.WAV", + "RolandTR808/rolandtr808-perc/MC50.WAV", + "RolandTR808/rolandtr808-perc/MC75.WAV" + ], + "RolandTR808_rim": ["RolandTR808/rolandtr808-rim/RS.WAV"], + "RolandTR808_sd": [ + "RolandTR808/rolandtr808-sd/SD0000.WAV", + "RolandTR808/rolandtr808-sd/SD0010.WAV", + "RolandTR808/rolandtr808-sd/SD0025.WAV", + "RolandTR808/rolandtr808-sd/SD0050.WAV", + "RolandTR808/rolandtr808-sd/SD0075.WAV", + "RolandTR808/rolandtr808-sd/SD1000.WAV", + "RolandTR808/rolandtr808-sd/SD1010.WAV", + "RolandTR808/rolandtr808-sd/SD1025.WAV", + "RolandTR808/rolandtr808-sd/SD1050.WAV", + "RolandTR808/rolandtr808-sd/SD1075.WAV", + "RolandTR808/rolandtr808-sd/SD2500.WAV", + "RolandTR808/rolandtr808-sd/SD2510.WAV", + "RolandTR808/rolandtr808-sd/SD2525.WAV", + "RolandTR808/rolandtr808-sd/SD2550.WAV", + "RolandTR808/rolandtr808-sd/SD2575.WAV", + "RolandTR808/rolandtr808-sd/SD5000.WAV", + "RolandTR808/rolandtr808-sd/SD5010.WAV", + "RolandTR808/rolandtr808-sd/SD5025.WAV", + "RolandTR808/rolandtr808-sd/SD5050.WAV", + "RolandTR808/rolandtr808-sd/SD5075.WAV", + "RolandTR808/rolandtr808-sd/SD7500.WAV", + "RolandTR808/rolandtr808-sd/SD7510.WAV", + "RolandTR808/rolandtr808-sd/SD7525.WAV", + "RolandTR808/rolandtr808-sd/SD7550.WAV", + "RolandTR808/rolandtr808-sd/SD7575.WAV" + ], + "RolandTR808_sh": ["RolandTR808/rolandtr808-sh/Cabasa.wav", "RolandTR808/rolandtr808-sh/MA.WAV"], + "RolandTR909_bd": [ + "RolandTR909/rolandtr909-bd/Bassdrum-01.wav", + "RolandTR909/rolandtr909-bd/Bassdrum-02.wav", + "RolandTR909/rolandtr909-bd/Bassdrum-03.wav", + "RolandTR909/rolandtr909-bd/Bassdrum-04.wav" + ], + "RolandTR909_cp": [ + "RolandTR909/rolandtr909-cp/Clap.wav", + "RolandTR909/rolandtr909-cp/cp01.wav", + "RolandTR909/rolandtr909-cp/cp02.wav", + "RolandTR909/rolandtr909-cp/cp03.wav", + "RolandTR909/rolandtr909-cp/cp04.wav" + ], + "RolandTR909_cr": [ + "RolandTR909/rolandtr909-cr/Crash.wav", + "RolandTR909/rolandtr909-cr/cr01.wav", + "RolandTR909/rolandtr909-cr/cr02.wav", + "RolandTR909/rolandtr909-cr/cr03.wav", + "RolandTR909/rolandtr909-cr/cr04.wav" + ], + "RolandTR909_hh": [ + "RolandTR909/rolandtr909-hh/hh01.wav", + "RolandTR909/rolandtr909-hh/hh02.wav", + "RolandTR909/rolandtr909-hh/hh03.wav", + "RolandTR909/rolandtr909-hh/hh04.wav" + ], + "RolandTR909_ht": [ + "RolandTR909/rolandtr909-ht/Tom H.wav", + "RolandTR909/rolandtr909-ht/ht01.wav", + "RolandTR909/rolandtr909-ht/ht02.wav", + "RolandTR909/rolandtr909-ht/ht03.wav", + "RolandTR909/rolandtr909-ht/ht04.wav", + "RolandTR909/rolandtr909-ht/ht05.wav", + "RolandTR909/rolandtr909-ht/ht06.wav", + "RolandTR909/rolandtr909-ht/ht07.wav", + "RolandTR909/rolandtr909-ht/ht08.wav" + ], + "RolandTR909_lt": [ + "RolandTR909/rolandtr909-lt/Tom L.wav", + "RolandTR909/rolandtr909-lt/lt01.wav", + "RolandTR909/rolandtr909-lt/lt02.wav", + "RolandTR909/rolandtr909-lt/lt03.wav", + "RolandTR909/rolandtr909-lt/lt04.wav", + "RolandTR909/rolandtr909-lt/lt05.wav", + "RolandTR909/rolandtr909-lt/lt06.wav", + "RolandTR909/rolandtr909-lt/lt07.wav", + "RolandTR909/rolandtr909-lt/lt08.wav" + ], + "RolandTR909_mt": [ + "RolandTR909/rolandtr909-mt/Tom M.wav", + "RolandTR909/rolandtr909-mt/mt01.wav", + "RolandTR909/rolandtr909-mt/mt02.wav", + "RolandTR909/rolandtr909-mt/mt03.wav", + "RolandTR909/rolandtr909-mt/mt04.wav", + "RolandTR909/rolandtr909-mt/mt05.wav", + "RolandTR909/rolandtr909-mt/mt06.wav", + "RolandTR909/rolandtr909-mt/mt07.wav", + "RolandTR909/rolandtr909-mt/mt08.wav" + ], + "RolandTR909_oh": [ + "RolandTR909/rolandtr909-oh/Hat Open.wav", + "RolandTR909/rolandtr909-oh/oh01.wav", + "RolandTR909/rolandtr909-oh/oh02.wav", + "RolandTR909/rolandtr909-oh/oh03.wav", + "RolandTR909/rolandtr909-oh/oh04.wav" + ], + "RolandTR909_rd": [ + "RolandTR909/rolandtr909-rd/Ride.wav", + "RolandTR909/rolandtr909-rd/rd01.wav", + "RolandTR909/rolandtr909-rd/rd02.wav", + "RolandTR909/rolandtr909-rd/rd03.wav", + "RolandTR909/rolandtr909-rd/rd04.wav" + ], + "RolandTR909_rim": [ + "RolandTR909/rolandtr909-rim/Rimhot.wav", + "RolandTR909/rolandtr909-rim/rs01.wav", + "RolandTR909/rolandtr909-rim/rs02.wav" + ], + "RolandTR909_sd": [ + "RolandTR909/rolandtr909-sd/naredrum.wav", + "RolandTR909/rolandtr909-sd/sd01.wav", + "RolandTR909/rolandtr909-sd/sd02.wav", + "RolandTR909/rolandtr909-sd/sd03.wav", + "RolandTR909/rolandtr909-sd/sd04.wav", + "RolandTR909/rolandtr909-sd/sd05.wav", + "RolandTR909/rolandtr909-sd/sd06.wav", + "RolandTR909/rolandtr909-sd/sd07.wav", + "RolandTR909/rolandtr909-sd/sd08.wav", + "RolandTR909/rolandtr909-sd/sd09.wav", + "RolandTR909/rolandtr909-sd/sd10.wav", + "RolandTR909/rolandtr909-sd/sd11.wav", + "RolandTR909/rolandtr909-sd/sd12.wav", + "RolandTR909/rolandtr909-sd/sd13.wav", + "RolandTR909/rolandtr909-sd/sd14.wav", + "RolandTR909/rolandtr909-sd/sd15.wav" + ], + "SakataDPM48_bd": [ + "SakataDPM48/sakatadpm48-bd/Bassdrum-01.wav", + "SakataDPM48/sakatadpm48-bd/Bassdrum-02.wav", + "SakataDPM48/sakatadpm48-bd/Bassdrum-03.wav" + ], + "SakataDPM48_cp": ["SakataDPM48/sakatadpm48-cp/Clap.wav"], + "SakataDPM48_cr": ["SakataDPM48/sakatadpm48-cr/Crash.wav"], + "SakataDPM48_hh": ["SakataDPM48/sakatadpm48-hh/Hat Closed-01.wav", "SakataDPM48/sakatadpm48-hh/Hat Closed-02.wav"], + "SakataDPM48_ht": ["SakataDPM48/sakatadpm48-ht/Tom-01.wav"], + "SakataDPM48_lt": ["SakataDPM48/sakatadpm48-lt/Tom-03.wav", "SakataDPM48/sakatadpm48-lt/Tom-04.wav"], + "SakataDPM48_mt": ["SakataDPM48/sakatadpm48-mt/Tom-02.wav"], + "SakataDPM48_oh": ["SakataDPM48/sakatadpm48-oh/Hat Open.wav"], + "SakataDPM48_perc": ["SakataDPM48/sakatadpm48-perc/Agogo1.wav", "SakataDPM48/sakatadpm48-perc/Agogo2.wav"], + "SakataDPM48_rd": ["SakataDPM48/sakatadpm48-rd/Ride.wav"], + "SakataDPM48_rim": ["SakataDPM48/sakatadpm48-rim/Rim.wav"], + "SakataDPM48_sd": ["SakataDPM48/sakatadpm48-sd/Snaredrum-01.wav", "SakataDPM48/sakatadpm48-sd/Snaredrum-02.wav"], + "SakataDPM48_sh": ["SakataDPM48/sakatadpm48-sh/Cabasa-01.wav", "SakataDPM48/sakatadpm48-sh/Cabasa-02.wav"], + "SequentialCircuitsDrumtracks_bd": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-bd/Bassdrum.wav"], + "SequentialCircuitsDrumtracks_cb": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-cb/Cowbell.wav"], + "SequentialCircuitsDrumtracks_cp": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-cp/Clap.wav"], + "SequentialCircuitsDrumtracks_cr": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-cr/Crash.wav"], + "SequentialCircuitsDrumtracks_hh": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-hh/Hat Closed.wav"], + "SequentialCircuitsDrumtracks_ht": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-ht/Tom.wav"], + "SequentialCircuitsDrumtracks_oh": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-oh/Hat Open.wav"], + "SequentialCircuitsDrumtracks_rd": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-rd/Ride.wav"], + "SequentialCircuitsDrumtracks_rim": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-rim/Rim Shot.wav"], + "SequentialCircuitsDrumtracks_sd": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-sd/Snaredrum.wav"], + "SequentialCircuitsDrumtracks_sh": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-sh/Cabasa.wav"], + "SequentialCircuitsDrumtracks_tb": ["SequentialCircuitsDrumtracks/sequentialcircuitsdrumtracks-tb/Tambourine.wav"], + "SequentialCircuitsTom_bd": ["SequentialCircuitsTom/sequentialcircuitstom-bd/Bassdrum.wav"], + "SequentialCircuitsTom_cp": ["SequentialCircuitsTom/sequentialcircuitstom-cp/Clap.wav"], + "SequentialCircuitsTom_cr": ["SequentialCircuitsTom/sequentialcircuitstom-cr/Crash.wav"], + "SequentialCircuitsTom_hh": ["SequentialCircuitsTom/sequentialcircuitstom-hh/Hat Closed.wav"], + "SequentialCircuitsTom_ht": [ + "SequentialCircuitsTom/sequentialcircuitstom-ht/Tom-01.wav", + "SequentialCircuitsTom/sequentialcircuitstom-ht/Tom-02.wav" + ], + "SequentialCircuitsTom_oh": ["SequentialCircuitsTom/sequentialcircuitstom-oh/Hat Open.wav"], + "SequentialCircuitsTom_sd": ["SequentialCircuitsTom/sequentialcircuitstom-sd/Snaredrum.wav"], + "SergeModular_bd": ["SergeModular/sergemodular-bd/Bassdrum.wav"], + "SergeModular_misc": ["SergeModular/sergemodular-misc/Clink.wav"], + "SergeModular_perc": [ + "SergeModular/sergemodular-perc/Claves.wav", + "SergeModular/sergemodular-perc/Click-01.wav", + "SergeModular/sergemodular-perc/Click-02.wav", + "SergeModular/sergemodular-perc/Click-03.wav", + "SergeModular/sergemodular-perc/Click-04.wav" + ], + "SimmonsSDS400_ht": [ + "SimmonsSDS400/simmonssds400-ht/Tom-07.wav", + "SimmonsSDS400/simmonssds400-ht/Tom-09.wav", + "SimmonsSDS400/simmonssds400-ht/Tom-13.wav" + ], + "SimmonsSDS400_lt": [ + "SimmonsSDS400/simmonssds400-lt/Tom-01.wav", + "SimmonsSDS400/simmonssds400-lt/Tom-02.wav", + "SimmonsSDS400/simmonssds400-lt/Tom-03.wav", + "SimmonsSDS400/simmonssds400-lt/Tom-08.wav", + "SimmonsSDS400/simmonssds400-lt/Tom-14.wav", + "SimmonsSDS400/simmonssds400-lt/Tom-17.wav" + ], + "SimmonsSDS400_mt": [ + "SimmonsSDS400/simmonssds400-mt/Tom-04.wav", + "SimmonsSDS400/simmonssds400-mt/Tom-05.wav", + "SimmonsSDS400/simmonssds400-mt/Tom-06.wav", + "SimmonsSDS400/simmonssds400-mt/Tom-10.wav", + "SimmonsSDS400/simmonssds400-mt/Tom-11.wav", + "SimmonsSDS400/simmonssds400-mt/Tom-12.wav", + "SimmonsSDS400/simmonssds400-mt/Tom-15.wav", + "SimmonsSDS400/simmonssds400-mt/Tom-16.wav" + ], + "SimmonsSDS400_sd": [ + "SimmonsSDS400/simmonssds400-sd/Slap-1.wav", + "SimmonsSDS400/simmonssds400-sd/Slap-2.wav", + "SimmonsSDS400/simmonssds400-sd/Slap-3.wav" + ], + "SimmonsSDS5_bd": [ + "SimmonsSDS5/simmonssds5-bd/Bassdrum-01.wav", + "SimmonsSDS5/simmonssds5-bd/Bassdrum-02.wav", + "SimmonsSDS5/simmonssds5-bd/Bassdrum-03.wav", + "SimmonsSDS5/simmonssds5-bd/Bassdrum-04.wav", + "SimmonsSDS5/simmonssds5-bd/Bassdrum-05.wav", + "SimmonsSDS5/simmonssds5-bd/Bassdrum-06.wav", + "SimmonsSDS5/simmonssds5-bd/Bassdrum-07.wav", + "SimmonsSDS5/simmonssds5-bd/Bassdrum-08.wav", + "SimmonsSDS5/simmonssds5-bd/Bassdrum-09.wav", + "SimmonsSDS5/simmonssds5-bd/Bassdrum-10.wav", + "SimmonsSDS5/simmonssds5-bd/Bassdrum-11.wav", + "SimmonsSDS5/simmonssds5-bd/Bassdrum-12.wav" + ], + "SimmonsSDS5_hh": [ + "SimmonsSDS5/simmonssds5-hh/Hat Closed-01.wav", + "SimmonsSDS5/simmonssds5-hh/Hat Closed-02.wav", + "SimmonsSDS5/simmonssds5-hh/Hat Closed-03.wav", + "SimmonsSDS5/simmonssds5-hh/Hat Pedal-01.wav", + "SimmonsSDS5/simmonssds5-hh/Hat Pedal-02.wav" + ], + "SimmonsSDS5_ht": [ + "SimmonsSDS5/simmonssds5-ht/Tom-01.wav", + "SimmonsSDS5/simmonssds5-ht/Tom-04.wav", + "SimmonsSDS5/simmonssds5-ht/Tom-05.wav" + ], + "SimmonsSDS5_lt": [ + "SimmonsSDS5/simmonssds5-lt/Tom-07.wav", + "SimmonsSDS5/simmonssds5-lt/Tom-08.wav", + "SimmonsSDS5/simmonssds5-lt/Tom-10.wav", + "SimmonsSDS5/simmonssds5-lt/Tom-11.wav", + "SimmonsSDS5/simmonssds5-lt/Tom-13.wav", + "SimmonsSDS5/simmonssds5-lt/Tom-14.wav", + "SimmonsSDS5/simmonssds5-lt/Tom-15.wav", + "SimmonsSDS5/simmonssds5-lt/Tom-17.wav" + ], + "SimmonsSDS5_mt": [ + "SimmonsSDS5/simmonssds5-mt/Tom-02.wav", + "SimmonsSDS5/simmonssds5-mt/Tom-03.wav", + "SimmonsSDS5/simmonssds5-mt/Tom-06.wav", + "SimmonsSDS5/simmonssds5-mt/Tom-09.wav", + "SimmonsSDS5/simmonssds5-mt/Tom-12.wav", + "SimmonsSDS5/simmonssds5-mt/Tom-16.wav" + ], + "SimmonsSDS5_oh": ["SimmonsSDS5/simmonssds5-oh/Hat Open-01.wav", "SimmonsSDS5/simmonssds5-oh/Hat Open-02.wav"], + "SimmonsSDS5_rim": [ + "SimmonsSDS5/simmonssds5-rim/Rimshot-01.wav", + "SimmonsSDS5/simmonssds5-rim/Rimshot-02.wav", + "SimmonsSDS5/simmonssds5-rim/Rimshot-03.wav", + "SimmonsSDS5/simmonssds5-rim/Rimshot-04.wav", + "SimmonsSDS5/simmonssds5-rim/Rimshot-05.wav", + "SimmonsSDS5/simmonssds5-rim/Rimshot-06.wav", + "SimmonsSDS5/simmonssds5-rim/Rimshot-07.wav" + ], + "SimmonsSDS5_sd": [ + "SimmonsSDS5/simmonssds5-sd/Snaredrum-01.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-02.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-03.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-04.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-05.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-06.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-07.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-08.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-09.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-10.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-11.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-12.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-13.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-14.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-15.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-16.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-17.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-18.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-19.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-20.wav", + "SimmonsSDS5/simmonssds5-sd/Snaredrum-21.wav" + ], + "SoundmastersR88_bd": ["SoundmastersR88/soundmastersr88-bd/Bassdrum.wav"], + "SoundmastersR88_cr": ["SoundmastersR88/soundmastersr88-cr/Crash.wav"], + "SoundmastersR88_hh": ["SoundmastersR88/soundmastersr88-hh/Closed Hat.wav"], + "SoundmastersR88_oh": ["SoundmastersR88/soundmastersr88-oh/Open Hat.wav"], + "SoundmastersR88_sd": [ + "SoundmastersR88/soundmastersr88-sd/Snare-1.wav", + "SoundmastersR88/soundmastersr88-sd/Snare-2.wav" + ], + "UnivoxMicroRhythmer12_bd": ["UnivoxMicroRhythmer12/univoxmicrorhythmer12-bd/Bassdrum.wav"], + "UnivoxMicroRhythmer12_hh": ["UnivoxMicroRhythmer12/univoxmicrorhythmer12-hh/Closed Hat.wav"], + "UnivoxMicroRhythmer12_oh": ["UnivoxMicroRhythmer12/univoxmicrorhythmer12-oh/Open Hat.wav"], + "UnivoxMicroRhythmer12_sd": ["UnivoxMicroRhythmer12/univoxmicrorhythmer12-sd/Snaredrum.wav"], + "ViscoSpaceDrum_bd": [ + "ViscoSpaceDrum/viscospacedrum-bd/Bassdrum-01.wav", + "ViscoSpaceDrum/viscospacedrum-bd/Bassdrum-02.wav", + "ViscoSpaceDrum/viscospacedrum-bd/Bassdrum-03.wav", + "ViscoSpaceDrum/viscospacedrum-bd/Bassdrum-04.wav", + "ViscoSpaceDrum/viscospacedrum-bd/Bassdrum-05.wav", + "ViscoSpaceDrum/viscospacedrum-bd/Bassdrum-06.wav", + "ViscoSpaceDrum/viscospacedrum-bd/Bassdrum-07.wav", + "ViscoSpaceDrum/viscospacedrum-bd/Bassdrum-08.wav", + "ViscoSpaceDrum/viscospacedrum-bd/Bassdrum-09.wav", + "ViscoSpaceDrum/viscospacedrum-bd/Bassdrum-10.wav", + "ViscoSpaceDrum/viscospacedrum-bd/Bassdrum-11.wav" + ], + "ViscoSpaceDrum_cb": ["ViscoSpaceDrum/viscospacedrum-cb/Cowbell.wav"], + "ViscoSpaceDrum_hh": [ + "ViscoSpaceDrum/viscospacedrum-hh/Hat Closed-01.wav", + "ViscoSpaceDrum/viscospacedrum-hh/Hat Closed-02.wav", + "ViscoSpaceDrum/viscospacedrum-hh/Hat Closed-03.wav", + "ViscoSpaceDrum/viscospacedrum-hh/Hat Closed-04.wav", + "ViscoSpaceDrum/viscospacedrum-hh/Hat Pedal-01.wav", + "ViscoSpaceDrum/viscospacedrum-hh/zHat Closed Reversed.wav" + ], + "ViscoSpaceDrum_ht": [ + "ViscoSpaceDrum/viscospacedrum-ht/Synth Tom H.wav", + "ViscoSpaceDrum/viscospacedrum-ht/Tom-01.wav", + "ViscoSpaceDrum/viscospacedrum-ht/Tom-02.wav", + "ViscoSpaceDrum/viscospacedrum-ht/Tom-03.wav", + "ViscoSpaceDrum/viscospacedrum-ht/Tom-04.wav", + "ViscoSpaceDrum/viscospacedrum-ht/Tom-05.wav", + "ViscoSpaceDrum/viscospacedrum-ht/Tom7.wav" + ], + "ViscoSpaceDrum_lt": [ + "ViscoSpaceDrum/viscospacedrum-lt/Synth Tom L.wav", + "ViscoSpaceDrum/viscospacedrum-lt/Tom-06.wav" + ], + "ViscoSpaceDrum_misc": [ + "ViscoSpaceDrum/viscospacedrum-misc/Bleep-01.wav", + "ViscoSpaceDrum/viscospacedrum-misc/Bleep-02.wav" + ], + "ViscoSpaceDrum_mt": [ + "ViscoSpaceDrum/viscospacedrum-mt/Synth Tom M-01.wav", + "ViscoSpaceDrum/viscospacedrum-mt/Synth Tom M-02.wav" + ], + "ViscoSpaceDrum_oh": [ + "ViscoSpaceDrum/viscospacedrum-oh/Hat Open-01.wav", + "ViscoSpaceDrum/viscospacedrum-oh/Hat Open-02.wav", + "ViscoSpaceDrum/viscospacedrum-oh/Hat Open-03.wav" + ], + "ViscoSpaceDrum_perc": [ + "ViscoSpaceDrum/viscospacedrum-perc/Woodblock1.wav", + "ViscoSpaceDrum/viscospacedrum-perc/Woodblock2.wav" + ], + "ViscoSpaceDrum_rim": ["ViscoSpaceDrum/viscospacedrum-rim/Rimshot.wav"], + "ViscoSpaceDrum_sd": [ + "ViscoSpaceDrum/viscospacedrum-sd/Snaredrum-01.wav", + "ViscoSpaceDrum/viscospacedrum-sd/Snaredrum-02.wav", + "ViscoSpaceDrum/viscospacedrum-sd/Snaredrum-03.wav" + ], + "XdrumLM8953_bd": [ + "XdrumLM8953/xdrumlm8953-bd/Bassdrum-01.wav", + "XdrumLM8953/xdrumlm8953-bd/Bassdrum-02.wav", + "XdrumLM8953/xdrumlm8953-bd/zphil-drm.wav" + ], + "XdrumLM8953_cr": ["XdrumLM8953/xdrumlm8953-cr/Crash.wav"], + "XdrumLM8953_hh": ["XdrumLM8953/xdrumlm8953-hh/Hat Closed.wav", "XdrumLM8953/xdrumlm8953-hh/Hat Pedal.wav"], + "XdrumLM8953_ht": ["XdrumLM8953/xdrumlm8953-ht/Tom-01.wav", "XdrumLM8953/xdrumlm8953-ht/Tom-02.wav"], + "XdrumLM8953_lt": ["XdrumLM8953/xdrumlm8953-lt/Tom-05.wav", "XdrumLM8953/xdrumlm8953-lt/Tom-06.wav"], + "XdrumLM8953_mt": ["XdrumLM8953/xdrumlm8953-mt/Tom-03.wav", "XdrumLM8953/xdrumlm8953-mt/Tom-04.wav"], + "XdrumLM8953_oh": ["XdrumLM8953/xdrumlm8953-oh/Hat Open.wav"], + "XdrumLM8953_rd": ["XdrumLM8953/xdrumlm8953-rd/Ride.wav"], + "XdrumLM8953_rim": ["XdrumLM8953/xdrumlm8953-rim/Rim Shot-01.wav", "XdrumLM8953/xdrumlm8953-rim/Rim Shot-02.wav"], + "XdrumLM8953_sd": [ + "XdrumLM8953/xdrumlm8953-sd/Snaredrum-01.wav", + "XdrumLM8953/xdrumlm8953-sd/Snaredrum-02.wav", + "XdrumLM8953/xdrumlm8953-sd/Snaredrum-03.wav", + "XdrumLM8953/xdrumlm8953-sd/Snaredrum-04.wav", + "XdrumLM8953/xdrumlm8953-sd/zSnare Fill.wav" + ], + "XdrumLM8953_tb": ["XdrumLM8953/xdrumlm8953-tb/Tambourine.wav"], + "YamahaRM50_bd": [ + "YamahaRM50/yamaharm50-bd/BD-001.wav", + "YamahaRM50/yamaharm50-bd/BD-002.wav", + "YamahaRM50/yamaharm50-bd/BD-003.wav", + "YamahaRM50/yamaharm50-bd/BD-004.wav", + "YamahaRM50/yamaharm50-bd/BD-005.wav", + "YamahaRM50/yamaharm50-bd/BD-006.wav", + "YamahaRM50/yamaharm50-bd/BD-007.wav", + "YamahaRM50/yamaharm50-bd/BD-008.wav", + "YamahaRM50/yamaharm50-bd/BD-009.wav", + "YamahaRM50/yamaharm50-bd/BD-010.wav", + "YamahaRM50/yamaharm50-bd/BD-011..wav", + "YamahaRM50/yamaharm50-bd/BD-012.wav", + "YamahaRM50/yamaharm50-bd/BD-013.wav", + "YamahaRM50/yamaharm50-bd/BD-014.wav", + "YamahaRM50/yamaharm50-bd/BD-015.wav", + "YamahaRM50/yamaharm50-bd/BD-016.wav", + "YamahaRM50/yamaharm50-bd/BD-017.wav", + "YamahaRM50/yamaharm50-bd/BD-018.wav", + "YamahaRM50/yamaharm50-bd/BD-019.wav", + "YamahaRM50/yamaharm50-bd/BD-020.wav", + "YamahaRM50/yamaharm50-bd/BD-021.wav", + "YamahaRM50/yamaharm50-bd/BD-022.wav", + "YamahaRM50/yamaharm50-bd/BD-023.wav", + "YamahaRM50/yamaharm50-bd/BD-024.wav", + "YamahaRM50/yamaharm50-bd/BD-025.wav", + "YamahaRM50/yamaharm50-bd/BD-026.wav", + "YamahaRM50/yamaharm50-bd/BD-027.wav", + "YamahaRM50/yamaharm50-bd/BD-028.wav", + "YamahaRM50/yamaharm50-bd/BD-029.wav", + "YamahaRM50/yamaharm50-bd/BD-030.wav", + "YamahaRM50/yamaharm50-bd/BD-031.wav", + "YamahaRM50/yamaharm50-bd/BD-032.wav", + "YamahaRM50/yamaharm50-bd/BD-033.wav", + "YamahaRM50/yamaharm50-bd/BD-034.wav", + "YamahaRM50/yamaharm50-bd/BD-035.wav", + "YamahaRM50/yamaharm50-bd/BD-036.wav", + "YamahaRM50/yamaharm50-bd/BD-037.wav", + "YamahaRM50/yamaharm50-bd/BD-038.wav", + "YamahaRM50/yamaharm50-bd/BD-039.wav", + "YamahaRM50/yamaharm50-bd/BD-040.wav", + "YamahaRM50/yamaharm50-bd/BD-041.wav", + "YamahaRM50/yamaharm50-bd/BD-042.wav", + "YamahaRM50/yamaharm50-bd/BD-043.wav", + "YamahaRM50/yamaharm50-bd/BD-044.wav", + "YamahaRM50/yamaharm50-bd/BD-045.wav", + "YamahaRM50/yamaharm50-bd/BD-046.wav", + "YamahaRM50/yamaharm50-bd/BD-047.wav", + "YamahaRM50/yamaharm50-bd/BD-048.wav", + "YamahaRM50/yamaharm50-bd/BD-049.wav", + "YamahaRM50/yamaharm50-bd/BD-050.wav", + "YamahaRM50/yamaharm50-bd/BD-051.wav", + "YamahaRM50/yamaharm50-bd/BD-052.wav", + "YamahaRM50/yamaharm50-bd/BD-053.wav", + "YamahaRM50/yamaharm50-bd/BD-054.wav", + "YamahaRM50/yamaharm50-bd/BD-055.wav", + "YamahaRM50/yamaharm50-bd/BD-056.wav", + "YamahaRM50/yamaharm50-bd/BD-057.wav", + "YamahaRM50/yamaharm50-bd/BD-058.wav", + "YamahaRM50/yamaharm50-bd/BD-059.wav", + "YamahaRM50/yamaharm50-bd/BD-060.wav", + "YamahaRM50/yamaharm50-bd/BD-061.wav", + "YamahaRM50/yamaharm50-bd/BD-062.wav", + "YamahaRM50/yamaharm50-bd/BD-063.wav", + "YamahaRM50/yamaharm50-bd/BD-064.wav", + "YamahaRM50/yamaharm50-bd/BD-065.wav", + "YamahaRM50/yamaharm50-bd/BD-066.wav", + "YamahaRM50/yamaharm50-bd/BD-067.wav", + "YamahaRM50/yamaharm50-bd/BD-068.wav", + "YamahaRM50/yamaharm50-bd/BD-069.wav", + "YamahaRM50/yamaharm50-bd/BD-070.wav", + "YamahaRM50/yamaharm50-bd/BD-071.wav", + "YamahaRM50/yamaharm50-bd/BD-072.wav", + "YamahaRM50/yamaharm50-bd/BD-073.wav", + "YamahaRM50/yamaharm50-bd/BD-074.wav", + "YamahaRM50/yamaharm50-bd/BD-075.wav", + "YamahaRM50/yamaharm50-bd/BD-076.wav", + "YamahaRM50/yamaharm50-bd/BD-077.wav", + "YamahaRM50/yamaharm50-bd/BD-078.wav", + "YamahaRM50/yamaharm50-bd/BD-079.wav", + "YamahaRM50/yamaharm50-bd/BD-080.wav", + "YamahaRM50/yamaharm50-bd/BD-081.wav", + "YamahaRM50/yamaharm50-bd/BD-082.wav", + "YamahaRM50/yamaharm50-bd/BD-083.wav", + "YamahaRM50/yamaharm50-bd/BD-084.wav", + "YamahaRM50/yamaharm50-bd/BD-085.wav", + "YamahaRM50/yamaharm50-bd/BD-086.wav", + "YamahaRM50/yamaharm50-bd/BD-087.wav", + "YamahaRM50/yamaharm50-bd/BD-088.wav", + "YamahaRM50/yamaharm50-bd/BD-089.wav", + "YamahaRM50/yamaharm50-bd/BD-090.wav", + "YamahaRM50/yamaharm50-bd/BD-091.wav", + "YamahaRM50/yamaharm50-bd/BD-092.wav", + "YamahaRM50/yamaharm50-bd/BD-093.wav", + "YamahaRM50/yamaharm50-bd/BD-094.wav", + "YamahaRM50/yamaharm50-bd/BD-095.wav", + "YamahaRM50/yamaharm50-bd/BD-096.wav", + "YamahaRM50/yamaharm50-bd/BD-097.wav", + "YamahaRM50/yamaharm50-bd/BD-098.wav", + "YamahaRM50/yamaharm50-bd/BD-099.wav", + "YamahaRM50/yamaharm50-bd/BD-100.wav", + "YamahaRM50/yamaharm50-bd/BD-101.wav", + "YamahaRM50/yamaharm50-bd/BD-102.wav", + "YamahaRM50/yamaharm50-bd/BD-103.wav" + ], + "YamahaRM50_cb": [ + "YamahaRM50/yamaharm50-cb/FX_001.wav", + "YamahaRM50/yamaharm50-cb/FX_002.wav", + "YamahaRM50/yamaharm50-cb/FX_025.wav", + "YamahaRM50/yamaharm50-cb/FX_026.wav", + "YamahaRM50/yamaharm50-cb/FX_027.wav", + "YamahaRM50/yamaharm50-cb/FX_061.wav" + ], + "YamahaRM50_cp": ["YamahaRM50/yamaharm50-cp/FX_059.wav", "YamahaRM50/yamaharm50-cp/FX_060.wav"], + "YamahaRM50_cr": [ + "YamahaRM50/yamaharm50-cr/CYMBAL_043.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_044.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_045.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_046.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_047.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_048.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_049.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_050.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_051.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_052.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_053.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_054.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_055.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_056.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_057.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_058.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_059.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_060.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_061.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_063.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_064.wav", + "YamahaRM50/yamaharm50-cr/CYMBAL_065.wav" + ], + "YamahaRM50_hh": [ + "YamahaRM50/yamaharm50-hh/CYMBAL_001.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_002.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_005.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_006.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_008.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_009.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_010.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_013.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_014.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_016.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_017.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_019.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_020.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_021.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_024.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_025.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_026.wav", + "YamahaRM50/yamaharm50-hh/CYMBAL_028.wav" + ], + "YamahaRM50_ht": [ + "YamahaRM50/yamaharm50-ht/TOMS_001.wav", + "YamahaRM50/yamaharm50-ht/TOMS_005.wav", + "YamahaRM50/yamaharm50-ht/TOMS_009.wav", + "YamahaRM50/yamaharm50-ht/TOMS_010.wav", + "YamahaRM50/yamaharm50-ht/TOMS_013.wav", + "YamahaRM50/yamaharm50-ht/TOMS_017.wav", + "YamahaRM50/yamaharm50-ht/TOMS_021.wav", + "YamahaRM50/yamaharm50-ht/TOMS_022.wav", + "YamahaRM50/yamaharm50-ht/TOMS_025.wav", + "YamahaRM50/yamaharm50-ht/TOMS_026.wav", + "YamahaRM50/yamaharm50-ht/TOMS_029.wav", + "YamahaRM50/yamaharm50-ht/TOMS_035.wav", + "YamahaRM50/yamaharm50-ht/TOMS_039.wav", + "YamahaRM50/yamaharm50-ht/TOMS_043.wav", + "YamahaRM50/yamaharm50-ht/TOMS_047.wav", + "YamahaRM50/yamaharm50-ht/TOMS_049.wav", + "YamahaRM50/yamaharm50-ht/TOMS_052.wav", + "YamahaRM50/yamaharm50-ht/TOMS_056.wav", + "YamahaRM50/yamaharm50-ht/TOMS_064.wav", + "YamahaRM50/yamaharm50-ht/TOMS_068.wav", + "YamahaRM50/yamaharm50-ht/TOMS_072.wav", + "YamahaRM50/yamaharm50-ht/TOMS_077.wav", + "YamahaRM50/yamaharm50-ht/TOMS_085.wav", + "YamahaRM50/yamaharm50-ht/TOMS_089.wav", + "YamahaRM50/yamaharm50-ht/TOMS_101.wav" + ], + "YamahaRM50_lt": [ + "YamahaRM50/yamaharm50-lt/TOMS_004.wav", + "YamahaRM50/yamaharm50-lt/TOMS_008.wav", + "YamahaRM50/yamaharm50-lt/TOMS_012.wav", + "YamahaRM50/yamaharm50-lt/TOMS_015.wav", + "YamahaRM50/yamaharm50-lt/TOMS_016.wav", + "YamahaRM50/yamaharm50-lt/TOMS_019.wav", + "YamahaRM50/yamaharm50-lt/TOMS_020.wav", + "YamahaRM50/yamaharm50-lt/TOMS_024.wav", + "YamahaRM50/yamaharm50-lt/TOMS_028.wav", + "YamahaRM50/yamaharm50-lt/TOMS_032.wav", + "YamahaRM50/yamaharm50-lt/TOMS_033.wav", + "YamahaRM50/yamaharm50-lt/TOMS_034.wav", + "YamahaRM50/yamaharm50-lt/TOMS_038.wav", + "YamahaRM50/yamaharm50-lt/TOMS_041.wav", + "YamahaRM50/yamaharm50-lt/TOMS_042.wav", + "YamahaRM50/yamaharm50-lt/TOMS_046.wav", + "YamahaRM50/yamaharm50-lt/TOMS_048.wav", + "YamahaRM50/yamaharm50-lt/TOMS_050.wav", + "YamahaRM50/yamaharm50-lt/TOMS_051.wav", + "YamahaRM50/yamaharm50-lt/TOMS_053.wav", + "YamahaRM50/yamaharm50-lt/TOMS_054.wav", + "YamahaRM50/yamaharm50-lt/TOMS_055.wav", + "YamahaRM50/yamaharm50-lt/TOMS_058.wav", + "YamahaRM50/yamaharm50-lt/TOMS_059.wav", + "YamahaRM50/yamaharm50-lt/TOMS_061.wav", + "YamahaRM50/yamaharm50-lt/TOMS_062.wav", + "YamahaRM50/yamaharm50-lt/TOMS_063.wav", + "YamahaRM50/yamaharm50-lt/TOMS_066.wav", + "YamahaRM50/yamaharm50-lt/TOMS_067.wav", + "YamahaRM50/yamaharm50-lt/TOMS_071.wav", + "YamahaRM50/yamaharm50-lt/TOMS_075.wav", + "YamahaRM50/yamaharm50-lt/TOMS_079.wav", + "YamahaRM50/yamaharm50-lt/TOMS_082.wav", + "YamahaRM50/yamaharm50-lt/TOMS_083.wav", + "YamahaRM50/yamaharm50-lt/TOMS_084.wav", + "YamahaRM50/yamaharm50-lt/TOMS_087.wav", + "YamahaRM50/yamaharm50-lt/TOMS_088.wav", + "YamahaRM50/yamaharm50-lt/TOMS_092.wav", + "YamahaRM50/yamaharm50-lt/TOMS_094.wav", + "YamahaRM50/yamaharm50-lt/TOMS_095.wav", + "YamahaRM50/yamaharm50-lt/TOMS_096.wav", + "YamahaRM50/yamaharm50-lt/TOMS_099.wav", + "YamahaRM50/yamaharm50-lt/TOMS_100.wav", + "YamahaRM50/yamaharm50-lt/TOMS_103.wav", + "YamahaRM50/yamaharm50-lt/TOMS_104.wav", + "YamahaRM50/yamaharm50-lt/TOMS_105.wav", + "YamahaRM50/yamaharm50-lt/TOMS_106.wav", + "YamahaRM50/yamaharm50-lt/TOMS_107.wav", + "YamahaRM50/yamaharm50-lt/TOMS_108.wav" + ], + "YamahaRM50_misc": [ + "YamahaRM50/yamaharm50-misc/CYMBAL_062.wav", + "YamahaRM50/yamaharm50-misc/FX_071.wav", + "YamahaRM50/yamaharm50-misc/FX_072.wav", + "YamahaRM50/yamaharm50-misc/FX_074.wav", + "YamahaRM50/yamaharm50-misc/FX_075.wav", + "YamahaRM50/yamaharm50-misc/FX_076.wav", + "YamahaRM50/yamaharm50-misc/FX_079.wav", + "YamahaRM50/yamaharm50-misc/FX_082.wav", + "YamahaRM50/yamaharm50-misc/FX_083.wav", + "YamahaRM50/yamaharm50-misc/FX_085.wav", + "YamahaRM50/yamaharm50-misc/FX_086.wav", + "YamahaRM50/yamaharm50-misc/FX_087.wav", + "YamahaRM50/yamaharm50-misc/FX_088.wav", + "YamahaRM50/yamaharm50-misc/FX_089.wav", + "YamahaRM50/yamaharm50-misc/FX_090.wav", + "YamahaRM50/yamaharm50-misc/FX_091.wav", + "YamahaRM50/yamaharm50-misc/FX_092.wav", + "YamahaRM50/yamaharm50-misc/FX_093.wav", + "YamahaRM50/yamaharm50-misc/FX_094.wav", + "YamahaRM50/yamaharm50-misc/FX_095.wav", + "YamahaRM50/yamaharm50-misc/FX_098.wav", + "YamahaRM50/yamaharm50-misc/FX_122.wav", + "YamahaRM50/yamaharm50-misc/FX_126.wav", + "YamahaRM50/yamaharm50-misc/FX_127.wav", + "YamahaRM50/yamaharm50-misc/FX_128.wav", + "YamahaRM50/yamaharm50-misc/FX_129.wav", + "YamahaRM50/yamaharm50-misc/FX_135.wav", + "YamahaRM50/yamaharm50-misc/FX_139.wav" + ], + "YamahaRM50_mt": [ + "YamahaRM50/yamaharm50-mt/TOMS_002.wav", + "YamahaRM50/yamaharm50-mt/TOMS_003.wav", + "YamahaRM50/yamaharm50-mt/TOMS_006.wav", + "YamahaRM50/yamaharm50-mt/TOMS_007.wav", + "YamahaRM50/yamaharm50-mt/TOMS_011.wav", + "YamahaRM50/yamaharm50-mt/TOMS_014.wav", + "YamahaRM50/yamaharm50-mt/TOMS_018.wav", + "YamahaRM50/yamaharm50-mt/TOMS_023.wav", + "YamahaRM50/yamaharm50-mt/TOMS_027.wav", + "YamahaRM50/yamaharm50-mt/TOMS_030.wav", + "YamahaRM50/yamaharm50-mt/TOMS_031.wav", + "YamahaRM50/yamaharm50-mt/TOMS_036.wav", + "YamahaRM50/yamaharm50-mt/TOMS_037.wav", + "YamahaRM50/yamaharm50-mt/TOMS_040.wav", + "YamahaRM50/yamaharm50-mt/TOMS_044.wav", + "YamahaRM50/yamaharm50-mt/TOMS_045.wav", + "YamahaRM50/yamaharm50-mt/TOMS_057.wav", + "YamahaRM50/yamaharm50-mt/TOMS_060.wav", + "YamahaRM50/yamaharm50-mt/TOMS_065.wav", + "YamahaRM50/yamaharm50-mt/TOMS_069.wav", + "YamahaRM50/yamaharm50-mt/TOMS_070.wav", + "YamahaRM50/yamaharm50-mt/TOMS_073.wav", + "YamahaRM50/yamaharm50-mt/TOMS_074.wav", + "YamahaRM50/yamaharm50-mt/TOMS_076.wav", + "YamahaRM50/yamaharm50-mt/TOMS_078.wav", + "YamahaRM50/yamaharm50-mt/TOMS_080.wav", + "YamahaRM50/yamaharm50-mt/TOMS_081.wav", + "YamahaRM50/yamaharm50-mt/TOMS_086.wav", + "YamahaRM50/yamaharm50-mt/TOMS_090.wav", + "YamahaRM50/yamaharm50-mt/TOMS_091.wav", + "YamahaRM50/yamaharm50-mt/TOMS_093.wav", + "YamahaRM50/yamaharm50-mt/TOMS_097.wav", + "YamahaRM50/yamaharm50-mt/TOMS_098.wav", + "YamahaRM50/yamaharm50-mt/TOMS_102.wav" + ], + "YamahaRM50_oh": [ + "YamahaRM50/yamaharm50-oh/CYMBAL_003.wav", + "YamahaRM50/yamaharm50-oh/CYMBAL_004.wav", + "YamahaRM50/yamaharm50-oh/CYMBAL_007.wav", + "YamahaRM50/yamaharm50-oh/CYMBAL_011.wav", + "YamahaRM50/yamaharm50-oh/CYMBAL_012.wav", + "YamahaRM50/yamaharm50-oh/CYMBAL_015.wav", + "YamahaRM50/yamaharm50-oh/CYMBAL_018.wav", + "YamahaRM50/yamaharm50-oh/CYMBAL_022.wav", + "YamahaRM50/yamaharm50-oh/CYMBAL_023.wav", + "YamahaRM50/yamaharm50-oh/CYMBAL_027.wav", + "YamahaRM50/yamaharm50-oh/CYMBAL_029.wav", + "YamahaRM50/yamaharm50-oh/FX_064.wav" + ], + "YamahaRM50_perc": [ + "YamahaRM50/yamaharm50-perc/FX_003.wav", + "YamahaRM50/yamaharm50-perc/FX_004.wav", + "YamahaRM50/yamaharm50-perc/FX_012.wav", + "YamahaRM50/yamaharm50-perc/FX_013.wav", + "YamahaRM50/yamaharm50-perc/FX_014.wav", + "YamahaRM50/yamaharm50-perc/FX_015.wav", + "YamahaRM50/yamaharm50-perc/FX_016.wav", + "YamahaRM50/yamaharm50-perc/FX_017.wav", + "YamahaRM50/yamaharm50-perc/FX_018.wav", + "YamahaRM50/yamaharm50-perc/FX_019.wav", + "YamahaRM50/yamaharm50-perc/FX_020.wav", + "YamahaRM50/yamaharm50-perc/FX_021.wav", + "YamahaRM50/yamaharm50-perc/FX_022.wav", + "YamahaRM50/yamaharm50-perc/FX_023.wav", + "YamahaRM50/yamaharm50-perc/FX_024.wav", + "YamahaRM50/yamaharm50-perc/FX_033.wav", + "YamahaRM50/yamaharm50-perc/FX_034.wav", + "YamahaRM50/yamaharm50-perc/FX_035.wav", + "YamahaRM50/yamaharm50-perc/FX_036.wav", + "YamahaRM50/yamaharm50-perc/FX_037.wav", + "YamahaRM50/yamaharm50-perc/FX_038.wav", + "YamahaRM50/yamaharm50-perc/FX_039.wav", + "YamahaRM50/yamaharm50-perc/FX_040.wav", + "YamahaRM50/yamaharm50-perc/FX_041.wav", + "YamahaRM50/yamaharm50-perc/FX_042.wav", + "YamahaRM50/yamaharm50-perc/FX_043.wav", + "YamahaRM50/yamaharm50-perc/FX_044.wav", + "YamahaRM50/yamaharm50-perc/FX_045.wav", + "YamahaRM50/yamaharm50-perc/FX_046.wav", + "YamahaRM50/yamaharm50-perc/FX_047.wav", + "YamahaRM50/yamaharm50-perc/FX_048.wav", + "YamahaRM50/yamaharm50-perc/FX_049.wav", + "YamahaRM50/yamaharm50-perc/FX_050.wav", + "YamahaRM50/yamaharm50-perc/FX_051.wav", + "YamahaRM50/yamaharm50-perc/FX_052.wav", + "YamahaRM50/yamaharm50-perc/FX_053.wav", + "YamahaRM50/yamaharm50-perc/FX_054.wav", + "YamahaRM50/yamaharm50-perc/FX_055.wav", + "YamahaRM50/yamaharm50-perc/FX_056.wav", + "YamahaRM50/yamaharm50-perc/FX_057.wav", + "YamahaRM50/yamaharm50-perc/FX_058.wav", + "YamahaRM50/yamaharm50-perc/FX_062.wav", + "YamahaRM50/yamaharm50-perc/FX_063.wav", + "YamahaRM50/yamaharm50-perc/FX_065.wav", + "YamahaRM50/yamaharm50-perc/FX_066.wav", + "YamahaRM50/yamaharm50-perc/FX_067.wav", + "YamahaRM50/yamaharm50-perc/FX_068.wav", + "YamahaRM50/yamaharm50-perc/FX_069.wav", + "YamahaRM50/yamaharm50-perc/FX_070.wav", + "YamahaRM50/yamaharm50-perc/FX_073.wav", + "YamahaRM50/yamaharm50-perc/FX_116.wav", + "YamahaRM50/yamaharm50-perc/FX_119.wav", + "YamahaRM50/yamaharm50-perc/FX_120.wav", + "YamahaRM50/yamaharm50-perc/FX_121.wav", + "YamahaRM50/yamaharm50-perc/FX_125.wav", + "YamahaRM50/yamaharm50-perc/FX_132.wav" + ], + "YamahaRM50_rd": [ + "YamahaRM50/yamaharm50-rd/CYMBAL_030.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_031.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_032.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_033.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_034.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_035.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_036.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_037.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_038.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_039.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_040.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_041.wav", + "YamahaRM50/yamaharm50-rd/CYMBAL_042.wav" + ], + "YamahaRM50_sd": [ + "YamahaRM50/yamaharm50-sd/SNAREDRUM_001.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_002.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_003.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_004.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_005.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_006.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_007.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_008.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_009.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_010.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_011.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_012.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_013.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_014.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_015.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_016.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_017.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_018.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_019.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_020.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_021.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_022.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_023.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_024.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_025.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_026.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_027.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_028.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_029.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_030.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_031.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_032.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_033.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_034.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_035.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_036.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_037.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_038.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_039.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_040.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_041.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_042.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_043.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_044.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_045.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_046.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_047.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_048.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_049.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_050.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_051.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_052.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_053.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_054.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_055.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_056.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_057.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_058.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_059.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_060.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_061.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_062.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_063.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_064.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_065.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_066.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_067.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_068.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_069.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_070.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_071.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_072.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_073.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_074.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_075.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_076.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_077.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_078.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_079.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_080.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_081.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_082.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_083.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_084.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_085.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_086.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_087.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_088.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_089.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_090.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_091.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_092.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_093.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_094.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_095.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_096.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_097.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_098.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_099.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_100.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_101.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_102.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_103.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_104.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_105.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_106.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_107.wav", + "YamahaRM50/yamaharm50-sd/SNAREDRUM_108.wav" + ], + "YamahaRM50_sh": [ + "YamahaRM50/yamaharm50-sh/FX_010.wav", + "YamahaRM50/yamaharm50-sh/FX_011.wav", + "YamahaRM50/yamaharm50-sh/FX_028.wav", + "YamahaRM50/yamaharm50-sh/FX_029.wav", + "YamahaRM50/yamaharm50-sh/FX_130.wav", + "YamahaRM50/yamaharm50-sh/FX_131.wav" + ], + "YamahaRM50_tb": [ + "YamahaRM50/yamaharm50-tb/FX_030.wav", + "YamahaRM50/yamaharm50-tb/FX_031.wav", + "YamahaRM50/yamaharm50-tb/FX_032.wav" + ], + "YamahaRX21_bd": ["YamahaRX21/yamaharx21-bd/Bassdrum.wav"], + "YamahaRX21_cp": ["YamahaRX21/yamaharx21-cp/Clap.wav"], + "YamahaRX21_cr": ["YamahaRX21/yamaharx21-cr/Crash.wav"], + "YamahaRX21_hh": ["YamahaRX21/yamaharx21-hh/Closed Hat.wav"], + "YamahaRX21_ht": ["YamahaRX21/yamaharx21-ht/Tom H.wav"], + "YamahaRX21_lt": ["YamahaRX21/yamaharx21-lt/Tom L.wav"], + "YamahaRX21_mt": ["YamahaRX21/yamaharx21-mt/Tom M.wav"], + "YamahaRX21_oh": ["YamahaRX21/yamaharx21-oh/Open hat.wav"], + "YamahaRX21_sd": ["YamahaRX21/yamaharx21-sd/Snaredrum.wav"], + "YamahaRX5_bd": ["YamahaRX5/yamaharx5-bd/Bassdrum-02.wav", "YamahaRX5/yamaharx5-bd/Bassdrum.wav"], + "YamahaRX5_cb": ["YamahaRX5/yamaharx5-cb/Cowbell.wav"], + "YamahaRX5_fx": ["YamahaRX5/yamaharx5-fx/SFX.wav"], + "YamahaRX5_hh": ["YamahaRX5/yamaharx5-hh/Hat Closed.wav"], + "YamahaRX5_lt": ["YamahaRX5/yamaharx5-lt/Tom.wav"], + "YamahaRX5_oh": ["YamahaRX5/yamaharx5-oh/Hat Open.wav"], + "YamahaRX5_rim": ["YamahaRX5/yamaharx5-rim/Rimshot.wav"], + "YamahaRX5_sd": [ + "YamahaRX5/yamaharx5-sd/Snaredrum-02.wav", + "YamahaRX5/yamaharx5-sd/Snaredrum-03.wav", + "YamahaRX5/yamaharx5-sd/Snaredrum.wav" + ], + "YamahaRX5_sh": ["YamahaRX5/yamaharx5-sh/Shaker.wav"], + "YamahaRX5_tb": ["YamahaRX5/yamaharx5-tb/Tambourine.wav"], + "YamahaRY30_bd": [ + "YamahaRY30/yamahary30-bd/Bassdrum-01.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-02.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-03.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-04.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-05.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-06.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-07.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-08.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-09.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-10.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-11.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-12.wav", + "YamahaRY30/yamahary30-bd/Bassdrum-13.wav" + ], + "YamahaRY30_cb": ["YamahaRY30/yamahary30-cb/Cowbell-01.wav", "YamahaRY30/yamahary30-cb/Cowbell-02.wav"], + "YamahaRY30_cp": ["YamahaRY30/yamahary30-cp/Clap.wav"], + "YamahaRY30_cr": ["YamahaRY30/yamahary30-cr/Crash1.wav", "YamahaRY30/yamahary30-cr/zChina.wav"], + "YamahaRY30_hh": [ + "YamahaRY30/yamahary30-hh/Hat Closed-01.wav", + "YamahaRY30/yamahary30-hh/Hat Closed-02.wav", + "YamahaRY30/yamahary30-hh/Hat Pedal-01.wav", + "YamahaRY30/yamahary30-hh/Hat Pedal-02.wav" + ], + "YamahaRY30_ht": [ + "YamahaRY30/yamahary30-ht/Tom H-01.wav", + "YamahaRY30/yamahary30-ht/Tom H-02.wav", + "YamahaRY30/yamahary30-ht/Tom H-03.wav" + ], + "YamahaRY30_lt": [ + "YamahaRY30/yamahary30-lt/Tom L-01.wav", + "YamahaRY30/yamahary30-lt/Toml L-02.wav", + "YamahaRY30/yamahary30-lt/Toml L-03.wav" + ], + "YamahaRY30_misc": [ + "YamahaRY30/yamahary30-misc/Button.wav", + "YamahaRY30/yamahary30-misc/Knock-01.wav", + "YamahaRY30/yamahary30-misc/Knock-02.wav", + "YamahaRY30/yamahary30-misc/Noise.wav", + "YamahaRY30/yamahary30-misc/Pipe.wav", + "YamahaRY30/yamahary30-misc/Scratch.wav", + "YamahaRY30/yamahary30-misc/Snap.wav", + "YamahaRY30/yamahary30-misc/String.wav" + ], + "YamahaRY30_mt": ["YamahaRY30/yamahary30-mt/Tom M-03.wav", "YamahaRY30/yamahary30-mt/Tom-04.wav"], + "YamahaRY30_oh": [ + "YamahaRY30/yamahary30-oh/Hat Open-01.wav", + "YamahaRY30/yamahary30-oh/Hat Open-02.wav", + "YamahaRY30/yamahary30-oh/Hat Open-03.wav", + "YamahaRY30/yamahary30-oh/Hat Open-04.wav" + ], + "YamahaRY30_perc": [ + "YamahaRY30/yamahary30-perc/Bell.wav", + "YamahaRY30/yamahary30-perc/Bongo-01.wav", + "YamahaRY30/yamahary30-perc/Bongo-02.wav", + "YamahaRY30/yamahary30-perc/Conga-01.wav", + "YamahaRY30/yamahary30-perc/Conga-02.wav", + "YamahaRY30/yamahary30-perc/Quid.wav", + "YamahaRY30/yamahary30-perc/Stick.wav", + "YamahaRY30/yamahary30-perc/Timb1.wav", + "YamahaRY30/yamahary30-perc/Timb2.wav", + "YamahaRY30/yamahary30-perc/Triangle.wav", + "YamahaRY30/yamahary30-perc/Trill.wav", + "YamahaRY30/yamahary30-perc/Woodblock-01.wav", + "YamahaRY30/yamahary30-perc/Woodblock-02.wav" + ], + "YamahaRY30_rd": [ + "YamahaRY30/yamahary30-rd/Ride-01.wav", + "YamahaRY30/yamahary30-rd/Ride-02.wav", + "YamahaRY30/yamahary30-rd/Ride-03.wav" + ], + "YamahaRY30_rim": ["YamahaRY30/yamahary30-rim/Rimshot1.wav", "YamahaRY30/yamahary30-rim/Rimshot2.wav"], + "YamahaRY30_sd": [ + "YamahaRY30/yamahary30-sd/Snare1.wav", + "YamahaRY30/yamahary30-sd/Snare10.wav", + "YamahaRY30/yamahary30-sd/Snare11.wav", + "YamahaRY30/yamahary30-sd/Snare12.wav", + "YamahaRY30/yamahary30-sd/Snare13.wav", + "YamahaRY30/yamahary30-sd/Snare14.wav", + "YamahaRY30/yamahary30-sd/Snare15.wav", + "YamahaRY30/yamahary30-sd/Snare16.wav", + "YamahaRY30/yamahary30-sd/Snare17.wav", + "YamahaRY30/yamahary30-sd/Snare18.wav", + "YamahaRY30/yamahary30-sd/Snare19.wav", + "YamahaRY30/yamahary30-sd/Snare2.wav", + "YamahaRY30/yamahary30-sd/Snare20.wav", + "YamahaRY30/yamahary30-sd/Snare21.wav", + "YamahaRY30/yamahary30-sd/Snare3.wav", + "YamahaRY30/yamahary30-sd/Snare4.wav", + "YamahaRY30/yamahary30-sd/Snare5.wav", + "YamahaRY30/yamahary30-sd/Snare6.wav", + "YamahaRY30/yamahary30-sd/Snare7.wav", + "YamahaRY30/yamahary30-sd/Snare8.wav", + "YamahaRY30/yamahary30-sd/Snare9.wav" + ], + "YamahaRY30_sh": ["YamahaRY30/yamahary30-sh/Cabasa-01.wav", "YamahaRY30/yamahary30-sh/Cabasa-02.wav"], + "YamahaRY30_tb": ["YamahaRY30/yamahary30-tb/Tamb.wav"], + "YamahaTG33_bd": [ + "YamahaTG33/yamahatg33-bd/Bassdrum-01.wav", + "YamahaTG33/yamahatg33-bd/Bassdrum-02.wav", + "YamahaTG33/yamahatg33-bd/Bassdrum-03.wav", + "YamahaTG33/yamahatg33-bd/Bassdrum-04.wav" + ], + "YamahaTG33_cb": [ + "YamahaTG33/yamahatg33-cb/Cowbell H.wav", + "YamahaTG33/yamahatg33-cb/Cowbell L.wav", + "YamahaTG33/yamahatg33-cb/Cowbell.wav" + ], + "YamahaTG33_cp": ["YamahaTG33/yamahatg33-cp/Clap.wav"], + "YamahaTG33_cr": [ + "YamahaTG33/yamahatg33-cr/Crash-01.wav", + "YamahaTG33/yamahatg33-cr/Crash-02.wav", + "YamahaTG33/yamahatg33-cr/zCrash Reverse.wav" + ], + "YamahaTG33_fx": ["YamahaTG33/yamahatg33-fx/SFX-01.wav"], + "YamahaTG33_ht": ["YamahaTG33/yamahatg33-ht/Tom-04.wav", "YamahaTG33/yamahatg33-ht/Tom-06.wav"], + "YamahaTG33_lt": ["YamahaTG33/yamahatg33-lt/Tom-01.wav", "YamahaTG33/yamahatg33-lt/Tom-03.wav"], + "YamahaTG33_misc": [ + "YamahaTG33/yamahatg33-misc/Flute.wav", + "YamahaTG33/yamahatg33-misc/Glass-01.wav", + "YamahaTG33/yamahatg33-misc/Glass-02.wav", + "YamahaTG33/yamahatg33-misc/SFX-02.wav", + "YamahaTG33/yamahatg33-misc/SFX-03.wav", + "YamahaTG33/yamahatg33-misc/SFX-04.wav", + "YamahaTG33/yamahatg33-misc/SFX-05.wav", + "YamahaTG33/yamahatg33-misc/SFX-06.wav", + "YamahaTG33/yamahatg33-misc/SFX-07.wav", + "YamahaTG33/yamahatg33-misc/SFX-08.wav" + ], + "YamahaTG33_mt": ["YamahaTG33/yamahatg33-mt/Tom-07.wav", "YamahaTG33/yamahatg33-mt/zTom-02.wav"], + "YamahaTG33_oh": ["YamahaTG33/yamahatg33-oh/Hat Open.wav"], + "YamahaTG33_perc": [ + "YamahaTG33/yamahatg33-perc/Bongo-01.wav", + "YamahaTG33/yamahatg33-perc/Bongo-02.wav", + "YamahaTG33/yamahatg33-perc/Clave.wav", + "YamahaTG33/yamahatg33-perc/Conga.wav", + "YamahaTG33/yamahatg33-perc/Snap.wav", + "YamahaTG33/yamahatg33-perc/Timbale.wav", + "YamahaTG33/yamahatg33-perc/Triangle-01.wav", + "YamahaTG33/yamahatg33-perc/Triangle-02.wav", + "YamahaTG33/yamahatg33-perc/Unknown.wav", + "YamahaTG33/yamahatg33-perc/Whistle-01.wav", + "YamahaTG33/yamahatg33-perc/Whistle-02.wav", + "YamahaTG33/yamahatg33-perc/Woodblock.wav" + ], + "YamahaTG33_rd": ["YamahaTG33/yamahatg33-rd/Ride-01.wav", "YamahaTG33/yamahatg33-rd/Ride-02.wav"], + "YamahaTG33_rim": ["YamahaTG33/yamahatg33-rim/Rimshot.wav"], + "YamahaTG33_sd": [ + "YamahaTG33/yamahatg33-sd/Snaredrum-01.wav", + "YamahaTG33/yamahatg33-sd/Snaredrum-02.wav", + "YamahaTG33/yamahatg33-sd/Snaredrum-03.wav", + "YamahaTG33/yamahatg33-sd/Snaredrum-04.wav", + "YamahaTG33/yamahatg33-sd/Snaredrum-05.wav" + ], + "YamahaTG33_sh": ["YamahaTG33/yamahatg33-sh/Shaker.wav"], + "YamahaTG33_tb": ["YamahaTG33/yamahatg33-tb/Tambourine.wav"] +} diff --git a/repl/public/vcsl.json b/repl/public/vcsl.json new file mode 100644 index 00000000..9ab06549 --- /dev/null +++ b/repl/public/vcsl.json @@ -0,0 +1,2164 @@ +{ + "ballwhistle": [ + "Aerophones/Edge-blown%20Aerophones/Ball%20Whistle/Main_BallWhistle_Long-001.wav", + "Aerophones/Edge-blown%20Aerophones/Ball%20Whistle/Main_BallWhistle_Short-001.wav" + ], + "bassdrum1": [ + "Membranophones/Struck%20Membranophones/Bass%20Drum%201/BDrumNew_hit_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%201/BDrumNew_hit_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%201/BDrumNew_hit_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%201/BDrumNew_hit_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%201/BDrumNew_hit_v5_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%201/BDrumNew_hit_v5_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%201/BDrumNew_hit_v7_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%201/BDrumNew_hit_v7_rr2_Sum.wav" + ], + "bassdrum2": [ + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_cresc_med.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_cresc_short.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_hit_f.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_hit_ff.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_hit_mf1.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_hit_mf2.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_hit_mp1.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_hit_mp2.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_hit_pp1.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_hit_pp2.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_fast_f.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_fast_f_rel.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_fast_mf.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_fast_mf_rel.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_fast_mp.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_fast_mp_rel.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_fast_pp.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_fast_pp_rel.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_ff.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_ff_rel.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_mf.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_mf_rel.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_mp.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_mp_rel.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_pp.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_roll_pp_rel.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_rub10.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_rub12.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_rub2.wav", + "Membranophones/Struck%20Membranophones/Bass%20Drum%202/bassdrum_rub7.wav" + ], + "bongo": [ + "Membranophones/Struck%20Membranophones/Bongos/BongoH_Hit1_v1_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_Hit1_v1_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_Hit1_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_Hit1_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_Hit1_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_Hit1_v3_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_HitMuted1_v1_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_HitMuted1_v1_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_HitMuted1_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_HitMuted1_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_HitMuted1_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_HitMuted1_v3_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_Roll_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoH_Roll_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_Hit1_v1_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_Hit1_v1_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_Hit1_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_Hit1_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_Hit1_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_Hit1_v3_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_HitMuted2_v1_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_HitMuted2_v1_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_HitMuted2_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_HitMuted2_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_HitMuted2_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_HitMuted2_v3_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_Roll_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Bongos/BongoL_Roll_v3_rr1_Mid.wav" + ], + "conga": [ + "Membranophones/Struck%20Membranophones/Conga/Conga_HitFM_v1_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Conga_HitFM_v1_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Conga_HitFM_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Conga_HitFM_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Conga_HitN_v1_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Conga_HitN_v1_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Conga_HitN_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Conga_HitN_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Conga_HitN_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Conga_HitN_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Quinto_HitFM1_v1_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Quinto_HitFM1_v1_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Quinto_HitFM1_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Quinto_HitFM1_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Quinto_HitN_v1_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Quinto_HitN_v1_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Quinto_HitN_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Quinto_HitN_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Quinto_HitN_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Quinto_HitN_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitFM_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitFM_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitFM_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitFM_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitFM_v4_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitFM_v4_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitN_v1_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitN_v1_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitN_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitN_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitN_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitN_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitN_v4_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Conga/Tumba_HitN_v4_rr2_Sum.wav" + ], + "darbuka": [ + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_1_hit_vl1_rr1.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_1_hit_vl1_rr2.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_1_hit_vl2_rr1.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_1_hit_vl2_rr2.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_2_hit_vl1_rr1.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_2_hit_vl1_rr2.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_2_hit_vl2_rr1.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_2_hit_vl2_rr2.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_3_hit_vl1_rr1.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_3_hit_vl1_rr2.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_3_hit_vl2_rr1.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_3_hit_vl2_rr2.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_4_hit_vl1_rr1.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_4_hit_vl1_rr2.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_4_hit_vl2_rr1.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_4_hit_vl2_rr2.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_5_hit_vl1_rr1.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_5_hit_vl1_rr2.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_5_hit_vl2_rr1.wav", + "Membranophones/Struck%20Membranophones/Darbuka/Darbuka_5_hit_vl2_rr2.wav" + ], + "framedrum": [ + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumL_Hand_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumL_HitMuted_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumL_HitMuted_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumL_HitMuted_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumL_HitMuted_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumL_Hit_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumL_Hit_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumL_Hit_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumL_Hit_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumS_Hand_v1_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumS_HitMuted_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumS_HitMuted_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumS_HitMuted_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumS_HitMuted_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumS_Hit_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumS_Hit_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumS_Hit_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Frame%20Drum/HDrumS_Hit_v3_rr2_Sum.wav" + ], + "snare_modern": [ + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitNS_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitNS_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitNS_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitNS_v4_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitNS_v5_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitNS_v5_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitNS_v6_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitNS_v6_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitSN_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitSN_v3_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitSN_v5_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitSN_v5_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitSN_v6_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitSN_v6_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitSN_v7_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitSN_v7_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitSN_v9_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_HitSN_v9_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_rollNS_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_rollNS_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_rollNS_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_rollNS_v5_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_rollSN_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_rollSN_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_rollSN_v5_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_stick_v1_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_stick_v1_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_taps_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%201/Snare2_taps_v4_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitNS_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitNS_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitNS_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitNS_v4_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitNS_v5_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitNS_v5_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitSN_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitSN_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitSN_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitSN_v3_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitSN_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitSN_v4_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitSN_v5_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_HitSN_v5_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_Xstick_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_Xstick_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_rollNS_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_rollNS_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_rollSN_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_rollSN_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_stick_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_stick_v3_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_taps_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%202/Snare3M_taps_v4_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_HitSN_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_HitSN_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_HitSN_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_HitSN_v4_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_HitSN_v5_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_HitSN_v5_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_Xstick_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_Xstick_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_rimshot_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_rimshot_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_rimshot_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_rimshot_v4_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_rollSN_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_rollSN_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_rollSN_v5_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_stick_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_stick_v3_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_taps_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Modern%203/Snare4_taps_v4_rr2_Mid.wav" + ], + "snare_hi": [ + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Hi/RopeSnare_hi_sn_Main_vl1_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Hi/RopeSnare_hi_sn_Main_vl1_rr2.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Hi/RopeSnare_hi_sn_Main_vl2_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Hi/RopeSnare_hi_sn_Main_vl2_rr2.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Hi/RopeSnare_hi_sn_Main_vl3_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Hi/RopeSnare_hi_sn_Main_vl3_rr3.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Hi/RopeSnare_hi_sn_Main_vl4_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Hi/RopeSnare_hi_sn_Main_vl4_rr2.wav" + ], + "snare_low": [ + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_ns_Main_vl1_rr2.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_ns_Main_vl1_rr3.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_ns_Main_vl2_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_ns_Main_vl2_rr2.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_ns_Main_vl3_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_ns_Main_vl3_rr2.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_sn_Main_vl1_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_sn_Main_vl1_rr2.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_sn_Main_vl2_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_sn_Main_vl2_rr2.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_sn_Main_vl3_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_sn_Main_vl3_rr3.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_tsn_Main_vl1_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_tsn_Main_vl1_rr2.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_tsn_Main_vl2_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_tsn_Main_vl2_rr2.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_tsn_Main_vl3_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_tsn_Main_vl3_rr2.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_tsn_Main_vl4_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/Low/RopeSnare_low_tsn_Main_vl4_rr4.wav" + ], + "snare_rim": [ + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/RopeSnare_sidestick_Main_vl2_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/RopeSnare_sidestick_Main_vl2_rr2.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/RopeSnare_stick_Main_vl1_rr1.wav", + "Membranophones/Struck%20Membranophones/Snare%20Drum%2C%20Rope%20Tension/RopeSnare_stick_Main_vl1_rr2.wav" + ], + "timpani": [ + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani1_Hit_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani1_Hit_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani1_Hit_v3_rr3_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani1_Hit_v3_rr4_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani1_Hit_v4_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani1_Hit_v4_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani2_Hit_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani2_Hit_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani2_Hit_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani2_Hit_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani2_Hit_v4_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani2_Hit_v4_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani3_Hit_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani3_Hit_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani3_Hit_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani3_Hit_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani3_Hit_v4_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani3_Hit_v4_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani4_Hit_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani4_Hit_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani4_Hit_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani4_Hit_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani4_Hit_v4_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani4_Hit_v4_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani5_Hit_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani5_Hit_v2_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani5_Hit_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani5_Hit_v3_rr2_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani5_Hit_v4_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Hit/Timpani5_Hit_v4_rr2_Sum.wav" + ], + "timpani_roll": [ + "Membranophones/Struck%20Membranophones/Timpani%201/Roll/Timpani1_Roll_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Roll/Timpani1_Roll_v5_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Roll/Timpani2_Roll_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Roll/Timpani2_Roll_v5_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Roll/Timpani3_Roll_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Roll/Timpani3_Roll_v5_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Roll/Timpani4_Roll_v3_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Roll/Timpani4_Roll_v5_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Roll/Timpani5_Roll_v2_rr1_Sum.wav", + "Membranophones/Struck%20Membranophones/Timpani%201/Roll/Timpani5_Roll_v4_rr1_Sum.wav" + ], + "timpani2": [ + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1A_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1A_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1A_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1A_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1A_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1A_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1B_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1B_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1B_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1B_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1B_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1B_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1C_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1C_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1C_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1C_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1C_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1C_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1D_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1D_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1D_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1D_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1D_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani1D_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2A_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2A_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2A_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2A_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2A_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2A_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2B_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2B_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2B_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2B_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2B_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani2B_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3A_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3A_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3A_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3A_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3A_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3A_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3B_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3B_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3B_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3B_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3B_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3B_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3C_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3C_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3C_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3C_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3C_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani3C_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani4A_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani4A_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani4A_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani4A_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani4A_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani4A_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5A_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5A_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5A_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5A_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5A_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5A_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5B_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5B_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5B_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5B_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5B_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani5B_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6A_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6A_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6A_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6A_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6A_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6A_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6B_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6B_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6B_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6B_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6B_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6B_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6C_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6C_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6C_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6C_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6C_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6C_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6D_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6D_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6D_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6D_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6D_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6D_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6E_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6E_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6E_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6E_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6E_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6E_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6F_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6F_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6F_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6F_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6F_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6F_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6G_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6G_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6G_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6G_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6G_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6G_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6H_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6H_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6H_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6H_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6H_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6H_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6I_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6I_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6I_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6I_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6I_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6I_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6J_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6J_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6J_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6J_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6J_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani6J_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7A_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7A_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7A_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7A_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7A_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7A_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7B_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7B_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7B_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7B_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7B_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7B_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7C_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7C_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7C_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7C_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7C_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7C_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7D_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7D_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7D_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7D_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7D_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7D_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7E_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7E_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7E_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7E_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7E_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7E_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7F_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7F_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7F_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7F_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7F_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7F_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7G_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7G_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7G_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7G_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7G_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani7G_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8A_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8A_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8A_hit_v2_rr3_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8A_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8A_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8A_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8B_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8B_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8B_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8B_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8B_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8B_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8C_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8C_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8C_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8C_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8C_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8C_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8D_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8D_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8D_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8D_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8D_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8D_hit_v5_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8E_hit_v2_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8E_hit_v2_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8E_hit_v3_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8E_hit_v3_rr2_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8E_hit_v5_rr1_main.wav", + "Membranophones/Struck%20Membranophones/Timpani%202/Hit/Timpani8E_hit_v5_rr2_main.wav" + ], + "tom_mallet": [ + "Struck%20Membranophones/Tom%201/Mallet/TomH_HitM_v2_rr1_Mid.wav", + "Struck%20Membranophones/Tom%201/Mallet/TomH_HitM_v2_rr2_Mid.wav", + "Struck%20Membranophones/Tom%201/Mallet/TomH_HitM_v3_rr1_Mid.wav", + "Struck%20Membranophones/Tom%201/Mallet/TomH_HitM_v3_rr2_Mid.wav", + "Struck%20Membranophones/Tom%201/Mallet/TomH_HitM_v4_rr1_Mid.wav", + "Struck%20Membranophones/Tom%201/Mallet/TomH_HitM_v4_rr2_Mid.wav", + "Struck%20Membranophones/Tom%201/Mallet/TomH_RollM_v1_rr1_Mid.wav", + "Struck%20Membranophones/Tom%201/Mallet/TomH_RollM_v2_rr1_Mid.wav" + ], + "tom_stick": [ + "Membranophones/Struck%20Membranophones/Tom%201/Stick/TomH_HitS_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/Stick/TomH_HitS_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/Stick/TomH_HitS_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/Stick/TomH_HitS_v3_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/Stick/TomH_HitS_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/Stick/TomH_HitS_v4_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/Stick/TomH_RollS_v1_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/Stick/TomH_RollS_v2_rr1_Mid.wav" + ], + "tom_rim": [ + "Membranophones/Struck%20Membranophones/Tom%201/TomH_rimFLS_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/TomH_rimFLS_rr4_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/TomH_rimS_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/TomH_rimS_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/TomH_rimS_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%201/TomH_rimS_v4_rr2_Mid.wav" + ], + "tom2_mallet": [ + "Membranophones/Struck%20Membranophones/Tom%202/Mallet/TomL_HitM_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Mallet/TomL_HitM_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Mallet/TomL_HitM_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Mallet/TomL_HitM_v3_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Mallet/TomL_HitM_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Mallet/TomL_HitM_v4_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Mallet/TomL_RollM_v1_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Mallet/TomL_RollM_v2_rr1_Mid.wav" + ], + "tom2_stick": [ + "Membranophones/Struck%20Membranophones/Tom%202/Stick/TomL_HitS_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Stick/TomL_HitS_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Stick/TomL_HitS_v3_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Stick/TomL_HitS_v3_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Stick/TomL_HitS_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Stick/TomL_HitS_v4_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Stick/TomL_RollS_v1_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/Stick/TomL_RollS_v2_rr1_Mid.wav" + ], + "tom2_rim": [ + "Membranophones/Struck%20Membranophones/Tom%202/TomL_rimFLS_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/TomL_rimFLS_rr4_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/TomL_rimS_v2_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/TomL_rimS_v2_rr2_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/TomL_rimS_v4_rr1_Mid.wav", + "Membranophones/Struck%20Membranophones/Tom%202/TomL_rimS_v4_rr2_Mid.wav" + ], + "recorder_alto_stacc": { + "A#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_A%233_rr1_Main.wav", + "A#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_A%234_rr1_Main.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_C4_rr1_Main.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_C5_rr1_Main.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_D4_rr1_Main.wav", + "D5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_D5_rr1_Main.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_E4_rr1_Main.wav", + "E5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_E5_rr1_Main.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_F%233_rr1_Main.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_F%234_rr1_Main.wav", + "G#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_G%233_rr1_Main.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Staccato/AltRecorder_Stac_G%234_rr1_Main.wav" + }, + "recorder_alto_vib": { + "A#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_A%233_rr1_Main.wav", + "A#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_A%234_rr1_Main.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_C4_rr1_Main.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_C5_rr1_Main.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_D4_rr1_Main.wav", + "D5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_D5_rr1_Main.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_E4_rr1_Main.wav", + "E5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_E5_rr1_Main.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_F%234_rr1_Main.wav", + "F3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_F3_rr1_Main.wav", + "G#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_G%233_rr1_Main.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/SusVib/AltRecorder_SusVib_G%234_rr1_Main.wav" + }, + "recorder_alto_sus": { + "A#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_A%233_rr1_Main.wav", + "A#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_A%234_rr1_Main.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_C4_rr1_Main.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_C5_rr1_Main.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_D4_rr1_Main.wav", + "D5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_D5_rr1_Main.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_E4_rr1_Main.wav", + "E5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_E5_rr1_Main.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_F%234_rr1_Main.wav", + "F3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_F3_rr1_Main.wav", + "G#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_G%233_rr1_Main.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Alto%20Recorder/Sustain/AltRecorder_Sus_G%234_rr1_Main.wav" + }, + "recorder_bass_stacc": { + "A#2": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_A%232_rr1_Main.wav", + "A2": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_A2_rr1_Main.wav", + "A3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_A3_rr1_Main.wav", + "B3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_B3_rr1_Main.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_C3_rr1_Main.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_C4_rr1_Main.wav", + "D3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_D3_rr1_Main.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_D4_rr1_Main.wav", + "E3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_E3_rr1_Main.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_E4_rr1_Main.wav", + "F2": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_F2_rr1_Main.wav", + "F3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_F3_rr1_Main.wav", + "F4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_F4_rr1_Main.wav", + "G2": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_G2_rr1_Main.wav", + "G3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Staccato/BassRecorder_Stac_G3_rr1_Main.wav" + }, + "recorder_bass_vib": { + "A2": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_A2_rr1_Main.wav", + "A3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_A3_rr1_Main.wav", + "B2": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_B2_rr1_Main.wav", + "B3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_B3_rr1_Main.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_C3_rr1_Main.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_C4_rr1_Main.wav", + "D3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_D3_rr1_Main.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_D4_rr1_Main.wav", + "E3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_E3_rr1_Main.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_E4_rr1_Main.wav", + "F2": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_F2_rr1_Main.wav", + "F3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_F3_rr1_Main.wav", + "G2": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_G2_rr1_Main.wav", + "G3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/SusVib/BassRecorder_SusVib_G3_rr1_Main.wav" + }, + "recorder_bass_sus": { + "A#2": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_A%232_rr1_Main.wav", + "A#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_A%233_rr1_Main.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_C3_rr1_Main.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_C4_rr1_Main.wav", + "D3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_D3_rr1_Main.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_D4_rr1_Main.wav", + "E3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_E3_rr1_Main.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_E4_rr1_Main.wav", + "F#2": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_F%232_rr1_Main.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_F%233_rr1_Main.wav", + "G#2": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_G%232_rr1_Main.wav", + "G#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Bass%20Recorder/Sustain/BassRecorder_Sus_G%233_rr1_Main.wav" + }, + "recorder_soprano_stacc": { + "A#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_A%234_rr1_Main.wav", + "A#5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_A%235_rr1_Main.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_C4_rr1_Main.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_C5_rr1_Main.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_D4_rr1_Main.wav", + "D5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_D5_rr1_Main.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_E4_rr1_Main.wav", + "E5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_E5_rr1_Main.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_F%234_rr1_Main.wav", + "F#5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_F%235_rr1_Main.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_G%234_rr1_Main.wav", + "G5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Staccato/SopRecorder_Stac_G5_rr1_Main.wav" + }, + "recorder_soprano_sus": { + "A#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_A%234_rr1_Main.wav", + "A#5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_A%235_rr1_Main.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_C4_rr1_Main.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_C5_rr1_Main.wav", + "C6": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_C6_rr1_Main.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_D4_rr1_Main.wav", + "D5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_D5_rr1_Main.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_E4_rr1_Main.wav", + "E5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_E5_rr1_Main.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_F%234_rr1_Main.wav", + "F#5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_F%235_rr1_Main.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_G%234_rr1_Main.wav", + "G5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Soprano%20Recorder/Sustain/SopRecorder_Sus_G5_rr1_Main.wav" + }, + "recorder_tenor_stacc": { + "A#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_A%233_rr1_Main.wav", + "B4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_B4_rr1_Main.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_C3_rr1_Main.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_C4_rr1_Main.wav", + "D3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_D3_rr1_Main.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_D4_rr1_Main.wav", + "E3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_E3_rr1_Main.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_E4_rr1_Main.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_F%233_rr1_Main.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_F%234_rr1_Main.wav", + "G#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_G%233_rr1_Main.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Staccato/TenRecorder_Stac_G%234_rr1_Main.wav" + }, + "recorder_tenor_vib": { + "A3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_A3_rr1_Main.wav", + "A4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_A4_rr1_Main.wav", + "B3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_B3_rr1_Main.wav", + "B4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_B4_rr1_Main.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_C3_rr1_Main.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_C4_rr1_Main.wav", + "D3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_D3_rr1_Main.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_D4_rr1_Main.wav", + "E3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_E3_rr1_Main.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_E4_rr1_Main.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_F%233_rr1_Main.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_F%234_rr1_Main.wav", + "G3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_G3_rr1_Main.wav", + "G4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/SusVib/TenRecorder_SusVib_G4_rr1_Main.wav" + }, + "recorder_tenor_sus": { + "A#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_A%233_rr1_Main.wav", + "A4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_A4_rr1_Main.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_C3_rr1_Main.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_C4_rr1_Main.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_C5_rr1_Main.wav", + "D3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_D3_rr1_Main.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_D4_rr1_Main.wav", + "E3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_E3_rr1_Main.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_E4_rr1_Main.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_F%233_rr1_Main.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_F%234_rr1_Main.wav", + "G#3": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_G%233_rr1_Main.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Baroque%20Tenor%20Recorder/Sustain/TenRecorder_Sus_G%234_rr1_Main.wav" + }, + "ocarina_small_stacc": { + "A#5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_A%235_staccato0.wav", + "A4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_A4_staccato0.wav", + "A5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_A5_staccato0.wav", + "B4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_B4_staccato0.wav", + "B5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_B5_staccato0.wav", + "C6": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_C6_staccato0.wav", + "D#5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_D%235_staccato0.wav", + "D5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_D5_staccato0.wav", + "E5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_E5_staccato0.wav", + "F#5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_F%235_staccato0.wav", + "F5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_F5_staccato0.wav", + "G#5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_G%235_staccato0.wav", + "G5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Staccato/ocarina_G5_staccato0.wav" + }, + "ocarina_small": { + "A#4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Sustain/ocarina_A%234_sustain0.wav", + "A#5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Sustain/ocarina_A%235_sustain0.wav", + "A5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Sustain/ocarina_A5_sustain0.wav", + "B5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Sustain/ocarina_B5_sustain0.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Sustain/ocarina_C5_sustain0.wav", + "D5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Sustain/ocarina_D5_sustain0.wav", + "E5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Sustain/ocarina_E5_sustain0.wav", + "F5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Sustain/ocarina_F5_sustain0.wav", + "G#5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Sustain/ocarina_G%235_sustain0.wav", + "G5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Small/Sustain/ocarina_G5_sustain0.wav" + }, + "ocarina": { + "A#4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/Sus/StdOcarina_Sus_A%234.wav", + "A3": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/Sus/StdOcarina_Sus_A3.wav", + "A4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/Sus/StdOcarina_Sus_A4.wav", + "B3": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/Sus/StdOcarina_Sus_B3.wav", + "C#4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/Sus/StdOcarina_Sus_C%234.wav", + "C#5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/Sus/StdOcarina_Sus_C%235.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/Sus/StdOcarina_Sus_C5.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/Sus/StdOcarina_Sus_D4.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/Sus/StdOcarina_Sus_E4.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/Sus/StdOcarina_Sus_F%234.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/Sus/StdOcarina_Sus_G%234.wav" + }, + "ocarina_vib": { + "A#4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/SusVib/StdOcarina_SusVib_A%234.wav", + "A3": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/SusVib/StdOcarina_SusVib_A3.wav", + "A4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/SusVib/StdOcarina_SusVib_A4.wav", + "C#4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/SusVib/StdOcarina_SusVib_C%234.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/SusVib/StdOcarina_SusVib_C4.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/SusVib/StdOcarina_SusVib_C5.wav", + "D#4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/SusVib/StdOcarina_SusVib_D%234.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/SusVib/StdOcarina_SusVib_E4.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/SusVib/StdOcarina_SusVib_F%234.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Ocarina%2C%20Typical/Sustains/SusVib/StdOcarina_SusVib_G%234.wav" + }, + "pipeorgan_loud_pedal": { + "A1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud%20Pedal/Rode_Pedal_A1.wav", + "A2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud%20Pedal/Rode_Pedal_A2.wav", + "C1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud%20Pedal/Rode_Pedal_C1.wav", + "C2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud%20Pedal/Rode_Pedal_C2.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud%20Pedal/Rode_Pedal_C3.wav", + "D#1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud%20Pedal/Rode_Pedal_D%231.wav", + "D#2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud%20Pedal/Rode_Pedal_D%232.wav", + "D#3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud%20Pedal/Rode_Pedal_D%233.wav", + "F#1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud%20Pedal/Rode_Pedal_F%231.wav", + "F#2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud%20Pedal/Rode_Pedal_F%232.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud%20Pedal/Rode_Pedal_F%233.wav" + }, + "pipeorgan_loud": { + "A1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_A1.wav", + "A2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_A2.wav", + "A3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_A3.wav", + "A4": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_A4.wav", + "A5": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_A5.wav", + "C1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_C1.wav", + "C2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_C2.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_C3.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_C4.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_C5.wav", + "C6": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_C6.wav", + "D#1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_D%231.wav", + "D#2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_D%232.wav", + "D#3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_D%233.wav", + "D#4": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_D%234.wav", + "D#5": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_D%235.wav", + "F#1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_F%231.wav", + "F#2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_F%232.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_F%233.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_F%234.wav", + "F#5": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Loud/Rode_Man3Open_F%235.wav" + }, + "pipeorgan_quiet_pedal": { + "A1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet%20Pedal/NT5_PedalQuiet_A1_rr1.wav", + "A2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet%20Pedal/NT5_PedalQuiet_A2_rr1.wav", + "C1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet%20Pedal/NT5_PedalQuiet_C1_rr1.wav", + "C2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet%20Pedal/NT5_PedalQuiet_C2_rr1.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet%20Pedal/NT5_PedalQuiet_C3_rr1.wav", + "D#1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet%20Pedal/NT5_PedalQuiet_D%231_rr1.wav", + "D#2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet%20Pedal/NT5_PedalQuiet_D%232_rr1.wav", + "D#3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet%20Pedal/NT5_PedalQuiet_D%233_rr1.wav", + "F#1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet%20Pedal/NT5_PedalQuiet_F%231_rr1.wav", + "F#2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet%20Pedal/NT5_PedalQuiet_F%232_rr1.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet%20Pedal/NT5_PedalQuiet_F%233_rr1.wav" + }, + "pipeorgan_quiet": { + "A1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_A1_rr1.wav", + "A2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_A2_rr1.wav", + "A3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_A3_rr1.wav", + "A4": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_A4_rr1.wav", + "A5": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_A5_rr1.wav", + "C1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_C1_rr1.wav", + "C2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_C2_rr1.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_C3_rr1.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_C4_rr1.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_C5_rr1.wav", + "C6": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_C6_rr1.wav", + "D#1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_D%231_rr1.wav", + "D#2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_D%232_rr1.wav", + "D#3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_D%233_rr1.wav", + "D#4": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_D%234_rr1.wav", + "D#5": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_D%235_rr1.wav", + "F#1": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_F%231_rr1.wav", + "F#2": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_F%232_rr1.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_F%233_rr1.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_F%234_rr1.wav", + "F#5": "Aerophones/Edge-blown%20Aerophones/Pipe%20Organ/Quiet/NT5_Man3Quiet_F%235_rr1.wav" + }, + "organ_4inch": { + "A#1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_A%231_rr1.wav", + "A#2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_A%232_rr1.wav", + "A#3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_A%233_rr1.wav", + "A#4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_A%234_rr1.wav", + "C1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_C1_rr1.wav", + "C2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_C2_rr1.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_C3_rr1.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_C4_rr1.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_C5_rr1.wav", + "D1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_D1_rr1.wav", + "D2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_D2_rr1.wav", + "D3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_D3_rr1.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_D4_rr1.wav", + "D5": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_D5_rr1.wav", + "E1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_E1_rr1.wav", + "E2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_E2_rr1.wav", + "E3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_E3_rr1.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_E4_rr1.wav", + "E5": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_E5_rr1.wav", + "F#1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_F%231_rr1.wav", + "F#2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_F%232_rr1.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_F%233_rr1.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_F%234_rr1.wav", + "G#1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_G%231_rr1.wav", + "G#2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_G%232_rr1.wav", + "G#3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_G%233_rr1.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/4'/RenOrgan_4foot_Room_G%234_rr1.wav" + }, + "organ_8inch": { + "A#1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_A%231_rr1.wav", + "A#2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_A%232_rr1.wav", + "A#3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_A%233_rr1.wav", + "A#4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_A%234_rr1.wav", + "C1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_C1_rr1.wav", + "C2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_C2_rr1.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_C3_rr1.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_C4_rr1.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_C5_rr1.wav", + "D1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_D1_rr1.wav", + "D2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_D2_rr1.wav", + "D3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_D3_rr1.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_D4_rr1.wav", + "D5": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_D5_rr1.wav", + "E1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_E1_rr1.wav", + "E2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_E2_rr1.wav", + "E3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_E3_rr1.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_E4_rr1.wav", + "E5": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_E5_rr1.wav", + "F#1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_F%231_rr1.wav", + "F#2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_F%232_rr1.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_F%233_rr1.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_F%234_rr1.wav", + "G#1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_G%231_rr1.wav", + "G#2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_G%232_rr1.wav", + "G#3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_G%233_rr1.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/8'/RenOrgan_8foot_Room_G%234_rr1.wav" + }, + "organ_full": { + "A#1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_A%231_rr1.wav", + "A#2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_A%232_rr1.wav", + "A#3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_A%233_rr1.wav", + "A#4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_A%234_rr1.wav", + "C1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_C1_rr1.wav", + "C2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_C2_rr1.wav", + "C3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_C3_rr1.wav", + "C4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_C4_rr1.wav", + "C5": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_C5_rr1.wav", + "D1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_D1_rr1.wav", + "D2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_D2_rr1.wav", + "D3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_D3_rr1.wav", + "D4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_D4_rr1.wav", + "D5": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_D5_rr1.wav", + "E1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_E1_rr1.wav", + "E2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_E2_rr1.wav", + "E3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_E3_rr1.wav", + "E4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_E4_rr1.wav", + "E5": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_E5_rr1.wav", + "F#1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_F%231_rr1.wav", + "F#2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_F%232_rr1.wav", + "F#3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_F%233_rr1.wav", + "F#4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_F%234_rr1.wav", + "G#1": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_G%231_rr1.wav", + "G#2": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_G%232_rr1.wav", + "G#3": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_G%233_rr1.wav", + "G#4": "Aerophones/Edge-blown%20Aerophones/Renaissance%20Organ/Full/RenOrgan_Full_Room_G%234_rr1.wav" + }, + "trainwhistle": [ + "Aerophones/Edge-blown%20Aerophones/Train%20Whistle%2C%20Toy/Main_TrainLow_Double-001.wav", + "Aerophones/Edge-blown%20Aerophones/Train%20Whistle%2C%20Toy/Main_TrainLow_Fall-001.wav", + "Aerophones/Edge-blown%20Aerophones/Train%20Whistle%2C%20Toy/Main_TrainLow_Med-001.wav", + "Aerophones/Edge-blown%20Aerophones/Train%20Whistle%2C%20Toy/Main_TrainLow_Short-001.wav", + "Aerophones/Edge-blown%20Aerophones/Train%20Whistle%2C%20Toy/Main_TrainLow_Sus-001.wav", + "Aerophones/Edge-blown%20Aerophones/Train%20Whistle%2C%20Toy/Main_TrainMed_Short-001.wav" + ], + "harmonica": { + "C3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Normal/Hohner-Special20_Normal_C3.wav", + "C4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Normal/Hohner-Special20_Normal_C4.wav", + "C5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Normal/Hohner-Special20_Normal_C5.wav", + "C6": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Normal/Hohner-Special20_Normal_C6.wav", + "E3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Normal/Hohner-Special20_Normal_E3.wav", + "E4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Normal/Hohner-Special20_Normal_E4.wav", + "E5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Normal/Hohner-Special20_Normal_E5.wav", + "G4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Normal/Hohner-Special20_Normal_G4.wav", + "G5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Normal/Hohner-Special20_Normal_G5.wav" + }, + "harmonica_soft": { + "C3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Soft/Hohner-Special20_Soft_C3.wav", + "C4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Soft/Hohner-Special20_Soft_C4.wav", + "C5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Soft/Hohner-Special20_Soft_C5.wav", + "C6": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Soft/Hohner-Special20_Soft_C6.wav", + "E3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Soft/Hohner-Special20_Soft_E3.wav", + "E4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Soft/Hohner-Special20_Soft_E4.wav", + "E5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Soft/Hohner-Special20_Soft_E5.wav", + "G3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Soft/Hohner-Special20_Soft_G3.wav", + "G4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Soft/Hohner-Special20_Soft_G4.wav", + "G5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Soft/Hohner-Special20_Soft_G5.wav" + }, + "harmonica_vib": { + "C3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Vib/Hohner-Special20_Vib_C3.wav", + "C4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Vib/Hohner-Special20_Vib_C4.wav", + "C5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Vib/Hohner-Special20_Vib_C5.wav", + "C6": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Vib/Hohner-Special20_Vib_C6.wav", + "E3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Vib/Hohner-Special20_Vib_E3.wav", + "E4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Vib/Hohner-Special20_Vib_E4.wav", + "E5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Vib/Hohner-Special20_Vib_E5.wav", + "G3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Vib/Hohner-Special20_Vib_G3.wav", + "G4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Vib/Hohner-Special20_Vib_G4.wav", + "G5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Special20-C/Sustains/Vib/Hohner-Special20_Vib_G5.wav" + }, + "super64": { + "C2": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_C2.wav", + "C3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_C3.wav", + "C4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_C4.wav", + "C5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_C5.wav", + "C6": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_C6.wav", + "E2": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_E2.wav", + "E3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_E3.wav", + "E4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_E4.wav", + "E5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_E5.wav", + "G2": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_G2.wav", + "G3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_G3.wav", + "G4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_G4.wav", + "G5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Normal/Hohner-Super64_Normal%20_G5.wav" + }, + "super64_acc": { + "C2": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_C2.wav", + "C3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_C3.wav", + "C4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_C4.wav", + "C5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_C5.wav", + "C6": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_C6.wav", + "E2": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_E2.wav", + "E3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_E3.wav", + "E4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_E4.wav", + "E5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_E5.wav", + "G2": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_G2.wav", + "G3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_G3.wav", + "G4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_G4.wav", + "G5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Accented/Hohner-Super64_Accented_G5.wav" + }, + "super64_vib": { + "C2": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_C2.wav", + "C3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_C3.wav", + "C4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_C4.wav", + "C5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_C5.wav", + "C6": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_C6.wav", + "E2": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_E2.wav", + "E3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_E3.wav", + "E4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_E4.wav", + "E5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_E5.wav", + "G2": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_G2.wav", + "G3": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_G3.wav", + "G4": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_G4.wav", + "G5": "Aerophones/Free%20Aerophones/Harmonica-Hohner-Super64/Sustains/Vib/Hohner-Super64_Vib_G5.wav" + }, + "siren": [ + "Aerophones/Free%20Aerophones/Siren/Main_SirenWhistle-002.wav", + "Aerophones/Free%20Aerophones/Siren/Main_SirenWhistle-005.wav", + "Aerophones/Free%20Aerophones/Siren/Main_SirenWhistle-008.wav", + "Aerophones/Free%20Aerophones/Siren/Main_SirenWhistle-009.wav", + "Aerophones/Free%20Aerophones/Siren/Main_SirenWhistle-010.wav" + ], + "didgeridoo": [ + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_Bark1_Main_rr3.wav", + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_BarkDown2_Main.wav", + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_Phrase1_Main.wav", + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_Phrase3_Main.wav", + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_Phrase5_Main.wav", + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_Phrase6_Main.wav", + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_Phrase8_Main.wav", + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_Short1_Main_rr2.wav", + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_Sus2_Main.wav", + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_Sus3_Main.wav", + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_Sus8_Main.wav", + "Aerophones/Lip%20Aerophones/Didgeridoo/Didgeridoo1_Tap1_Main_rr16.wav" + ], + "saxello": { + "A#2": "Aerophones/Reed%20Aerophones/Saxello/Non-Vibrato/BrettSaxello_SusNV_MainSpirit_A%232_vl3_rr1.wav", + "A#3": "Aerophones/Reed%20Aerophones/Saxello/Non-Vibrato/BrettSaxello_SusNV_MainSpirit_A%233_vl3_rr1.wav", + "A#4": "Aerophones/Reed%20Aerophones/Saxello/Non-Vibrato/BrettSaxello_SusNV_MainSpirit_A%234_vl3_rr1.wav", + "D3": "Aerophones/Reed%20Aerophones/Saxello/Non-Vibrato/BrettSaxello_SusNV_MainSpirit_D3_vl3_rr1.wav", + "D4": "Aerophones/Reed%20Aerophones/Saxello/Non-Vibrato/BrettSaxello_SusNV_MainSpirit_D4_vl3_rr1.wav", + "E5": "Aerophones/Reed%20Aerophones/Saxello/Non-Vibrato/BrettSaxello_SusNV_MainSpirit_E5_vl3_rr1.wav", + "F#3": "Aerophones/Reed%20Aerophones/Saxello/Non-Vibrato/BrettSaxello_SusNV_MainSpirit_F%233_vl3_rr1.wav", + "F#4": "Aerophones/Reed%20Aerophones/Saxello/Non-Vibrato/BrettSaxello_SusNV_MainSpirit_F%234_vl3_rr1.wav" + }, + "saxello_stacc": { + "A#2": "Aerophones/Reed%20Aerophones/Saxello/Staccato/BrettSaxello_Stcts_MainSpirit_A%232_vl2_rr3.wav", + "A#3": "Aerophones/Reed%20Aerophones/Saxello/Staccato/BrettSaxello_Stcts_MainSpirit_A%233_vl2_rr2.wav", + "A#4": "Aerophones/Reed%20Aerophones/Saxello/Staccato/BrettSaxello_Stcts_MainSpirit_A%234_vl2_rr5.wav", + "D3": "Aerophones/Reed%20Aerophones/Saxello/Staccato/BrettSaxello_Stcts_MainSpirit_D3_vl2_rr4.wav", + "D4": "Aerophones/Reed%20Aerophones/Saxello/Staccato/BrettSaxello_Stcts_MainSpirit_D4_vl2_rr5.wav", + "D5": "Aerophones/Reed%20Aerophones/Saxello/Staccato/BrettSaxello_Stcts_MainSpirit_D5_vl1_rr6.wav", + "F#3": "Aerophones/Reed%20Aerophones/Saxello/Staccato/BrettSaxello_Stcts_MainSpirit_F%233_vl2_rr4.wav", + "F#4": "Aerophones/Reed%20Aerophones/Saxello/Staccato/BrettSaxello_Stcts_MainSpirit_F%234_vl2_rr4.wav" + }, + "saxello_vib": { + "A#2": "Aerophones/Reed%20Aerophones/Saxello/Vibrato/BrettSaxello_SusVB_MainSpirit_A%232_vl2_rr1.wav", + "A#3": "Aerophones/Reed%20Aerophones/Saxello/Vibrato/BrettSaxello_SusVB_MainSpirit_A%233_vl2_rr1.wav", + "A#4": "Aerophones/Reed%20Aerophones/Saxello/Vibrato/BrettSaxello_SusVB_MainSpirit_A%234_vl2_rr1.wav", + "D#5": "Aerophones/Reed%20Aerophones/Saxello/Vibrato/BrettSaxello_SusVB_MainSpirit_D%235_vl2_rr1.wav", + "D3": "Aerophones/Reed%20Aerophones/Saxello/Vibrato/BrettSaxello_SusVB_MainSpirit_D3_vl2_rr1.wav", + "D4": "Aerophones/Reed%20Aerophones/Saxello/Vibrato/BrettSaxello_SusVB_MainSpirit_D4_vl2_rr1.wav", + "F#3": "Aerophones/Reed%20Aerophones/Saxello/Vibrato/BrettSaxello_SusVB_MainSpirit_F%233_vl2_rr1.wav", + "F#4": "Aerophones/Reed%20Aerophones/Saxello/Vibrato/BrettSaxello_SusVB_MainSpirit_F%234_vl2_rr1.wav" + }, + "sax": { + "A#1": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_A%231_vl3_rr1.wav", + "A#2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_A%232_vl3_rr1.wav", + "A#3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_A%233_vl3_rr1.wav", + "A#4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_A%234_vl3_rr1.wav", + "C2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_C2_vl3_rr1.wav", + "C3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_C3_vl3_rr1.wav", + "C4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_C4_vl3_rr1.wav", + "C5": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_C5_vl3_rr1.wav", + "D2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_D2_vl3_rr1.wav", + "D3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_D3_vl3_rr1.wav", + "D4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_D4_vl3_rr1.wav", + "D5": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_D5_vl3_rr1.wav", + "E2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_E2_vl3_rr1.wav", + "E3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_E3_vl3_rr1.wav", + "E4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_E4_vl3_rr1.wav", + "E5": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_E5_vl3_rr1.wav", + "F#2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_F%232_vl3_rr1.wav", + "F#3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_F%233_vl3_rr1.wav", + "F#4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_F%234_vl3_rr1.wav", + "G#1": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_G%231_vl3_rr1.wav", + "G#2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_G%232_vl3_rr1.wav", + "G#3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_G%233_vl3_rr1.wav", + "G#4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Non-Vibrato/BrettTenor_NV_Main_G%234_vl3_rr1.wav" + }, + "sax_stacc": { + "A#1": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_A%231_vl2_rr5.wav", + "A#3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_A%233_vl2_rr4.wav", + "A2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_A2_vl2_rr4.wav", + "A4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_A4_vl2_rr3.wav", + "C2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_C2_vl2_rr1.wav", + "C3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_C3_vl2_rr4.wav", + "C4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_C4_vl2_rr3.wav", + "C5": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_C5_vl2_rr1.wav", + "D2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_D2_vl2_rr4.wav", + "D3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_D3_vl2_rr5.wav", + "D4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_D4_vl2_rr2.wav", + "D5": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_D5_vl2_rr3.wav", + "E2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_E2_vl2_rr1.wav", + "E3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_E3_vl2_rr3.wav", + "E4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_E4_vl2_rr4.wav", + "E5": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_E5_vl2_rr1.wav", + "F#2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_F%232_vl2_rr7.wav", + "F#3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_F%233_vl2_rr6.wav", + "F4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_F4_vl2_rr1.wav", + "G#1": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_G%231_vl2_rr1.wav", + "G#2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_G%232_vl2_rr1.wav", + "G#3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_G%233_vl2_rr1.wav", + "G#4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Staccato/BrettTenor_Staccato_Main_G%234_vl2_rr2.wav" + }, + "sax_vib": { + "A#1": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_A%231_var2.wav", + "A#2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_A%232_var4.wav", + "A#3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_A%233_var3.wav", + "A#4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_A%234_var2.wav", + "C2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_C2_var4.wav", + "C3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_C3_var1.wav", + "C4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_C4_var2.wav", + "C5": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_C5_var2.wav", + "D2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_D2_var2.wav", + "D3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_D3_var1.wav", + "D4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_D4_var1.wav", + "D5": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_D5_var3.wav", + "E2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_E2_var2.wav", + "E3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_E3_var3.wav", + "E4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_E4_var4.wav", + "F#2": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_F%232_var3.wav", + "F#3": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_F%233_var2.wav", + "G#4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_G%234_var3.wav", + "G4": "Aerophones/Reed%20Aerophones/Tenor%20Saxophone/Vibrato/BrettTenor_Vib_Main_G4_var3.wav" + }, + "harp": { + "A2": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_A2_mf1.wav", + "A4": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_A4_mf1.wav", + "A6": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_A6_mf1.wav", + "B1": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_B1_mf1.wav", + "B3": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_B3_mf1.wav", + "B5": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_B5_mf1.wav", + "B6": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_B6_mf1.wav", + "C3": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_C3_mf3.wav", + "C5": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_C5_mf1.wav", + "D2": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_D2_mf1.wav", + "D4": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_D4_mf1.wav", + "D6": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_D6_mf1.wav", + "D7": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_D7_p1.wav", + "E1": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_E1_f1.wav", + "E3": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_E3_mf1.wav", + "E5": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_E5_mf1.wav", + "F2": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_F2_mf1.wav", + "F4": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_F4_mf1.wav", + "F6": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_F6_mf1.wav", + "F7": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_F7_p1.wav", + "G1": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_G1_mp1.wav", + "G3": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_G3_mf1.wav", + "G5": "Chordophones/Composite Chordophones/Concert Harp/KSHarp_G5_mf1.wav" + }, + "folkharp": { + "A#1": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_A%231_v3_RR1.wav", + "A#2": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_A%232_v3_RR1.wav", + "A#3": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_A%233_v3_RR1.wav", + "A#4": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_A%234_v3_RR1.wav", + "C1": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_C1_v3_RR1.wav", + "C2": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_C2_v3_RR1.wav", + "C3": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_C3_v3_RR1.wav", + "C4": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_C4_v3_RR1.wav", + "C5": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_C5_v3_RR1.wav", + "D1": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_D1_v3_RR1.wav", + "D2": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_D2_v3_RR1.wav", + "D3": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_D3_v3_RR1.wav", + "D4": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_D4_v3_RR1.wav", + "D5": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_D5_v3_RR1.wav", + "E1": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_E1_v3_RR1.wav", + "E2": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_E2_v3_RR1.wav", + "E3": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_E3_v3_RR1.wav", + "E4": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_E4_v3_RR1.wav", + "E5": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_E5_v3_RR1.wav", + "F#1": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_F%231_v3_RR1.wav", + "F#2": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_F%232_v3_RR1.wav", + "F#3": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_F%233_v3_RR1.wav", + "F#4": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_F%234_v3_RR1.wav", + "F#5": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_F%235_v3_RR1.wav", + "G#1": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_G%231_v3_RR1.wav", + "G#2": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_G%232_v3_RR1.wav", + "G#3": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_G%233_v3_RR1.wav", + "G#4": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_G%234_v3_RR1.wav", + "G#5": "Chordophones/Composite%20Chordophones/Folk%20Harp/EWHarp_Normal_G%235_v3_RR1.wav" + }, + "strumstick": { + "D2": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str1_Main_D2_vl3_rr1.wav", + "E2": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str1_Main_E2_vl3_rr1.wav", + "F#2": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str1_Main_F%232_vl3_rr2.wav", + "G2": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str1_Main_G2_vl3_rr1.wav", + "A2": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str2_Main_A2_vl3_rr1.wav", + "B2": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str2_Main_B2_vl3_rr1.wav", + "C#3": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str2_Main_C%233_vl3_rr1.wav", + "D3": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str2_Main_D3_vl3_rr1.wav", + "A3": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str3_Main_A3_vl3_rr1.wav", + "A4": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str3_Main_A4_vl3_rr1.wav", + "B3": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str3_Main_B3_vl3_rr1.wav", + "C#4": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str3_Main_C%234_vl3_rr1.wav", + "D4": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str3_Main_D4_vl3_rr1.wav", + "E3": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str3_Main_E3_vl3_rr1.wav", + "E4": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str3_Main_E4_vl3_rr1.wav", + "F#3": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str3_Main_F%233_vl3_rr1.wav", + "F#4": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str3_Main_F%234_vl3_rr1.wav", + "G3": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str3_Main_G3_vl3_rr1.wav", + "G4": "Chordophones/Composite%20Chordophones/Strumstick/Finger/Strumstick_Finger_Str3_Main_G4_vl3_rr1.wav" + }, + "dantranh": { + "B1": "Chordophones/Zithers/Dan%20Tranh/Normal/B1_mf_1.wav", + "B2": "Chordophones/Zithers/Dan%20Tranh/Normal/B2_ff_1.wav", + "B3": "Chordophones/Zithers/Dan%20Tranh/Normal/B3_mf_1.wav", + "B4": "Chordophones/Zithers/Dan%20Tranh/Normal/B4_mf_1.wav", + "C#2": "Chordophones/Zithers/Dan%20Tranh/Normal/C%232_mf_1.wav", + "C#3": "Chordophones/Zithers/Dan%20Tranh/Normal/C%233_mf_1.wav", + "C#4": "Chordophones/Zithers/Dan%20Tranh/Normal/C%234_mf_1.wav", + "D#2": "Chordophones/Zithers/Dan%20Tranh/Normal/D%232_mf_1.wav", + "D#3": "Chordophones/Zithers/Dan%20Tranh/Normal/D%233_mf_1.wav", + "D#4": "Chordophones/Zithers/Dan%20Tranh/Normal/D%234_mf_1.wav", + "F#2": "Chordophones/Zithers/Dan%20Tranh/Normal/F%232_mf_1.wav", + "F#3": "Chordophones/Zithers/Dan%20Tranh/Normal/F%233_mf_1.wav", + "F#4": "Chordophones/Zithers/Dan%20Tranh/Normal/F%234_mf_1.wav", + "G#2": "Chordophones/Zithers/Dan%20Tranh/Normal/G%232_mf_1.wav", + "G#3": "Chordophones/Zithers/Dan%20Tranh/Normal/G%233_mf_1.wav", + "G#4": "Chordophones/Zithers/Dan%20Tranh/Normal/G%234_mf_1.wav", + "b2": "Chordophones/Zithers/Dan%20Tranh/Normal/b2_mf_1.wav" + }, + "dantranh_tremolo": { + "B1": "Chordophones/Zithers/Dan%20Tranh/Tremolo/B1_Trem_1.wav", + "B2": "Chordophones/Zithers/Dan%20Tranh/Tremolo/B2_Trem_1.wav", + "B3": "Chordophones/Zithers/Dan%20Tranh/Tremolo/B3_Trem_1.wav", + "B4": "Chordophones/Zithers/Dan%20Tranh/Tremolo/B4_Trem_1.wav", + "C#2": "Chordophones/Zithers/Dan%20Tranh/Tremolo/C%232_Trem_1.wav", + "C#3": "Chordophones/Zithers/Dan%20Tranh/Tremolo/C%233_Trem_1.wav", + "C#4": "Chordophones/Zithers/Dan%20Tranh/Tremolo/C%234_Trem_1.wav", + "D#2": "Chordophones/Zithers/Dan%20Tranh/Tremolo/D%232_Trem_1.wav", + "D#3": "Chordophones/Zithers/Dan%20Tranh/Tremolo/D%233_Trem_1.wav", + "D#4": "Chordophones/Zithers/Dan%20Tranh/Tremolo/D%234_Trem_1.wav", + "F#2": "Chordophones/Zithers/Dan%20Tranh/Tremolo/F%232_Trem_1.wav", + "F#3": "Chordophones/Zithers/Dan%20Tranh/Tremolo/F%233_Trem_1.wav", + "F#4": "Chordophones/Zithers/Dan%20Tranh/Tremolo/F%234_Trem_1.wav", + "G#2": "Chordophones/Zithers/Dan%20Tranh/Tremolo/G%232_Trem_1.wav", + "G#3": "Chordophones/Zithers/Dan%20Tranh/Tremolo/G%233_Trem_1.wav", + "G#4": "Chordophones/Zithers/Dan%20Tranh/Tremolo/G%234_Trem_1.wav" + }, + "dantranh_vibrato": { + "B1": "Chordophones/Zithers/Dan%20Tranh/Vibrato/B1_vib_mf_1.wav", + "B2": "Chordophones/Zithers/Dan%20Tranh/Vibrato/B2_vib_mf_1.wav", + "B3": "Chordophones/Zithers/Dan%20Tranh/Vibrato/B3_vib_mf_1.wav", + "B4": "Chordophones/Zithers/Dan%20Tranh/Vibrato/B4_vib_mf_1.wav", + "C#2": "Chordophones/Zithers/Dan%20Tranh/Vibrato/C%232_vib_mf_1.wav", + "C#3": "Chordophones/Zithers/Dan%20Tranh/Vibrato/C%233_vib_mf_1.wav", + "C#4": "Chordophones/Zithers/Dan%20Tranh/Vibrato/C%234_vib_mf_1.wav", + "D#2": "Chordophones/Zithers/Dan%20Tranh/Vibrato/D%232_vib_mf_1.wav", + "D#3": "Chordophones/Zithers/Dan%20Tranh/Vibrato/D%233_vib_mf_1.wav", + "D#4": "Chordophones/Zithers/Dan%20Tranh/Vibrato/D%234_vib_mf_1.wav", + "F#2": "Chordophones/Zithers/Dan%20Tranh/Vibrato/F%232_vib_mf_1.wav", + "F#3": "Chordophones/Zithers/Dan%20Tranh/Vibrato/F%233_vib_mf_1.wav", + "F#4": "Chordophones/Zithers/Dan%20Tranh/Vibrato/F%234_vib_mf_1.wav", + "G#2": "Chordophones/Zithers/Dan%20Tranh/Vibrato/G%232_vib_mf_1.wav", + "G#3": "Chordophones/Zithers/Dan%20Tranh/Vibrato/G%233_vib_mf_1.wav", + "G#4": "Chordophones/Zithers/Dan%20Tranh/Vibrato/G%234_vib_mf_1.wav" + }, + "kawai": { + "A#2": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_A%232_v4_rr1_Player.wav", + "A#3": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_A%233_v4_rr1_Player.wav", + "A#4": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_A%234_v3_rr1_Player.wav", + "A0": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_A0_v4_rr1_Player.wav", + "A1": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_A1_v4_rr1_Player.wav", + "A5": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_A5_v4_rr1_Player.wav", + "A6": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_A6_v4_rr1_Player.wav", + "B4": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_B4_v4_rr1_Player.wav", + "C0": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_C0_v4_rr1_Player.wav", + "C1": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_C1_v4_rr1_Player.wav", + "C2": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_C2_v4_rr1_Player.wav", + "C3": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_C3_v4_rr1_Player.wav", + "C4": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_C4_v4_rr1_Player.wav", + "C5": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_C5_v4_rr1_Player.wav", + "C6": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_C6_v4_rr1_Player.wav", + "C7": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_C7_v4_rr1_Player.wav", + "D#0": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_D%230_v4_rr1_Player.wav", + "D#1": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_D%231_v4_rr1_Player.wav", + "D#5": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_D%235_v4_rr1_Player.wav", + "D#6": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_D%236_v4_rr1_Player.wav", + "D2": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_D2_v4_rr1_Player.wav", + "D3": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_D3_v4_rr1_Player.wav", + "D4": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_D4_v4_rr1_Player.wav", + "E2": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_E2_v4_rr1_Player.wav", + "E3": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_E3_v4_rr1_Player.wav", + "E4": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_E4_v4_rr1_Player.wav", + "F#0": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_F%230_v4_rr1_Player.wav", + "F#1": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_F%231_v4_rr1_Player.wav", + "F#2": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_F%232_v4_rr1_Player.wav", + "F#3": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_F%233_v4_rr1_Player.wav", + "F#4": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_F%234_v4_rr1_Player.wav", + "F#5": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_F%235_v4_rr1_Player.wav", + "F#6": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_F%236_v4_rr1_Player.wav", + "G#2": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_G%232_v4_rr1_Player.wav", + "G#3": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_G%233_v4_rr1_Player.wav", + "G#4": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_G%234_v4_rr1_Player.wav", + "G6": "Chordophones/Zithers/Grand%20Piano%2C%20Kawai/Sustains/GPiano_sus_G6_v2_rr1_Player.wav" + }, + "steinway": { + "A#0": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_A%230_vl4_rr1.wav", + "A#1": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_A%231_vl4_rr1.wav", + "A#2": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_A%232_vl4_rr1.wav", + "A#3": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_A%233_vl4_rr1.wav", + "A#4": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_A%234_vl4_rr1.wav", + "A#5": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_A%235_vl4_rr1.wav", + "A#6": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_A%236_vl4_rr1.wav", + "C1": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_C1_vl4_rr1.wav", + "C2": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_C2_vl4_rr1.wav", + "C3": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_C3_vl4_rr1.wav", + "C4": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_C4_vl4_rr1.wav", + "C5": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_C5_vl4_rr1.wav", + "C6": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_C6_vl4_rr1.wav", + "C7": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_C7_vl4_rr1.wav", + "D1": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_D1_vl4_rr1.wav", + "D2": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_D2_vl4_rr1.wav", + "D3": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_D3_vl4_rr1.wav", + "D4": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_D4_vl4_rr1.wav", + "D5": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_D5_vl4_rr1.wav", + "D6": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_D6_vl4_rr1.wav", + "D7": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_D7_vl4_rr1.wav", + "E1": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_E1_vl4_rr1.wav", + "E2": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_E2_vl4_rr1.wav", + "E3": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_E3_vl4_rr1.wav", + "E4": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_E4_vl4_rr1.wav", + "E5": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_E5_vl4_rr1.wav", + "E6": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_E6_vl4_rr1.wav", + "E7": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_E7_vl4_rr1.wav", + "F#1": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_F%231_vl4_rr1.wav", + "F#2": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_F%232_vl4_rr1.wav", + "F#3": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_F%233_vl4_rr1.wav", + "F#4": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_F%234_vl4_rr1.wav", + "F#5": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_F%235_vl4_rr1.wav", + "F#6": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_F%236_vl4_rr1.wav", + "F#7": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_F%237_vl4_rr1.wav", + "G#1": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_G%231_vl4_rr1.wav", + "G#2": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_G%232_vl4_rr1.wav", + "G#3": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_G%233_vl4_rr1.wav", + "G#4": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_G%234_vl4_rr1.wav", + "G#5": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_G%235_vl4_rr1.wav", + "G#6": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_G%236_vl4_rr1.wav", + "G#7": "Chordophones/Zithers/Grand%20Piano%2C%20Steinway%20B/Sus/JHPiano_Sus_Close_G%237_vl4_rr1.wav" + }, + "psaltery_pluck": { + "A#3": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Pluck/BowedPsaltery_A%233_Main_Pluck_rr1.wav", + "A#4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Pluck/BowedPsaltery_A%234_Main_Pluck_rr1.wav", + "C4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Pluck/BowedPsaltery_C4_Main_Pluck_rr1.wav", + "C5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Pluck/BowedPsaltery_C5_Main_Pluck_rr1.wav", + "D4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Pluck/BowedPsaltery_D4_Main_Pluck_rr1.wav", + "D5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Pluck/BowedPsaltery_D5_Main_Pluck_rr1.wav", + "E4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Pluck/BowedPsaltery_E4_Main_Pluck_rr2.wav", + "E5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Pluck/BowedPsaltery_E5_Main_Pluck_rr1.wav", + "F#4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Pluck/BowedPsaltery_F%234_Main_Pluck_rr1.wav", + "F#5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Pluck/BowedPsaltery_F%235_Main_Pluck_rr3.wav", + "G#4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Pluck/BowedPsaltery_G%234_Main_Pluck_rr3.wav" + }, + "psaltery_spiccato": { + "A#3": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Spiccato/BowedPsaltery_A%233_Main_Spic_rr1.wav", + "A#4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Spiccato/BowedPsaltery_A%234_Main_Spic_rr1.wav", + "C4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Spiccato/BowedPsaltery_C4_Main_Spic_rr1.wav", + "C5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Spiccato/BowedPsaltery_C5_Main_Spic_rr1.wav", + "D4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Spiccato/BowedPsaltery_D4_Main_Spic_rr1.wav", + "D5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Spiccato/BowedPsaltery_D5_Main_Spic_rr1.wav", + "E4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Spiccato/BowedPsaltery_E4_Main_Spic_rr3.wav", + "E5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Spiccato/BowedPsaltery_E5_Main_Spic_rr2.wav", + "F#4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Spiccato/BowedPsaltery_F%234_Main_Spic_rr1.wav", + "F#5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Spiccato/BowedPsaltery_F%235_Main_Spic_rr4.wav", + "G#4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/Spiccato/BowedPsaltery_G%234_Main_Spic_rr3.wav" + }, + "psaltery_bow": { + "A#3": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/LongBow/BowedPsaltery_A%233_Main_LongBow_rr2.wav", + "A#4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/LongBow/BowedPsaltery_A%234_Main_LongBow_rr2.wav", + "C4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/LongBow/BowedPsaltery_C4_Main_LongBow_rr1.wav", + "C5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/LongBow/BowedPsaltery_C5_Main_LongBow_rr1.wav", + "D4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/LongBow/BowedPsaltery_D4_Main_LongBow_rr1.wav", + "D5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/LongBow/BowedPsaltery_D5_Main_LongBow_rr2.wav", + "E4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/LongBow/BowedPsaltery_E4_Main_LongBow_rr2.wav", + "E5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/LongBow/BowedPsaltery_E5_Main_LongBow_rr2.wav", + "F#4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/LongBow/BowedPsaltery_F%234_Main_LongBow_rr1.wav", + "F#5": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/LongBow/BowedPsaltery_F%235_Main_LongBow_rr2.wav", + "G#4": "Chordophones/Zithers/Psaltery%2C%20Bowed%20and%20Plucked/LongBow/BowedPsaltery_G%234_Main_LongBow_rr1.wav" + }, + "clavisynth": { + "C0": "Electrophones/TX81Z/Clavisynth/Clavisynth_C0_vl3.wav", + "C1": "Electrophones/TX81Z/Clavisynth/Clavisynth_C1_vl3.wav", + "C2": "Electrophones/TX81Z/Clavisynth/Clavisynth_C2_vl3.wav", + "C3": "Electrophones/TX81Z/Clavisynth/Clavisynth_C3_vl3.wav", + "C4": "Electrophones/TX81Z/Clavisynth/Clavisynth_C4_vl3.wav", + "C5": "Electrophones/TX81Z/Clavisynth/Clavisynth_C5_vl3.wav", + "C6": "Electrophones/TX81Z/Clavisynth/Clavisynth_C6_vl3.wav", + "E0": "Electrophones/TX81Z/Clavisynth/Clavisynth_E0_vl3.wav", + "E1": "Electrophones/TX81Z/Clavisynth/Clavisynth_E1_vl3.wav", + "E2": "Electrophones/TX81Z/Clavisynth/Clavisynth_E2_vl3.wav", + "E3": "Electrophones/TX81Z/Clavisynth/Clavisynth_E3_vl3.wav", + "E4": "Electrophones/TX81Z/Clavisynth/Clavisynth_E4_vl3.wav", + "E5": "Electrophones/TX81Z/Clavisynth/Clavisynth_E5_vl3.wav", + "G#0": "Electrophones/TX81Z/Clavisynth/Clavisynth_G%230_vl3.wav", + "G#1": "Electrophones/TX81Z/Clavisynth/Clavisynth_G%231_vl3.wav", + "G#2": "Electrophones/TX81Z/Clavisynth/Clavisynth_G%232_vl3.wav", + "G#3": "Electrophones/TX81Z/Clavisynth/Clavisynth_G%233_vl3.wav", + "G#4": "Electrophones/TX81Z/Clavisynth/Clavisynth_G%234_vl3.wav", + "G#5": "Electrophones/TX81Z/Clavisynth/Clavisynth_G%235_vl3.wav" + }, + "fmpiano": { + "C0": "Electrophones/TX81Z/FM%20Piano/FMPiano_C0_vl3.wav", + "C1": "Electrophones/TX81Z/FM%20Piano/FMPiano_C1_vl3.wav", + "C2": "Electrophones/TX81Z/FM%20Piano/FMPiano_C2_vl3.wav", + "C3": "Electrophones/TX81Z/FM%20Piano/FMPiano_C3_vl3.wav", + "C4": "Electrophones/TX81Z/FM%20Piano/FMPiano_C4_vl3.wav", + "C5": "Electrophones/TX81Z/FM%20Piano/FMPiano_C5_vl3.wav", + "C6": "Electrophones/TX81Z/FM%20Piano/FMPiano_C6_vl3.wav", + "C7": "Electrophones/TX81Z/FM%20Piano/FMPiano_C7_vl3.wav", + "E0": "Electrophones/TX81Z/FM%20Piano/FMPiano_E0_vl3.wav", + "E1": "Electrophones/TX81Z/FM%20Piano/FMPiano_E1_vl3.wav", + "E2": "Electrophones/TX81Z/FM%20Piano/FMPiano_E2_vl3.wav", + "E3": "Electrophones/TX81Z/FM%20Piano/FMPiano_E3_vl3.wav", + "E4": "Electrophones/TX81Z/FM%20Piano/FMPiano_E4_vl3.wav", + "E5": "Electrophones/TX81Z/FM%20Piano/FMPiano_E5_vl3.wav", + "E6": "Electrophones/TX81Z/FM%20Piano/FMPiano_E6_vl3.wav", + "G#0": "Electrophones/TX81Z/FM%20Piano/FMPiano_G%230_vl3.wav", + "G#1": "Electrophones/TX81Z/FM%20Piano/FMPiano_G%231_vl3.wav", + "G#2": "Electrophones/TX81Z/FM%20Piano/FMPiano_G%232_vl3.wav", + "G#3": "Electrophones/TX81Z/FM%20Piano/FMPiano_G%233_vl3.wav", + "G#4": "Electrophones/TX81Z/FM%20Piano/FMPiano_G%234_vl3.wav", + "G#5": "Electrophones/TX81Z/FM%20Piano/FMPiano_G%235_vl3.wav", + "G#6": "Electrophones/TX81Z/FM%20Piano/FMPiano_G%236_vl3.wav" + }, + "piano1": { + "C0": "Electrophones/TX81Z/Piano%201/Piano%201_C0_vl3.wav", + "C1": "Electrophones/TX81Z/Piano%201/Piano%201_C1_vl3.wav", + "C2": "Electrophones/TX81Z/Piano%201/Piano%201_C2_vl3.wav", + "C3": "Electrophones/TX81Z/Piano%201/Piano%201_C3_vl3.wav", + "C4": "Electrophones/TX81Z/Piano%201/Piano%201_C4_vl3.wav", + "C5": "Electrophones/TX81Z/Piano%201/Piano%201_C5_vl3.wav", + "C6": "Electrophones/TX81Z/Piano%201/Piano%201_C6_vl3.wav", + "C7": "Electrophones/TX81Z/Piano%201/Piano%201_C7_vl3.wav", + "E0": "Electrophones/TX81Z/Piano%201/Piano%201_E0_vl3.wav", + "E1": "Electrophones/TX81Z/Piano%201/Piano%201_E1_vl3.wav", + "E2": "Electrophones/TX81Z/Piano%201/Piano%201_E2_vl3.wav", + "E3": "Electrophones/TX81Z/Piano%201/Piano%201_E3_vl3.wav", + "E4": "Electrophones/TX81Z/Piano%201/Piano%201_E4_vl3.wav", + "E5": "Electrophones/TX81Z/Piano%201/Piano%201_E5_vl3.wav", + "E6": "Electrophones/TX81Z/Piano%201/Piano%201_E6_vl3.wav", + "G#0": "Electrophones/TX81Z/Piano%201/Piano%201_G%230_vl3.wav", + "G#1": "Electrophones/TX81Z/Piano%201/Piano%201_G%231_vl3.wav", + "G#2": "Electrophones/TX81Z/Piano%201/Piano%201_G%232_vl3.wav", + "G#3": "Electrophones/TX81Z/Piano%201/Piano%201_G%233_vl3.wav", + "G#4": "Electrophones/TX81Z/Piano%201/Piano%201_G%234_vl3.wav", + "G#5": "Electrophones/TX81Z/Piano%201/Piano%201_G%235_vl3.wav", + "G#6": "Electrophones/TX81Z/Piano%201/Piano%201_G%236_vl3.wav" + }, + "wineglass": { + "D#4": "Idiophones/Friction%20Idiophones/Wine%20Glasses/Sustains/Fast/glass1_D%234_Fast_1_main.wav", + "F#4": "Idiophones/Friction%20Idiophones/Wine%20Glasses/Sustains/Fast/glass2_F%234_Fast_1_Main.wav", + "A#4": "Idiophones/Friction%20Idiophones/Wine%20Glasses/Sustains/Fast/glass3_A%234_Fast_1_Main.wav", + "D5": "Idiophones/Friction%20Idiophones/Wine%20Glasses/Sustains/Fast/glass4_D5_Fast_1_Main.wav" + }, + "wineglass_slow": { + "D#4": "Idiophones/Friction%20Idiophones/Wine%20Glasses/Sustains/Slow/glass1_D%234_Slow_1_Main.wav", + "F#4": "Idiophones/Friction%20Idiophones/Wine%20Glasses/Sustains/Slow/glass2_F%234_Slow_1_Main.wav", + "A#4": "Idiophones/Friction%20Idiophones/Wine%20Glasses/Sustains/Slow/glass3_A%234_Slow_1_Main.wav", + "D5": "Idiophones/Friction%20Idiophones/Wine%20Glasses/Sustains/Slow/glass4_D5_Slow_2_Main.wav" + }, + "agogo": [ + "Idiophones/Struck%20Idiophones/Agogo%20Bells/Agogo_High_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Agogo%20Bells/Agogo_High_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Agogo%20Bells/Agogo_High_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Agogo%20Bells/Agogo_Low_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Agogo%20Bells/Agogo_Low_v2_rr1_Mid.wav" + ], + "anvil": [ + "Idiophones/Struck%20Idiophones/Anvil/Anvil_Hit1_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Anvil/Anvil_Hit1_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Anvil/Anvil_Hit1_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Anvil/Anvil_Hit2_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Anvil/Anvil_Hit2_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Anvil/Anvil_Hit2_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Anvil/Anvil_Hit3_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Anvil/Anvil_Hit3_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Anvil/Anvil_Hit3_v3_rr1_Mid.wav" + ], + "brakedrum": [ + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum1_Bowed_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum1_Hammer_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum1_Hammer_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum1_Hammer_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum1_Susp_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum1_Susp_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum1_YarnM_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum1_YarnM_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum1_YarnM_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum2_Bowed_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum2_Hammer1_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum2_Hammer1_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum2_Hammer3_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum2_Hammer3_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum2_Hammer3_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum2_Susp_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Brake%20Drum/BrakeDrum2_Susp_v2_rr1_Mid.wav" + ], + "balafon_hard": { + "C#3": "Idiophones/Struck%20Idiophones/Balafon/Hard%20Mallet/EthnicXylo_hardM_C%233_vl3_rr1_Mid.wav", + "C4": "Idiophones/Struck%20Idiophones/Balafon/Hard%20Mallet/EthnicXylo_hardM_C4_vl3_rr1_Mid.wav", + "C5": "Idiophones/Struck%20Idiophones/Balafon/Hard%20Mallet/EthnicXylo_hardM_C5_vl3_rr1_Mid.wav", + "F3": "Idiophones/Struck%20Idiophones/Balafon/Hard%20Mallet/EthnicXylo_hardM_F3_vl3_rr1_Mid.wav", + "F4": "Idiophones/Struck%20Idiophones/Balafon/Hard%20Mallet/EthnicXylo_hardM_F4_vl3_rr1_Mid.wav", + "F5": "Idiophones/Struck%20Idiophones/Balafon/Hard%20Mallet/EthnicXylo_hardM_F5_vl3_rr1_Mid.wav" + }, + "balafon_soft": { + "C#3": "Idiophones/Struck%20Idiophones/Balafon/Soft%20Mallet/EthnicXylo_softM_C%233_vl3_rr1_Mid.wav", + "C4": "Idiophones/Struck%20Idiophones/Balafon/Soft%20Mallet/EthnicXylo_softM_C4_vl3_rr2_Mid.wav", + "C5": "Idiophones/Struck%20Idiophones/Balafon/Soft%20Mallet/EthnicXylo_softM_C5_vl3_rr1_Mid.wav", + "F3": "Idiophones/Struck%20Idiophones/Balafon/Soft%20Mallet/EthnicXylo_softM_F3_vl3_rr1_Mid.wav", + "F4": "Idiophones/Struck%20Idiophones/Balafon/Soft%20Mallet/EthnicXylo_softM_F4_vl3_rr1_Mid.wav", + "F5": "Idiophones/Struck%20Idiophones/Balafon/Soft%20Mallet/EthnicXylo_softM_F5_vl3_rr1_Mid.wav" + }, + "balafon": { + "C#3": "Idiophones/Struck%20Idiophones/Balafon/Traditional%20Mallet/EthnicXylo_tradM_C%233_vl3_rr1_Mid.wav", + "C4": "Idiophones/Struck%20Idiophones/Balafon/Traditional%20Mallet/EthnicXylo_tradM_C4_vl3_rr1_Mid.wav", + "C5": "Idiophones/Struck%20Idiophones/Balafon/Traditional%20Mallet/EthnicXylo_tradM_C5_vl3_rr1_Mid.wav", + "F3": "Idiophones/Struck%20Idiophones/Balafon/Traditional%20Mallet/EthnicXylo_tradM_F3_vl3_rr1_Mid.wav", + "F4": "Idiophones/Struck%20Idiophones/Balafon/Traditional%20Mallet/EthnicXylo_tradM_F4_vl3_rr1_Mid.wav", + "F5": "Idiophones/Struck%20Idiophones/Balafon/Traditional%20Mallet/EthnicXylo_tradM_F5_vl3_rr1_Mid.wav" + }, + "belltree": { + "A#5": "Idiophones/Struck%20Idiophones/Bell%20Tree/Individual/BellTree_Hit_A%235_rr1_Mid.wav", + "C5": "Idiophones/Struck%20Idiophones/Bell%20Tree/Individual/BellTree_Hit_C5_rr1_Mid.wav", + "D5": "Idiophones/Struck%20Idiophones/Bell%20Tree/Individual/BellTree_Hit_D5_rr1_Mid.wav", + "E5": "Idiophones/Struck%20Idiophones/Bell%20Tree/Individual/BellTree_Hit_E5_rr1_Mid.wav", + "F#5": "Idiophones/Struck%20Idiophones/Bell%20Tree/Individual/BellTree_Hit_F%235_rr1_Mid.wav", + "G#5": "Idiophones/Struck%20Idiophones/Bell%20Tree/Individual/BellTree_Hit_G%235_rr1_Mid.wav" + }, + "cabasa": [ + "Idiophones/Struck%20Idiophones/Cabasa/Cabasa1_Hit_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cabasa/Cabasa1_Hit_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Cabasa/Cabasa1_Rub_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cabasa/Cabasa1_Rub_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Cabasa/Cabasa1_Rub_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cabasa/Cabasa1_Rub_v2_rr2_Mid.wav" + ], + "cajon": [ + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit1_f_rr1.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit1_f_rr2.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit1_fff_rr1.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit1_fff_rr2.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit1_mp_rr1.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit1_mp_rr2.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit2_f_rr1.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit2_f_rr2.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit2_mp_rr1.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit2_mp_rr2.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit2_pp_rr1.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit2_pp_rr2.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit3_f_rr1.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit3_f_rr2.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit3_mp_rr1.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit3_mp_rr2.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit3_p_rr1.wav", + "Idiophones/Struck%20Idiophones/Cajon/Cajon_hit3_p_rr2.wav" + ], + "clap": [ + "Idiophones/Struck%20Idiophones/Claps/Clap_rr1.wav", + "Idiophones/Struck%20Idiophones/Claps/Clap_rr2.wav", + "Idiophones/Struck%20Idiophones/Claps/Clap_rr3.wav", + "Idiophones/Struck%20Idiophones/Claps/Clap_rr4.wav", + "Idiophones/Struck%20Idiophones/Claps/Clap_rr5.wav", + "Idiophones/Struck%20Idiophones/Claps/Clap_rr6.wav", + "Idiophones/Struck%20Idiophones/Claps/SoloClap_vl1.wav", + "Idiophones/Struck%20Idiophones/Claps/SoloClap_vl2.wav", + "Idiophones/Struck%20Idiophones/Claps/SoloClap_vl3.wav", + "Idiophones/Struck%20Idiophones/Claps/SoloClap_vl4.wav" + ], + "clash": [ + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%201/cymbal_crash1_ff2.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%201/cymbal_crash1_ff3.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%201/cymbal_crash1_mf1.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%201/cymbal_crash1_mf2.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%201/cymbal_crash1_mp1.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%201/cymbal_crash1_mp2.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%201/cymbal_crash1_pp1.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%201/cymbal_crash1_pp2.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%201/cymbal_crash1_short1.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%201/cymbal_crash1_short2.wav" + ], + "clash2": [ + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%202/cymbal_crash2_f1.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%202/cymbal_crash2_fff1.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%202/cymbal_crash2_fff2.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%202/cymbal_crash2_mp1.wav", + "Idiophones/Struck%20Idiophones/Clash%20Cymbals%202/cymbal_crash2_mp2.wav" + ], + "clave": [ + "Idiophones/Struck%20Idiophones/Claves/Claves1_Hit_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Claves/Claves1_Hit_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Claves/Claves1_Hit_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Claves/Claves2_Hit_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Claves/Claves2_Hit_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Claves/Claves2_Hit_v3_rr1_Mid.wav" + ], + "cowbell": [ + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell1_Hit_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell1_Hit_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell1_Hit_v4_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell1_Muted_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell1_Muted_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell1_Normal_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell1_Normal_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell2_Double_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell2_Double_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell2_Muted_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell2_Muted_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell2_Normal_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Cowbells/Cowbell2_Normal_v3_rr1_Mid.wav" + ], + "fingercymbal": ["Idiophones/Struck%20Idiophones/Finger%20Cymbals/Fing_Cymb.wav"], + "flexatone": [ + "Idiophones/Struck%20Idiophones/Flexatone/flexatone1.wav", + "Idiophones/Struck%20Idiophones/Flexatone/flexatone2.wav", + "Idiophones/Struck%20Idiophones/Flexatone/flexatone_extralong.wav", + "Idiophones/Struck%20Idiophones/Flexatone/flexatone_fast.wav", + "Idiophones/Struck%20Idiophones/Flexatone/flexatone_long.wav", + "Idiophones/Struck%20Idiophones/Flexatone/flexatone_long2.wav", + "Idiophones/Struck%20Idiophones/Flexatone/flexatone_slap1.wav", + "Idiophones/Struck%20Idiophones/Flexatone/flexatone_slap2.wav" + ], + "gong": [ + "Idiophones/Struck%20Idiophones/Gong%201/gong_2_f.wav", + "Idiophones/Struck%20Idiophones/Gong%201/gong_2_mp.wav", + "Idiophones/Struck%20Idiophones/Gong%201/gong_f.wav", + "Idiophones/Struck%20Idiophones/Gong%201/gong_fff.wav", + "Idiophones/Struck%20Idiophones/Gong%201/gong_mf.wav", + "Idiophones/Struck%20Idiophones/Gong%201/gong_p.wav", + "Idiophones/Struck%20Idiophones/Gong%201/gong_scrape_mf.wav" + ], + "gong2": [ + "Idiophones/Struck%20Idiophones/Gong%202/hit_full1.mp3", + "Idiophones/Struck%20Idiophones/Gong%202/hit_full2_loudest_ST.mp3", + "Idiophones/Struck%20Idiophones/Gong%202/hit_light1.mp3", + "Idiophones/Struck%20Idiophones/Gong%202/hit_light2.mp3", + "Idiophones/Struck%20Idiophones/Gong%202/hit_light3.mp3", + "Idiophones/Struck%20Idiophones/Gong%202/scrape1.mp3" + ], + "guiro": [ + "Idiophones/Struck%20Idiophones/Guiro/Guiro_Fast_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Guiro/Guiro_Hit_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Guiro/Guiro_Hit_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Guiro/Guiro_Med_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Guiro/Guiro_Slow_rr2_Mid.wav" + ], + "glockenspiel": { + "C5": "Idiophones/Struck%20Idiophones/Glockenspiel/glock_soft_C5_02.wav", + "C6": "Idiophones/Struck%20Idiophones/Glockenspiel/glock_soft_C6_01.wav", + "C7": "Idiophones/Struck%20Idiophones/Glockenspiel/glock_soft_C7_03.wav", + "G#6": "Idiophones/Struck%20Idiophones/Glockenspiel/glock_loud_G%236_01.wav", + "G4": "Idiophones/Struck%20Idiophones/Glockenspiel/glock_soft_G4_01.wav", + "G5": "Idiophones/Struck%20Idiophones/Glockenspiel/glock_soft_G5_01.wav", + "G6": "Idiophones/Struck%20Idiophones/Glockenspiel/glock_soft_G6_01.wav" + }, + "handbells": [ + "Idiophones/Struck%20Idiophones/Hand%20Bells%2C%20Nepalese/HB_1.wav", + "Idiophones/Struck%20Idiophones/Hand%20Bells%2C%20Nepalese/HB_2.wav", + "Idiophones/Struck%20Idiophones/Hand%20Bells%2C%20Nepalese/HB_3.wav" + ], + "handchimes": { + "A#3": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_A%233_r01_main.wav", + "A#5": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_A%235_r01_main.wav", + "A4": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_A4_r01_main.wav", + "C3": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_C3_r01_main.wav", + "C4": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_C4_r01_main.wav", + "C5": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_C5_r01_main.wav", + "C6": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_C6_r01_main.wav", + "D3": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_D3_r01_main.wav", + "D4": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_D4_r01_main.wav", + "D5": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_D5_r01_main.wav", + "E3": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_E3_r01_main.wav", + "E4": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_E4_r01_main.wav", + "E5": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_E5_r01_main.wav", + "F#3": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_F%233_r01_main.wav", + "F#4": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_F%234_r01_main.wav", + "F#5": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_F%235_r01_main.wav", + "G#3": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_G%233_r01_main.wav", + "G#4": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_G%234_r01_main.wav", + "G#5": "Idiophones/Struck%20Idiophones/Hand%20Chimes/sus_G%235_r01_main.wav" + }, + "hihat": [ + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_Close_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_Close_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitC_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitC_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitC_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitC_v2_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitC_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitC_v3_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitC_v4_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitC_v4_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitLoose_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitLoose_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitOC_rr5_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitO_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Hi-Hat%20Cymbal/HiHat_HitO_rr2_Mid.wav" + ], + "kalimba": { + "A4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Kenya/Mbira6_Normal_MainSpirit_A4_k1_vl3_rr2.wav", + "B2": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Kenya/Mbira6_Normal_MainSpirit_B2_k8_vl3_rr2.wav", + "B3": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Kenya/Mbira6_Normal_MainSpirit_B3_k3_vl3_rr2.wav", + "B4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Kenya/Mbira6_Normal_MainSpirit_B4_k15_vl3_rr2.wav", + "C#3": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Kenya/Mbira6_Normal_MainSpirit_C%233_k7_vl3_rr2.wav", + "C#4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Kenya/Mbira6_Normal_MainSpirit_C%234_k2_vl3_rr2.wav", + "D#3": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Kenya/Mbira6_Normal_MainSpirit_D%233_k9_vl3_rr2.wav", + "D#4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Kenya/Mbira6_Normal_MainSpirit_D%234_k13_vl3_rr2.wav", + "F#3": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Kenya/Mbira6_Normal_MainSpirit_F%233_k5_vl3_rr2.wav", + "F#4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Kenya/Mbira6_Normal_MainSpirit_F%234_k14_vl3_rr2.wav", + "G#3": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Kenya/Mbira6_Normal_MainSpirit_G%233_k4_vl3_rr2.wav" + }, + "kalimba2": { + "A#2": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_A%232_k8_50_100_rr2.wav", + "A#3": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_A%233_k18_50_100_rr2.wav", + "A#4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_A%234_k2_50_100_rr2.wav", + "B1": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_B1_k13_50_100_rr2.wav", + "B4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_B4_k23_50_100_rr2.wav", + "C#2": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_C%232_k10_50_100_rr2.wav", + "C#3": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_C%233_k16_50_100_rr2.wav", + "C#4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_C%234_k5_50_100_rr2.wav", + "C#5": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_C%235_k24_50_100_rr2.wav", + "C#6": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_C%236_k27_50_100_rr2.wav", + "D#2": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_D%232_k14_50_100_rr2.wav", + "D#3": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_D%233_k7_50_100_rr2.wav", + "D#4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_D%234_k4_50_100_rr2.wav", + "D4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_D4_k19_50_100_rr2.wav", + "E5": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_E5_k25_50_100_rr2.wav", + "F#5": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_F%235_k1_50_100_rr2.wav", + "F2": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_F2_k9alt_50_100_rr2.wav", + "F3": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_F3_k17_50_100_rr2.wav", + "F4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_F4_k3_50_100_rr2.wav", + "G#1": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_G%231_k11_50_100_rr2.wav", + "G#5": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_G%235_k26_50_100_rr2.wav", + "G1": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_G1_k12_50_100_rr2.wav", + "G2": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_G2_k15_50_100_rr2.wav", + "G3": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_G3_k6_50_100_rr2.wav", + "G4": "Idiophones/Plucked%20Idiophones/Kalimba%2C%20Tanzania/MBira3_pluck_Main_G4_k22_50_100_rr2.wav" + }, + "kalimba3": { + "A#1": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_A%231_k12_vl2_rr1.wav", + "A#2": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_A%232_k15_vl2_rr1.wav", + "A#3": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_A%233_k18_vl2_rr1.wav", + "A4": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_A4_k24_vl2_rr1.wav", + "C#4": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_C%234_k14_vl2_rr1.wav", + "C2": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_C2_k10_vl2_rr1.wav", + "C3": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_C3_k9_vl2_rr1.wav", + "C4": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_C4_k19_vl2_rr1.wav", + "D#2": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_D%232_k6_vl2_rr1.wav", + "D#3": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_D%233_k7_vl2_rr1.wav", + "D#4": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_D%234_k21_vl2_rr1.wav", + "D2": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_D2_k8_vl2_rr1.wav", + "D3": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_D3_k11_vl2_rr1.wav", + "D4": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_D4_k20_vl2_rr1.wav", + "F2": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_F2_k4_vl2_rr1.wav", + "F3": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_F3_k5_vl2_rr1.wav", + "F4": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_F4_k22_vl2_rr1.wav", + "G#2": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_G%232_k2_vl2_rr1.wav", + "G#3": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_G%233_k1_vl2_rr1.wav", + "G2": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_G2_k13_vl2_rr1.wav", + "G3": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_G3_k3_vl2_rr1.wav", + "G4": "Idiophones/Plucked%20Idiophones/Mbira%20Mavembe%20(Gandanga)%2C%20Zimbabwe%2C%20Low%20G/Mbira5_Normal_MainSpirit_G4_k23_vl2_rr1.wav" + }, + "kalimba4": { + "A#1": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_A%231_14_50_100_rr1.wav", + "A2": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_A2_4_50_100_rr2.wav", + "A3": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_A3_5_50_100_rr1.wav", + "A4": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_A4_22_50_100_rr3.wav", + "B2": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_B2_13_50_100_rr3.wav", + "B3": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_B3_3_50_100_rr2.wav", + "B4": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_B4_23_50_100_rr3.wav", + "C#3": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_C%233_2_50_100_rr5.wav", + "C#4": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_C%234_1_50_100_rr1.wav", + "C#5": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_C%235_24_50_100_rr5.wav", + "D#2": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_D%232_12_50_100_rr2.wav", + "D#3": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_D%233_15_50_100_rr1.wav", + "D#4": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_D%234_18_50_100_rr5.wav", + "E2": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_E2_10_50_100_rr3.wav", + "E3": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_E3_9_50_100_rr4.wav", + "E4": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_E4_19_50_100_rr2.wav", + "F#2": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_F%232_8_50_100_rr2.wav", + "F#3": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_F%233_11_50_100_rr2.wav", + "F#4": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_F%234_20_50_100_rr3.wav", + "G#2": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_G%232_6_50_100_rr1.wav", + "G#3": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_G%233_7_50_100_rr2.wav", + "G#4": "Idiophones/Plucked%20Idiophones/Mbira%20dzaVadzimu%20Nyamaropa%2C%20Zimbabwe%2C%20Low%20B/MBira4_pluck_Main_G%234_21_50_100_rr3.wav" + }, + "kalimba5": { + "A#2": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_A%232_k13_vl3_rr2.wav", + "A#3": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_A%233_k8_vl3_rr2.wav", + "A2": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_A2_k9_vl3_rr2.wav", + "A3": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_A3_k1_vl3_rr2.wav", + "C3": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_C3_k15_vl3_rr3.wav", + "C4": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_C4_k6_vl3_rr2.wav", + "D3": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_D3_k17_vl3_rr2.wav", + "D4": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_D4_k4_vl3_rr2.wav", + "E3": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_E3_k7_vl3_rr2.wav", + "E4": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_E4_k2_vl3_rr2.wav", + "F2": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_F2_k11_vl3_rr2.wav", + "F3": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_F3_k5_vl3_rr2.wav", + "F4": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_F4_k10_vl3_rr2.wav", + "G3": "Idiophones/Plucked%20Idiophones/Nyunga%20Nyunga%2C%20Mozambique%2C%20Low%20F/Mbira2_Normal_MainSpirit_G3_k3_vl3_rr2.wav" + }, + "marimba": { + "B2": "Idiophones/Struck%20Idiophones/Marimba/Marimba_hit_Outrigger_B2_soft_01.wav", + "B4": "Idiophones/Struck%20Idiophones/Marimba/Marimba_hit_Outrigger_B4_soft_01.wav", + "C2": "Idiophones/Struck%20Idiophones/Marimba/Marimba_hit_Outrigger_C2_soft_01.wav", + "C4": "Idiophones/Struck%20Idiophones/Marimba/Marimba_hit_Outrigger_C4_soft_01.wav", + "C6": "Idiophones/Struck%20Idiophones/Marimba/Marimba_hit_Outrigger_C6_soft_01.wav", + "F1": "Idiophones/Struck%20Idiophones/Marimba/Marimba_hit_Outrigger_F1_soft_01.wav", + "F3": "Idiophones/Struck%20Idiophones/Marimba/Marimba_hit_Outrigger_F3_soft_01.wav", + "F5": "Idiophones/Struck%20Idiophones/Marimba/Marimba_hit_Outrigger_F5_soft_01.wav", + "G2": "Idiophones/Struck%20Idiophones/Marimba/Marimba_hit_Outrigger_G2_soft_01.wav", + "G4": "Idiophones/Struck%20Idiophones/Marimba/Marimba_hit_Outrigger_G4_soft_01.wav" + }, + "marktrees": [ + "Idiophones/Struck%20Idiophones/Mark%20Trees/Legacy/windchimes_asc1.wav", + "Idiophones/Struck%20Idiophones/Mark%20Trees/Legacy/windchimes_desc1.wav", + "Idiophones/Struck%20Idiophones/Mark%20Trees/Legacy/windchimes_fastAsc1.wav", + "Idiophones/Struck%20Idiophones/Mark%20Trees/Legacy/windchimes_random.wav", + "Idiophones/Struck%20Idiophones/Mark%20Trees/Legacy/windchimes_slowAsc1.wav", + "Idiophones/Struck%20Idiophones/Mark%20Trees/Legacy/windchimes_slowDesc1.wav" + ], + "oceandrum": [ + "Membranophones/Other%20Membranophones/Ocean%20Drum/OceanDrum_Sus_1_Mid.wav", + "Membranophones/Other%20Membranophones/Ocean%20Drum/OceanDrum_Sus_2_Mid.wav", + "Membranophones/Other%20Membranophones/Ocean%20Drum/OceanDrum_Sus_3_Mid.wav" + ], + "ratchet": [ + "Idiophones/Struck%20Idiophones/Ratchet/Ratchet1_Crank_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Ratchet/Ratchet1_Crank_rr3_Mid.wav", + "Idiophones/Struck%20Idiophones/Ratchet/Ratchet1_Fast_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Ratchet/Ratchet1_Slow_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Ratchet/Ratchet2_Crank_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Ratchet/Ratchet2_Crank_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Ratchet/Ratchet2_Fast_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Ratchet/Ratchet2_Slow_rr1_Mid.wav" + ], + "shaker_large": [ + "Idiophones/Struck%20Idiophones/Shaker%2C%20Large/LShaker_Hit_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Large/LShaker_Hit_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Large/LShaker_Shake1D_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Large/LShaker_Shake1D_rr3_Mid.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Large/LShaker_Shake1U_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Large/LShaker_Shake1U_rr4_Mid.wav" + ], + "shaker_small": [ + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerDouble_Down_rr1.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerDouble_Down_rr2.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerDouble_Up_rr1.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerDouble_Up_rr2.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerHighFaster_Down_rr1.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerHighFaster_Down_rr2.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerHighFaster_Up_rr1.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerHighFaster_Up_rr2.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerLowFaster_Down_rr1.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerLowFaster_Down_rr2.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerLowFaster_Up_rr1.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_ShakerLowFaster_Up_rr2.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_Shaker_Roll_Fast_rr1.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_Shaker_Roll_Fast_rr2.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_Shaker_Slap_rr1.wav", + "Idiophones/Struck%20Idiophones/Shaker%2C%20Small/Mid_Shaker_Slap_rr2.wav" + ], + "slapstick": [ + "Idiophones/Struck%20Idiophones/Slapstick/slapstick_quiet_rr1.wav", + "Idiophones/Struck%20Idiophones/Slapstick/slapstick_quiet_rr2.wav", + "Idiophones/Struck%20Idiophones/Slapstick/slapstick_rr1.wav", + "Idiophones/Struck%20Idiophones/Slapstick/slapstick_rr2.wav", + "Idiophones/Struck%20Idiophones/Slapstick/slapstick_rr3.wav" + ], + "sleighbells": [ + "Idiophones/Struck%20Idiophones/Sleigh%20Bells/Sleighbells_Hit_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Sleigh%20Bells/Sleighbells_Hit_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Sleigh%20Bells/sleighbell1_shake1.wav", + "Idiophones/Struck%20Idiophones/Sleigh%20Bells/sleighbell2_hit_2.wav", + "Idiophones/Struck%20Idiophones/Sleigh%20Bells/sleighbell2_hit_loud.wav", + "Idiophones/Struck%20Idiophones/Sleigh%20Bells/sleighbell2_shake1.wav" + ], + "slitdrum": [ + "Idiophones/Struck%20Idiophones/Slit%20Drum/LogDrumHi_MedM_v1_rr1_Sum.wav", + "Idiophones/Struck%20Idiophones/Slit%20Drum/LogDrumHi_MedM_v2_rr1_Sum.wav", + "Idiophones/Struck%20Idiophones/Slit%20Drum/LogDrumHi_MedM_v3_rr1_Sum.wav", + "Idiophones/Struck%20Idiophones/Slit%20Drum/LogDrumLo_MedM_v1_rr1_Sum.wav", + "Idiophones/Struck%20Idiophones/Slit%20Drum/LogDrumLo_MedM_v2_rr1_Sum.wav", + "Idiophones/Struck%20Idiophones/Slit%20Drum/LogDrumLo_MedM_v3_rr1_Sum.wav" + ], + "sus_cymbal": [ + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_bow_13.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_bow_17.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_bow_20.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_bow_7.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_cresc_1.5s.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_cresc_2s.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_cresc_4s.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_cresc_7.5s.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_hit_bell_fff1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_hit_bell_mf1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_hit_bell_pp1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_hit_f1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_hit_fff1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_hit_mp1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_hit_pp1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_hit_stick_f1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_hit_stick_mp1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_hit_stick_pp1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_roll_f1_nloop.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_roll_f1_rel.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_roll_ff2_nloop.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_roll_ff2_rel.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_roll_mp1_nloop.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_roll_mp1_rel.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%201/susCymb1_scrape_1.wav" + ], + "sus_cymbal2": [ + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_bowed_2.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_bowed_4.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_bowed_6.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_cresc_2.5s2.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_cresc_4s.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_cresc_7s.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_hit_bell_f1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_hit_bell_p1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_hit_f1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_hit_fff1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_hit_mf1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_hit_mp1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_hit_pp1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_hit_stick_mf1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_hit_stick_mp1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_hit_stick_pp1.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_roll_f1_nloop.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_roll_f1_rel.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_roll_fff1_nloop.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_roll_fff1_rel.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_roll_pp1_nloop.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_roll_pp1_rel.wav", + "Idiophones/Struck%20Idiophones/Suspended%20Cymbal%202/susCymb2_scrape_2.wav" + ], + "tambourine": [ + "Idiophones/Struck%20Idiophones/Tambourine%201/Tamb1_Hit_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%201/Tamb1_Hit_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%201/Tamb1_Roll_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%201/Tamb1_Roll_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%201/Tamb1_Roll_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%201/Tamb1_Shake_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%201/Tamb1_Shake_rr2_Mid.wav" + ], + "tambourine2": [ + "Idiophones/Struck%20Idiophones/Tambourine%202/Tamb2_Hit_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%202/Tamb2_Hit_v2_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%202/Tamb2_Roll_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%202/Tamb2_Roll_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%202/Tamb2_Roll_v3_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%202/Tamb2_Shake_rr3_Mid.wav", + "Idiophones/Struck%20Idiophones/Tambourine%202/Tamb2_Shake_rr4_Mid.wav" + ], + "triangle": [ + "Idiophones/Struck%20Idiophones/Triangles/Triangle1_HitFM_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle1_HitFM_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle1_HitM_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle1_HitM_v1_rr4_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle1_Hit_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle1_Hit_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle1_Hit_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle1_Hit_v2_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle1_Roll_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle1_hitFM_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle1_hitFM_v2_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_HitFM_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_HitFM_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_HitFM_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_HitFM_v2_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_HitM_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_HitM_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_HitM_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_HitM_v2_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_Hit_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_Hit_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_Hit_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_Hit_v2_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle3_Roll_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_HitFM_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_HitFM_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_HitFM_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_HitFM_v2_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_HitM_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_HitM_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_HitM_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_HitM_v2_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_Hit_v1_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_Hit_v1_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_Hit_v2_rr1_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_Hit_v2_rr2_Mid.wav", + "Idiophones/Struck%20Idiophones/Triangles/Triangle6_Roll_v2_rr1_Mid.wav" + ], + "tubularbells": { + "A#3": "Idiophones/Struck%20Idiophones/Tubular%20Bells%201/chimes_A%233_pp_rr1.wav", + "C3": "Idiophones/Struck%20Idiophones/Tubular%20Bells%201/chimes_C3_pp_rr2.wav", + "C4": "Idiophones/Struck%20Idiophones/Tubular%20Bells%201/chimes_C4_p_rr1.wav", + "D3": "Idiophones/Struck%20Idiophones/Tubular%20Bells%201/chimes_D3_pp_rr3.wav", + "D4": "Idiophones/Struck%20Idiophones/Tubular%20Bells%201/chimes_D4_p_rr1.wav", + "E3": "Idiophones/Struck%20Idiophones/Tubular%20Bells%201/chimes_E3_pp_rr1.wav", + "E4": "Idiophones/Struck%20Idiophones/Tubular%20Bells%201/chimes_E4_pp_rr3.wav", + "F#3": "Idiophones/Struck%20Idiophones/Tubular%20Bells%201/chimes_F%233_p_rr1.wav", + "G#3": "Idiophones/Struck%20Idiophones/Tubular%20Bells%201/chimes_G%233_p_rr2.wav" + }, + "tubularbells2": { + "A4": "Idiophones/Struck%20Idiophones/Tubular%20Bells%202/TB_hit_A4_v4_1.wav", + "B4": "Idiophones/Struck%20Idiophones/Tubular%20Bells%202/TB_hit_B4_v4_1.wav", + "C4": "Idiophones/Struck%20Idiophones/Tubular%20Bells%202/TB_hit_C4_v4_1.wav", + "C5": "Idiophones/Struck%20Idiophones/Tubular%20Bells%202/TB_hit_C5_v4_1.wav", + "D4": "Idiophones/Struck%20Idiophones/Tubular%20Bells%202/TB_hit_D4_v4_2.wav", + "D5": "Idiophones/Struck%20Idiophones/Tubular%20Bells%202/TB_hit_D5_v4_1.wav", + "E4": "Idiophones/Struck%20Idiophones/Tubular%20Bells%202/TB_hit_E4_v4_1.wav", + "E5": "Idiophones/Struck%20Idiophones/Tubular%20Bells%202/TB_hit_E5_v4_2.wav", + "F4": "Idiophones/Struck%20Idiophones/Tubular%20Bells%202/TB_hit_F4_v4_1.wav", + "F5": "Idiophones/Struck%20Idiophones/Tubular%20Bells%202/TB_hit_F5_v4_1.wav", + "G4": "Idiophones/Struck%20Idiophones/Tubular%20Bells%202/TB_hit_G4_v4_1.wav" + }, + "vibraphone": { + "A2": "Idiophones/Struck%20Idiophones/Vibraphone/Hard%20Mallets/Vibes_hard_A2_v3_rr1_Main.wav", + "A4": "Idiophones/Struck%20Idiophones/Vibraphone/Hard%20Mallets/Vibes_hard_A4_v3_rr1_Main.wav", + "B3": "Idiophones/Struck%20Idiophones/Vibraphone/Hard%20Mallets/Vibes_hard_B3_v3_rr1_Main.wav", + "C3": "Idiophones/Struck%20Idiophones/Vibraphone/Hard%20Mallets/Vibes_hard_C3_v3_rr1_Main.wav", + "C5": "Idiophones/Struck%20Idiophones/Vibraphone/Hard%20Mallets/Vibes_hard_C5_v3_rr1_Main.wav", + "D4": "Idiophones/Struck%20Idiophones/Vibraphone/Hard%20Mallets/Vibes_hard_D4_v3_rr1_Main.wav", + "E3": "Idiophones/Struck%20Idiophones/Vibraphone/Hard%20Mallets/Vibes_hard_E3_v3_rr1_Main.wav", + "E5": "Idiophones/Struck%20Idiophones/Vibraphone/Hard%20Mallets/Vibes_hard_E5_v3_rr1_Main.wav", + "F2": "Idiophones/Struck%20Idiophones/Vibraphone/Hard%20Mallets/Vibes_hard_F2_v3_rr1_Main.wav", + "F4": "Idiophones/Struck%20Idiophones/Vibraphone/Hard%20Mallets/Vibes_hard_F4_v3_rr1_Main.wav", + "G3": "Idiophones/Struck%20Idiophones/Vibraphone/Hard%20Mallets/Vibes_hard_G3_v3_rr1_Main.wav" + }, + "vibraphone_soft": { + "A2": "Idiophones/Struck%20Idiophones/Vibraphone/Soft%20Mallets/Vibes_soft_A2_v2_rr1_Main.wav", + "A4": "Idiophones/Struck%20Idiophones/Vibraphone/Soft%20Mallets/Vibes_soft_A4_v2_rr1_Main.wav", + "B3": "Idiophones/Struck%20Idiophones/Vibraphone/Soft%20Mallets/Vibes_soft_B3_v2_rr1_Main.wav", + "C3": "Idiophones/Struck%20Idiophones/Vibraphone/Soft%20Mallets/Vibes_soft_C3_v2_rr1_Main.wav", + "C5": "Idiophones/Struck%20Idiophones/Vibraphone/Soft%20Mallets/Vibes_soft_C5_v2_rr1_Main.wav", + "D4": "Idiophones/Struck%20Idiophones/Vibraphone/Soft%20Mallets/Vibes_soft_D4_v2_rr1_Main.wav", + "E3": "Idiophones/Struck%20Idiophones/Vibraphone/Soft%20Mallets/Vibes_soft_E3_v2_rr1_Main.wav", + "E5": "Idiophones/Struck%20Idiophones/Vibraphone/Soft%20Mallets/Vibes_soft_E5_v2_rr1_Main.wav", + "F2": "Idiophones/Struck%20Idiophones/Vibraphone/Soft%20Mallets/Vibes_soft_F2_v2_rr1_Main.wav", + "F4": "Idiophones/Struck%20Idiophones/Vibraphone/Soft%20Mallets/Vibes_soft_F4_v2_rr1_Main.wav", + "G3": "Idiophones/Struck%20Idiophones/Vibraphone/Soft%20Mallets/Vibes_soft_G3_v2_rr1_Main.wav" + }, + "vibraphone_bowed": { + "A2": "Idiophones/Struck%20Idiophones/Vibraphone/Bowed/Vibes_bowed_A2_rr1_Main.wav", + "A4": "Idiophones/Struck%20Idiophones/Vibraphone/Bowed/Vibes_bowed_A4_rr1_Main.wav", + "D4": "Idiophones/Struck%20Idiophones/Vibraphone/Bowed/Vibes_bowed_D4_rr1_Main.wav", + "E3": "Idiophones/Struck%20Idiophones/Vibraphone/Bowed/Vibes_bowed_E3_rr1_Main.wav", + "E5": "Idiophones/Struck%20Idiophones/Vibraphone/Bowed/Vibes_bowed_E5_rr1_Main.wav", + "G3": "Idiophones/Struck%20Idiophones/Vibraphone/Bowed/Vibes_bowed_G3_rr1_Main.wav" + }, + "vibraslap": [ + "Idiophones/Struck%20Idiophones/Vibraslap/Legacy/vibraslap_rr1.wav", + "Idiophones/Struck%20Idiophones/Vibraslap/Legacy/vibraslap_rr2.wav", + "Idiophones/Struck%20Idiophones/Vibraslap/Legacy/vibraslap_rr3.wav", + "Idiophones/Struck%20Idiophones/Vibraslap/Legacy/vibraslap_rr4.wav" + ], + "woodblock": [ + "Idiophones/Struck%20Idiophones/Woodblock/wood_click2_mp.wav", + "Idiophones/Struck%20Idiophones/Woodblock/wood_click3_vl1.wav", + "Idiophones/Struck%20Idiophones/Woodblock/wood_click3_vl2.wav", + "Idiophones/Struck%20Idiophones/Woodblock/wood_click_f_rr1.wav", + "Idiophones/Struck%20Idiophones/Woodblock/wood_click_f_rr2.wav", + "Idiophones/Struck%20Idiophones/Woodblock/wood_click_ff.wav", + "Idiophones/Struck%20Idiophones/Woodblock/wood_click_mp.wav", + "Idiophones/Struck%20Idiophones/Woodblock/wood_click_pp_rr1.wav", + "Idiophones/Struck%20Idiophones/Woodblock/wood_click_pp_rr2.wav", + "Idiophones/Struck%20Idiophones/Woodblock/wood_click_pp_rr3.wav" + ], + "xylophone_hard_pp": { + "C4": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_C4_pp_01_far.wav", + "C5": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_C5_pp_01_far.wav", + "C6": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_C6_pp_01_far.wav", + "C7": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_C7_pp_01_far.wav", + "G3": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_G3_pp_01_far.wav", + "G4": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_G4_pp_01_far.wav", + "G5": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_G5_pp_01_far.wav", + "G6": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_G6_pp_01_far.wav" + }, + "xylophone_hard_ff": { + "C4": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_C4_ff_01_far.wav", + "C5": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_C5_ff_01_far.wav", + "C6": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_C6_ff_01_far.wav", + "C7": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_C7_ff_01_far.wav", + "G3": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_G3_ff_01_far.wav", + "G4": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_G4_ff_01_far.wav", + "G5": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_G5_ff_01_far.wav", + "G6": "Idiophones/Struck%20Idiophones/Xylophone/Hard%20Mallets/Xylo_Hard_G6_ff_01_far.wav" + }, + "xylophone_medium_ff": { + "C4": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_C4_ff_01_far.wav", + "C5": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_C5_ff_01_far.wav", + "C6": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_C6_ff_01_far.wav", + "C7": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_C7_ff_01_far.wav", + "G3": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_G3_ff_01_far.wav", + "G4": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_G4_ff_01_far.wav", + "G5": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_G5_ff_01_far.wav", + "G6": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_G6_ff_01_far.wav" + }, + "xylophone_medium_pp": { + "C4": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_C4_pp_01_far.wav", + "C5": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_C5_pp_01_far.wav", + "C6": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_C6_pp_01_far.wav", + "C7": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_C7_pp_01_far.wav", + "G3": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_G3_pp_01_far.wav", + "G4": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_G4_pp_01_far.wav", + "G5": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_G5_pp_01_far.wav", + "G6": "Idiophones/Struck%20Idiophones/Xylophone/Medium%20Mallets/Xylo_Medium_G6_pp_01_far.wav" + }, + "xylophone_soft_pp": { + "C4": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_C4_pp_01_far.wav", + "C5": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_C5_pp_01_far.wav", + "C6": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_C6_pp_01_far.wav", + "C7": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_C7_pp_01_far.wav", + "G3": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_G3_pp_01_far.wav", + "G4": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_G4_pp_01_far.wav", + "G5": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_G5_pp_01_far.wav", + "G6": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_G6_pp_01_far.wav" + }, + "xylophone_soft_ff": { + "C4": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_C4_ff_01_far.wav", + "C5": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_C5_ff_01_far.wav", + "C6": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_C6_ff_01_far.wav", + "C7": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_C7_ff_01_far.wav", + "G3": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_G3_ff_01_far.wav", + "G4": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_G4_ff_01_far.wav", + "G5": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_G5_ff_01_far.wav", + "G6": "Idiophones/Struck%20Idiophones/Xylophone/Soft%20Mallets/Xylo_Soft_G6_ff_01_far.wav" + } +} diff --git a/repl/src/App.css b/repl/src/App.css index 9c8edd83..9dc525e8 100644 --- a/repl/src/App.css +++ b/repl/src/App.css @@ -1,26 +1,15 @@ +@import '@strudel.cycles/react/dist/style.css'; @tailwind base; @tailwind components; @tailwind utilities; body { - background-color: #2a3236; -} - -.react-codemirror2, -.CodeMirror { - height: 100% !important; - background-color: transparent !important; - font-size: 15px; - z-index:20 -} - -.CodeMirror-line > span { - background-color: #2a323699; + background-color: #222; } .darken::before { content: ' '; - position: absolute; + position: fixed; top: 0; left: 0; width: 100vw; @@ -28,4 +17,4 @@ body { display: block; background: black; opacity: 0.5; -} \ No newline at end of file +} diff --git a/repl/src/App.jsx b/repl/src/App.jsx index 3480a27d..b91f43dc 100644 --- a/repl/src/App.jsx +++ b/repl/src/App.jsx @@ -4,17 +4,30 @@ Copyright (C) 2022 Strudel contributors - see . */ -import controls from '@strudel.cycles/core/controls.mjs'; -import { evalScope, evaluate } from '@strudel.cycles/eval'; -import { CodeMirror, cx, useHighlighting, useRepl, useWebMidi } from '@strudel.cycles/react'; -import { getDefaultSynth, cleanupDraw, cleanupUi, Tone } from '@strudel.cycles/tone'; -import React, { useCallback, useLayoutEffect, useRef, useState } from 'react'; +import { evaluate } from '@strudel.cycles/eval'; +import { CodeMirror, cx, flash, useHighlighting, useRepl, useWebMidi } from '@strudel.cycles/react'; +import { cleanupDraw, cleanupUi, Tone } from '@strudel.cycles/tone'; +import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'; import './App.css'; import logo from './logo.svg'; import * as tunes from './tunes.mjs'; +import { prebake } from './prebake.mjs'; +import * as WebDirt from 'WebDirt'; +import { resetLoadedSamples, getAudioContext } from '@strudel.cycles/webaudio'; +import { controls, evalScope } from '@strudel.cycles/core'; +import { createClient } from '@supabase/supabase-js'; +import { nanoid } from 'nanoid'; + +// Create a single supabase client for interacting with your database +const supabase = createClient( + 'https://pidxdsxphlhzjnzmifth.supabase.co', + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InBpZHhkc3hwaGxoempuem1pZnRoIiwicm9sZSI6ImFub24iLCJpYXQiOjE2NTYyMzA1NTYsImV4cCI6MTk3MTgwNjU1Nn0.bqlw7802fsWRnqU5BLYtmXk_k-D1VFmbkHMywWc15NM', +); + evalScope( Tone, - controls, + controls, // sadly, this cannot be exported from core direclty + { WebDirt }, import('@strudel.cycles/core'), import('@strudel.cycles/tone'), import('@strudel.cycles/tonal'), @@ -23,15 +36,41 @@ evalScope( import('@strudel.cycles/xen'), import('@strudel.cycles/webaudio'), import('@strudel.cycles/osc'), + import('@strudel.cycles/serial'), + import('@strudel.cycles/soundfonts'), ); -const initialUrl = window.location.href; -const codeParam = window.location.href.split('#')[1]; -let decoded; -try { - decoded = atob(decodeURIComponent(codeParam || '')); -} catch (err) { - console.warn('failed to decode', err); +prebake(); + +async function initCode() { + // load code from url hash (either short hash from database or decode long hash) + try { + const initialUrl = window.location.href; + const hash = initialUrl.split('?')[1]?.split('#')?.[0]; + const codeParam = window.location.href.split('#')[1]; + // looking like https://strudel.tidalcycles.org/?J01s5i1J0200 (fixed hash length) + if (codeParam) { + console.log('decode hash from url'); + // looking like https://strudel.tidalcycles.org/#ImMzIGUzIg%3D%3D (hash length depends on code length) + return atob(decodeURIComponent(codeParam || '')); + } else if (hash) { + return supabase + .from('code') + .select('code') + .eq('hash', hash) + .then(({ data, error }) => { + if (error) { + console.warn('failed to load hash', err); + } + if (data.length) { + console.log('load hash from database', hash); + return data[0].code; + } + }); + } + } catch (err) { + console.warn('failed to decode', err); + } } function getRandomTune() { @@ -41,11 +80,11 @@ function getRandomTune() { } const randomTune = getRandomTune(); -const defaultSynth = getDefaultSynth(); const isEmbedded = window.location !== window.parent.location; function App() { // const [editor, setEditor] = useState(); const [view, setView] = useState(); + const [lastShared, setLastShared] = useState(); const { setCode, setPattern, @@ -61,10 +100,14 @@ function App() { pattern, pushLog, pending, + hideHeader, + hideConsole, } = useRepl({ - tune: decoded || randomTune, - defaultSynth, + tune: '// LOADING...', }); + useEffect(() => { + initCode().then((decoded) => setCode(decoded || randomTune)); + }, []); const logBox = useRef(); // scroll log box to bottom when log changes useLayoutEffect(() => { @@ -79,19 +122,25 @@ function App() { const handleKeyPress = async (e) => { if (e.ctrlKey || e.altKey) { if (e.code === 'Enter') { - await activateCode(); e.preventDefault(); + flash(view); + await activateCode(); } else if (e.code === 'Period') { cycle.stop(); e.preventDefault(); } } }; - window.addEventListener('keydown', handleKeyPress); - return () => window.removeEventListener('keydown', handleKeyPress); - }, [pattern, code, activateCode, cycle]); + window.addEventListener('keydown', handleKeyPress, true); + return () => window.removeEventListener('keydown', handleKeyPress, true); + }, [pattern, code, activateCode, cycle, view]); - useHighlighting({ view, pattern, active: cycle.started && !activeCode?.includes('strudel disable-highlighting') }); + useHighlighting({ + view, + pattern, + active: cycle.started && !activeCode?.includes('strudel disable-highlighting'), + getTime: () => Tone.getTransport().seconds, + }); useWebMidi({ ready: useCallback( @@ -116,102 +165,162 @@ function App() { return (

- + )}
-
+
{/* onCursor={markParens} */} - + {!cycle.started ? `press ctrl+enter to play\n` : dirty ? `ctrl+enter to update\n` : 'no changes\n'} {error && ( -
+
{error?.message || 'unknown error'}
)}
- {!isEmbedded && ( + {!isEmbedded && !hideConsole && (