diff --git a/.amxxpack.json b/.amxxpack.json new file mode 100644 index 0000000..4b236ef --- /dev/null +++ b/.amxxpack.json @@ -0,0 +1,33 @@ +{ + "compiler": { + "version": "1.9.0-git5294", + "dev": true, + "addons": ["cstrike"] + }, + "include": [ + "./.compiler/include", + "./.thirdparty/reapi/addons/amxmodx/scripting/include" + ], + "thirdparty": { + "dependencies": [ + { + "name": "reapi", + "url": "https://github.com/s1lentq/reapi/releases/download/5.21.0.252/reapi-bin-5.21.0.252.zip" + } + ] + }, + "input": { + "scripts": "./src/scripts", + "include": "./src/include", + "assets": "./assets" + }, + "output": { + "plugins": "./dist/reapi/addons/amxmodx/plugins", + "scripts": "./dist/reapi/addons/amxmodx/scripting", + "include": "./dist/reapi/addons/amxmodx/scripting/include", + "assets": "./dist/reapi" + }, + "rules": { + "flatCompilation": true + } +} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..a848c74 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,87 @@ + # This is a basic workflow to help you get started with Actions + + name: CI + + on: + push: + branches: [ release ] + workflow_dispatch: + branches: [ release ] + + jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install Node.js + uses: actions/setup-node@v1 + with: + node-version: 12 + - name: Setup Build Variables + id: buildvars + uses: actions/github-script@v3 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + try { + const package = require(`${process.env.GITHUB_WORKSPACE}/package.json`); + ['name', 'version', 'description', 'author'] + .forEach(k => core.setOutput(k, package[k])); + const tagVersion = package.version.replace(/\./g, ''); + core.setOutput('tagversion', tagVersion); + core.setOutput('tagname', `${package.name}-${tagVersion}`); + core.setOutput('releasename', `${package.description} Release v${package.version}`); + } catch (err) { + core.setFailed(err.message); + } + - name: Install Dependencies + run: npm install + - name: Build project + run: npm run build + - name: Pack bundles + run: npm run pack + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.buildvars.outputs.tagname }} + release_name: ${{ steps.buildvars.outputs.releasename }} + draft: false + prerelease: false + - name: Upload Release Addons Src + id: upload-release-addons-src + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./dist/bundles/snowwars-${{ steps.buildvars.outputs.tagversion }}-addons-src.zip + asset_name: snowwars-${{ steps.buildvars.outputs.tagversion }}-addons-src.zip + asset_content_type: application/zip + - name: Upload Release Build + id: upload-release-addons-reapi + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./dist/bundles/snowwars-${{ steps.buildvars.outputs.tagversion }}-addons-build.zip + asset_name: snowwars-${{ steps.buildvars.outputs.tagversion }}-addons-build.zip + asset_content_type: application/zip + - name: Upload Release Resources + id: upload-release-resources + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./dist/bundles/snowwars-${{ steps.buildvars.outputs.tagversion }}-resources.zip + asset_name: snowwars-${{ steps.buildvars.outputs.tagversion }}-resources.zip + asset_content_type: application/zip + - name: Cleanup + run: | + rm -rf ./.compiler + rm -rf ./.thirdparty + rm -rf ./dist diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..748ba90 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +dist/ +.compiler/ +.thirdparty/ diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..72b6c50 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,6 @@ +{ + "recommendations": [ + "klippy.amxxpawn-language", + "exodiusstudios.comment-anchors" + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2966cd6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "amxxpawn", + "request": "launch", + "name": "Run remote debugger", + "program": "${workspaceFolder}/src" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..af71eb4 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "editor.tabSize": 4, + "editor.insertSpaces": true, + "amxxpawn.compiler.executablePath": "${workspaceRoot}/compiler/amxxpc.exe", + "amxxpawn.compiler.includePaths": [ + "${workspaceRoot}/src/include", + "${workspaceRoot}/.compiler/include", + "${workspaceRoot}/.thirdparty/reapi/addons/amxmodx/scripting/include" + ] +} \ No newline at end of file diff --git a/CREDITS.md b/CREDITS.md new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..6449523 --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +### ❄ Snow Wars mod for Counter-Strike 1.6 +__Version:__ 0.9.0 (Alpha) + +### 📄 About + +Snow Wars is a Counter-Strike mod based on snowballs fights with original Counter-Strike modes. + +#### Weapons and Artifacts + +- Snowball - deals 50 damage on hit +- Slightshot - allows you to shoot snowballs with extra controlled power +- Lemon Juice - adds radius damage to your snowballs. It's yellow for a reason and enemies find it humiliating. +- Down Jacket - reduces taken damage +- Surprise Box - SURPRISE, but in the box. + +### 🔽 Download latest: +- [Releases](../../releases) + +### 🔄 Requirements +- Amx Mod X 1.9.0+ +- RegameDLL + ReAPI +- Metamod-R or Metamod-P (for windows) + +## 🔧 Deployment +- Clone repository. +- Install dependencies `npm i` + +#### Customize builder +Use `.amxxpack.json` configuration file + +#### Build project + +```bash +npm run build +``` + +#### Watch project + +```bash +npm run watch +``` + +#### Create bundle + +```bash +npm run pack +``` diff --git a/assets/addons/amxmodx/configs/plugins-snowwars.ini b/assets/addons/amxmodx/configs/plugins-snowwars.ini new file mode 100644 index 0000000..aebc3a2 --- /dev/null +++ b/assets/addons/amxmodx/configs/plugins-snowwars.ini @@ -0,0 +1,27 @@ +; API +api_custom_entities.amxx +api_custom_weapons.amxx + +; Core +snowwars.amxx debug +sw_gamemode.amxx debug +sw_player_attributes.amxx debug +sw_player_artifacts.amxx debug +sw_shop.amxx debug +sw_bomb.amxx debug +sw_player.amxx debug + +; Entities +sw_entity_snowball.amxx debug +sw_entity_item_artifact.amxx debug +sw_entity_fireworkrocket.amxx debug +sw_entity_fireworksbox.amxx debug + +; Weapons +sw_weapon_snowball.amxx debug +sw_weapon_slingshot.amxx debug +sw_weapon_fireworksbox.amxx debug + +; Artifacts +sw_artifact_downjacket.amxx debug +sw_artifact_lemonjuice.amxx debug diff --git a/assets/models/snowwars/v090/artifacts/p_downjacket.mdl b/assets/models/snowwars/v090/artifacts/p_downjacket.mdl new file mode 100644 index 0000000..d6c9541 Binary files /dev/null and b/assets/models/snowwars/v090/artifacts/p_downjacket.mdl differ diff --git a/assets/models/snowwars/v090/artifacts/w_downjacket.mdl b/assets/models/snowwars/v090/artifacts/w_downjacket.mdl new file mode 100644 index 0000000..1c7c8d0 Binary files /dev/null and b/assets/models/snowwars/v090/artifacts/w_downjacket.mdl differ diff --git a/assets/models/snowwars/v090/artifacts/w_lemonsnow.mdl b/assets/models/snowwars/v090/artifacts/w_lemonsnow.mdl new file mode 100644 index 0000000..eb05748 Binary files /dev/null and b/assets/models/snowwars/v090/artifacts/w_lemonsnow.mdl differ diff --git a/assets/models/snowwars/v090/weapons/p_fireworksbox.mdl b/assets/models/snowwars/v090/weapons/p_fireworksbox.mdl new file mode 100644 index 0000000..b57eaf1 Binary files /dev/null and b/assets/models/snowwars/v090/weapons/p_fireworksbox.mdl differ diff --git a/assets/models/snowwars/v090/weapons/p_slingshot.mdl b/assets/models/snowwars/v090/weapons/p_slingshot.mdl new file mode 100644 index 0000000..a717fef Binary files /dev/null and b/assets/models/snowwars/v090/weapons/p_slingshot.mdl differ diff --git a/assets/models/snowwars/v090/weapons/p_snowball.mdl b/assets/models/snowwars/v090/weapons/p_snowball.mdl new file mode 100644 index 0000000..6427ba2 Binary files /dev/null and b/assets/models/snowwars/v090/weapons/p_snowball.mdl differ diff --git a/assets/models/snowwars/v090/weapons/v_fireworksbox.mdl b/assets/models/snowwars/v090/weapons/v_fireworksbox.mdl new file mode 100644 index 0000000..2c9302d Binary files /dev/null and b/assets/models/snowwars/v090/weapons/v_fireworksbox.mdl differ diff --git a/assets/models/snowwars/v090/weapons/v_slingshot.mdl b/assets/models/snowwars/v090/weapons/v_slingshot.mdl new file mode 100644 index 0000000..2f85bc5 Binary files /dev/null and b/assets/models/snowwars/v090/weapons/v_slingshot.mdl differ diff --git a/assets/models/snowwars/v090/weapons/v_snowball.mdl b/assets/models/snowwars/v090/weapons/v_snowball.mdl new file mode 100644 index 0000000..c02c0ce Binary files /dev/null and b/assets/models/snowwars/v090/weapons/v_snowball.mdl differ diff --git a/assets/models/snowwars/v090/weapons/w_fireworksbox.mdl b/assets/models/snowwars/v090/weapons/w_fireworksbox.mdl new file mode 100644 index 0000000..bb17bf0 Binary files /dev/null and b/assets/models/snowwars/v090/weapons/w_fireworksbox.mdl differ diff --git a/assets/models/snowwars/v090/weapons/w_slingshot.mdl b/assets/models/snowwars/v090/weapons/w_slingshot.mdl new file mode 100644 index 0000000..9f08e7c Binary files /dev/null and b/assets/models/snowwars/v090/weapons/w_slingshot.mdl differ diff --git a/assets/models/snowwars/v090/weapons/w_snowball.mdl b/assets/models/snowwars/v090/weapons/w_snowball.mdl new file mode 100644 index 0000000..4961b63 Binary files /dev/null and b/assets/models/snowwars/v090/weapons/w_snowball.mdl differ diff --git a/assets/models/snowwars/v090/weapons/w_snowball_lemon.mdl b/assets/models/snowwars/v090/weapons/w_snowball_lemon.mdl new file mode 100644 index 0000000..af576de Binary files /dev/null and b/assets/models/snowwars/v090/weapons/w_snowball_lemon.mdl differ diff --git a/assets/sound/snowwars/v090/christmas_jingle.wav b/assets/sound/snowwars/v090/christmas_jingle.wav new file mode 100644 index 0000000..0fabecf Binary files /dev/null and b/assets/sound/snowwars/v090/christmas_jingle.wav differ diff --git a/assets/sound/snowwars/v090/push.wav b/assets/sound/snowwars/v090/push.wav new file mode 100644 index 0000000..20e7631 Binary files /dev/null and b/assets/sound/snowwars/v090/push.wav differ diff --git a/assets/sound/snowwars/v090/pw_shield.wav b/assets/sound/snowwars/v090/pw_shield.wav new file mode 100644 index 0000000..0b4246d Binary files /dev/null and b/assets/sound/snowwars/v090/pw_shield.wav differ diff --git a/assets/sound/snowwars/v090/rocket1.wav b/assets/sound/snowwars/v090/rocket1.wav new file mode 100644 index 0000000..f734621 Binary files /dev/null and b/assets/sound/snowwars/v090/rocket1.wav differ diff --git a/assets/sound/snowwars/v090/sbhit.wav b/assets/sound/snowwars/v090/sbhit.wav new file mode 100644 index 0000000..196437b Binary files /dev/null and b/assets/sound/snowwars/v090/sbhit.wav differ diff --git a/assets/sound/snowwars/v090/snowhit_human1.wav b/assets/sound/snowwars/v090/snowhit_human1.wav new file mode 100644 index 0000000..3e5d969 Binary files /dev/null and b/assets/sound/snowwars/v090/snowhit_human1.wav differ diff --git a/assets/sound/snowwars/v090/snowhit_human2.wav b/assets/sound/snowwars/v090/snowhit_human2.wav new file mode 100644 index 0000000..8149f7c Binary files /dev/null and b/assets/sound/snowwars/v090/snowhit_human2.wav differ diff --git a/assets/sound/snowwars/v090/snowthrow1.wav b/assets/sound/snowwars/v090/snowthrow1.wav new file mode 100644 index 0000000..2c7f7a3 Binary files /dev/null and b/assets/sound/snowwars/v090/snowthrow1.wav differ diff --git a/assets/sprites/snowwars/v090/weapon_fireworksbox.txt b/assets/sprites/snowwars/v090/weapon_fireworksbox.txt new file mode 100644 index 0000000..52c2e90 --- /dev/null +++ b/assets/sprites/snowwars/v090/weapon_fireworksbox.txt @@ -0,0 +1,11 @@ +10 +weapon 320 320hud2 0 40 80 20 +weapon_s 320 320hud5 0 40 80 20 +ammo 320 640hud7 168 232 24 24 +crosshair 320 crosshairs 24 0 24 24 +autoaim 320 crosshairs 0 72 24 24 +weapon 640 640hud2 0 90 170 45 +weapon_s 640 640hud5 0 90 170 45 +ammo 640 640hud7 168 232 24 24 +crosshair 640 crosshairs 24 0 24 24 +autoaim 640 crosshairs 0 72 24 24 diff --git a/assets/sprites/snowwars/v090/weapon_slingshot.txt b/assets/sprites/snowwars/v090/weapon_slingshot.txt new file mode 100644 index 0000000..52c2e90 --- /dev/null +++ b/assets/sprites/snowwars/v090/weapon_slingshot.txt @@ -0,0 +1,11 @@ +10 +weapon 320 320hud2 0 40 80 20 +weapon_s 320 320hud5 0 40 80 20 +ammo 320 640hud7 168 232 24 24 +crosshair 320 crosshairs 24 0 24 24 +autoaim 320 crosshairs 0 72 24 24 +weapon 640 640hud2 0 90 170 45 +weapon_s 640 640hud5 0 90 170 45 +ammo 640 640hud7 168 232 24 24 +crosshair 640 crosshairs 24 0 24 24 +autoaim 640 crosshairs 0 72 24 24 diff --git a/assets/sprites/snowwars/v090/weapon_snowball.txt b/assets/sprites/snowwars/v090/weapon_snowball.txt new file mode 100644 index 0000000..52c2e90 --- /dev/null +++ b/assets/sprites/snowwars/v090/weapon_snowball.txt @@ -0,0 +1,11 @@ +10 +weapon 320 320hud2 0 40 80 20 +weapon_s 320 320hud5 0 40 80 20 +ammo 320 640hud7 168 232 24 24 +crosshair 320 crosshairs 24 0 24 24 +autoaim 320 crosshairs 0 72 24 24 +weapon 640 640hud2 0 90 170 45 +weapon_s 640 640hud5 0 90 170 45 +ammo 640 640hud7 168 232 24 24 +crosshair 640 crosshairs 24 0 24 24 +autoaim 640 crosshairs 0 72 24 24 diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..c881625 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,64 @@ +const path = require('path'); +const fs = require('fs'); +const gulp = require('gulp'); +const zip = require('gulp-zip'); +const file = require('gulp-file'); +const merge2 = require('merge2'); + +const package = require('./package.json'); +const generateReadme = require('./helpers/bundle-readme.generator'); + +const WORK_DIR = process.cwd(); +const DIST_DIR = path.join(WORK_DIR, './dist'); +const BUILD_DIR = path.join(DIST_DIR, 'bundles'); +const REAPI_DIST_DIR = path.join(DIST_DIR, 'reapi'); + +if (!fs.existsSync(REAPI_DIST_DIR)) { + throw new Error('Build ReAPI project before packing'); +} + +const resolveArchiveName = (sufix) => `${package.name}-${package.version.replace(/\./g, '')}-${sufix}.zip`; + +const FILES = { + bundleArchive: resolveArchiveName('bundle'), + srcArchive: resolveArchiveName('addons-src'), + addonsArchive: resolveArchiveName('addons-build'), + resourcesArchive: resolveArchiveName('resources'), + readme: 'README.TXT' +}; + +const BUNDLE_FILES = [ + { name: FILES.addonsArchive, description: 'compiled plugins and source code' }, + { name: FILES.resourcesArchive, description: 'mod resources' } +]; + +console.log(BUNDLE_FILES); + +gulp.task('pack:bundles', () => { + const dirPatterns = { + all: REAPI_DIST_DIR + '/**', + addons: REAPI_DIST_DIR + '/addons{,/**}', + plugins: REAPI_DIST_DIR + '/addons/amxmodx/plugins{,/**}', + modules: REAPI_DIST_DIR + '/addons/amxmodx/modules{,/**}' + }; + + return merge2([ + gulp.src([dirPatterns.addons, '!' + dirPatterns.plugins, '!' + dirPatterns.modules]) + .pipe(zip(FILES.srcArchive)), + gulp.src([dirPatterns.addons]) + .pipe(zip(FILES.addonsArchive)), + gulp.src([dirPatterns.all, '!' + dirPatterns.addons]) + .pipe(zip(FILES.resourcesArchive)), + file(FILES.readme, generateReadme(BUNDLE_FILES), {src: true}) + ]).pipe(gulp.dest(BUILD_DIR)); +}); + +gulp.task('pack:full', () => { + const bundleFiles = BUNDLE_FILES.map(file => path.join(BUILD_DIR, file.name)); + + return gulp.src(bundleFiles) + .pipe(zip(FILES.bundleArchive)) + .pipe(gulp.dest(BUILD_DIR)) +}) + +gulp.task('default', gulp.series('pack:bundles', 'pack:full')); diff --git a/helpers/bundle-readme.generator.js b/helpers/bundle-readme.generator.js new file mode 100644 index 0000000..64230a1 --- /dev/null +++ b/helpers/bundle-readme.generator.js @@ -0,0 +1,26 @@ +const ARCHIVE_NAME_MAXLEN = 32; +const JOIN_STR = '\r\n'; +const INDENT = ' '; +const INSTALLATION_TEXT = 'Extract addons and resources to cstrike folder'; + +function getFilesList(prefix, files) { + return Object.keys(files).map(key => { + const { name, description } = files[key]; + + if (!description) { + return; + } + + const spaces = ' '.repeat(ARCHIVE_NAME_MAXLEN - name.length); + + return `${prefix}${name}${spaces} - ${description}` + }).filter(str => !!str).join(JOIN_STR); +} + +module.exports = (files) => [ + '[INSTALLATION]', + `${INDENT}${INSTALLATION_TEXT}`, + '', + '[FILES]', + getFilesList(INDENT, files) +].join(JOIN_STR); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..15e0572 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,9922 @@ +{ + "name": "snowwars", + "version": "0.9.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "snowwars", + "version": "0.9.0", + "hasInstallScript": true, + "license": "MIT", + "devDependencies": { + "amxxpack": "^1.0.2", + "gulp": "^4.0.2", + "gulp-file": "^0.4.0", + "gulp-zip": "^5.0.2", + "merge2": "^1.2.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", + "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==", + "dev": true + }, + "node_modules/amxxpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/amxxpack/-/amxxpack-1.0.2.tgz", + "integrity": "sha512-jhbLHyiCg0jzi0nOQce5JL4rsnAjGGdPn/suGqVJILLzcOsYFMUN8+ad6aa7FX1mCQY6j+WPrCxQHP20H90w4A==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.3", + "colors": "^1.4.0", + "commander": "^9.0.0", + "decompress": "^4.2.1", + "download": "^8.0.0", + "glob": "^7.2.0", + "glob-promise": "^4.2.2", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "normalize-path": "^3.0.0" + }, + "bin": { + "amxxpack": "lib/cli/index.js" + } + }, + "node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "dev": true, + "dependencies": { + "file-type": "^4.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/archive-type/node_modules/file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "dev": true, + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dev": true, + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dev": true, + "dependencies": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "dependencies": { + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "dependencies": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "dev": true, + "dependencies": { + "async-done": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "dev": true, + "dependencies": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.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/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/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "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" + } + }, + "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/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "dependencies": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "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/collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dev": true, + "dependencies": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/commander": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", + "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==", + "dev": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "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=", + "dev": true + }, + "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" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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/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==", + "dev": true + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "dev": true, + "dependencies": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + } + }, + "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/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "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" + } + }, + "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=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "dependencies": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/download": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", + "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", + "dev": true, + "dependencies": { + "archive-type": "^4.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.2.1", + "ext-name": "^5.0.0", + "file-type": "^11.1.0", + "filenamify": "^3.0.0", + "get-stream": "^4.1.0", + "got": "^8.3.1", + "make-dir": "^2.1.0", + "p-event": "^2.1.0", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/download/node_modules/file-type": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/download/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/download/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/download/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/download/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/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "node_modules/each-props/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "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==", + "dev": true, + "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": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "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/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dev": true, + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", + "dev": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", + "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fined/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs-mkdirp-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "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": [ + "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/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "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", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "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/glob-promise": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", + "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/ahmadnassri" + }, + "peerDependencies": { + "glob": "^7.1.6" + } + }, + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-watcher/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/glob-watcher/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/glob-watcher/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dev": true, + "dependencies": { + "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dev": true, + "dependencies": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dev": true, + "dependencies": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-file": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/gulp-file/-/gulp-file-0.4.0.tgz", + "integrity": "sha1-RRNWoqxQicbbkaBEQlKgVDZXAGs=", + "dev": true, + "dependencies": { + "through2": "^0.4.1", + "vinyl": "^2.1.0" + } + }, + "node_modules/gulp-zip": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz", + "integrity": "sha512-XZr/y91IliK/SpR74g3TkZejGkGEmK7CSDjSghT1jXshgO+dFvpLIz9w9fpuwkew6i7k4F+G24TubNgq1ISzEw==", + "dev": true, + "dependencies": { + "get-stream": "^5.2.0", + "plugin-error": "^1.0.1", + "through2": "^3.0.1", + "vinyl": "^2.1.0", + "yazl": "^2.5.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "gulp": ">=4" + }, + "peerDependenciesMeta": { + "gulp": { + "optional": true + } + } + }, + "node_modules/gulp-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gulp-zip/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/gulp-zip/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "dependencies": { + "glogg": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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-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-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "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/inflight": { + "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" + } + }, + "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/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "dependencies": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "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-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "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-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.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/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", + "dev": true + }, + "node_modules/keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "dev": true, + "dependencies": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/liftoff/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-iterator/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dev": true, + "dependencies": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/matchdep/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "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/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dev": true, + "dependencies": { + "p-timeout": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "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": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "dependencies": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "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/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/readable-stream/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/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/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-bom-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "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/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/seek-bzip/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "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/semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "dev": true, + "dependencies": { + "sver-compat": "^1.5.0" + }, + "engines": { + "node": ">= 0.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/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length/node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "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==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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_decoder/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/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-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "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/sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "dev": true, + "dependencies": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", + "dev": true, + "dependencies": { + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/through2-filter/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/through2/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/through2/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/to-regex-range/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/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/to-through/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.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/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "node_modules/yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "node_modules/yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } + } + }, + "dependencies": { + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/node": { + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", + "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==", + "dev": true + }, + "amxxpack": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/amxxpack/-/amxxpack-1.0.2.tgz", + "integrity": "sha512-jhbLHyiCg0jzi0nOQce5JL4rsnAjGGdPn/suGqVJILLzcOsYFMUN8+ad6aa7FX1mCQY6j+WPrCxQHP20H90w4A==", + "dev": true, + "requires": { + "chokidar": "^3.5.3", + "colors": "^1.4.0", + "commander": "^9.0.0", + "decompress": "^4.2.1", + "download": "^8.0.0", + "glob": "^7.2.0", + "glob-promise": "^4.2.2", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "normalize-path": "^3.0.0" + } + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "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" + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "requires": { + "buffer-equal": "^1.0.0" + } + }, + "archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "dev": true, + "requires": { + "file-type": "^4.2.0" + }, + "dependencies": { + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true + } + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dev": true, + "requires": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + } + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "dev": true, + "requires": { + "async-done": "^1.2.2" + } + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "dev": true, + "requires": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "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 + }, + "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 + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "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" + } + }, + "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" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "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" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "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 + }, + "collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dev": true, + "requires": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "commander": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz", + "integrity": "sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": 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, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "dev": true, + "requires": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + } + }, + "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 + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": 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=", + "dev": true + }, + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, + "requires": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "requires": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "requires": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "dev": true, + "requires": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + } + } + }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "requires": { + "kind-of": "^5.0.2" + } + }, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "download": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", + "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", + "dev": true, + "requires": { + "archive-type": "^4.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.2.1", + "ext-name": "^5.0.0", + "file-type": "^11.1.0", + "filenamify": "^3.0.0", + "get-stream": "^4.1.0", + "got": "^8.3.1", + "make-dir": "^2.1.0", + "p-event": "^2.1.0", + "pify": "^4.0.1" + }, + "dependencies": { + "file-type": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "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" + } + } + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "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" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "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==", + "dev": true, + "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": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "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==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "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 + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dev": true, + "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==", + "dev": true + } + } + }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "requires": { + "mime-db": "^1.28.0" + } + }, + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "requires": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", + "dev": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true + }, + "filenamify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", + "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", + "dev": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + } + }, + "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" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "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-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "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": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "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==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "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", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "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" + } + }, + "glob-promise": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", + "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", + "dev": true, + "requires": { + "@types/glob": "^7.1.3" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "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 + }, + "gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dev": true, + "requires": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + } + }, + "gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + } + }, + "gulp-file": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/gulp-file/-/gulp-file-0.4.0.tgz", + "integrity": "sha1-RRNWoqxQicbbkaBEQlKgVDZXAGs=", + "dev": true, + "requires": { + "through2": "^0.4.1", + "vinyl": "^2.1.0" + } + }, + "gulp-zip": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz", + "integrity": "sha512-XZr/y91IliK/SpR74g3TkZejGkGEmK7CSDjSghT1jXshgO+dFvpLIz9w9fpuwkew6i7k4F+G24TubNgq1ISzEw==", + "dev": true, + "requires": { + "get-stream": "^5.2.0", + "plugin-error": "^1.0.1", + "through2": "^3.0.1", + "vinyl": "^2.1.0", + "yazl": "^2.5.1" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "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" + } + }, + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "^1.0.0" + } + }, + "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-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-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "requires": { + "has-symbol-support-x": "^1.4.1" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "inflight": { + "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" + } + }, + "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 + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "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-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "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-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "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-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", + "dev": true + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "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=", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "requires": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", + "dev": true + }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, + "last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "dev": true, + "requires": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + } + }, + "lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "requires": { + "flush-write-stream": "^1.0.2" + } + }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "dependencies": { + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dev": true, + "requires": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.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": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "dev": true + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + } + } + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + } + }, + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "requires": { + "once": "^1.3.2" + } + }, + "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 + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "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==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true + }, + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dev": true, + "requires": { + "p-timeout": "^2.0.1" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "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=", + "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-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "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": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "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 + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true + }, + "replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + } + }, + "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 + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "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" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "requires": { + "value-or-function": "^3.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "requires": { + "commander": "^2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "dev": true, + "requires": { + "sver-compat": "^1.5.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 + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "dev": true, + "requires": { + "sort-keys": "^1.0.0" + }, + "dependencies": { + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "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==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + } + } + }, + "stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "requires": { + "is-natural-number": "^4.0.1" + } + }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "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 + }, + "sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "dev": true, + "requires": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=", + "dev": true, + "requires": { + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "requires": { + "through2": "^2.0.3" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + } + }, + "undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "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 + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "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", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "dev": true + }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "dependencies": { + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + } + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.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" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4501cac --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "snowwars", + "version": "0.9.0", + "author": "Hedgehog Fog", + "description": "Snow Wars Mod", + "scripts": { + "build": "amxxpack build", + "watch": "amxxpack build --watch", + "postinstall": "amxxpack install", + "pack": "gulp" + }, + "license": "MIT", + "devDependencies": { + "amxxpack": "^1.0.2", + "gulp": "^4.0.2", + "gulp-file": "^0.4.0", + "gulp-zip": "^5.0.2", + "merge2": "^1.2.0" + } +} diff --git a/src/include/api_custom_entities.inc b/src/include/api_custom_entities.inc new file mode 100644 index 0000000..7e1de2a --- /dev/null +++ b/src/include/api_custom_entities.inc @@ -0,0 +1,122 @@ +#if defined _api_custom_entities_included + #endinput +#endif +#define _api_custom_entities_included + +#pragma reqlib api_custom_entities + +#define CE_LOG_PREFIX "[CE]" +#define CE_BASE_CLASSNAME "info_target" + +enum CEPreset +{ + CEPreset_None = 0, + CEPreset_Item, // For items + CEPreset_NPC, // For NPC + CEPreset_Prop // For static props +}; + +enum CEFunction +{ + CEFunction_Spawn, // Call when entity spawned + CEFunction_Kill, // Call when some plugin try to kill entity. return PLUGIN_HANDLED to discard kill. + CEFunction_Killed, // Call when entity killed + CEFunction_Remove, // Call when entity removed + CEFunction_Picked, // Call when player pick item + CEFunction_Pickup, // Call when player touch item. Should return PLUGIN_HANDLED if picked. + CEFunction_KVD // Call when new key value obtained +}; +/* + * Register entity. + * + * @param szName Name of entity. + * @param modelIndex Precached model index. + * @param size Size of entity. + * @param offset Offset of entity origin. + * @param lifeTime Life time of entity. + * @param preset Preset for entity. + * @return Handler of registered entity. + */ +native CE_Register +( + const szName[], + modelIndex = 0, + const Float:vMins[3] = {-8.0, -8.0, -8.0}, + const Float:vMaxs[3] = {8.0, 8.0, 8.0}, + Float:fLifeTime = 0.0, + Float:fRespawnTime = 10.0, + bool:ignoreRounds = false, + CEPreset:preset = CEPreset_None +); + +/* + * Spawn entity. + * + * @param szName Name of entity. + * @param vOrigin Spawn origin. + * @return Entity index. + */ +native CE_Create(const szName[], const Float:vOrigin[3], bool:temp = true); + +/* + * Kill entity. + * + * @param ent Index of entity. + * @param killer Index of killer. + */ +native bool:CE_Kill(ent, killer = 0); + + +/* + * Gets size of entity. + * + * @param szClassname Classname of entity. + * @param vSize Output vector. + */ +native CE_GetSize(const szName[], Float:vMins[3], Float:vMaxs[3]); + +/* + * Gets modelindex of entity. + * + * @param szClassname Classname of entity. + * @return Modelindex of entity + */ +native CE_GetModelIndex(const szName[]); + +/* + * Remove entity correctly. + * + * @param ent Index of entity. + * @return Result true/false + */ +native bool:CE_Remove(ent); + +/* + * Register new hook for entity. + * + * @param function Function handler + * @param szClassname Classname of entity + * @param szCallback Callback + */ +native CE_RegisterHook(CEFunction:function, const szClassname[], const szCallback[]); + +/* + * Check if entity is associated with current plugin. + * + * @param ent Index of entity. + * @return Result true/false + */ +native CE_CheckAssociation_(ent); + +stock bool:CE_CheckAssociation(ent) { + static bool:notified = false; + if (!notified) { + log_amx("%s function ^"CE_CheckAssociation^" is deprecated. Check ^"CE_GetHandlerByEntity^" function.", CE_LOG_PREFIX); + notified = true; + } + + return CE_CheckAssociation_(ent); +} + +native CE_GetHandler(const szClassname[]); +native CE_GetHandlerByEntity(ent); \ No newline at end of file diff --git a/src/include/api_custom_weapons.inc b/src/include/api_custom_weapons.inc new file mode 100644 index 0000000..d81935c --- /dev/null +++ b/src/include/api_custom_weapons.inc @@ -0,0 +1,103 @@ +// This is a beta version, some functions may be unstable. Use at your own risk. + +#if defined _api_custom_weapons_included + #endinput +#endif +#define _api_custom_weapons_included + +#pragma reqlib api_custom_weapons + +#define WEAPON_NOCLIP -1 +#define CW_INVALID_HANDLER CW:-1 + +#define DEFAULT_FOV 90 + +#define VECTOR_CONE_1DEGREES {0.00873, 0.00873, 0.00873} +#define VECTOR_CONE_2DEGREES {0.01745, 0.01745, 0.01745} +#define VECTOR_CONE_3DEGREES {0.02618, 0.02618, 0.02618} +#define VECTOR_CONE_4DEGREES {0.03490, 0.03490, 0.03490} +#define VECTOR_CONE_5DEGREES {0.04362, 0.04362, 0.04362} +#define VECTOR_CONE_6DEGREES {0.05234, 0.05234, 0.05234} +#define VECTOR_CONE_7DEGREES {0.06105, 0.06105, 0.06105} +#define VECTOR_CONE_8DEGREES {0.06976, 0.06976, 0.06976} +#define VECTOR_CONE_9DEGREES {0.07846, 0.07846, 0.07846} +#define VECTOR_CONE_10DEGREES {0.08716, 0.08716, 0.08716} +#define VECTOR_CONE_15DEGREES {0.13053, 0.13053, 0.13053} +#define VECTOR_CONE_20DEGREES {0.17365, 0.17365, 0.17365} +#define VECTOR_CONE_DM_SHOTGUN {0.08716, 0.04362, 0.00} +#define VECTOR_CONE_DM_DOUBLESHOTGUN {0.17365, 0.04362, 0.00} + +enum CW_Data { + CW_Data_PluginId, + CW_Data_Name, + CW_Data_Icon, + CW_Data_Id, + CW_Data_ClipSize, + CW_Data_PrimaryAmmoType, + CW_Data_PrimaryAmmoMaxAmount, + CW_Data_SecondaryAmmoType, + CW_Data_SecondaryAmmoMaxAmount, + CW_Data_SlotId, + CW_Data_Position, + CW_Data_WeaponFlags, + CW_Data_Bindings, + CW_Data_Flags +} + +enum CW_Binding { + CWB_Idle, + CWB_Holster, + CWB_Deploy, + CWB_PrimaryAttack, + CWB_SecondaryAttack, + CWB_Reload, + CWB_DefaultReloadEnd, + CWB_CanDrop, + CWB_GetMaxSpeed, + CWB_Spawn, + CWB_WeaponBoxModelUpdate, + CWB_Pump, + CWB_GrenadeThrow +} + +enum CW_Flags (<<=1) { + CWF_None, + CWF_NoBulletSmoke = 1, + CWF_NoBulletDecal +} + +native CW:CW_Register(const szName[], iWeaponId, iClipSize = WEAPON_NOCLIP, iPrimaryAmmoType = -1, iPrimaryAmmoMaxAmount = -1, iSecondaryAmmoType = -1, iSecondaryAmmoMaxAmount = -1, iSlotId = 0, iPosition = 0, iWeaponFlags = 0, const szIcon[] = "", CW_Flags:iFlags = CWF_None); +native CW_Bind(CW:iHandler, CW_Binding:iBinding, const szFunctionName[]); +native CW:CW_GetHandlerByEntity(pEntity); +native CW:CW_GetHandler(const szName[]); +native any:CW_GetWeaponData(CW:iHandler, CW_Data:iParam); +native CW_GetWeaponStringData(CW:iHandler, CW_Data:iParam, szOut[], iLen); + +native CW_Deploy(pItem); +native CW_Holster(pItem); +native CW_ItemPostFrame(pItem); +native CW_Idle(pItem); +native CW_Reload(pItem); +native CW_PrimaryAttack(pItem); +native CW_SecondaryAttack(pItem); + +native CW_PlayAnimation(pItem, iSequence, Float:flDuration = 0.0); +native CW_FireBulletsPlayer(pPlayer, iShots, const Float:vecSrc[3], const Float:vecDirShooting[3], const Float:vecSpread[3], Float:flDistance, Float:flDamage, Float:flRangeModifier = 1.0, pevAttacker = 0, Float:vOut[3]); +native CW_GrenadeDetonate(pGrenade, Float:flRadius = 0.0, Float:flMagnitude = 0.0); +native CW_GrenadeSmoke(pGrenade); +native CW_EjectWeaponBrass(pItem, iModelIndex, iSoundType); + +native bool:CW_DefaultDeploy(pWeapon, const szViewModel[], const szWeaponModel[], iAnim, const szAnimExt[] = ""); +native bool:CW_DefaultShot(pItem, Float:flDamage, Float:flRangeModifier, Float:flRate, Float:flSpread[3] = VECTOR_CONE_6DEGREES, iShots = 1, Float:flDistance = 8192.0); +native CW_DefaultReload(pItem, iAnim, Float:fDuration); +native bool:CW_DefaultShotgunIdle(pItem, iAnim, iReloadEndAnim, Float:fDuration = 0.25, Float:fReloadEndDuration = 1.0, const szPumpSound[] = ""); +native bool:CW_DefaultShotgunShot(pItem, Float:flDamage, Float:flRangeModifier, Float:flRate, Float:flPumpDelay, Float:flSpread[3] = VECTOR_CONE_DM_SHOTGUN, iShots = 16, Float:flDistance = 2048.0); +native CW_DefaultShotgunReload(pItem, iStartAnim, iEndAnim, Float:fDelay, Float:fDuration); +native CW_DefaultSwing(pItem, Float:flDamage, Float:flRate, Float:flDistance); + +native CW_GetPlayer(pItem); +native CW_RemovePlayerItem(pItem); + +native CW_GiveWeapon(pPlayer, const szWeapon[]); +native CW_SpawnWeapon(CW:iHandler); +native CW_SpawnWeaponBox(CW:iHandler); diff --git a/src/include/screenfade_util.inc b/src/include/screenfade_util.inc new file mode 100644 index 0000000..ff65fb7 --- /dev/null +++ b/src/include/screenfade_util.inc @@ -0,0 +1,92 @@ +#if defined _screenfade_util_included + #endinput +#endif +#define _screenfade_util_included + +#define FFADE_IN 0x0000 // Just here so we don't pass 0 into the function +#define FFADE_OUT 0x0001 // Fade out (not in) +#define FFADE_MODULATE 0x0002 // Modulate (don't blend) +#define FFADE_STAYOUT 0x0004 // ignores the duration, stays faded out until new ScreenFade message received + +enum { + Red, + Green, + Blue +}; + +stock FixedUnsigned16(Float:flValue, iScale) +{ + new iOutput; + + iOutput = floatround(flValue * iScale); + + if ( iOutput < 0 ) + iOutput = 0; + + if ( iOutput > 0xFFFF ) + iOutput = 0xFFFF; + + return iOutput; +} + +stock UTIL_ScreenFade(id=0,iColor[3]={0,0,0},Float:flFxTime=-1.0,Float:flHoldTime=0.0,iAlpha=0,iFlags=FFADE_IN,bool:bReliable=false,bool:bExternal=false) +{ + if( id && !is_user_connected(id)) + return; + + new iFadeTime; + if( flFxTime == -1.0 ) + { + iFadeTime = 4; + } + else + { + iFadeTime = FixedUnsigned16( flFxTime , 1<<12 ); + } + + static gmsgScreenFade; + if( !gmsgScreenFade ) + { + gmsgScreenFade = get_user_msgid("ScreenFade"); + } + + new MSG_DEST; + if( bReliable ) + { + MSG_DEST = id ? MSG_ONE : MSG_ALL; + } + else + { + MSG_DEST = id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST; + } + + if( bExternal ) + { + emessage_begin( MSG_DEST, gmsgScreenFade, _, id ); + ewrite_short( iFadeTime ); + ewrite_short( FixedUnsigned16( flHoldTime , 1<<12 ) ); + ewrite_short( iFlags ); + ewrite_byte( iColor[Red] ); + ewrite_byte( iColor[Green] ); + ewrite_byte( iColor[Blue] ); + ewrite_byte( iAlpha ); + emessage_end(); + } + else + { + message_begin( MSG_DEST, gmsgScreenFade, _, id ); + write_short( iFadeTime ); + write_short( FixedUnsigned16( flHoldTime , 1<<12 ) ); + write_short( iFlags ); + write_byte( iColor[Red] ); + write_byte( iColor[Green] ); + write_byte( iColor[Blue] ); + write_byte( iAlpha ); + message_end(); + } +} + +stock UTIL_FadeToBlack(id,Float:fxtime=3.0,bool:bReliable=false,bool:bExternal=false) +{ + UTIL_ScreenFade(id, _, fxtime, fxtime, 255, FFADE_OUT|FFADE_STAYOUT,bReliable,bExternal); +} \ No newline at end of file diff --git a/src/include/snowwars.inc b/src/include/snowwars.inc new file mode 100644 index 0000000..4333b5c --- /dev/null +++ b/src/include/snowwars.inc @@ -0,0 +1,31 @@ +/**/ + +#if defined _snowwars_included + #endinput +#endif +#define _snowwars_included + +#pragma reqlib snowwars + +#include + +enum SW_PlayerAttribute { + SW_PlayerAttribute_Resistance = 0, + SW_PlayerAttribute_Power +} + +native any:SW_Player_GetAttribute(pPlayer, SW_PlayerAttribute:iAttrib); +native SW_Player_SetAttribute(pPlayer, SW_PlayerAttribute:iAttrib, any:value); + +native SW_PlayerArtifact_Register( + const szId[], + const szActivateFunc[], + const szDeactivateFunc[] +); +native SW_PlayerArtifact_GetHandler(const szId[]); + +native bool:SW_Player_GiveArtifact(pPlayer, const szId[]); +native bool:SW_Player_TakeArtifact(pPlayer, const szId[]); +native bool:SW_Player_TakeArtifactBySlot(pPlayer, iSlot); +native bool:SW_Player_HasArtifact(pPlayer, const szId[]); +native SW_Player_FindArtifact(pPlayer, iOffset, szId[], iLen); diff --git a/src/include/snowwars_const.inc b/src/include/snowwars_const.inc new file mode 100644 index 0000000..83c74d3 --- /dev/null +++ b/src/include/snowwars_const.inc @@ -0,0 +1,2 @@ +#define SW_TITLE "Snow Wars" +#define SW_VERSION "0.9.0" diff --git a/src/scripts/api/api_custom_entities.sma b/src/scripts/api/api_custom_entities.sma new file mode 100644 index 0000000..3a4bf43 --- /dev/null +++ b/src/scripts/api/api_custom_entities.sma @@ -0,0 +1,1048 @@ +#pragma semicolon 1 + +#include +#include + +#include +#include +#include + +#include +#include + +#include + +#define PLUGIN "[API] Custom Entities" +#define VERSION "1.2.2" +#define AUTHOR "Hedgehog Fog" + +#define CE_BASE_CLASSNAME "info_target" +#define LOG_PREFIX "[CE]" + +#define TASKID_SUM_DISAPPEAR 1000 +#define TASKID_SUM_RESPAWN 2000 +#define TASKID_SUM_REMOVE 3000 + +/*--------------------------------[ Constants ]--------------------------------*/ + +enum CEPreset +{ + CEPreset_None = 0, + CEPreset_Item, + CEPreset_NPC, + CEPreset_Prop +}; + +enum CEFunction +{ + CEFunction_Spawn, + CEFunction_Kill, + CEFunction_Killed, + CEFunction_Remove, + CEFunction_Picked, + CEFunction_Pickup, + CEFunction_KVD +}; + +enum CEHookData +{ + CEHookData_PluginID, + CEHookData_FuncID +}; + +enum _:RegisterArgs +{ + RegisterArg_Name = 1, + RegisterArg_ModelIndex, + RegisterArg_Mins, + RegisterArg_Maxs, + RegisterArg_LifeTime, + RegisterArg_RespawnTime, + RegisterArg_IgnoreRounds, + RegisterArg_Preset +}; + +enum _:CEData +{ + CEData_Handler, + CEData_TempIndex, + CEData_WorldIndex, + CEData_StartOrigin +}; + +enum _:KVD { + KVD_Key[64], + KVD_Value[64] +} + +/*--------------------------------[ Variables ]--------------------------------*/ + +new g_ptrBaseClassname; + +new Trie:g_entityHandlers = Invalid_Trie; +new Array:g_entityName = Invalid_Array; +new Array:g_entityPluginID = Invalid_Array; +new Array:g_entityModelIndex = Invalid_Array; +new Array:g_entityMins = Invalid_Array; +new Array:g_entityMaxs = Invalid_Array; +new Array:g_entityLifeTime = Invalid_Array; +new Array:g_entityRespawnTime = Invalid_Array; +new Array:g_entityPreset = Invalid_Array; +new Array:g_entityIgnoreRounds = Invalid_Array; +new Array:g_entityHooks = Invalid_Array; + +new g_entityCount = 0; + +new Array:g_worldEntities = Invalid_Array; +new Array:g_tmpEntities = Invalid_Array; + +new g_lastCEIdx = 0; +new g_lastCEEnt = 0; + +new Array:g_ceKvd = Invalid_Array; + +public plugin_init() +{ + register_plugin(PLUGIN, VERSION, AUTHOR); + + SpawnLatestCe(); + + RegisterHam(Ham_Touch, CE_BASE_CLASSNAME, "OnTouch", .Post = 1); + RegisterHam(Ham_Killed, CE_BASE_CLASSNAME, "OnKilled", .Post = 0); + + register_event("HLTV", "OnNewRound", "a", "1=0", "2=0"); + + register_concmd("ce_spawn", "OnClCmd_CESpawn", ADMIN_CVAR); +} + +public plugin_end() +{ + for (new i = 0; i < g_entityCount; ++i) { + DestroyFunctions(i); + } + + if (g_entityCount) { + TrieDestroy(g_entityHandlers); + ArrayDestroy(g_entityName); + ArrayDestroy(g_entityPluginID); + ArrayDestroy(g_entityModelIndex); + ArrayDestroy(g_entityMins); + ArrayDestroy(g_entityMaxs); + ArrayDestroy(g_entityLifeTime); + ArrayDestroy(g_entityRespawnTime); + ArrayDestroy(g_entityIgnoreRounds); + ArrayDestroy(g_entityPreset); + ArrayDestroy(g_entityHooks); + } + + if (g_tmpEntities) { + ArrayDestroy(g_tmpEntities); + } + + if (g_worldEntities) { + ArrayDestroy(g_worldEntities); + } + + if (g_ceKvd != Invalid_Array) { + ArrayDestroy(g_ceKvd); + } +} + +public plugin_precache() +{ + g_ptrBaseClassname = engfunc(EngFunc_AllocString, CE_BASE_CLASSNAME); + + register_forward(FM_KeyValue, "OnKeyValue", 1); + RegisterHam(Ham_Spawn, CE_BASE_CLASSNAME, "OnSpawn", .Post = 1); +} + +public plugin_natives() +{ + register_library("api_custom_entities"); + + register_native("CE_Register", "Native_Register"); + register_native("CE_Create", "Native_Create"); + register_native("CE_Kill", "Native_Kill"); + register_native("CE_Remove", "Native_Remove"); + + register_native("CE_GetSize", "Native_GetSize"); + register_native("CE_GetModelIndex", "Native_GetModelIndex"); + + register_native("CE_RegisterHook", "Native_RegisterHook"); + + register_native("CE_CheckAssociation_", "Native_CheckAssociation"); + + register_native("CE_GetHandler", "Native_GetHandler"); + register_native("CE_GetHandlerByEntity", "Native_GetHandlerByEntity"); +} + +/*--------------------------------[ Natives ]--------------------------------*/ + +public Native_Register(pluginID, argc) +{ + static szClassName[32]; + get_string(RegisterArg_Name, szClassName, charsmax(szClassName)); + + new modelIndex = get_param(RegisterArg_ModelIndex); + new Float:fLifeTime = get_param_f(RegisterArg_LifeTime); + new Float:fRespawnTime = get_param_f(RegisterArg_RespawnTime); + new bool:ignoreRounds = bool:get_param(RegisterArg_IgnoreRounds); + new CEPreset:preset = CEPreset:get_param(RegisterArg_Preset); + + new Float:vMins[3]; + get_array_f(RegisterArg_Mins, vMins, 3); + + new Float:vMaxs[3]; + get_array_f(RegisterArg_Maxs, vMaxs, 3); + + return Register(szClassName, pluginID, modelIndex, vMins, vMaxs, fLifeTime, fRespawnTime, ignoreRounds, preset); +} + +public Native_Create(pluginID, argc) +{ + new szClassName[32]; + get_string(1, szClassName, charsmax(szClassName)); + + new Float:vOrigin[3]; + get_array_f(2, vOrigin, 3); + + new bool:temp = !!get_param(3); + + return Create(szClassName, vOrigin, temp); +} + +public Native_Kill(pluginID, argc) +{ + new ent = get_param(1); + new killer = get_param(2); + + Kill(ent, killer); +} + +public bool:Native_Remove(pluginID, argc) +{ + new ent = get_param(1); + return Remove(ent); +} + +public Native_GetSize(pluginID, argc) +{ + if (!g_entityCount) { + return false; + } + + new szClassName[32]; + get_string(1, szClassName, charsmax(szClassName)); + + new ceIdx; + if (!TrieGetCell(g_entityHandlers, szClassName, ceIdx)) { + return false; + } + + new Float:vMins[3]; + ArrayGetArray(g_entityMins, ceIdx, vMins); + + new Float:vMaxs[3]; + ArrayGetArray(g_entityMaxs, ceIdx, vMaxs); + + set_array_f(2, vMins, 3); + set_array_f(3, vMaxs, 3); + + return true; +} + +public Native_GetModelIndex(pluginID, argc) +{ + if (!g_entityCount) { + return false; + } + + new szClassName[32]; + get_string(1, szClassName, charsmax(szClassName)); + + new ceIdx; + if (!TrieGetCell(g_entityHandlers, szClassName, ceIdx)) { + return false; + } + + return ArrayGetCell(g_entityModelIndex, ceIdx); +} + +public Native_RegisterHook(pluginID, argc) +{ + new CEFunction:function = CEFunction:get_param(1); + + new szClassname[32]; + get_string(2, szClassname, charsmax(szClassname)); + + new szCallback[32]; + get_string(3, szCallback, charsmax(szCallback)); + + RegisterHook(function, szClassname, szCallback, pluginID); +} + +public Native_CheckAssociation(pluginID, argc) +{ + new ent = get_param(1); + new ceIdx = GetHandlerByEntity(ent); + + return (ceIdx > 0 && pluginID == ArrayGetCell(g_entityPluginID, ceIdx)); +} + +public Native_GetHandler(pluginID, argc) +{ + new szClassname[32]; + get_string(1, szClassname, charsmax(szClassname)); + + return GetHandler(szClassname); +} + +public Native_GetHandlerByEntity(pluginID, argc) +{ + new ent = get_param(1); + + return GetHandlerByEntity(ent); +} + +/*--------------------------------[ Hooks ]--------------------------------*/ + +public OnClCmd_CESpawn(id, level, cid) +{ + if(!cmd_access(id, level, cid, 2)) { + return PLUGIN_HANDLED; + } + + static szClassname[128]; + read_args(szClassname, charsmax(szClassname)); + remove_quotes(szClassname); + + if(szClassname[0] == '^0') { + return PLUGIN_HANDLED; + } + + static Float:vOrigin[3]; + pev(id, pev_origin, vOrigin); + + new ent = Create(szClassname, vOrigin); + if (ent) { + dllfunc(DLLFunc_Spawn, ent); + } + + return PLUGIN_HANDLED; +} + +public OnKeyValue(ent, kvd) +{ + if (!g_entityCount) { + return; + } + + static szKey[32]; + get_kvd(kvd, KV_KeyName, szKey, charsmax(szKey)); + + static szValue[32]; + get_kvd(kvd, KV_Value, szValue, charsmax(szValue)); + + if (equal(szKey, "classname")) { + SpawnLatestCe(); + + if (TrieGetCell(g_entityHandlers, szValue, g_lastCEIdx)) { + g_lastCEEnt = Create (szValue, .temp = false); // clone entity + } + } + + if (g_lastCEEnt) { + AddKvd(szKey, szValue); + } +} + +public OnSpawn(ent) +{ + if (!Check(ent)) { + return; + } + + new Array:ceData = GetPData(ent); + new ceIdx = ArrayGetCell(ceData, CEData_Handler); + + //Save start origin + if (ArrayGetCell(ceData, CEData_StartOrigin) == Invalid_Array) { + new Float:vOrigin[3]; + pev(ent, pev_origin, vOrigin); + + new Array:startOrigin = ArrayCreate(3, 1); + ArrayPushArray(startOrigin, vOrigin); + + ArraySetCell(ceData, CEData_StartOrigin, startOrigin); + } + + new tmpIdx = ArrayGetCell(ceData, CEData_TempIndex); + InitEntity(ent, ceIdx, (tmpIdx >= 0)); + + ExecuteFunction(CEFunction_Spawn, ceIdx, ent); +} + +public OnTouch(ent, id) +{ + // if (pev(ent, pev_flags) & ~FL_ONGROUND) { + // return; + // } + + if (!is_user_connected(id)) { + return; + } + + if (!is_user_alive(id)) { + return; + } + + if (!g_entityCount) { + return; + } + + static szClassname[32]; + pev(ent, pev_classname, szClassname, charsmax(szClassname)); + + new ceIdx; + if (!TrieGetCell(g_entityHandlers, szClassname, ceIdx)) { + return; + } + + new CEPreset:preset = ArrayGetCell(g_entityPreset, ceIdx); + if (preset != CEPreset_Item) { + return; + } + + if (ExecuteFunction(CEFunction_Pickup, ceIdx, ent, id) > 0) { + ExecuteFunction(CEFunction_Picked, ceIdx, ent, id); + Kill(ent, id, .picked = true); + } +} + +public OnKilled(ent, killer) +{ + if (!Check(ent)) { + return HAM_IGNORED; + } + + Kill(ent, killer); + return HAM_SUPERCEDE; +} + +public OnNewRound() +{ + Cleanup(); + set_task(0.1, "TaskRespawnEntities"); +} + +/*--------------------------------[ Methods ]--------------------------------*/ + +Register( + const szClassname[], + pluginID, + modelIndex, + const Float:vMins[3], + const Float:vMaxs[3], + Float:fLifeTime, + Float:fRespawnTime, + bool:ignoreRounds, + CEPreset:preset +) +{ + if (!g_entityCount) { + g_entityHandlers = TrieCreate(); + g_entityName = ArrayCreate(32); + g_entityPluginID = ArrayCreate(); + g_entityModelIndex = ArrayCreate(); + g_entityMaxs = ArrayCreate(3); + g_entityMins = ArrayCreate(3); + g_entityLifeTime = ArrayCreate(); + g_entityRespawnTime = ArrayCreate(); + g_entityIgnoreRounds = ArrayCreate(); + g_entityPreset = ArrayCreate(); + g_entityHooks = ArrayCreate(); + } + + new index = g_entityCount; + + TrieSetCell(g_entityHandlers, szClassname, index); + + ArrayPushString(g_entityName, szClassname); + ArrayPushCell(g_entityPluginID, pluginID); + ArrayPushCell(g_entityModelIndex, modelIndex); + ArrayPushArray(g_entityMins, vMins); + ArrayPushArray(g_entityMaxs, vMaxs); + ArrayPushCell(g_entityLifeTime, fLifeTime); + ArrayPushCell(g_entityRespawnTime, fRespawnTime); + ArrayPushCell(g_entityIgnoreRounds, ignoreRounds); + ArrayPushCell(g_entityPreset, preset); + ArrayPushCell(g_entityHooks, 0); + + g_entityCount++; + + log_amx("%s Entity %s successfully registred.", LOG_PREFIX, szClassname); + + return index; +} + +Create(const szClassname[], const Float:vOrigin[3] = {0.0, 0.0, 0.0}, bool:temp = true) +{ + new ceIdx; + if (!g_entityCount || !TrieGetCell(g_entityHandlers, szClassname, ceIdx)) { + log_error(0, "%s Entity %s is not registered as custom entity.", LOG_PREFIX, szClassname); + return -1; + } + + new ent = engfunc(EngFunc_CreateNamedEntity, g_ptrBaseClassname); + set_pev(ent, pev_classname, szClassname, strlen(szClassname)); + + engfunc(EngFunc_SetOrigin, ent, vOrigin); + + new tmpIdx = -1; + new worldIdx = -1; + if (temp) { + if (!g_tmpEntities) { + g_tmpEntities = ArrayCreate(); + } + + tmpIdx = ArraySize(g_tmpEntities); + ArrayPushCell(g_tmpEntities, ent); + } else { + if (!g_worldEntities) { + g_worldEntities = ArrayCreate(); + } + + worldIdx = ArraySize(g_worldEntities); + ArrayPushCell(g_worldEntities, ent); + } + + new Array:ceData = CreatePData(ent); + + ArraySetCell(ceData, CEData_Handler, ceIdx); + ArraySetCell(ceData, CEData_TempIndex, tmpIdx); + ArraySetCell(ceData, CEData_WorldIndex, worldIdx); + ArraySetCell(ceData, CEData_StartOrigin, Invalid_Array); + + set_pev(ent, pev_deadflag, DEAD_NO); + + return ent; +} + +Respawn(ent) +{ + remove_task(ent+TASKID_SUM_RESPAWN); + + new Array:ceData = GetPData(ent); + + new Array:startOrigin = ArrayGetCell(ceData, CEData_StartOrigin); + if (startOrigin != Invalid_Array) { + static Float:vOrigin[3]; + ArrayGetArray(startOrigin, 0, vOrigin); + engfunc(EngFunc_SetOrigin, ent, vOrigin); + } + + set_pev(ent, pev_deadflag, DEAD_NO); + set_pev(ent, pev_effects, pev(ent, pev_effects) & ~EF_NODRAW); + + set_pev(ent, pev_flags, pev(ent, pev_flags) & ~FL_ONGROUND); + dllfunc(DLLFunc_Spawn, ent); +} + +Kill(ent, killer = 0, bool:picked = false) +{ + new Array:ceData = GetPData(ent); + + new ceIdx = ArrayGetCell(ceData, CEData_Handler); + + if (ExecuteFunction(CEFunction_Kill, ceIdx, ent, killer, picked) != PLUGIN_CONTINUE) { + return; + } + + set_pev(ent, pev_takedamage, DAMAGE_NO); + set_pev(ent, pev_effects, pev(ent, pev_effects) | EF_NODRAW); + set_pev(ent, pev_solid, SOLID_NOT); + set_pev(ent, pev_movetype, MOVETYPE_NONE); + set_pev(ent, pev_flags, pev(ent, pev_flags) & ~FL_ONGROUND); + + //Get temp index + new tmpIdx = ArrayGetCell(ceData, CEData_TempIndex); + + //Check if entity is temp + if (tmpIdx < 0) { + new Float:fRespawnTime = ArrayGetCell(g_entityRespawnTime, ceIdx); + if (fRespawnTime > 0.0) { + set_pev(ent, pev_deadflag, DEAD_RESPAWNABLE); + set_task(fRespawnTime, "TaskRespawn", ent+TASKID_SUM_RESPAWN); + } else { + set_pev(ent, pev_deadflag, DEAD_DEAD); + } + } else { + set_pev(ent, pev_deadflag, DEAD_DISCARDBODY); + } + + remove_task(ent+TASKID_SUM_DISAPPEAR); + + ExecuteFunction(CEFunction_Killed, ceIdx, ent, killer, picked); + + if (tmpIdx >= 0) { + set_task(0.0, "TaskRemove", ent+TASKID_SUM_REMOVE); + } +} + +bool:Remove(ent) +{ + if (!Check(ent)) { + log_error(0, "%s Entity %i is not a custom entity.", LOG_PREFIX, ent); + return false; + } + + new Array:ceData = GetPData(ent); + + //Get temp index + new tmpIdx = ArrayGetCell(ceData, CEData_TempIndex); + + //Check if entity is temp + if (tmpIdx >= 0) { + //Remove entity from storage of temp entities + ArraySetCell(g_tmpEntities, tmpIdx, 0); + } else { + //Get world index + new worldIdx = ArrayGetCell(ceData, CEData_WorldIndex); + if (worldIdx >= 0) { + ArraySetCell(g_worldEntities, worldIdx, 0); + } + } + + ClearTasks(ent); + + //Get handler + new ceIdx = ArrayGetCell(ceData, CEData_Handler); + + //Execute remove function + ExecuteFunction(CEFunction_Remove, ceIdx, ent); + + DestroyPData(ent); + + //Remove entity + set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME); + dllfunc(DLLFunc_Think, ent); + + return true; +} + +Check(ent) +{ + return (pev(ent, pev_gaitsequence) == 'c'+'e'); +} + +ClearTasks(ent) +{ + remove_task(ent+TASKID_SUM_DISAPPEAR); + remove_task(ent+TASKID_SUM_RESPAWN); + remove_task(ent+TASKID_SUM_REMOVE); +} + +GetHandlerByEntity(ent) +{ + if (!Check(ent)) { + return -1; + } + + new Array:ceData = GetPData(ent); + + return ArrayGetCell(ceData, CEData_Handler); +} + +GetHandler(const szClassname[]) +{ + new ceIdx; + if (!g_entityCount || !TrieGetCell(g_entityHandlers, szClassname, ceIdx)) { + return -1; + } + + return ceIdx; +} + +Cleanup() +{ + if (!g_tmpEntities) { + return; + } + + new size = ArraySize(g_tmpEntities); + + for (new i = size - 1; i >= 0; --i) + { + new ent = ArrayGetCell(g_tmpEntities, i); + + if (!ent || !pev_valid(ent)) { + continue; + } + + new ceIdx = GetHandlerByEntity(ent); + if (ceIdx == -1) { + log_error(0, "%s Entity %i is not a custom entity.", LOG_PREFIX, ent); + continue; + } + + new ignoreRounds = ArrayGetCell(g_entityIgnoreRounds, ceIdx); + if (!ignoreRounds) { + Remove(ent); + ArrayDeleteItem(g_tmpEntities, i); + } + } + + // update temp entities refs + new newSize = ArraySize(g_tmpEntities); + for (new i = 0; i < newSize; ++i) { + new ent = ArrayGetCell(g_tmpEntities, i); + + if (!ent || !pev_valid(ent)) { + continue; + } + + new Array:ceData = GetPData(ent); + ArraySetCell(ceData, CEData_TempIndex, i); + } +} + +RespawnEntities() +{ + if (!g_worldEntities) { + return; + } + + new size = ArraySize(g_worldEntities); + for (new i = 0; i < size; ++i) { + new ent = ArrayGetCell(g_worldEntities, i); + if (ent) { + Respawn(ent); + + new szModel[64]; + pev(ent, pev_model, szModel, charsmax(szModel)); + if (szModel[0] == '*') { + engfunc(EngFunc_SetModel, ent, szModel); + } + } + } +} + +bool:InitEntity(ent, ceIdx, bool:temp) +{ + static Float:vMins[3]; + ArrayGetArray(g_entityMins, ceIdx, vMins); + + static Float:vMaxs[3]; + ArrayGetArray(g_entityMaxs, ceIdx, vMaxs); + + static Float:vOrigin[3]; + pev(ent, pev_origin, vOrigin); + + engfunc(EngFunc_SetSize, ent, vMins, vMaxs); + engfunc(EngFunc_SetOrigin, ent, vOrigin); + + { + new preset = ArrayGetCell(g_entityPreset, ceIdx); + ApplyPreset(ent, preset); + } + + new modelIndex = ArrayGetCell(g_entityModelIndex, ceIdx); + if (modelIndex > 0) { + set_pev(ent, pev_modelindex, modelIndex); + } + + if (temp) { + new Float:fLifeTime = ArrayGetCell(g_entityLifeTime, ceIdx); + if (fLifeTime > 0.0) { + set_task(fLifeTime, "TaskDisappear", ent+TASKID_SUM_DISAPPEAR); + } + } + + return true; +} + +ApplyPreset(ent, preset) +{ + switch (preset) + { + case CEPreset_Item: + { + set_pev(ent, pev_solid, SOLID_TRIGGER); + set_pev(ent, pev_movetype, MOVETYPE_TOSS); + set_pev(ent, pev_takedamage, DAMAGE_NO); + } + case CEPreset_NPC: + { + set_pev(ent, pev_solid, SOLID_BBOX); + set_pev(ent, pev_movetype, MOVETYPE_PUSHSTEP); + set_pev(ent, pev_takedamage, DAMAGE_AIM); + + set_pev(ent, pev_controller_0, 125); + set_pev(ent, pev_controller_1, 125); + set_pev(ent, pev_controller_2, 125); + set_pev(ent, pev_controller_3, 125); + + set_pev(ent, pev_gamestate, 1); + set_pev(ent, pev_gravity, 1.0); + set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_MONSTER); + set_pev(ent, pev_fixangle, 1); + set_pev(ent, pev_friction, 0.25); + } + case CEPreset_Prop: + { + set_pev(ent, pev_solid, SOLID_BBOX); + set_pev(ent, pev_movetype, MOVETYPE_FLY); + set_pev(ent, pev_takedamage, DAMAGE_NO); + } + } +} + +AddKvd(const szKey[], const szValue[]) +{ + if (g_ceKvd == Invalid_Array) { + g_ceKvd = ArrayCreate(KVD); + } + + new kvd[KVD]; + copy(kvd[KVD_Key], charsmax(kvd[KVD_Key]), szKey); + copy(kvd[KVD_Value], charsmax(kvd[KVD_Value]), szValue); + ArrayPushArray(g_ceKvd, kvd); +} + +SpawnLatestCe() +{ + if (!g_lastCEEnt) { + return; + } + + if (g_ceKvd != Invalid_Array) { + new size = ArraySize(g_ceKvd); + for (new i = 0; i < size; ++i) { + new kvd[KVD]; + ArrayGetArray(g_ceKvd, i, kvd); + DispatchKeyValue(g_lastCEEnt, kvd[KVD_Key], kvd[KVD_Value]); // dispatch kvd to cloned entity + ExecuteFunction(CEFunction_KVD, g_lastCEIdx, g_lastCEEnt, kvd[KVD_Key], kvd[KVD_Value]); + } + } + + dllfunc(DLLFunc_Spawn, g_lastCEEnt); // spawn last handled entity + + if (g_ceKvd != Invalid_Array) { + new size = ArraySize(g_ceKvd); + for (new i = 0; i < size; ++i) { + new kvd[KVD]; + ArrayGetArray(g_ceKvd, i, kvd); + + if (equal(kvd[KVD_Key], "model") && kvd[KVD_Value][0] == '*') { + engfunc(EngFunc_SetModel, g_lastCEEnt, kvd[KVD_Value]); + } + } + } + + g_lastCEEnt = 0; + + if (g_ceKvd != Invalid_Array) { + ArrayDestroy(g_ceKvd); + g_ceKvd = Invalid_Array; + } +} + +RegisterHook(CEFunction:function, const szClassname[], const szCallback[], pluginID = -1) +{ + new ceIdx; + if (!g_entityCount || !TrieGetCell(g_entityHandlers, szClassname, ceIdx)) { + log_error(0, "%s Entity %s is not registered.", LOG_PREFIX, szClassname); + return -1; + } + + new funcID = get_func_id(szCallback, pluginID); + if (funcID < 0) { + new szFilename[32]; + get_plugin(pluginID, szFilename, charsmax(szFilename)); + log_error(0, "Function %s not found in plugin %s.", szCallback, szFilename); + return -1; + } + + new Array:functions = ArrayGetCell(g_entityHooks, ceIdx); + if (!functions) { + functions = InitializeFunctions(ceIdx); + } + + new Array:functionHooks = ArrayGetCell(functions, _:function); + + new Array:hookData = CreateHookData(pluginID, funcID); + return ArrayPushCell(functionHooks, hookData); +} + +Array:InitializeFunctions(ceIdx) +{ + new Array:functions = ArrayCreate(1, _:CEFunction); + + for (new i = 0; i < _:CEFunction; ++i) { + new Array:functionHooks = ArrayCreate(); + ArrayPushCell(functions, functionHooks); + } + + ArraySetCell(g_entityHooks, ceIdx, functions); + + return functions; +} + +DestroyFunctions(ceIdx) +{ + new Array:functions = ArrayGetCell(g_entityHooks, ceIdx); + + if (!functions) { + return; + } + + for (new i = 0; i < _:CEFunction; ++i) { + new Array:functionHooks = ArrayGetCell(functions, i); + ArrayDestroy(functionHooks); + } + + ArrayDestroy(functions); + ArraySetCell(g_entityHooks, ceIdx, 0); +} + +Array:CreateHookData(pluginID, funcID) +{ + new Array:hookData = ArrayCreate(1, _:CEHookData); + ArrayPushCell(hookData, pluginID); + ArrayPushCell(hookData, funcID); + + return hookData; +} + +ExecuteFunction(CEFunction:function, ceIdx, any:...) +{ + new result = 0; + new ent = getarg(2); + + new Array:functions = ArrayGetCell(g_entityHooks, ceIdx); + if (functions == Invalid_Array) { + return 0; + } + + new Array:functionHooks = ArrayGetCell(functions, _:function); + + new count = ArraySize(functionHooks); + for (new i = 0; i < count; ++i) + { + new Array:hookData = ArrayGetCell(functionHooks, i); + new pluginID = ArrayGetCell(hookData, _:CEHookData_PluginID); + new funcID = ArrayGetCell(hookData, _:CEHookData_FuncID); + + if (funcID < 0) { + continue; + } + + if (callfunc_begin_i(funcID, pluginID) == 1) + { + callfunc_push_int(ent); + + switch (function) + { + case CEFunction_Kill, CEFunction_Killed: { + new killer = getarg(3); + new bool:picked = bool:getarg(4); + callfunc_push_int(killer); + callfunc_push_int(picked); + } + case CEFunction_Pickup, CEFunction_Picked: { + new id = getarg(3); + callfunc_push_int(id); + } + case CEFunction_KVD: { + static szKey[32]; + for (new i = 0; i < charsmax(szKey); ++i) { + szKey[i] = getarg(3, i); + + if (szKey[i] == '^0') { + break; + } + } + + static szValue[32]; + for (new i = 0; i < charsmax(szValue); ++i) { + szValue[i] = getarg(4, i); + + if (szValue[i] == '^0') { + break; + } + } + + callfunc_push_str(szKey); + callfunc_push_str(szValue); + } + } + + result += callfunc_end(); + } + } + + return result; +} + +Array:CreatePData(ent) +{ + new Array:ceData = ArrayCreate(1, CEData); + for (new i = 0; i < CEData; ++i) { + ArrayPushCell(ceData, 0); + } + + set_pev(ent, pev_gaitsequence, 'c'+'e'); + set_pev(ent, pev_iStepLeft, ceData); + + return ceData; +} + +DestroyPData(ent) +{ + //Destroy data array + new Array:ceData = GetPData(ent); + { + new Array:startOrigin = ArrayGetCell(ceData, CEData_StartOrigin); + if (startOrigin != Invalid_Array) { + ArrayDestroy(startOrigin); + } + } ArrayDestroy(ceData); + + set_pev(ent, pev_gaitsequence, 0); + set_pev(ent, pev_iStepLeft, 0); +} + +Array:GetPData(ent) +{ + new Array:ceData = any:pev(ent, pev_iStepLeft); + if (ceData == Invalid_Array) { + log_error(0, "%s Invalid Custom Entity data provided for %i.", LOG_PREFIX, ent); + } + + return ceData; +} + +/*--------------------------------[ Tasks ]--------------------------------*/ + +public TaskDisappear(taskID) +{ + new ent = taskID - TASKID_SUM_DISAPPEAR; + Kill(ent, 0); +} + +public TaskRespawn(taskID) +{ + new ent = taskID - TASKID_SUM_RESPAWN; + Respawn(ent); +} + +public TaskRemove(taskID) +{ + new ent = taskID - TASKID_SUM_REMOVE; + Remove(ent); +} + +public TaskRespawnEntities() +{ + RespawnEntities(); +} diff --git a/src/scripts/api/api_custom_weapons.sma b/src/scripts/api/api_custom_weapons.sma new file mode 100644 index 0000000..f01ba67 --- /dev/null +++ b/src/scripts/api/api_custom_weapons.sma @@ -0,0 +1,2544 @@ +#pragma semicolon 1 + +#include +#include +#include +#include +#include +#include + +#include + +#define PLUGIN "[API] Custom Weapons" +#define VERSION "0.7.0" +#define AUTHOR "Hedgehog Fog" + +#define WALL_PUFF_SPRITE "sprites/wall_puff1.spr" + +#define VEC_DUCK_HULL_MIN Float:{-16.0, -16.0, -18.0} +#define VEC_DUCK_HULL_MAX Float:{16.0, 16.0, 18.0} + +#define IS_PLAYER(%1) (%1 > 0 && %1 <= MAX_PLAYERS) + +#define TOKEN 743647146 + +enum _:WeaponListMessage { + WL_WeaponName[32], + WL_PrimaryAmmoType, + WL_PrimaryAmmoMaxAmount, + WL_SecondaryAmmoType, + WL_SecondaryAmmoMaxAmount, + WL_SlotId, + WL_NumberInSlot, + WL_WeaponId, + WL_Flags +} + +enum _:Function { + Function_PluginId, + Function_FunctionId +} + +new const g_rgszWeaponNames[CSW_LAST_WEAPON + 1][] = { + "", + "weapon_p228", + "weapon_shield", + "weapon_scout", + "weapon_hegrenade", + "weapon_xm1014", + "weapon_c4", + "weapon_mac10", + "weapon_aug", + "weapon_smokegrenade", + "weapon_elite", + "weapon_fiveseven", + "weapon_ump45", + "weapon_sg550", + "weapon_galil", + "weapon_famas", + "weapon_usp", + "weapon_glock18", + "weapon_awp", + "weapon_mp5navy", + "weapon_m249", + "weapon_m3", + "weapon_m4a1", + "weapon_tmp", + "weapon_g3sg1", + "weapon_flashbang", + "weapon_deagle", + "weapon_sg552", + "weapon_ak47", + "weapon_knife", + "weapon_p90" +}; + +new gmsgWeaponList; +new gmsgDeathMsg; + +new g_iszWeaponNames[CSW_LAST_WEAPON + 1]; +new bool:g_bWeaponHooks[CSW_LAST_WEAPON + 1]; +new g_weaponListDefaults[CSW_LAST_WEAPON + 1][WeaponListMessage]; + +new Array:g_rgWeapons[CW_Data]; +new Trie:g_rgWeaponsMap; +new g_iWeaponCount; + +new Float:g_flNextPredictionUpdate[MAX_PLAYERS + 1]; +new bool:g_bKnifeHolstered[MAX_PLAYERS + 1]; + +new g_iszWeaponBox; +new g_pNewWeaponboxEnt = -1; +new g_pKillerItem = -1; +new bool:g_bSupercede; +new bool:g_bPrecache; + +new Array:g_irgDecals; + +public plugin_precache() { + g_bPrecache = true; + + AllocateStrings(); + InitStorages(); + + register_forward(FM_UpdateClientData, "OnUpdateClientData_Post", 1); + register_forward(FM_PrecacheEvent, "OnPrecacheEvent_Post", 1); + register_forward(FM_SetModel, "OnSetModel_Post", 1); + register_forward(FM_DecalIndex, "OnDecalIndex_Post", 1); + + RegisterHam(Ham_Spawn, "weaponbox", "OnWeaponboxSpawn", .Post = 0); + RegisterHam(Ham_Player_PreThink, "player", "OnPlayerPreThink_Post", .Post = 1); + RegisterHam(Ham_TakeDamage, "player", "OnPlayerTakeDamage", .Post = 0); + RegisterHam(Ham_TakeDamage, "player", "OnPlayerTakeDamage_Post", .Post = 1); + + precache_model(WALL_PUFF_SPRITE); +} + +public plugin_init() { + g_bPrecache = false; + + register_plugin(PLUGIN, VERSION, AUTHOR); + + gmsgWeaponList = get_user_msgid("WeaponList"); + gmsgDeathMsg = get_user_msgid("DeathMsg"); + + register_message(gmsgWeaponList, "OnMessage_WeaponList"); + register_message(gmsgDeathMsg, "OnMessage_DeathMsg"); +} + +public plugin_cfg() { + InitWeaponHooks(); +} + +public plugin_natives() { + register_library("api_custom_weapons"); + + register_native("CW_Register", "Native_Register"); + register_native("CW_GetHandlerByEntity", "Native_GetHandlerByEntity"); + register_native("CW_GetHandler", "Native_GetHandler"); + register_native("CW_GetWeaponData", "Native_GetWeaponData"); + register_native("CW_GetWeaponStringData", "Native_GetWeaponStringData"); + register_native("CW_GiveWeapon", "Native_GiveWeapon"); + register_native("CW_SpawnWeapon", "Native_SpawnWeapon"); + register_native("CW_SpawnWeaponBox", "Native_SpawnWeaponBox"); + + register_native("CW_Deploy", "Native_Deploy"); + register_native("CW_Holster", "Native_Holster"); + register_native("CW_ItemPostFrame", "Native_ItemPostFrame"); + register_native("CW_Idle", "Native_Idle"); + register_native("CW_Reload", "Native_Reload"); + register_native("CW_PrimaryAttack", "Native_PrimaryAttack"); + register_native("CW_SecondaryAttack", "Native_SecondaryAttack"); + + register_native("CW_FireBulletsPlayer", "Native_FireBulletsPlayer"); + register_native("CW_EjectWeaponBrass", "Native_EjectWeaponBrass"); + register_native("CW_PlayAnimation", "Native_PlayAnimation"); + register_native("CW_GetPlayer", "Native_GetPlayer"); + + register_native("CW_DefaultDeploy", "Native_DefaultDeploy"); + register_native("CW_DefaultShot", "Native_DefaultShot"); + register_native("CW_DefaultShotgunShot", "Native_DefaultShotgunShot"); + register_native("CW_DefaultSwing", "Native_DefaultSwing"); + register_native("CW_DefaultReload", "Native_DefaultReload"); + register_native("CW_DefaultShotgunReload", "Native_DefaultShotgunReload"); + register_native("CW_DefaultShotgunIdle", "Native_DefaultShotgunIdle"); + + register_native("CW_GrenadeDetonate", "Native_GrenadeDetonate"); + register_native("CW_GrenadeSmoke", "Native_GrenadeSmoke"); + register_native("CW_RemovePlayerItem", "Native_RemovePlayerItem"); + + register_native("CW_Bind", "Native_Bind"); +} + +public plugin_end() { + DestroyStorages(); +} + +// ANCHOR: Natives + +public Native_Bind(iPluginId, iArgc) { + new CW:iHandler = CW:get_param(1); + new iBinding = get_param(2); + + new szFunctionName[32]; + get_string(3, szFunctionName, charsmax(szFunctionName)); + + Bind(iHandler, iBinding, iPluginId, get_func_id(szFunctionName, iPluginId)); +} + +public CW:Native_GetHandlerByEntity(iPluginId, iArgc) { + new pEntity = get_param(1); + return GetHandlerByEntity(pEntity); +} + +public CW:Native_GetHandler(iPluginId, iArgc) { + static szName[64]; + get_string(1, szName, charsmax(szName)); + + return GetHandler(szName); +} + +public any:Native_GetWeaponData(iPluginId, iArgc) { + new CW:iHandler = CW:get_param(1); + new CW_Data:iParam = CW_Data:get_param(2); + + return GetData(iHandler, iParam); +} + +public Native_GetWeaponStringData(iPluginId, iArgc) { + new CW:iHandler = CW:get_param(1); + new CW_Data:iParam = CW_Data:get_param(2); + + static szValue[128]; + GetStringData(iHandler, iParam, szValue, charsmax(szValue)); + + new iLen = get_param(4); + set_string(3, szValue, iLen); +} + + +public CW:Native_Register(iPluginId, iArgc) { + new szName[64]; + get_string(1, szName, charsmax(szName)); + + new iWeaponId = get_param(2); + new iClipSize = get_param(3); + new iPrimaryAmmoType = get_param(4); + new iPrimaryAmmoMaxAmount = get_param(5); + new iSecondaryAmmoType = get_param(6); + new iSecondaryAmmoMaxAmount = get_param(7); + new iSlotId = get_param(8); + new iPosition = get_param(9); + new iWeaponFlags = get_param(10); + + new szIcon[16]; + get_string(11, szIcon, charsmax(szIcon)); + + new CW_Flags:iFlags = CW_Flags:get_param(12); + + return RegisterWeapon(iPluginId, szName, iWeaponId, iClipSize, iPrimaryAmmoType, iPrimaryAmmoMaxAmount, iSecondaryAmmoType, iSecondaryAmmoMaxAmount, iSlotId, iPosition, iWeaponFlags, szIcon, iFlags); +} + +public Native_GiveWeapon(iPluginId, iArgc) { + new pPlayer = get_param(1); + + static szWeapon[64]; + get_string(2, szWeapon, charsmax(szWeapon)); + + new CW:iHandler; + if (TrieGetCell(g_rgWeaponsMap, szWeapon, iHandler)) { + GiveWeapon(pPlayer, iHandler); + } +} + +public Native_SpawnWeapon(iPluginId, iArgc) { + new CW:iHandler = CW:get_param(1); + return SpawnWeapon(iHandler); +} + +public Native_SpawnWeaponBox(iPluginId, iArgc) { + new CW:iHandler = CW:get_param(1); + return SpawnWeaponBox(iHandler); +} + +public bool:Native_DefaultDeploy(iPluginId, iArgc) { + new pWeapon = get_param(1); + + static szViewModel[64]; + get_string(2, szViewModel, charsmax(szViewModel)); + + static szWeaponModel[64]; + get_string(3, szWeaponModel, charsmax(szWeaponModel)); + + new iAnim = get_param(4); + + static szAnimExt[16]; + get_string(5, szAnimExt, charsmax(szAnimExt)); + + return DefaultDeploy(pWeapon, szViewModel, szWeaponModel, iAnim, szAnimExt); +} + +public Native_FireBulletsPlayer(iPluginId, iArgc) { + new pWeapon = get_param(1); + new iShots = get_param(2); + + static Float:vecSrc[3]; + get_array_f(3, vecSrc, sizeof(vecSrc)); + + static Float:vecDirShooting[3]; + get_array_f(4, vecDirShooting, sizeof(vecDirShooting)); + + static Float:vecSpread[3]; + get_array_f(5, vecSpread, sizeof(vecSpread)); + + new Float:flDistance = get_param_f(6); + new Float:flDamage = get_param_f(7); + new Float:flRangeModifier = get_param_f(8); + new pevAttacker = get_param(9); + + static Float:vecOut[3]; + + FireBulletsPlayer(pWeapon, iShots, vecSrc, vecDirShooting, vecSpread, flDistance, flDamage, flRangeModifier, pevAttacker, vecOut); + + set_array_f(10, vecOut, sizeof(vecOut)); +} + +public bool:Native_EjectWeaponBrass(iPluginId, iArgc) { + new pItem = get_param(1); + new iModelIndex = get_param(2); + new iSoundType = get_param(3); + + return EjectWeaponBrass(pItem, iModelIndex, iSoundType); +} + +public bool:Native_DefaultShot(iPluginId, iArgc) { + new pItem = get_param(1); + new Float:flDamage = get_param_f(2); + new Float:flRangeModifier = get_param_f(3); + new Float:flRate = get_param_f(4); + + static Float:vecSpread[3]; + get_array_f(5, vecSpread, sizeof(vecSpread)); + + new iShots = get_param(6); + new Float:flDistance = get_param_f(7); + + return DefaultShot(pItem, flDamage, flRangeModifier, flRate, vecSpread, iShots, flDistance); +} + +public bool:Native_DefaultShotgunShot(iPluginId, iArgc) { + new pItem = get_param(1); + new Float:flDamage = get_param_f(2); + new Float:flRangeModifier = get_param_f(3); + new Float:flRate = get_param_f(4); + new Float:flPumpDelay = get_param_f(5); + + static Float:vecSpread[3]; + get_array_f(6, vecSpread, sizeof(vecSpread)); + + new iShots = get_param(7); + new Float:flDistance = get_param_f(8); + + return DefaultShotgunShot(pItem, flDamage, flRangeModifier, flRate, flPumpDelay, vecSpread, iShots, flDistance); +} + +public Native_DefaultSwing(iPluginId, iArgc) { + new pItem = get_param(1); + new Float:flDamage = get_param_f(2); + new Float:flRate = get_param_f(3); + new Float:flDistance = get_param_f(4); + + return DefaultSwing(pItem, flDamage, flRate, flDistance); +} + +public Native_PlayAnimation(iPluginID, argc) { + new pItem = get_param(1); + new iSequence = get_param(2); + new Float:flDuration = get_param_f(3); + + PlayWeaponAnim(pItem, iSequence, flDuration); +} + +public Native_GetPlayer(iPluginID, argc) { + new pItem = get_param(1); + return GetPlayer(pItem); +} + +public bool:Native_DefaultReload(iPluginId, iArgc) { + new pItem = get_param(1); + new iAnim = get_param(2); + new Float:flDelay = get_param_f(3); + + return DefaultReload(pItem, iAnim, flDelay); +} + +public bool:Native_DefaultShotgunReload(iPluginId, iArgc) { + new pItem = get_param(1); + new iStartAnim = get_param(2); + new iEndAnim = get_param(3); + new Float:flDelay = get_param_f(4); + new Float:flDuration = get_param_f(5); + + return DefaultShotgunReload(pItem, iStartAnim, iEndAnim, flDelay, flDuration); +} + +public bool:Native_DefaultShotgunIdle(iPluginId, iArgc) { + new pItem = get_param(1); + new iAnim = get_param(2); + new iReloadEndAnim = get_param(3); + new Float:flDuration = get_param_f(4); + new Float:flReloadEndDuration = get_param_f(5); + + static szPumpSound[64]; + get_string(6, szPumpSound, charsmax(szPumpSound)); + + return DefaultShotgunIdle(pItem, iAnim, iReloadEndAnim, flDuration, flReloadEndDuration, szPumpSound); +} + +public Native_Deploy(iPluginId, iArgc) { + new pItem = get_param(1); + WeaponDeploy(pItem); +} + +public Native_Holster(iPluginId, iArgc) { + new pItem = get_param(1); + WeaponHolster(pItem); +} + +public Native_ItemPostFrame(iPluginId, iArgc) { + new pItem = get_param(1); + ItemPostFrame(pItem); +} + +public Native_Idle(iPluginId, iArgc) { + new pItem = get_param(1); + WeaponIdle(pItem); +} + +public Native_Reload(iPluginId, iArgc) { + new pItem = get_param(1); + Reload(pItem); +} + +public Native_PrimaryAttack(iPluginId, iArgc) { + new pItem = get_param(1); + PrimaryAttack(pItem); +} +public Native_SecondaryAttack(iPluginId, iArgc) { + new pItem = get_param(1); + SecondaryAttack(pItem); +} + +public Native_GrenadeDetonate(iPluginId, iArgc) { + new pGrenade = get_param(1); + new Float:flRadius = get_param_f(2); + new Float:flMagnitude = get_param_f(3); + GrenadeDetonate(pGrenade, flRadius, flMagnitude); +} + +public Native_GrenadeSmoke(iPluginId, iArgc) { + new pGrenade = get_param(1); + GrenadeSmoke(pGrenade); +} + +public Native_RemovePlayerItem(iPluginId, iArgc) { + new pItem = get_param(1); + RemovePlayerItem(pItem); +} + +// ANCHOR: Forwards + +public client_connect(pPlayer) { + g_bKnifeHolstered[pPlayer] = true; +} + +public client_disconnected(pPlayer) { + SetWeaponPrediction(pPlayer, true); +} + +// ANCHOR: Hook Callbacks + +public OnItemDeploy(this) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return HAM_IGNORED; + } + + WeaponDeploy(this); + + return HAM_SUPERCEDE; +} + +public OnItemHolster(this) { + new pPlayer = GetPlayer(this); + g_bKnifeHolstered[pPlayer] = IsWeaponKnife(this); + + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return HAM_IGNORED; + } + + WeaponHolster(this); + + return HAM_SUPERCEDE; +} + +public OnItemPostFrame(this) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return HAM_IGNORED; + } + + ItemPostFrame(this); + + return HAM_SUPERCEDE; +} + +public OnWeaponPrimaryAttack(this) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return HAM_IGNORED; + } + + g_bSupercede = GetHamReturnStatus() >= HAM_SUPERCEDE; + + return HAM_SUPERCEDE; +} + +public OnWeaponSecondaryAttack(this) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return HAM_IGNORED; + } + + g_bSupercede = GetHamReturnStatus() >= HAM_SUPERCEDE; + + return HAM_SUPERCEDE; +} + +public OnWeaponReload(this) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return HAM_IGNORED; + } + + g_bSupercede = GetHamReturnStatus() >= HAM_SUPERCEDE; + + return HAM_SUPERCEDE; +} + +public OnWeaponIdle(this) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return HAM_IGNORED; + } + + g_bSupercede = GetHamReturnStatus() >= HAM_SUPERCEDE; + + return HAM_SUPERCEDE; +} + +public OnUpdateClientData_Post(pPlayer, iSendWeapons, pCdHandle) { + if (!is_user_alive(pPlayer)) { + return FMRES_IGNORED; + } + + new pItem = get_member(pPlayer, m_pActiveItem); + if (pItem == -1) { + return FMRES_IGNORED; + } + + new CW:iHandler = GetHandlerByEntity(pItem); + if (iHandler == CW_INVALID_HANDLER) { + return FMRES_IGNORED; + } + + set_cd(pCdHandle, CD_flNextAttack, get_gametime() + 0.001); // block default animation + + return FMRES_HANDLED; +} + +public OnItemSlot(this) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return HAM_IGNORED; + } + + new iSlot = GetData(iHandler, CW_Data_SlotId); + SetHamReturnInteger(iSlot + 1); + + return HAM_SUPERCEDE; +} + +public OnCSItemGetMaxSpeed(this) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return HAM_IGNORED; + } + + new Float:flMaxSpeed = ExecuteBindedFunction(CWB_GetMaxSpeed, this); + if (_:flMaxSpeed != PLUGIN_CONTINUE) { + SetHamReturnFloat(flMaxSpeed); + return HAM_OVERRIDE; + } + + return HAM_IGNORED; +} + +public OnItemAddToPlayer_Post(this, pPlayer) { + new pPlayer = GetPlayer(this); + if (!ExecuteHam(Ham_IsPlayer, pPlayer)) { + return HAM_IGNORED; + } + + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + new iWeaponId = get_member(this, m_iId); + ResetWeaponList(pPlayer, iWeaponId); + } else { + set_member(this, m_Weapon_iPrimaryAmmoType, GetData(iHandler, CW_Data_PrimaryAmmoType)); + UpdateWeaponList(pPlayer, iHandler); + } + + return HAM_HANDLED; +} + +public OnSpawn_Post(this) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return HAM_IGNORED; + } + + ExecuteBindedFunction(CWB_Spawn, this); + + return HAM_IGNORED; +} + +public OnWeaponboxSpawn(this) { + g_pNewWeaponboxEnt = this; +} + +public OnPlayerPreThink_Post(pPlayer) { + if (get_gametime() < g_flNextPredictionUpdate[pPlayer]) { + return HAM_IGNORED; + } + + new iObsMode = pev(pPlayer, pev_iuser1); + new pObsTarget = pev(pPlayer, pev_iuser2); + + new pActiveItem = iObsMode == OBS_IN_EYE + ? IS_PLAYER(pObsTarget) ? get_member(pObsTarget, m_pActiveItem) : -1 + : get_member(pPlayer, m_pActiveItem); + + if (pActiveItem == -1) { + SetWeaponPrediction(pPlayer, false); + return HAM_IGNORED; + } + + new CW:iHandler = GetHandlerByEntity(pActiveItem); + SetWeaponPrediction(pPlayer, iHandler == CW_INVALID_HANDLER); + + return HAM_HANDLED; +} + +public OnPlayerTakeDamage(pPlayer, pInflictor, pAttacker) { + if (pAttacker && ExecuteHam(Ham_IsPlayer, pAttacker) && pInflictor == pAttacker) { + g_pKillerItem = get_member(pAttacker, m_pActiveItem); + } else { + g_pKillerItem = pInflictor; + } +} + +public OnPlayerTakeDamage_Post() { + g_pKillerItem = -1; +} + +public OnMessage_DeathMsg(iMsgId, iDest, pPlayer) { + if (g_pKillerItem == -1) { + return PLUGIN_CONTINUE; + } + + new pKiller = get_msg_arg_int(1); + if (!pKiller) { + return PLUGIN_CONTINUE; + } + + if (!ExecuteHam(Ham_IsPlayer, pKiller)) { + return PLUGIN_CONTINUE; + } + + if (!is_user_alive(pKiller)) { + return PLUGIN_CONTINUE; + } + + new CW:iHandler = GetHandlerByEntity(g_pKillerItem); + if (iHandler == CW_INVALID_HANDLER) { + return PLUGIN_CONTINUE; + } + + static szIcon[64]; + GetStringData(iHandler, CW_Data_Icon, szIcon, charsmax(szIcon)); + + if (szIcon[0] == '^0') { + GetStringData(iHandler, CW_Data_Name, szIcon, charsmax(szIcon)); + } + + + set_msg_arg_string(4, szIcon); + + return PLUGIN_CONTINUE; +} + +public OnSetModel_Post(this, const szModel[]) { + if (!pev_valid(this)) { + return FMRES_IGNORED; + } + + if (!g_pNewWeaponboxEnt) { + return FMRES_IGNORED; + } + + if (this != g_pNewWeaponboxEnt) { + return FMRES_IGNORED; + } + + static szClassname[32]; + pev(this, pev_classname, szClassname, charsmax(szClassname)); + + if (!equal(szClassname, "weaponbox")) { + g_pNewWeaponboxEnt = 0; + return FMRES_IGNORED; + } + + new pItem = FindWeaponBoxSingleItem(this); + if (pItem == -1) { + return FMRES_IGNORED; + } + + new CW:iHandler = GetHandlerByEntity(pItem); + if (iHandler == CW_INVALID_HANDLER) { + return FMRES_IGNORED; + } + + ExecuteBindedFunction(CWB_WeaponBoxModelUpdate, pItem, this); + g_pNewWeaponboxEnt = 0; + + if (!ExecuteHamB(Ham_CS_Item_CanDrop, pItem)) { + set_pev(this, pev_flags, pev(this, pev_flags) | FL_KILLME); + dllfunc(DLLFunc_Think, this); + } + + return FMRES_HANDLED; +} + +public OnDecalIndex_Post() { + if (!g_bPrecache) { + return; + } + + ArrayPushCell(g_irgDecals, get_orig_retval()); +} + +public OnWeaponClCmd(pPlayer) { + static szName[64]; + read_argv(0, szName, charsmax(szName)); + + new CW:iHandler; + TrieGetCell(g_rgWeaponsMap, szName, iHandler); + + new iWeaponId = GetData(iHandler, CW_Data_Id); + + static szBaseName[32]; + get_weaponname(iWeaponId, szBaseName, charsmax(szBaseName)); + client_cmd(pPlayer, szBaseName); + + return PLUGIN_HANDLED; +} + +public OnCanDrop(this) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return HAM_IGNORED; + } + + SetHamReturnInteger( + ExecuteBindedFunction(CWB_CanDrop, this) == PLUGIN_CONTINUE ? 1 : 0 + ); + + return HAM_OVERRIDE; +} + +public OnMessage_WeaponList(iMsgId, iMsgDest, pPlayer) { + new iWeaponId = get_msg_arg_int(8); + + if (g_weaponListDefaults[iWeaponId][WL_WeaponId] == iWeaponId) { + return PLUGIN_CONTINUE; // already initialized + } + + get_msg_arg_string(1, g_weaponListDefaults[iWeaponId][WL_WeaponName], 31); + g_weaponListDefaults[iWeaponId][WL_PrimaryAmmoType] = get_msg_arg_int(2); + g_weaponListDefaults[iWeaponId][WL_PrimaryAmmoMaxAmount] = get_msg_arg_int(3); + g_weaponListDefaults[iWeaponId][WL_SecondaryAmmoType] = get_msg_arg_int(4); + g_weaponListDefaults[iWeaponId][WL_SecondaryAmmoMaxAmount] = get_msg_arg_int(5); + g_weaponListDefaults[iWeaponId][WL_SlotId] = get_msg_arg_int(6); + g_weaponListDefaults[iWeaponId][WL_NumberInSlot] = get_msg_arg_int(7); + g_weaponListDefaults[iWeaponId][WL_WeaponId] = iWeaponId; + g_weaponListDefaults[iWeaponId][WL_Flags] = get_msg_arg_int(9); + + return PLUGIN_CONTINUE; +} + +// ANCHOR: Weapon Entity Methods + +CompleteReload(this) { + new CW:iHandler = GetHandlerByEntity(this); + new pPlayer = GetPlayer(this); + new iMaxClip = GetData(iHandler, CW_Data_ClipSize); + new iClip = get_member(this, m_Weapon_iClip); + new iPrimaryAmmoIndex = get_member(this, m_Weapon_iPrimaryAmmoType); + new iBpAmmo = get_member(pPlayer, m_rgAmmo, iPrimaryAmmoIndex); + new iSize = min(iMaxClip - iClip, iBpAmmo); + + set_member(this, m_Weapon_iClip, iClip + iSize); + set_member(pPlayer, m_rgAmmo, iBpAmmo - iSize, iPrimaryAmmoIndex); + set_member(this, m_Weapon_fInReload, 0); + + ExecuteBindedFunction(CWB_DefaultReloadEnd, this); +} + +ItemPostFrame(this) { + new CW:iHandler = GetHandlerByEntity(this); + new pPlayer = GetPlayer(this); + new flInReload = get_member(this, m_Weapon_fInReload); + new iMaxClip = GetData(iHandler, CW_Data_ClipSize); + new iWeaponFlags = GetData(iHandler, CW_Data_WeaponFlags); + new Float:flNextAttack = get_member(pPlayer, m_flNextAttack); + new button = pev(pPlayer, pev_button); + new iPrimaryAmmoIndex = get_member(this, m_Weapon_iPrimaryAmmoType); + new iSecondaryAmmoIndex = 0; + new Float:flNextPrimaryAttack = get_member(this, m_Weapon_flNextPrimaryAttack); + new Float:flNextSecondaryAttack = get_member(this, m_Weapon_flNextSecondaryAttack); + new iPrimaryAmmoAmount = get_member(pPlayer, m_rgAmmo, iPrimaryAmmoIndex); + new iSecondaryAmmoAmount = get_member(pPlayer, m_rgAmmo, iSecondaryAmmoIndex); + + new Float:flReloadEndTime = get_member(this, m_Weapon_flNextReload); + if (flReloadEndTime && flReloadEndTime < get_gametime()) { + set_member(this, m_Weapon_flNextReload, 0.0); + ExecuteBindedFunction(CWB_Pump, this); + } + + if (flInReload && flNextAttack <= 0.0) { + CompleteReload(this); + } + + if ((button & IN_ATTACK2) && flNextSecondaryAttack <= 0) { + if (iSecondaryAmmoIndex > 0 && !iSecondaryAmmoAmount) { + set_member(this, m_Weapon_fFireOnEmpty, 1); + } + + SecondaryAttack(this); + } else if ((button & IN_ATTACK) && flNextPrimaryAttack <= 0) { + if ((!get_member(this, m_Weapon_iClip) && iPrimaryAmmoIndex > 0) || (iMaxClip == -1 && !iPrimaryAmmoAmount)) { + set_member(this, m_Weapon_fFireOnEmpty, 1); + } + + PrimaryAttack(this); + } else if ((button & IN_RELOAD) && iMaxClip != WEAPON_NOCLIP && !flInReload) { + Reload(this); + } else if (!(button & (IN_ATTACK|IN_ATTACK2))) { + set_member(this, m_Weapon_fFireOnEmpty, 0); + + if (!IsUseable(this) && flNextPrimaryAttack < 0.0) { + // if (!(iWeaponFlags & ITEM_FLAG_NOAUTOSWITCHEMPTY) && g_pGameRules->GetNextBestWeapon(m_pPlayer, this)) { + // set_member(this, m_Weapon_flNextPrimaryAttack, 0.3); + // return; + // } + } else { + if (!get_member(this, m_Weapon_iClip) && !(iWeaponFlags & ITEM_FLAG_NOAUTORELOAD) && flNextPrimaryAttack < 0.0) { + Reload(this); + return; + } + } + + set_member(this, m_Weapon_iShotsFired, 0); + WeaponIdle(this); + return; + } + + if (ShouldWeaponIdle(this)) { + WeaponIdle(this); + } +} + +SecondaryAttack(this) { + if (get_member_game(m_bFreezePeriod)) { + return; + } + + ExecuteHamB(Ham_Weapon_SecondaryAttack, this); + + if (g_bSupercede) { + return; + } + + if (ExecuteBindedFunction(CWB_SecondaryAttack, this) > PLUGIN_CONTINUE) { + return; + } +} + +PrimaryAttack(this) { + if (get_member_game(m_bFreezePeriod)) { + return; + } + + ExecuteHamB(Ham_Weapon_PrimaryAttack, this); + + if (g_bSupercede) { + return; + } + + if (ExecuteBindedFunction(CWB_PrimaryAttack, this) > PLUGIN_CONTINUE) { + return; + } +} + +Reload(this) { + ExecuteHamB(Ham_Weapon_Reload, this); + + if (g_bSupercede) { + return; + } + + if (ExecuteBindedFunction(CWB_Reload, this) > PLUGIN_CONTINUE) { + return; + } +} + +WeaponIdle(this) { + if (get_member(this, m_Weapon_flTimeWeaponIdle) > 0.0) { + return; + } + + ExecuteHamB(Ham_Weapon_WeaponIdle, this); + + if (g_bSupercede) { + return; + } + + if (ExecuteBindedFunction(CWB_Idle, this) > PLUGIN_CONTINUE) { + return; + } +} + +WeaponHolster(this) { + new pPlayer = GetPlayer(this); + + SetWeaponPrediction(pPlayer, true); + set_member(this, m_Weapon_fInReload, 0); + set_member(this, m_Weapon_fInSpecialReload, 0); + set_member(this, m_Weapon_flNextReload, 0.0); + + if (ExecuteBindedFunction(CWB_Holster, this) > PLUGIN_CONTINUE) { + return; + } +} + +WeaponDeploy(this) { + if (ExecuteBindedFunction(CWB_Deploy, this) > PLUGIN_CONTINUE) { + return; + } + + new pPlayer = GetPlayer(this); + + if (g_bKnifeHolstered[pPlayer]) { + g_flNextPredictionUpdate[pPlayer] = get_gametime() + 1.0; + + for (new pSpectator = 1; pSpectator <= MaxClients; pSpectator++) { + if (!is_user_connected(pSpectator)) { + continue; + } + + if (pev(pSpectator, pev_iuser1) != OBS_IN_EYE) { + continue; + } + + if (pev(pSpectator, pev_iuser2) != pPlayer) { + continue; + } + + g_flNextPredictionUpdate[pSpectator] = get_gametime() + 1.0; + } + } else if (get_member(this, m_iId) == CSW_KNIFE) { + SetWeaponPrediction(pPlayer, false); + + for (new pSpectator = 1; pSpectator <= MaxClients; pSpectator++) { + if (!is_user_connected(pSpectator)) { + continue; + } + + if (pev(pSpectator, pev_iuser1) != OBS_IN_EYE) { + continue; + } + + if (pev(pSpectator, pev_iuser2) != pPlayer) { + continue; + } + + SetWeaponPrediction(pSpectator, false); + } + } + + // SetThink(this, "DisablePrediction"); + // set_pev(this, pev_nextthink, get_gametime() + 0.1); +} + +bool:ShouldWeaponIdle(this) { + #pragma unused this + return false; +} + +bool:IsUseable(this) { + new CW:iHandler = GetHandlerByEntity(this); + new pPlayer = GetPlayer(this); + new iPrimaryAmmoIndex = get_member(this, m_Weapon_iPrimaryAmmoType); + new iMaxAmmo1 = GetData(iHandler, CW_Data_PrimaryAmmoMaxAmount); + new iClip = get_member(this, m_Weapon_iClip); + new iBpAmmo = get_member(pPlayer, m_rgAmmo, iPrimaryAmmoIndex); + + if (iClip <= 0) { + if (iBpAmmo <= 0 && iMaxAmmo1 != -1) { + return false; + } + } + + return true; +} + +PlayWeaponAnim(this, iSequence, Float:flDuration) { + SendWeaponAnim(this, iSequence); + set_member(this, m_Weapon_flTimeWeaponIdle, flDuration); +} + +SendWeaponAnim(this, iAnim) { + new pPlayer = GetPlayer(this); + + SendPlayerWeaponAnim(pPlayer, this, iAnim); + + for (new pSpectator = 1; pSpectator <= MaxClients; pSpectator++) { + if (!is_user_connected(pSpectator)) { + continue; + } + + if (pev(pSpectator, pev_iuser1) != OBS_IN_EYE) { + continue; + } + + if (pev(pSpectator, pev_iuser2) != pPlayer) { + continue; + } + + SendPlayerWeaponAnim(pSpectator, this, iAnim); + } +} + +SendPlayerWeaponAnim(pPlayer, pWeapon, iAnim) { + new iBody = pev(pWeapon, pev_body); + + set_pev(pPlayer, pev_weaponanim, iAnim); + + message_begin(MSG_ONE, SVC_WEAPONANIM, _, pPlayer); + write_byte(iAnim); + write_byte(iBody); + message_end(); +} + +GetPlayer(this) { + return get_member(this, m_pPlayer); +} + +FireBulletsPlayer(this, cShots, Float:vecSrc[3], Float:vecDirShooting[3], Float:vecSpread[3], Float:flDistance, Float:flDamage, Float:flRangeModifier, pAttacker, Float:vecOut[3]) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return; + } + + new pPlayer = GetPlayer(this); + new shared_rand = pPlayer > 0 ? get_member(pPlayer, random_seed) : 0; + new CW_Flags:iFlags = GetData(iHandler, CW_Data_Flags); + + new pTr = create_tr2(); + + static Float:vecRight[3]; + get_global_vector(GL_v_right, vecRight); + + static Float:vecUp[3]; + get_global_vector(GL_v_up, vecUp); + + static Float:vecMultiplier[3]; + + if (!pAttacker) { + pAttacker = this; // the default attacker is ourselves + } + + // ClearMultiDamage(); + // gMultiDamage.type = DMG_BULLET | DMG_NEVERGIB; + + for (new iShot = 1; iShot <= cShots; iShot++) { + //Use player's random seed. + // get circular gaussian spread + vecMultiplier[0] = SharedRandomFloat( shared_rand + iShot, -0.5, 0.5 ) + SharedRandomFloat( shared_rand + ( 1 + iShot ) , -0.5, 0.5 ); + vecMultiplier[1] = SharedRandomFloat( shared_rand + ( 2 + iShot ), -0.5, 0.5 ) + SharedRandomFloat( shared_rand + ( 3 + iShot ), -0.5, 0.5 ); + vecMultiplier[2] = vecMultiplier[0] * vecMultiplier[0] + vecMultiplier[1] * vecMultiplier[1]; + + static Float:vecDir[3]; + for (new i = 0; i < 3; ++i) { + vecDir[i] = vecDirShooting[i] + (vecMultiplier[0] * vecSpread[0] * vecRight[i]) + (vecMultiplier[1] * vecSpread[1] * vecUp[i]); + } + + static Float:vecEnd[3]; + for (new i = 0; i < 3; ++i) { + vecEnd[i] = vecSrc[i] + (vecDir[i] * flDistance); + } + + engfunc(EngFunc_TraceLine, vecSrc, vecEnd, DONT_IGNORE_MONSTERS, this, pTr); + + new Float:flFraction; + get_tr2(pTr, TR_flFraction, flFraction); + + // do damage, paint decals + if (flFraction != 1.0) { + new pHit = get_tr2(pTr, TR_pHit); + + if (pHit < 0) { + pHit = 0; + } + + new Float:flCurrentDistance = flDistance * flFraction; + new Float:flCurrentDamage = flDamage * floatpower(flRangeModifier, flCurrentDistance / 500.0); + + rg_multidmg_clear(); + ExecuteHamB(Ham_TraceAttack, pHit, pAttacker, flCurrentDamage, vecDir, pTr, DMG_BULLET | DMG_NEVERGIB); + rg_multidmg_apply(this, pAttacker); + + // TEXTURETYPE_PlaySound(&tr, vecSrc, vecEnd, iBulletType); + // DecalGunshot( &tr, iBulletType ); + + // new iDecalIndex = ExecuteHam(Ham_DamageDecal, pHit, DMG_BULLET); + // DecalTrace2(pTr, iDecalIndex); + + if (!ExecuteHam(Ham_IsPlayer, pHit)) { + if (~iFlags & CWF_NoBulletSmoke) { + BulletSmoke(pTr); + } + + if (~iFlags & CWF_NoBulletDecal) { + new iDecalIndex = GetDecalIndex(pHit); + if (iDecalIndex >= 0) { + MakeDecal(pTr, pHit, iDecalIndex); + } + } + } + } + + // make bullet trails + static Float:vecEndPos[3]; + get_tr2(pTr, TR_vecEndPos, vecEndPos); + + BubbleTrail(vecSrc, vecEndPos, floatround((flDistance * flFraction) / 64.0)); + } + + vecOut[0] = vecMultiplier[0] * vecSpread[0]; + vecOut[1] = vecMultiplier[1] * vecSpread[1]; + vecOut[2] = 0.0; + + free_tr2(pTr); +} + +GrenadeDetonate(this, Float:flRadius, Float:flMagnitude) { + static Float:vecStart[3]; + pev(this, pev_origin, vecStart); + vecStart[2] += 8.0; + + static Float:vecEnd[3]; + xs_vec_copy(vecStart, vecEnd); + vecEnd[2] -= 40.0; + + new pTr = create_tr2(); + engfunc(EngFunc_TraceLine, vecStart, vecEnd, IGNORE_MONSTERS, this, pTr); + GrenadeExplode(this, pTr, DMG_GRENADE | DMG_ALWAYSGIB, flRadius, flMagnitude); + free_tr2(pTr); +} + +GrenadeExplode(this, pTr, iDamageBits, Float:flRadius, Float:flMagnitude) { + new Float:flDamage; + pev(this, pev_dmg, flDamage); + + set_pev(this, pev_model, NULL_STRING); + set_pev(this, pev_solid, SOLID_NOT); + set_pev(this, pev_takedamage, DAMAGE_NO); + + new Float:flFraction; + get_tr2(pTr, TR_Fraction, flFraction); + + static Float:vecPlaneNormal[3]; + get_tr2(pTr, TR_vecPlaneNormal, vecPlaneNormal); + + static Float:vecOrigin[3]; + pev(this, pev_origin, vecOrigin); + + if (flFraction != 1.0) { + get_tr2(pTr, TR_vecEndPos, vecOrigin); + + for (new i = 0; i < 3; ++i) { + vecOrigin[i] += (vecPlaneNormal[i] * (flMagnitude ? flMagnitude : flDamage - 24.0) * 0.6); + } + + set_pev(this, pev_origin, vecOrigin); + } + + GrenadeExplosion(vecOrigin, flDamage); + + // CSoundEnt::InsertSound ( bits_SOUND_COMBAT, pev->origin, NORMAL_EXPLOSION_VOLUME, 3.0 ); + new iOwner = pev(this, pev_owner); + set_pev(this, pev_owner, 0); + + _RadiusDamage(vecOrigin, this, iOwner, flDamage, flRadius ? flRadius : flDamage * 3.5, CLASS_NONE, iDamageBits); + + ExplosionDecalTrace(pTr); + DebrisSound(this); + + set_pev(this, pev_effects, pev(this, pev_effects) | EF_NODRAW); + + // SetThink( &CGrenade::Smoke ); + // GrenadeSmoke(vecOrigin, flDamage); + + set_pev(this, pev_velocity, NULL_VECTOR); + set_pev(this, pev_nextthink, get_gametime() + 0.1); + + if (PointContents(vecOrigin) != CONTENTS_WATER) { + new iSparkCount = random(4); + for (new i = 0; i < iSparkCount; ++i) { + SparkShower(vecOrigin, vecPlaneNormal, 0); + } + } +} + +bool:IsWeaponKnife(pWeapon) { + if (GetHandlerByEntity(pWeapon) != CW_INVALID_HANDLER) { + return false; + } + + if (get_member(pWeapon, m_iId) != CSW_KNIFE) { + return false; + } + + return true; +} + +// ANCHOR: Weapon Callbacks + +public Smack(this) { + new CW:iHandler = GetHandlerByEntity(this); + new CW_Flags:iFlags = GetData(iHandler, CW_Data_Flags); + + new pTr = pev(this, pev_iuser1); + new pHit = get_tr2(pTr, TR_pHit); + if (pHit < 0) { + pHit = 0; + } + + if (~iFlags & CWF_NoBulletDecal) { + new iDecalIndex = GetDecalIndex(pHit); + if (iDecalIndex >= 0) { + MakeDecal(pTr, pHit, iDecalIndex, false); + } + } + + free_tr2(pTr); + + SetThink(this, NULL_STRING); +} + +// public DisablePrediction(this) { +// new pPlayer = GetPlayer(this); +// SetWeaponPrediction(pPlayer, false); +// SetThink(this, NULL_STRING); +// } + +// ANCHOR: Weapon Entity Default Methods + +bool:DefaultReload(this, iAnim, Float:flDelay) { + new CW:iHandler = GetHandlerByEntity(this); + new pPlayer = GetPlayer(this); + new iPrimaryAmmoIndex = get_member(this, m_Weapon_iPrimaryAmmoType); + new iPrimaryAmmoAmount = get_member(pPlayer, m_rgAmmo, iPrimaryAmmoIndex); + + if (iPrimaryAmmoAmount <= 0) { + return false; + } + + new iClip = get_member(this, m_Weapon_iClip); + new iClipSize = GetData(iHandler, CW_Data_ClipSize); + + new size = min(iClipSize - iClip, iPrimaryAmmoAmount); + if (size == 0) { + return false; + } + + if (get_member(this, m_Weapon_fInReload)) { + return false; + } + + set_member(pPlayer, m_flNextAttack, flDelay); + set_member(this, m_Weapon_fInReload, 1); + + PlayWeaponAnim(this, iAnim, 3.0); + rg_set_animation(pPlayer, PLAYER_RELOAD); + + return true; +} + +bool:DefaultShotgunReload(this, iStartAnim, iEndAnim, Float:flDelay, Float:flDuration) { + new pPlayer = GetPlayer(this); + new iClip = get_member(this, m_Weapon_iClip); + new iPrimaryAmmoType = get_member(this, m_Weapon_iPrimaryAmmoType); + new CW:iHandler = GetHandlerByEntity(this); + new iClipSize = GetData(iHandler, CW_Data_ClipSize); + + if (get_member(pPlayer, m_rgAmmo, iPrimaryAmmoType) <= 0 || iClip == iClipSize) { + return false; + } + + // don't reload until recoil is done + new Float:flNextPrimaryAttack = get_member(this, m_Weapon_flNextPrimaryAttack); + new flInSpecialReload = get_member(this, m_Weapon_fInSpecialReload); + if (flNextPrimaryAttack > 0.0) { + return false; + } + + new Float:flTimeWeaponIdle = get_member(this, m_Weapon_flTimeWeaponIdle); + // check to see if we're ready to reload + if (flInSpecialReload == 0) { + rg_set_animation(pPlayer, PLAYER_RELOAD); + PlayWeaponAnim(this, iStartAnim, flDelay); + + set_member(this, m_Weapon_fInSpecialReload, 1); + set_member(pPlayer, m_flNextAttack, flDelay); + set_member(this, m_Weapon_flNextPrimaryAttack, 1.0); + set_member(this, m_Weapon_flNextSecondaryAttack, 1.0); + } else if (flInSpecialReload == 1) { + if (flTimeWeaponIdle > 0.0) { + return false; + } + + set_member(this, m_Weapon_fInSpecialReload, 2); + + // if (RANDOM_LONG(0,1)) + // EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/reload1.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG(0,0x1f)); + // else + // EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/reload3.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG(0,0x1f)); + + PlayWeaponAnim(this, iEndAnim, flDuration); + } else { + // Add them to the clip + set_member(this, m_Weapon_iClip, ++iClip); + set_member(this, m_Weapon_fInSpecialReload, 1); + set_member(pPlayer, m_rgAmmo, get_member(pPlayer, m_rgAmmo, iPrimaryAmmoType) - 1, iPrimaryAmmoType); + } + + return true; +} + +bool:DefaultShotgunIdle(this, iAnim, iReloadEndAnim, Float:flDuration, Float:flReloadEndDuration, const szPumpSound[]) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return false; + } + + new Float:flTimeWeaponIdle = get_member(this, m_Weapon_flTimeWeaponIdle); + if (flTimeWeaponIdle < 0.0) { + new pPlayer = get_member(this, m_pPlayer); + new iPrimaryAmmoType = get_member(this, m_Weapon_iPrimaryAmmoType); + new iPrimaryAmmoAmount = get_member(pPlayer, m_rgAmmo, iPrimaryAmmoType); + new flInSpecialReload = get_member(this, m_Weapon_fInSpecialReload); + new iClip = get_member(this, m_Weapon_iClip); + + if (!iClip && flInSpecialReload == 0 && iPrimaryAmmoAmount) { + Reload(this); + } else if (flInSpecialReload != 0) { + new iClipSize = GetData(iHandler, CW_Data_ClipSize); + if (iClip < iClipSize && iPrimaryAmmoAmount) { + Reload(this); + } else { + set_member(this, m_Weapon_fInSpecialReload, 0); + emit_sound(pPlayer, CHAN_ITEM, szPumpSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); + PlayWeaponAnim(this, iReloadEndAnim, flReloadEndDuration); + } + } else { + PlayWeaponAnim(this, iAnim, flDuration); + } + } + + return true; +} + +bool:DefaultDeploy(this, const szViewModel[], const szWeaponModel[], iAnim, const szAnimExt[]) { + // if (!CanDeploy(this)) { + // return false; + // } + + // new CW:iHandler = GetHandlerByEntity(this); + new pPlayer = GetPlayer(this); + set_pev(pPlayer, pev_viewmodel2, szViewModel); + set_pev(pPlayer, pev_weaponmodel2, szWeaponModel); + + // strcpy( m_pPlayer->m_szAnimExtention, szAnimExt ); + SendWeaponAnim(this, iAnim); + + if (szAnimExt[0] != '^0') { + set_member(pPlayer, m_szAnimExtention, szAnimExt); + } + + set_member(this, m_Weapon_iShotsFired, 0); + set_member(this, m_Weapon_flTimeWeaponIdle, 1.0); + set_member(this, m_Weapon_flLastFireTime, 0.0); + set_member(this, m_Weapon_flDecreaseShotsFired, get_gametime()); + + set_member(pPlayer, m_flNextAttack, 0.5); + set_member(pPlayer, m_iFOV, DEFAULT_FOV); + set_member(pPlayer, m_iLastZoom, DEFAULT_FOV); + set_member(pPlayer, m_bResumeZoom, 0); + set_pev(pPlayer, pev_fov, float(DEFAULT_FOV)); + + return true; +} + +bool:DefaultShot(this, Float:flDamage, Float:flRangeModifier, Float:flRate, Float:flSpread[3], iShots, Float:flDistance) { + new iClip = get_member(this, m_Weapon_iClip); + if (iClip <= 0) { + return false; + } + + new pPlayer = GetPlayer(this); + + static Float:vecDirShooting[3]; + MakeAimDir(pPlayer, 1.0, vecDirShooting); + + static Float:vecSrc[3]; + ExecuteHam(Ham_Player_GetGunPosition, pPlayer, vecSrc); + + static Float:vecOut[3]; + FireBulletsPlayer(this, iShots, vecSrc, vecDirShooting, flSpread, flDistance, flDamage, flRangeModifier, pPlayer, vecOut); + + set_member(this, m_Weapon_iClip, --iClip); + + set_member(this, m_Weapon_flNextPrimaryAttack, flRate); + set_member(this, m_Weapon_flNextSecondaryAttack, flRate); + + new iShotsFired = get_member(this, m_Weapon_iShotsFired); + set_member(this, m_Weapon_iShotsFired, ++iShotsFired); + + rg_set_animation(pPlayer, PLAYER_ATTACK1); + + return true; +} + +bool:DefaultShotgunShot(this, Float:flDamage, Float:flRangeModifier, Float:flRate, Float:flPumpDelay, Float:flSpread[3], iShots, Float:flDistance) { + new iClip = get_member(this, m_Weapon_iClip); + if (iClip <= 0) { + Reload(this); + if (iClip == 0) { + // PlayEmptySound(); + } + + return false; + } + + // m_pPlayer->m_iWeaponVolume = LOUD_GUN_VOLUME; + // m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH; + + // m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH; + + if (!DefaultShot(this, flDamage, flRangeModifier, flRate, flSpread, iShots, flDistance)) { + return false; + } + + set_member(this, m_Weapon_fInSpecialReload, 0); + + if (iClip != 0) { + set_member(this, m_Weapon_flNextReload, get_gametime() + flPumpDelay); + } + + return true; +} + +DefaultSwing(this, Float:flDamage, Float:flRate, Float:flDistance) { + new CW:iHandler = GetHandlerByEntity(this); + if (iHandler == CW_INVALID_HANDLER) { + return -1; + } + + new pPlayer = GetPlayer(this); + + static Float:vecSrc[3]; + ExecuteHam(Ham_Player_GetGunPosition, pPlayer, vecSrc); + + static Float:vecEnd[3]; + MakeAimDir(pPlayer, flDistance, vecEnd); + xs_vec_add(vecSrc, vecEnd, vecEnd); + + new pTr = create_tr2(); + engfunc(EngFunc_TraceLine, vecSrc, vecEnd, DONT_IGNORE_MONSTERS, this, pTr); + + new Float:flFraction; + get_tr2(pTr, TR_flFraction, flFraction); + + if (flFraction >= 1.0) { + engfunc(EngFunc_TraceHull, vecSrc, vecEnd, DONT_IGNORE_MONSTERS, HULL_HEAD, this, pTr); + get_tr2(pTr, TR_flFraction, flFraction); + + if (flFraction < 1.0) { + // Calculate the point of interANCHOR of the line (or hull) and the object we hit + // This is and approximation of the "best" interANCHOR + new pHit = get_tr2(pTr, TR_pHit); + if (pHit == -1 || ExecuteHamB(Ham_IsBSPModel, pHit)) { + FindHullIntersection(vecSrc, pTr, VEC_DUCK_HULL_MIN, VEC_DUCK_HULL_MAX, this); + } + + get_tr2(pTr, TR_vecEndPos, vecEnd); // This is the point on the actual surface (the hull could have hit space) + get_tr2(pTr, TR_flFraction, flFraction); + } + } + + new iShotsFired = get_member(this, m_Weapon_iShotsFired); + set_member(this, m_Weapon_iShotsFired, iShotsFired + 1); + + set_member(this, m_Weapon_flNextPrimaryAttack, flRate); + + rg_set_animation(pPlayer, PLAYER_ATTACK1); + + if (flFraction >= 1.0) { + free_tr2(pTr); + return -1; + } + + new pHit = get_tr2(pTr, TR_pHit); + if (pHit < 0) { + set_tr2(pTr, TR_pHit, 0); + pHit = 0; + } + + + // if (get_member(this, m_Weapon_flNextPrimaryAttack) + 1.0 < 0.0) { + // first swing does full damage + static Float:vecDir[3]; + xs_vec_sub(vecSrc, vecEnd, vecDir); + xs_vec_normalize(vecDir, vecDir); + + rg_multidmg_clear(); + ExecuteHamB(Ham_TraceAttack, pHit, pPlayer, flDamage, vecDir, pTr, DMG_CLUB); + rg_multidmg_apply(pPlayer, pPlayer); + // } + + + set_pev(this, pev_iuser1, pTr); + SetThink(this, "Smack"); + set_pev(this, pev_nextthink, get_gametime() + (flRate * 0.5)); + + return pHit; +} + +// ANCHOR: Weapon Methods + +CW:RegisterWeapon(iPluginId, const szName[], iWeaponId, iClipSize, iPrimaryAmmoType, iPrimaryAmmoMaxAmount, iSecondaryAmmoType, iSecondaryAmmoMaxAmount, iSlotId, iPosition, iWeaponFlags, const szIcon[], CW_Flags:iFlags) { + new CW:iHandler = CreateWeaponData(szName); + SetData(iHandler, CW_Data_PluginId, iPluginId); + SetStringData(iHandler, CW_Data_Name, szName); + SetData(iHandler, CW_Data_Id, iWeaponId); + SetData(iHandler, CW_Data_ClipSize, iClipSize); + SetData(iHandler, CW_Data_PrimaryAmmoType, iPrimaryAmmoType); + SetData(iHandler, CW_Data_PrimaryAmmoMaxAmount, iPrimaryAmmoMaxAmount); + SetData(iHandler, CW_Data_SecondaryAmmoType, iSecondaryAmmoType); + SetData(iHandler, CW_Data_SecondaryAmmoMaxAmount, iSecondaryAmmoMaxAmount); + SetData(iHandler, CW_Data_SlotId, iSlotId); + SetData(iHandler, CW_Data_Position, iPosition); + SetData(iHandler, CW_Data_WeaponFlags, iWeaponFlags); + SetStringData(iHandler, CW_Data_Icon, szIcon); + SetData(iHandler, CW_Data_Flags, iFlags); + + if (!g_bPrecache && !g_bWeaponHooks[iWeaponId]) { // we are not able to get weapon name in precache state + RegisterWeaponHooks(iWeaponId); + } + + register_clcmd(szName, "OnWeaponClCmd"); + + return iHandler; +} + +CW:GetHandler(const szName[]) { + new CW:iHandler; + if (!TrieGetCell(g_rgWeaponsMap, szName, iHandler)) { + return CW_INVALID_HANDLER; + } + + return iHandler; +} + +CW:GetHandlerByEntity(pEntity) { + new iToken = pev(pEntity, pev_impulse); + + if (iToken >= TOKEN && iToken < TOKEN + g_iWeaponCount) { + return CW:(iToken - TOKEN); + } + + return CW_INVALID_HANDLER; +} + +SpawnWeapon(CW:iHandler) { + new iWeaponId = GetData(iHandler, CW_Data_Id); + + new pEntity = engfunc(EngFunc_CreateNamedEntity, g_iszWeaponNames[iWeaponId]); + set_pev(pEntity, pev_impulse, TOKEN + _:iHandler); + dllfunc(DLLFunc_Spawn, pEntity); + + new iPrimaryAmmoType = GetData(iHandler, CW_Data_PrimaryAmmoType); + + set_member(pEntity, m_Weapon_iClip, GetData(iHandler, CW_Data_ClipSize)); + set_member(pEntity, m_Weapon_iPrimaryAmmoType, iPrimaryAmmoType); + set_member(pEntity, m_Weapon_iDefaultAmmo, 0); + // set_member(pEntity, m_Weapon_iShell, 0); + // set_member(pEntity, m_Weapon_bDelayFire, true); + // set_member(pEntity, m_Weapon_fFireOnEmpty, true); + + ExecuteBindedFunction(CWB_Spawn, pEntity); + + return pEntity; +} + +SpawnWeaponBox(CW:iHandler) { + new pWeaponBox = engfunc(EngFunc_CreateNamedEntity, g_iszWeaponBox); + dllfunc(DLLFunc_Spawn, pWeaponBox); + + new pItem = SpawnWeapon(iHandler); + set_pev(pItem, pev_spawnflags, pev(pItem, pev_spawnflags) | SF_NORESPAWN); + set_pev(pItem, pev_effects, EF_NODRAW); + set_pev(pItem, pev_movetype, MOVETYPE_NONE); + set_pev(pItem, pev_solid, SOLID_NOT); + set_pev(pItem, pev_model, 0); + set_pev(pItem, pev_modelindex, 0); + set_pev(pItem, pev_owner, pWeaponBox); + + new iSlot = GetData(iHandler, CW_Data_SlotId); + set_member(pWeaponBox, m_WeaponBox_rgpPlayerItems, pItem, iSlot + 1); + + dllfunc(DLLFunc_Spawn, pWeaponBox); + + // engfunc(EngFunc_SetSize, pWeaponBox, {-8.0, -8.0, 0.0}, {8.0, 8.0, 4.0}); + + return pWeaponBox; +} + +// ANCHOR: Player Methods + +GiveWeapon(pPlayer, CW:iHandler) { + new pWeapon = SpawnWeapon(iHandler); + if (ExecuteHamB(Ham_AddPlayerItem, pPlayer, pWeapon)) { + ExecuteHamB(Ham_Item_AttachToPlayer, pWeapon, pPlayer); + emit_sound(pPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM); + } +} + +UpdateWeaponList(pPlayer, CW:iHandler) { + new iWeaponId = GetData(iHandler, CW_Data_Id); + + static szName[64]; + GetStringData(iHandler, CW_Data_Name, szName, charsmax(szName)); + + new iPrimaryAmmoType = GetData(iHandler, CW_Data_PrimaryAmmoType); + new iPrimaryAmmoMaxCount = GetData(iHandler, CW_Data_PrimaryAmmoMaxAmount); + new iSecondaryAmmoType = GetData(iHandler, CW_Data_SecondaryAmmoType); + new iSecondaryAmmoMaxCount = GetData(iHandler, CW_Data_SecondaryAmmoMaxAmount); + new iSlotId = GetData(iHandler, CW_Data_SlotId); + new iPosition = GetData(iHandler, CW_Data_Position); + new iWeaponFlags = GetData(iHandler, CW_Data_WeaponFlags); + + emessage_begin(MSG_ONE, gmsgWeaponList, _, pPlayer); + ewrite_string(szName); + ewrite_byte(iPrimaryAmmoType); + ewrite_byte(iPrimaryAmmoMaxCount); + ewrite_byte(iSecondaryAmmoType); + ewrite_byte(iSecondaryAmmoMaxCount); + ewrite_byte(iSlotId); + ewrite_byte(iPosition); + ewrite_byte(iWeaponId); + ewrite_byte(iWeaponFlags); + emessage_end(); +} + +ResetWeaponList(pPlayer, iWeaponId) { + message_begin(MSG_ONE, gmsgWeaponList, _, pPlayer); + write_string(g_weaponListDefaults[iWeaponId][WL_WeaponName]); + write_byte(g_weaponListDefaults[iWeaponId][WL_PrimaryAmmoType]); + write_byte(g_weaponListDefaults[iWeaponId][WL_PrimaryAmmoMaxAmount]); + write_byte(g_weaponListDefaults[iWeaponId][WL_SecondaryAmmoType]); + write_byte(g_weaponListDefaults[iWeaponId][WL_SecondaryAmmoMaxAmount]); + write_byte(g_weaponListDefaults[iWeaponId][WL_SlotId]); + write_byte(g_weaponListDefaults[iWeaponId][WL_NumberInSlot]); + write_byte(g_weaponListDefaults[iWeaponId][WL_WeaponId]); + write_byte(g_weaponListDefaults[iWeaponId][WL_Flags]); + message_end(); +} + +SetWeaponPrediction(pPlayer, bool:bValue) { + new pszInfoBuffer = engfunc(EngFunc_GetInfoKeyBuffer, pPlayer); + engfunc(EngFunc_SetClientKeyValue, pPlayer, pszInfoBuffer, "cl_lw", bValue ? "1" : "0"); +} + +RemovePlayerItem(pItem) { + new pPlayer = GetPlayer(pItem); + + new iWeaponId = get_member(pItem, m_iId); + + if (pItem == get_member(pPlayer, m_pActiveItem)) { + ExecuteHamB(Ham_Weapon_RetireWeapon, pItem); + } + + ExecuteHamB(Ham_RemovePlayerItem, pPlayer, pItem); + ExecuteHamB(Ham_Item_Kill, pItem); + set_pev(pPlayer, pev_weapons, pev(pPlayer, pev_weapons) & ~(1< 1.0) { + vecMidUp[2] = flMinZ + (flDiff / 2.0); + + if (PointContents(vecMidUp) == CONTENTS_WATER) { + flMinZ = vecMidUp[2]; + } else { + flMaxZ = vecMidUp[2]; + } + + flDiff = flMaxZ - flMinZ; + } + + return vecMidUp[2]; +} + +FindHullIntersection(const Float:vecSrc[3], &pTr, const Float:vecMins[3], const Float:vecMaxs[3], pEntity) { + new Float:flDistance = 8192.0; + + static Float:rgvecMinsMaxs[2][3]; + for (new i = 0; i < 3; ++i) { + rgvecMinsMaxs[0][i] = vecMins[i]; + rgvecMinsMaxs[1][i] = vecMaxs[i]; + } + + static Float:vecHullEnd[3]; + get_tr2(pTr, TR_vecEndPos, vecHullEnd); + + for (new i = 0; i < 3; ++i) { + vecHullEnd[i] = vecSrc[i] + ((vecHullEnd[i] - vecSrc[i]) * 2.0); + } + + new tmpTrace = create_tr2(); + engfunc(EngFunc_TraceLine, vecSrc, vecHullEnd, DONT_IGNORE_MONSTERS, pEntity, tmpTrace); + + new Float:flFraction; + get_tr2(tmpTrace, TR_flFraction, flFraction); + + if (flFraction < 1.0) { + free_tr2(pTr); + pTr = tmpTrace; + return; + } + + static Float:vecEnd[3]; + for (new i = 0; i < 2; i++) { + for (new j = 0; j < 2; j++) { + for (new k = 0; k < 2; k++) { + vecEnd[0] = vecHullEnd[0] + rgvecMinsMaxs[i][0]; + vecEnd[1] = vecHullEnd[1] + rgvecMinsMaxs[j][1]; + vecEnd[2] = vecHullEnd[2] + rgvecMinsMaxs[k][2]; + + engfunc(EngFunc_TraceLine, vecSrc, vecEnd, DONT_IGNORE_MONSTERS, pEntity, tmpTrace); + get_tr2(tmpTrace, TR_flFraction, flFraction); + + new Float:vecEndPos[3]; + get_tr2(tmpTrace, TR_vecEndPos, vecEndPos); + + if (flFraction < 1.0) { + new Float:flThisDistance = get_distance_f(vecEndPos, vecSrc); + if (flThisDistance < flDistance) { + free_tr2(pTr); + pTr = tmpTrace; + flDistance = flThisDistance; + } + } + } + } + } +} + +_RadiusDamage(const Float:vecOrigin[3], iInflictor, pAttacker, Float:flDamage, Float:flRadius, iClassIgnore, iDamageBits) { + #pragma unused iClassIgnore + + static Float:vecSrc[3]; + xs_vec_copy(vecOrigin, vecSrc); + + new Float:flFalloff = flRadius ? (flDamage / flRadius) : 1.0; + new bool:bInWater = (PointContents(vecSrc) == CONTENTS_WATER); + + vecSrc[2] += 1.0; // in case grenade is lying on the ground + + if (!pAttacker) { + pAttacker = iInflictor; + } + + new pTr = create_tr2(); + + new pEntity; + new pPrevEntity; + while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecSrc, flRadius)) != 0) { + if (pPrevEntity >= pEntity) { + break; + } + + pPrevEntity = pEntity; + + if (!pev_valid(pEntity)) { + continue; + } + + if (ExecuteHam(Ham_IsPlayer, pEntity) && !rg_is_player_can_takedamage(pEntity, pAttacker)) { + continue; + } + + if (pev(pEntity, pev_takedamage) == DAMAGE_NO) { + continue; + } + + static szClassname[32]; + pev(pEntity, pev_classname, szClassname, charsmax(szClassname)); + + // UNDONE: this should check a damage mask, not an ignore + // if ( iClassIgnore != CLASS_NONE && pEntity->Classify() == iClassIgnore ) {// houndeyes don't hurt other houndeyes with their attack + // continue; + // } + + new iWaterLevel = pev(pEntity, pev_waterlevel); + + if (bInWater && iWaterLevel == 0) { + continue; + } + + if (!bInWater && iWaterLevel == 3) { + continue; + } + + static Float:vecSpot[3]; + ExecuteHamB(Ham_BodyTarget, pEntity, vecSrc, vecSpot); + engfunc(EngFunc_TraceLine, vecSrc, vecSpot, IGNORE_MONSTERS, iInflictor, pTr); + + static Float:flFraction; + get_tr2(pTr, TR_flFraction, flFraction); + + if (flFraction != 1.0 && get_tr2(pTr, TR_pHit) != pEntity) { + continue; + } + + if (get_tr2(pTr, TR_StartSolid)) { + set_tr2(pTr, TR_vecEndPos, vecSrc); + set_tr2(pTr, TR_flFraction, 0.0); + flFraction = 0.0; + } + + static Float:vecEnd[3]; + get_tr2(pTr, TR_vecEndPos, vecEnd); + + new Float:flAdjustedDamage = flDamage - (get_distance_f(vecSrc, vecEnd) * flFalloff); + + if (flAdjustedDamage < 0.0) { + flAdjustedDamage = 0.0; + } + + if (flFraction != 1.0) { + static Float:vecDir[3]; + xs_vec_sub(vecEnd, vecSrc, vecDir); + xs_vec_normalize(vecDir, vecDir); + + rg_multidmg_clear(); + ExecuteHamB(Ham_TraceAttack, pEntity, iInflictor, flAdjustedDamage, vecDir, pTr, iDamageBits); + rg_multidmg_apply(iInflictor, pAttacker); + } else { + ExecuteHamB(Ham_TakeDamage, pEntity, iInflictor, pAttacker, flAdjustedDamage, iDamageBits); + } + } + + free_tr2(pTr); +} + +MakeAimDir(pPlayer, Float:flDistance, Float:vecOut[3]) { + static Float:vecAngles[3]; + pev(pPlayer, pev_v_angle, vecAngles); + engfunc(EngFunc_MakeVectors, vecAngles); + + get_global_vector(GL_v_forward, vecOut); + xs_vec_mul_scalar(vecOut, flDistance, vecOut); +} + +GetDecalIndex(pEntity) { + new iDecalIndex = ExecuteHamB(Ham_DamageDecal, pEntity, 0); + if (iDecalIndex < 0) { + return -1; + } + + iDecalIndex = ArrayGetCell(g_irgDecals, iDecalIndex); + + if (iDecalIndex == engfunc(EngFunc_DecalIndex, "{break1") + || iDecalIndex == engfunc(EngFunc_DecalIndex, "{break2") + || iDecalIndex == engfunc(EngFunc_DecalIndex, "{break3")) { + return engfunc(EngFunc_DecalIndex, "{bproof1"); + } + + return iDecalIndex; +} + +// ANCHOR: Storages + +AllocateStrings() { + g_iszWeaponBox = engfunc(EngFunc_AllocString, "weaponbox"); + + for (new iWeaponId = 0; iWeaponId <= CSW_LAST_WEAPON; ++iWeaponId) { + if (g_rgszWeaponNames[iWeaponId][0] == '^0') { + continue; + } + + g_iszWeaponNames[iWeaponId] = engfunc(EngFunc_AllocString, g_rgszWeaponNames[iWeaponId]); + } +} + +InitStorages() { + g_rgWeapons[CW_Data_Name] = ArrayCreate(64, 1); + g_rgWeapons[CW_Data_Icon] = ArrayCreate(16, 1); + + for (new i = 0; i < _:CW_Data; ++i) { + if (!g_rgWeapons[CW_Data:i]) { + g_rgWeapons[CW_Data:i] = ArrayCreate(1, 1); + } + } + + g_rgWeaponsMap = TrieCreate(); + + g_irgDecals = ArrayCreate(); +} + +DestroyStorages() { + for (new CW:iHandler = CW:0; _:iHandler < g_iWeaponCount; ++iHandler) { + DestroyWeaponData(iHandler); + } + + for (new i = 0; i < _:CW_Data; ++i) { + ArrayDestroy(Array:g_rgWeapons[CW_Data:i]); + } + + TrieDestroy(g_rgWeaponsMap); + + ArrayDestroy(g_irgDecals); +} + +// ANCHOR: Weapon Data + +CW:CreateWeaponData(const szName[]) { + new CW:iHandler = CW:g_iWeaponCount; + + for (new iParam = 0; iParam < _:CW_Data; ++iParam) { + ArrayPushCell(Array:g_rgWeapons[CW_Data:iParam], 0); + } + + TrieSetCell(g_rgWeaponsMap, szName, iHandler); + + InitBindings(iHandler); + + g_iWeaponCount++; + + return iHandler; +} + +DestroyWeaponData(CW:iHandler) { + DestroyBindings(iHandler); +} + +any:GetData(CW:iHandler, CW_Data:iParam) { + return ArrayGetCell(Array:g_rgWeapons[iParam], _:iHandler); +} + +GetStringData(CW:iHandler, CW_Data:iParam, szOut[], iLen) { + ArrayGetString(Array:g_rgWeapons[iParam], _:iHandler, szOut, iLen); +} + +SetData(CW:iHandler, CW_Data:iParam, any:value) { + ArraySetCell(Array:g_rgWeapons[iParam], _:iHandler, value); +} + +SetStringData(CW:iHandler, CW_Data:iParam, const szValue[]) { + ArraySetString(Array:g_rgWeapons[iParam], _:iHandler, szValue); +} + +// ANCHOR: Weapon Bindings + +Array:InitBindings(CW:iHandler) { + new Array:irgBindings = ArrayCreate(Function, _:CW_Binding); + for (new i = 0; i < _:CW_Binding; ++i) { + new rgBinding[Function]= {-1, -1}; + ArrayPushArray(irgBindings, rgBinding); + } + + SetData(iHandler, CW_Data_Bindings, irgBindings); +} + +DestroyBindings(CW:iHandler) { + new Array:irgBindings = GetData(iHandler, CW_Data_Bindings); + ArrayDestroy(irgBindings); +} + +Bind(CW:iHandler, iBinding, iPluginId, iFunctionid) { + new rgBinding[Function]; + rgBinding[Function_PluginId] = iPluginId; + rgBinding[Function_FunctionId] = iFunctionid; + + new Array:irgBindings = GetData(iHandler, CW_Data_Bindings); + ArraySetArray(irgBindings, iBinding, rgBinding); +} + +GetBinding(CW:iHandler, CW_Binding:iBinding, &iPluginId, &iFunctionId) { + new Array:iszBindings = GetData(iHandler, CW_Data_Bindings); + + static rgBinding[Function]; + ArrayGetArray(iszBindings, _:iBinding, rgBinding, sizeof(rgBinding)); + + if (rgBinding[Function_PluginId] == -1) { + return false; + } + + if (rgBinding[Function_FunctionId] == -1) { + return false; + } + + iPluginId = rgBinding[Function_PluginId]; + iFunctionId = rgBinding[Function_FunctionId]; + + return true; +} + +any:ExecuteBindedFunction(CW_Binding:iBinding, this, any:...) { + new CW:iHandler = GetHandlerByEntity(this); + + new iPluginId, iFunctionId; + if (!GetBinding(iHandler, iBinding, iPluginId, iFunctionId)) { + return PLUGIN_CONTINUE; + } + + if (callfunc_begin_i(iFunctionId, iPluginId) == 1) { + callfunc_push_int(this); + + if (iBinding == CWB_WeaponBoxModelUpdate) { + new pWeaponBox = getarg(2); + callfunc_push_int(pWeaponBox); + } + + return callfunc_end(); + } + + return PLUGIN_CONTINUE; +} + +// ANCHOR: Weapon hooks + +InitWeaponHooks() { + for (new CW:iHandler = CW:0; _:iHandler < g_iWeaponCount; ++iHandler) { + new iWeaponId = GetData(iHandler, CW_Data_Id); + if (!g_bWeaponHooks[iWeaponId]) { + RegisterWeaponHooks(iWeaponId); + } + } +} + +RegisterWeaponHooks(iWeaponId) { + new szClassname[32]; + get_weaponname(iWeaponId, szClassname, charsmax(szClassname)); + + RegisterHam(Ham_Item_PostFrame, szClassname, "OnItemPostFrame", .Post = 0); + RegisterHam(Ham_Item_ItemSlot, szClassname, "OnItemSlot", .Post = 0); + RegisterHam(Ham_Item_Holster, szClassname, "OnItemHolster", .Post = 0); + RegisterHam(Ham_Item_Deploy, szClassname, "OnItemDeploy", .Post = 0); + RegisterHam(Ham_CS_Item_GetMaxSpeed, szClassname, "OnCSItemGetMaxSpeed", .Post = 0); + // RegisterHam(Ham_Weapon_PlayEmptySound, szClassname, "OnWeaponPlayEmptySound", .Post = 0); + RegisterHam(Ham_Item_AddToPlayer, szClassname, "OnItemAddToPlayer_Post", .Post = 1); + RegisterHam(Ham_Spawn, szClassname, "OnSpawn_Post", .Post = 1); + RegisterHam(Ham_CS_Item_CanDrop, szClassname, "OnCanDrop"); + // RegisterHam(Ham_Item_GetItemInfo, szClassname, "OnItemGetItemInfo", .Post = 1); + RegisterHam(Ham_Weapon_PrimaryAttack, szClassname, "OnWeaponPrimaryAttack"); + RegisterHam(Ham_Weapon_SecondaryAttack, szClassname, "OnWeaponSecondaryAttack"); + RegisterHam(Ham_Weapon_Reload, szClassname, "OnWeaponReload"); + RegisterHam(Ham_Weapon_WeaponIdle, szClassname, "OnWeaponIdle"); + + g_bWeaponHooks[iWeaponId] = true; +} + +// ANCHOR: Effects + +SparkShower(const Float:vecOrigin[3], const Float:vecAngles[3], iOwner) { + new pSparkShower = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "spark_shower")); + engfunc(EngFunc_SetOrigin, pSparkShower, vecOrigin); + set_pev(pSparkShower, pev_angles, vecAngles); + set_pev(pSparkShower, pev_owner, iOwner); + dllfunc(DLLFunc_Spawn, pSparkShower); +} + +GrenadeExplosion(const Float:vecOrigin[3], Float:flDamage) { + new iModelIndex = PointContents(vecOrigin) != CONTENTS_WATER + ? engfunc(EngFunc_ModelIndex, "sprites/zerogxplode.spr") + : engfunc(EngFunc_ModelIndex, "sprites/WXplo1.spr"); + + new iScale = floatround((flDamage - 50.0) * 0.60); + + if (iScale < 8) { + iScale = 8; + } + + if (iScale > 255) { + iScale = 255; + } + + engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_EXPLOSION); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + write_short(iModelIndex); + write_byte(iScale); + write_byte(15); + write_byte(TE_EXPLFLAG_NONE); + message_end(); +} + +GrenadeSmoke(pGrenade) { + static Float:vecOrigin[3]; + pev(pGrenade, pev_origin, vecOrigin); + + static Float:flDamage; + pev(pGrenade, pev_dmg, flDamage); + + if (PointContents(vecOrigin) == CONTENTS_WATER) { + static Float:vecSize[3] = {64.0, 64.0, 64.0}; + + static Float:vecMins[3]; + xs_vec_sub(vecOrigin, vecSize, vecMins); + + static Float:vecMaxs[3]; + xs_vec_add(vecOrigin, vecSize, vecMaxs); + + Bubbles(vecMins, vecMaxs, 100); + } else { + new iModelIndex = engfunc(EngFunc_ModelIndex, "sprites/steam1.spr"); + + new Float:flRadius = (flDamage - 50.0) * 0.80; + if (flRadius < 8.0) { + flRadius = 9.0; + } + + engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_SMOKE); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + write_short(iModelIndex); + write_byte(floatround(flRadius)); // scale * 10 + write_byte(12); // framerate + message_end(); + } +} + +Bubbles(const Float:vecMins[3], const Float:vecMaxs[3], iCount) { + static Float:vecMid[3]; + for (new i = 0; i < 3; ++i) { + vecMid[i] = (vecMins[i] + vecMaxs[i]) * 0.5; + } + + new Float:flHeight = WaterLevel(vecMid, vecMid[2], vecMid[2] + 1024.0) - vecMins[2]; + new iModelIndex = engfunc(EngFunc_ModelIndex, "sprites/bubble.spr"); + + engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecMid, 0); + write_byte(TE_BUBBLES); + engfunc(EngFunc_WriteCoord, vecMins[0]); + engfunc(EngFunc_WriteCoord, vecMins[1]); + engfunc(EngFunc_WriteCoord, vecMins[2]); + engfunc(EngFunc_WriteCoord, vecMaxs[0]); + engfunc(EngFunc_WriteCoord, vecMaxs[1]); + engfunc(EngFunc_WriteCoord, vecMaxs[2]); + engfunc(EngFunc_WriteCoord, flHeight); // height + write_short(iModelIndex); + write_byte(iCount); // count + write_coord(8); // speed + message_end(); +} + +DecalTrace(pTr, iDecal) { + if (iDecal < 0) { + return; + } + + new Float:flFraction; + get_tr2(pTr, TR_flFraction, flFraction); + + if (flFraction == 1.0) { + return; + } + + // Only decal BSP models + new pHit = get_tr2(pTr, TR_pHit); + if (pHit != -1) { + if (pHit && !ExecuteHam(Ham_IsBSPModel, pHit)) { + return; + } + } else { + pHit = 0; + } + + new iMessage = TE_DECAL; + if (pHit != 0) { + if (iDecal > 255) { + iMessage = TE_DECALHIGH; + iDecal -= 256; + } + } else { + iMessage = TE_WORLDDECAL; + if (iDecal > 255) { + iMessage = TE_WORLDDECALHIGH; + iDecal -= 256; + } + } + + static Float:vecEndPos[3]; + get_tr2(pTr, TR_vecEndPos, vecEndPos); + + engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vecEndPos, 0); + write_byte(iMessage); + engfunc(EngFunc_WriteCoord, vecEndPos[0]); + engfunc(EngFunc_WriteCoord, vecEndPos[1]); + engfunc(EngFunc_WriteCoord, vecEndPos[2]); + write_byte(iDecal); + if (pHit) { + write_short(pHit); + } + message_end(); +} + +BulletSmoke(pTr) { + static Float:vecSrc[3]; + get_tr2(pTr, TR_vecEndPos, vecSrc); + + static Float:vecEnd[3]; + get_tr2(pTr, TR_vecPlaneNormal, vecEnd); + xs_vec_mul_scalar(vecEnd, 2.5, vecEnd); + xs_vec_add(vecSrc, vecEnd, vecEnd); + + static iModelIndex; + if (!iModelIndex) { + iModelIndex = engfunc(EngFunc_ModelIndex, WALL_PUFF_SPRITE); + } + + engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0); + write_byte(TE_EXPLOSION); + engfunc(EngFunc_WriteCoord, vecEnd[0]); + engfunc(EngFunc_WriteCoord, vecEnd[1]); + engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0); + write_short(iModelIndex); + write_byte(5); + write_byte(50); + write_byte(TE_EXPLFLAG_NODLIGHTS | TE_EXPLFLAG_NOSOUND | TE_EXPLFLAG_NOPARTICLES); + message_end(); +} + +MakeDecal(pTr, pEntity, iDecalIndex, bool:bGunshotDecal = true) { + static vecOrigin[3]; + get_tr2(pTr, TR_vecEndPos, vecOrigin); + + new pHit; + get_tr2(pTr, TR_pHit, pHit); + + if(pHit) { + emessage_begin(MSG_BROADCAST, SVC_TEMPENTITY); + ewrite_byte(TE_DECAL); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + ewrite_byte(iDecalIndex); + ewrite_short(pHit); + emessage_end(); + } else { + emessage_begin(MSG_BROADCAST, SVC_TEMPENTITY); + ewrite_byte(TE_WORLDDECAL); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + ewrite_byte(iDecalIndex); + emessage_end(); + } + + if (bGunshotDecal) { + message_begin(MSG_BROADCAST, SVC_TEMPENTITY); + write_byte(TE_GUNSHOTDECAL); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + write_short(pEntity); + write_byte(iDecalIndex); + message_end(); + } +} + +BubbleTrail(const Float:from[3], const Float:to[3], count) { + new Float:flHeight = WaterLevel(from, from[2], from[2] + 256); + flHeight = flHeight - from[2]; + + if (flHeight < 8) { + flHeight = WaterLevel(to, to[2], to[2] + 256.0); + flHeight = flHeight - to[2]; + if (flHeight < 8) { + return; + } + + // UNDONE: do a ploink sound + flHeight = flHeight + to[2] - from[2]; + } + + if (count > 255) { + count = 255; + } + + static g_sModelIndexBubbles; + if (!g_sModelIndexBubbles) { + g_sModelIndexBubbles = engfunc(EngFunc_ModelIndex, "sprites/bubble.spr"); + } + + engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, from, 0); + write_byte(TE_BUBBLETRAIL); + engfunc(EngFunc_WriteCoord, from[0]); + engfunc(EngFunc_WriteCoord, from[1]); + engfunc(EngFunc_WriteCoord, from[2]); + engfunc(EngFunc_WriteCoord, to[0]); + engfunc(EngFunc_WriteCoord, to[1]); + engfunc(EngFunc_WriteCoord, to[2]); + engfunc(EngFunc_WriteCoord, flHeight); + write_short(g_sModelIndexBubbles); + write_byte(count); + write_coord(8); + message_end(); +} + +ExplosionDecalTrace(pTr) { + switch (random(3)) { + case 0: { + DecalTrace(pTr, engfunc(EngFunc_DecalIndex, "{scorch1")); + } + case 1: { + DecalTrace(pTr, engfunc(EngFunc_DecalIndex, "{scorch2")); + } + case 2: { + DecalTrace(pTr, engfunc(EngFunc_DecalIndex, "{scorch3")); + } + } +} + +DebrisSound(pEntity) { + switch (random(3)) { + case 0: { + emit_sound(pEntity, CHAN_VOICE, "weapons/debris1.wav", 0.55, ATTN_NORM, 0, PITCH_NORM); + } + case 1: { + emit_sound(pEntity, CHAN_VOICE, "weapons/debris2.wav", 0.55, ATTN_NORM, 0, PITCH_NORM); + } + case 2: { + emit_sound(pEntity, CHAN_VOICE, "weapons/debris3.wav", 0.55, ATTN_NORM, 0, PITCH_NORM); + } + } +} + +bool:EjectWeaponBrass(this, iModelIndex, iSoundType) { + new pPlayer = GetPlayer(this); + + if (!iModelIndex) { + return false; + } + + static Float:vecViewOfs[3]; + pev(pPlayer, pev_view_ofs, vecViewOfs); + + static Float:vecAngles[3]; + pev(pPlayer, pev_angles, vecAngles); + + static Float:vecUp[3]; + angle_vector(vecAngles, ANGLEVECTOR_UP, vecUp); + + static Float:vecForward[3]; + angle_vector(vecAngles, ANGLEVECTOR_FORWARD, vecForward); + + static Float:vecRight[3]; + angle_vector(vecAngles, ANGLEVECTOR_RIGHT, vecRight); + + static Float:vecOrigin[3]; + pev(pPlayer, pev_origin, vecOrigin); + + for (new i = 0; i < 3; ++i) { + vecOrigin[i] = vecOrigin[i] + vecViewOfs[i] + (vecUp[i] * -9.0) + (vecForward[i] * 16.0); + } + + static Float:vecVelocity[3]; + pev(pPlayer, pev_velocity, vecVelocity); + + for (new i = 0; i < 3; ++i) { + vecVelocity[i] = vecVelocity[i] + (vecRight[i] * random_float(50.0, 70.0)) + (vecUp[i] * random_float(100.0, 150.0)) + (vecForward[i] * 25.0); + } + + engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_MODEL); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + engfunc(EngFunc_WriteCoord, vecVelocity[0]); + engfunc(EngFunc_WriteCoord, vecVelocity[1]); + engfunc(EngFunc_WriteCoord, vecVelocity[2]); + write_angle(floatround(vecAngles[1])); + write_short(iModelIndex); + write_byte(iSoundType); + write_byte(25); + message_end(); + + return true; +} + +// ANCHOR: Random + +new const seed_table[256] = { + 28985, 27138, 26457, 9451, 17764, 10909, 28790, 8716, 6361, 4853, 17798, 21977, 19643, 20662, 10834, 20103, + 27067, 28634, 18623, 25849, 8576, 26234, 23887, 18228, 32587, 4836, 3306, 1811, 3035, 24559, 18399, 315, + 26766, 907, 24102, 12370, 9674, 2972, 10472, 16492, 22683, 11529, 27968, 30406, 13213, 2319, 23620, 16823, + 10013, 23772, 21567, 1251, 19579, 20313, 18241, 30130, 8402, 20807, 27354, 7169, 21211, 17293, 5410, 19223, + 10255, 22480, 27388, 9946, 15628, 24389, 17308, 2370, 9530, 31683, 25927, 23567, 11694, 26397, 32602, 15031, + 18255, 17582, 1422, 28835, 23607, 12597, 20602, 10138, 5212, 1252, 10074, 23166, 19823, 31667, 5902, 24630, + 18948, 14330, 14950, 8939, 23540, 21311, 22428, 22391, 3583, 29004, 30498, 18714, 4278, 2437, 22430, 3439, + 28313, 23161, 25396, 13471, 19324, 15287, 2563, 18901, 13103, 16867, 9714, 14322, 15197, 26889, 19372, 26241, + 31925, 14640, 11497, 8941, 10056, 6451, 28656, 10737, 13874, 17356, 8281, 25937, 1661, 4850, 7448, 12744, + 21826, 5477, 10167, 16705, 26897, 8839, 30947, 27978, 27283, 24685, 32298, 3525, 12398, 28726, 9475, 10208, + 617, 13467, 22287, 2376, 6097, 26312, 2974, 9114, 21787, 28010, 4725, 15387, 3274, 10762, 31695, 17320, + 18324, 12441, 16801, 27376, 22464, 7500, 5666, 18144, 15314, 31914, 31627, 6495, 5226, 31203, 2331, 4668, + 12650, 18275, 351, 7268, 31319, 30119, 7600, 2905, 13826, 11343, 13053, 15583, 30055, 31093, 5067, 761, + 9685, 11070, 21369, 27155, 3663, 26542, 20169, 12161, 15411, 30401, 7580, 31784, 8985, 29367, 20989, 14203, + 29694, 21167, 10337, 1706, 28578, 887, 3373, 19477, 14382, 675, 7033, 15111, 26138, 12252, 30996, 21409, + 25678, 18555, 13256, 23316, 22407, 16727, 991, 9236, 5373, 29402, 6117, 15241, 27715, 19291, 19888, 19847 +}; + +Float:SharedRandomFloat(seed, Float:low, Float:high) { + new Float:range = high - low; + if (!range) { + return low; + } + + new glSeed = U_Srand(seed + floatround(low) + floatround(high)); + U_Random(glSeed); + U_Random(glSeed); + + new tensixrand = U_Random(glSeed) & 65535; + new Float:offset = float(tensixrand) / 65536.0; + + return (low + offset * range ); +} + +U_Random(&glSeed) { + glSeed *= 69069; + glSeed += seed_table[glSeed & 0xff]; + + return (++glSeed & 0x0fffffff); +} + +U_Srand(seed) { + return seed_table[seed & 0xff]; +} + +// FireEvent(pTr, const szSnd[], const szShellModel[]) { +// static Float:flFraction; +// get_tr2(pTr, TR_flFraction, flFraction); + +// new pHit = get_tr2(pTr, TR_pHit); + +// if (flFraction != 1.0) { +// // Native_PlaySoundAtPosition( $origin = $trace_endpos, $sound = weapons/bullet_hit1.wav ); +// // Native_ImpactParticles( $origin = $trace_endpos ); +// // Native_PlaceDecal( $origin = $trace_endpos, $decal = "{shot2", $trace_entity ); + +// new iDecalIndex = random_num(get_decal_index("{shot1"), get_decal_index("{shot5") + 1); +// MakeDecal(pTr, pHit, iDecalIndex); +// } +// } + +// BeamPoints(const Float:vecStart[3], const Float:vecEnd[3], const color[3]) { +// message_begin(MSG_BROADCAST ,SVC_TEMPENTITY); +// write_byte(TE_BEAMPOINTS); +// write_coord(floatround(vecStart[0])); // start position +// write_coord(floatround(vecStart[1])); +// write_coord(floatround(vecStart[2])); +// write_coord(floatround(vecEnd[0])); // end position +// write_coord(floatround(vecEnd[1])); +// write_coord(floatround(vecEnd[2])); +// write_short(engfunc(EngFunc_ModelIndex, "sprites/laserbeam.spr")); // sprite index +// write_byte(0); // starting frame +// write_byte(10); // frame rate in 0.1's +// write_byte(30); // life in 0.1's +// write_byte(2); // line width in 0.1's +// write_byte(1); // noise amplitude in 0.01's +// write_byte(color[0]); // Red +// write_byte(color[1]); // Green +// write_byte(color[2]); // Blue +// write_byte(127); // brightness +// write_byte(10); // scroll speed in 0.1's +// message_end(); +// } diff --git a/src/scripts/artifacts/sw_artifact_downjacket.sma b/src/scripts/artifacts/sw_artifact_downjacket.sma new file mode 100644 index 0000000..7f4988e --- /dev/null +++ b/src/scripts/artifacts/sw_artifact_downjacket.sma @@ -0,0 +1,106 @@ +#include +#include +#include + +#include +#include + +#define ARTIFACT_ID "downjacket" + +new const g_szMdlPArtifact[] = "models/snowwars/v090/artifacts/p_downjacket.mdl"; +new const g_szMdlWArtifact[] = "models/snowwars/v090/artifacts/w_downjacket.mdl"; +new const g_szEquipArtifactSound[] = "snowwars/v090/pw_shield.wav"; + +new g_pPlayerJacket[MAX_PLAYERS + 1]; + +public plugin_precache() { + precache_model(g_szMdlPArtifact); + precache_model(g_szMdlWArtifact); + precache_sound(g_szEquipArtifactSound); + + SW_PlayerArtifact_Register(ARTIFACT_ID, "@Artifact_Activated", "@Artifact_Deactivated"); +} + +public plugin_init() { + register_plugin("[Snow Wars] Down Jacket Artifact", SW_VERSION, "Hedgehog Fog"); + + register_event("ResetHUD", "Event_ResetHUD", "b"); + + CE_RegisterHook(CEFunction_Spawn, "sw_item_artifact", "@ArtifactItem_Spawn"); +} + +public Event_ResetHUD(pPlayer) { + @Player_UpdateStatusIcon(pPlayer); +} + +public @Artifact_Activated(pPlayer) { + new Float:flResistance = SW_Player_GetAttribute(pPlayer, SW_PlayerAttribute_Resistance); + SW_Player_SetAttribute(pPlayer, SW_PlayerAttribute_Resistance, flResistance + 0.5); + + g_pPlayerJacket[pPlayer] = @Jacket_Create(pPlayer); + @Player_UpdateStatusIcon(pPlayer); + emit_sound(pPlayer, CHAN_ITEM, g_szEquipArtifactSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); +} + +public @Artifact_Deactivated(pPlayer) { + new Float:flResistance = SW_Player_GetAttribute(pPlayer, SW_PlayerAttribute_Resistance); + SW_Player_SetAttribute(pPlayer, SW_PlayerAttribute_Resistance, flResistance - 0.5); + + if (g_pPlayerJacket[pPlayer]) { + engfunc(EngFunc_RemoveEntity, g_pPlayerJacket[pPlayer]); + g_pPlayerJacket[pPlayer] = 0; + } + + @Player_UpdateStatusIcon(pPlayer); +} + +public @ArtifactItem_Spawn(this) { + static szId[16]; + pev(this, pev_target, szId, charsmax(szId)); + if (!equal(szId, ARTIFACT_ID)) { + return; + } + + engfunc(EngFunc_SetModel, this, g_szMdlWArtifact); +} + +public @Player_UpdateStatusIcon(pPlayer) { + static gmsgStatusIcon = 0; + if (!gmsgStatusIcon) { + gmsgStatusIcon = get_user_msgid("StatusIcon"); + } + + if (SW_Player_HasArtifact(pPlayer, ARTIFACT_ID)) { + message_begin(MSG_ONE, gmsgStatusIcon, {0,0,0}, pPlayer); + write_byte(1); + write_string("suit_full"); + write_byte(255); + write_byte(255); + write_byte(255); + message_end(); + } else { + message_begin(MSG_ONE, gmsgStatusIcon, {0,0,0}, pPlayer); + write_byte(0); + write_string("suit_full"); + message_end(); + } +} + +public @Jacket_Create(pPlayer) { + static s_ptrClassname = 0; + if (!s_ptrClassname) { + s_ptrClassname = engfunc(EngFunc_AllocString, "info_target"); + } + + new pEntity = engfunc(EngFunc_CreateNamedEntity, s_ptrClassname); + dllfunc(DLLFunc_Spawn, pEntity); + + set_pev(pEntity, pev_classname, "player_downjacket"); + engfunc(EngFunc_SetModel, pEntity, g_szMdlPArtifact); + set_pev(pEntity, pev_owner, pPlayer); + set_pev(pEntity, pev_aiment, pPlayer); + set_pev(pEntity, pev_movetype, MOVETYPE_FOLLOW); + set_pev(pEntity, pev_skin, get_member(pPlayer, m_iTeam)); + + return pEntity; +} diff --git a/src/scripts/artifacts/sw_artifact_lemonjuice.sma b/src/scripts/artifacts/sw_artifact_lemonjuice.sma new file mode 100644 index 0000000..bdf1717 --- /dev/null +++ b/src/scripts/artifacts/sw_artifact_lemonjuice.sma @@ -0,0 +1,228 @@ +#include +#include +#include +#include +#include + +#include +#include +#include + +#define ARTIFACT_ID "lemonjuice" +#define SPLASH_DAMAGE 15.0 + +new const g_szSndSnowballHit[] = "debris/bustflesh1.wav"; +new const g_szMdlWSnowball[] = "models/snowwars/v090/weapons/w_snowball_lemon.mdl"; +new const g_szMdlWArtifact[] = "models/snowwars/v090/artifacts/w_lemonsnow.mdl"; + +new g_iSnowballCeHandler; + +public plugin_precache() { + precache_model(g_szMdlWArtifact); + precache_sound(g_szSndSnowballHit); + precache_model(g_szMdlWSnowball); + + SW_PlayerArtifact_Register(ARTIFACT_ID, "@Artifact_Activated", "@Artifact_Deactivated"); +} + +public plugin_init() { + register_plugin("[Snow Wars] Lemon Juice Artifact", SW_VERSION, "Hedgehog Fog"); + + RegisterHam(Ham_TakeDamage, "player", "Ham_Player_TakeDamage_Post", .Post = 1); + + CE_RegisterHook(CEFunction_Spawn, "sw_item_artifact", "@ArtifactItem_Spawn"); + CE_RegisterHook(CEFunction_Spawn, "sw_snowball", "@Snowball_Spawn"); + CE_RegisterHook(CEFunction_Kill, "sw_snowball", "@Snowball_Kill"); + + register_event("ResetHUD", "Event_ResetHUD", "b"); + + g_iSnowballCeHandler = CE_GetHandler("sw_snowball"); +} + +public Event_ResetHUD(pPlayer) { + @Player_UpdateStatusIcon(pPlayer); +} + +public @Artifact_Activated(this) { + // new Float:flPower = SW_Player_GetAttribute(this, SW_PlayerAttribute_Power); + // SW_Player_SetAttribute(this, SW_PlayerAttribute_Power, flPower + 1.0); + @Player_UpdateStatusIcon(this); +} + +public @Artifact_Deactivated(this) { + // new Float:flPower = SW_Player_GetAttribute(this, SW_PlayerAttribute_Power); + // SW_Player_SetAttribute(this, SW_PlayerAttribute_Power, flPower - 1.0); + @Player_UpdateStatusIcon(this); +} + +public @ArtifactItem_Spawn(this) { + static szId[16]; + pev(this, pev_target, szId, charsmax(szId)); + if (!equal(szId, ARTIFACT_ID)) { + return; + } + + engfunc(EngFunc_SetModel, this, g_szMdlWArtifact); +} + +public @Snowball_Spawn(this) { + new pOwner = pev(this, pev_owner); + if (!SW_Player_HasArtifact(pOwner, ARTIFACT_ID)) { + return; + } + + engfunc(EngFunc_SetModel, this, g_szMdlWSnowball); + set_pev(this, pev_iuser4, 1); + + new Float:flDamage = 0.0; + pev(this, pev_dmg, flDamage); + set_pev(this, pev_dmg, flDamage + SPLASH_DAMAGE); +} + +public @Snowball_Kill(this) { + if (pev(this, pev_iuser4) != 1) { + return; + } + + @Snowball_ExplosionEffect(this); + @Snowball_SplashDamage(this); +} + +public @Snowball_ExplosionEffect(this) { + static Float:vecOrigin[3]; + pev(this, pev_origin, vecOrigin); + + static s_iBloodModelIndex = 0; + if (!s_iBloodModelIndex) { + s_iBloodModelIndex = engfunc(EngFunc_ModelIndex, "sprites/blood.spr"); + } + + engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_BLOODSPRITE); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + write_short(s_iBloodModelIndex); + write_short(s_iBloodModelIndex); + write_byte(241); + write_byte(8); + message_end(); + + engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_BLOODSTREAM); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + write_byte(197); + write_byte(8); + message_end(); + + engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_ELIGHT); + write_short(0); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + write_coord(64); + write_byte(100); + write_byte(100); + write_byte(0); + write_byte(2); + write_coord(12); + message_end(); + + emit_sound(this, CHAN_BODY, g_szSndSnowballHit, 0.5, ATTN_NORM, 0, PITCH_NORM); +} + +public @Snowball_SplashDamage(this) { + new pTr = create_tr2(); + + new pOwner = pev(this, pev_owner); + + static Float:vecOrigin[3]; + pev(this, pev_origin, vecOrigin); + + for (new pPlayer = 1; pPlayer <= MaxClients; ++pPlayer) { + if (!is_user_connected(pPlayer)) { + continue; + } + + if (!is_user_alive(pPlayer)) { + continue; + } + + if (!rg_is_player_can_takedamage(pPlayer, pOwner)) { + continue; + } + + if (pev(this, pev_enemy) == pPlayer) { + continue; + } + + static Float:vecTargetOrigin[3]; + pev(pPlayer, pev_origin, vecTargetOrigin); + + if (xs_vec_distance(vecOrigin, vecTargetOrigin) > 80.0) { + continue; + } + + engfunc(EngFunc_TraceLine, vecOrigin, vecTargetOrigin, DONT_IGNORE_MONSTERS, this, pTr); + + static Float:flFraction; + get_tr2(pTr, TR_flFraction, flFraction); + + if (flFraction < 1.0 && get_tr2(pTr, TR_pHit) != pPlayer) { + continue; + } + + ExecuteHamB(Ham_TakeDamage, pPlayer, this, pOwner, SPLASH_DAMAGE, DMG_GENERIC); + } + + free_tr2(pTr); +} + +public Ham_Player_TakeDamage_Post(this, pWeapon, pAttacker, Float:flDamage, iDamageBits) { + if (CE_GetHandlerByEntity(pWeapon) != g_iSnowballCeHandler) { + return HAM_IGNORED; + } + + if (pev(pWeapon, pev_iuser4) != 1) { + return HAM_IGNORED; + } + + new Float:flRatio = flDamage / 100.0; + + new iHitgroup = get_member(this, m_LastHitGroup); + if (iHitgroup == HIT_HEAD) { + flRatio *= 2.0; + } + + UTIL_ScreenFade(this, { 150, 150, 0 }, 3.0 * flRatio, 1.0, floatround(100 * flRatio)); + + return HAM_HANDLED; +} + +public @Player_UpdateStatusIcon(this) { + static gmsgStatusIcon = 0; + if (!gmsgStatusIcon) { + gmsgStatusIcon = get_user_msgid("StatusIcon"); + } + + if (SW_Player_HasArtifact(this, ARTIFACT_ID)) { + message_begin(MSG_ONE, gmsgStatusIcon, _, this); + write_byte(1); + write_string("d_skull"); + write_byte(255); + write_byte(255); + write_byte(255); + message_end(); + } else { + message_begin(MSG_ONE, gmsgStatusIcon, _, this); + write_byte(0); + write_string("d_skull"); + message_end(); + } +} diff --git a/src/scripts/core/snowwars.sma b/src/scripts/core/snowwars.sma new file mode 100644 index 0000000..b86cbe7 --- /dev/null +++ b/src/scripts/core/snowwars.sma @@ -0,0 +1,16 @@ +#pragma semicolon 1 + +#include +#include + +#define PLUGIN "Snow Wars" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); +} + +public plugin_natives() { + register_library("snowwars"); +} diff --git a/src/scripts/core/sw_bomb.sma b/src/scripts/core/sw_bomb.sma new file mode 100644 index 0000000..ce8158d --- /dev/null +++ b/src/scripts/core/sw_bomb.sma @@ -0,0 +1,55 @@ +#include +#include +#include + +#include +#include + +new Float:g_vecSpawnRocketOrigin[3]; + +#define PLUGIN "[Snow Wars] Bomb" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); + + RegisterHookChain(RG_CGrenade_ExplodeBomb, "HC_Grenade_ExplodeBomb", .post = 0); +} + +public HC_Grenade_ExplodeBomb(this) { + set_member(this, m_Grenade_bJustBlew, true); + set_member_game(m_bTargetBombed, true); + rg_check_win_conditions(); + + pev(this, pev_origin, g_vecSpawnRocketOrigin); + + CE_Kill(SpawnRocket(g_vecSpawnRocketOrigin)); + + for (new i = 0; i < 8; ++i) { + set_task(0.125 * i, "Task_SpawnRocket", 0); + } + + set_pev(this, pev_flags, pev(this, pev_flags) | FL_KILLME); + // dllfunc(DLLFunc_Think, this); + + return HC_SUPERCEDE; +} + +public Task_SpawnRocket(iTaskId) { + SpawnRocket(g_vecSpawnRocketOrigin); +} + +SpawnRocket(const Float:vecOrigin[3]) { + new pRocket = CE_Create("sw_fireworkrocket", vecOrigin); + + static Float:vecAngles[3]; + vecAngles[0] = random_float(0.0, 90.0); + vecAngles[1] = random_float(-180.0, 180.0); + vecAngles[2] = 0.0; + set_pev(pRocket, pev_angles, vecAngles); + + dllfunc(DLLFunc_Spawn, pRocket); + + return pRocket; +} diff --git a/src/scripts/core/sw_gamemode.sma b/src/scripts/core/sw_gamemode.sma new file mode 100644 index 0000000..63e4466 --- /dev/null +++ b/src/scripts/core/sw_gamemode.sma @@ -0,0 +1,132 @@ +#pragma semicolon 1 + +#include +#include +#include +#include + +#include +#include +#include + +#define PLUGIN "[Snow Wars] Gamemode" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +public plugin_precache() { + RegisterHam(Ham_Spawn, "armoury_entity", "Ham_ArmouryEntity_Spawn_Post", .Post = 1); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); + + RegisterHam(Ham_Killed, "player", "Ham_Player_Killed", .Post = 0); + RegisterHam(Ham_Killed, "player", "Ham_Player_Killed_Post", .Post = 1); + RegisterHam(Ham_Touch, "weaponbox", "Ham_WeaponBox_Touch", .Post = 0); + + RegisterHookChain(RG_CBasePlayer_OnSpawnEquip, "HC_Player_SpawnEquip", .post = 0); + RegisterHookChain(RG_CSGameRules_RestartRound, "HC_GameRules_RestartRound", .post = 0); +} + +public client_disconnected(pPlayer) { + @Player_DropItems(pPlayer); + @Player_DropArtifacts(pPlayer); +} + +public Ham_Player_Killed(this) { + @Player_DropItems(this); +} + +public Ham_Player_Killed_Post(this) { + @Player_DropArtifacts(this); +} + +public Ham_ArmouryEntity_Spawn_Post(this, pToucher) { + set_pev(this, pev_flags, pev(this, pev_flags) | FL_KILLME); + dllfunc(DLLFunc_Think, this); +} + +public Ham_WeaponBox_Touch(this, pTarget) { + if (!is_user_connected(pTarget)) { + return HAM_IGNORED; + } + + for (new iSlot = 0; iSlot < 6; ++iSlot) { + new pItem = get_member(this, m_WeaponBox_rgpPlayerItems, iSlot); + new pPlayerItem = get_member(pTarget, m_rgpPlayerItems, iSlot); + + if (pItem != -1 && pPlayerItem != -1) { + return HAM_SUPERCEDE; + } + } + + return HAM_HANDLED; +} + +public HC_Player_SpawnEquip(this) { + CW_GiveWeapon(this, "snowwars/v090/weapon_snowball"); + return HC_SUPERCEDE; +} + +public HC_GameRules_RestartRound() { + new bool:bCompleteReset = get_member_game(m_bCompleteReset); + + if (bCompleteReset) { + for (new pPlayer = 1; pPlayer <= MaxClients; ++pPlayer) { + if (!is_user_connected(pPlayer)) { + continue; + } + + static szId[16]; + new iSlot = -1; + while ((iSlot = SW_Player_FindArtifact(pPlayer, iSlot, szId, charsmax(szId))) != -1) { + SW_Player_TakeArtifactBySlot(pPlayer, iSlot); + } + } + } +} + +public @Player_DropArtifacts(this) { + static Float:vecOrigin[3]; + pev(this, pev_origin, vecOrigin); + + static szId[16]; + new iSlot = -1; + while ((iSlot = SW_Player_FindArtifact(this, iSlot, szId, charsmax(szId))) != -1) { + SW_Player_TakeArtifactBySlot(this, iSlot); + + new pArtifactItem = CE_Create("sw_item_artifact", vecOrigin); + set_pev(pArtifactItem, pev_target, szId); + dllfunc(DLLFunc_Spawn, pArtifactItem); + + static Float:vecVelocity[3]; + vecVelocity[0] = random_float(48.0, 64.0) * (random(2) ? -1.0 : 1.0); + vecVelocity[1] = random_float(48.0, 64.0) * (random(2) ? -1.0 : 1.0); + vecVelocity[2] = random_float(192.0, 256.0); + set_pev(pArtifactItem, pev_velocity, vecVelocity); + + static Float:vecAngles[3]; + vecAngles[0] = 0.0; + vecAngles[1] = random_float(-180.0, 180.0); + vecAngles[2] = 0.0; + set_pev(pArtifactItem, pev_angles, vecAngles); + } +} + +public @Player_DropItems(this) { + for (new iSlot = 0; iSlot < 6; ++iSlot) { + new pItem = get_member(this, m_rgpPlayerItems, iSlot); + + while (pItem != -1) { + new pNextItem = get_member(pItem, m_pNext); + + if (ExecuteHamB(Ham_CS_Item_CanDrop, pItem)) { + static szClassname[32]; + pev(pItem, pev_classname, szClassname, charsmax(szClassname)); + rg_drop_item(this, szClassname); + } + + pItem = pNextItem; + } + } +} diff --git a/src/scripts/core/sw_player.sma b/src/scripts/core/sw_player.sma new file mode 100644 index 0000000..91c1962 --- /dev/null +++ b/src/scripts/core/sw_player.sma @@ -0,0 +1,88 @@ +#pragma semicolon 1 + +#include +#include +#include +#include +#include + +#include + +#define PLUGIN "[Snow Wars] Player" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +new const g_szPlayerHitSounds[][] = { + "snowwars/v090/snowhit_human1.wav", + "snowwars/v090/snowhit_human2.wav" +}; + +new const g_szPlayerSpawnSound[] = "snowwars/v090/push.wav"; +new const g_szMdlWSnowball[] = "models/snowwars/v090/weapons/w_snowball.mdl"; + +public plugin_precache() { + for (new i = 0; i < sizeof(g_szPlayerHitSounds); ++i) { + precache_sound(g_szPlayerHitSounds[i]); + } + + precache_sound(g_szPlayerSpawnSound); + precache_model(g_szMdlWSnowball); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); + + RegisterHam(Ham_Spawn, "player", "Ham_Player_Spawn_Post", .Post = 1); + RegisterHam(Ham_TakeDamage, "player", "Ham_Player_TakeDamage_Post", .Post = 1); + RegisterHam(Ham_Killed, "player", "Ham_Player_Killed_Post", .Post = 1); + + RegisterHookChain(RG_CBasePlayer_OnSpawnEquip, "HC_Player_SpawnEquip_Post", .post = 1); +} + +public Ham_Player_Spawn_Post(this) { + if (!is_user_alive(this)) { + return HAM_IGNORED; + } + + emit_sound(this, CHAN_BODY, g_szPlayerSpawnSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); + + return HAM_HANDLED; +} + +public Ham_Player_Killed_Post(this) { + static Float:vecOrigin[3]; + pev(this, pev_origin, vecOrigin); + + static s_iMdlSnowball = 0; + if (!s_iMdlSnowball) { + s_iMdlSnowball = engfunc(EngFunc_ModelIndex, g_szMdlWSnowball); + } + + message_begin(MSG_ALL, SVC_TEMPENTITY); + write_byte(TE_SPRITETRAIL); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2] + -4.0); + write_short(s_iMdlSnowball); + write_byte(5); + write_byte(3); + write_byte(10); + write_byte(10); + write_byte(1); + message_end(); + + emit_sound(this, CHAN_VOICE, g_szPlayerHitSounds[random(sizeof(g_szPlayerHitSounds))], VOL_NORM, ATTN_NORM, 0, PITCH_NORM); +} + +public Ham_Player_TakeDamage_Post(this, iInflictor, pAttacker, Float:flDamage, iDamageBits) { + emit_sound(this, CHAN_VOICE, g_szPlayerHitSounds[random(sizeof(g_szPlayerHitSounds))], VOL_NORM, ATTN_NORM, 0, PITCH_NORM); + + return HAM_HANDLED; +} + +public HC_Player_SpawnEquip_Post(this) { + emit_sound(this, CHAN_ITEM, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM); +} diff --git a/src/scripts/core/sw_player_artifacts.sma b/src/scripts/core/sw_player_artifacts.sma new file mode 100644 index 0000000..c4effee --- /dev/null +++ b/src/scripts/core/sw_player_artifacts.sma @@ -0,0 +1,239 @@ +#include +#include + +#include + +#define PLUGIN "[Snow Wars] Player Artifacts" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +#define MAX_ARTIFACTS 32 + +new Array:g_irgszArtifactIds; +new Array:g_irgiArtifactPluginId; +new Array:g_irgiArtifactActivateFuncId; +new Array:g_irgiArtifactDeactivateFuncId; +new Trie:g_iArtifactIdsMap; +new g_iArtifactCount = 0; + +new g_rgiPlayerArtifacts[MAX_PLAYERS + 1][MAX_ARTIFACTS]; + +public plugin_precache() { + g_irgszArtifactIds = ArrayCreate(16); + g_irgiArtifactPluginId = ArrayCreate(); + g_irgiArtifactActivateFuncId = ArrayCreate(); + g_irgiArtifactDeactivateFuncId = ArrayCreate(); + g_iArtifactIdsMap = TrieCreate(); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); +} + +public plugin_destroy() { + ArrayDestroy(g_irgszArtifactIds); + ArrayDestroy(g_irgiArtifactPluginId); + ArrayDestroy(g_irgiArtifactActivateFuncId); + ArrayDestroy(g_irgiArtifactDeactivateFuncId); + TrieDestroy(g_iArtifactIdsMap); +} + +public plugin_natives() { + register_native("SW_PlayerArtifact_Register", "Native_RegisterArtifact"); + register_native("SW_PlayerArtifact_GetHandler", "Native_GetHandler"); + register_native("SW_Player_GiveArtifact", "Native_GiveArtifact"); + register_native("SW_Player_TakeArtifact", "Native_TakeArtifact"); + register_native("SW_Player_TakeArtifactBySlot", "Native_TakeArtifactBySlot"); + register_native("SW_Player_HasArtifact", "Native_HasArtifact"); + register_native("SW_Player_FindArtifact", "Native_FindArtifact"); +} + +public client_connect(pPlayer) { + for (new iSlot = 0; iSlot < MAX_ARTIFACTS; ++iSlot) { + g_rgiPlayerArtifacts[pPlayer][iSlot] = -1; + } +} + +public Native_RegisterArtifact(iPluginId, iArgc) { + static szId[16]; + get_string(1, szId, charsmax(szId)); + + static szActivateFunc[32]; + get_string(2, szActivateFunc, charsmax(szActivateFunc)); + + static szDeactivateFunc[32]; + get_string(3, szDeactivateFunc, charsmax(szDeactivateFunc)); + + new iActivateFuncId = get_func_id(szActivateFunc, iPluginId); + new iDeactivateFuncId = get_func_id(szDeactivateFunc, iPluginId); + + return RegisterArtifact(szId, iPluginId, iActivateFuncId, iDeactivateFuncId); +} + +public Native_GetHandler(iPluginid, iArgc) { + static szId[16]; + get_string(1, szId, charsmax(szId)); + + return GetHandler(szId); +} + +public bool:Native_GiveArtifact(iPluginId, iArgc) { + new pPlayer = get_param(1); + + static szId[16]; + get_string(2, szId, charsmax(szId)); + + return @Player_GiveArtifact(pPlayer, szId); +} + +public bool:Native_TakeArtifact(iPluginId, iArgc) { + new pPlayer = get_param(1); + + static szId[16]; + get_string(2, szId, charsmax(szId)); + + return @Player_TakeArtifact(pPlayer, szId); +} + +public bool:Native_TakeArtifactBySlot(iPluginId, iArgc) { + new pPlayer = get_param(1); + new iSlot = get_param(2); + + return @Player_TakeArtifactBySlot(pPlayer, iSlot); +} + +public bool:Native_HasArtifact(iPluginId, iArgc) { + new pPlayer = get_param(1); + + static szId[16]; + get_string(2, szId, charsmax(szId)); + + return @Player_HasArtifact(pPlayer, szId); +} + +public Native_FindArtifact(iPluginId, iArgc) { + new pPlayer = get_param(1); + new iOffset = get_param(2); + new iLen = get_param(4); + + static szId[16]; + new iSlot = @Player_FindArtifact(pPlayer, iOffset, szId, charsmax(szId)); + set_string(3, szId, iLen); + + return iSlot; +} + +public bool:@Player_GiveArtifact(this, const szId[]) { + if (@Player_HasArtifact(this, szId)) { + // client_print(this, print_chat, "You already have this artifact!"); + return false; + } + + new iSlot = @Player_GetFreeArtifactSlot(this); + if (iSlot == -1) { + // client_print(this, print_chat, "You have no free artifacts slots!"); + return false; + } + + new iId = GetHandler(szId); + new iArtifactPluginId = ArrayGetCell(g_irgiArtifactPluginId, iId); + new iActivateFuncId = ArrayGetCell(g_irgiArtifactActivateFuncId, iId); + + g_rgiPlayerArtifacts[this][iSlot] = GetHandler(szId); + + callfunc_begin_i(iActivateFuncId, iArtifactPluginId); + callfunc_push_int(this); + callfunc_end(); + + return true; +} + +public bool:@Player_TakeArtifact(this, const szId[]) { + new bool:bResult = false; + + new iId = GetHandler(szId); + for (new iSlot = 0; iSlot < MAX_ARTIFACTS; ++iSlot) { + if (g_rgiPlayerArtifacts[this][iSlot] == iId) { + @Player_TakeArtifactBySlot(this, iSlot); + bResult = true; + } + } + + return bResult; +} + +public bool:@Player_TakeArtifactBySlot(this, iSlot) { + new iId = g_rgiPlayerArtifacts[this][iSlot]; + + if (iId == -1) { + return false; + } + + new iArtifactPluginId = ArrayGetCell(g_irgiArtifactPluginId, iId); + new iDeactivateFuncId = ArrayGetCell(g_irgiArtifactDeactivateFuncId, iId); + + g_rgiPlayerArtifacts[this][iSlot] = -1; + + callfunc_begin_i(iDeactivateFuncId, iArtifactPluginId); + callfunc_push_int(this); + callfunc_end(); + + return true; +} + +public bool:@Player_HasArtifact(this, const szId[]) { + new iId = GetHandler(szId); + + return @Player_FindArtifactById(this, iId, 0) != -1; +} + +public @Player_GetFreeArtifactSlot(this) { + return @Player_FindArtifactById(this, -1, 0); +} + +public @Player_FindArtifact(this, iOffset, szId[], iLen) { + for (new iSlot = iOffset + 1; iSlot < MAX_ARTIFACTS; ++iSlot) { + new iId = g_rgiPlayerArtifacts[this][iSlot]; + + if (iId != -1) { + ArrayGetString(g_irgszArtifactIds, iId, szId, iLen); + return iSlot; + } + } + + return -1; +} + +public @Player_FindArtifactById(this, iId, iOffset) { + for (new iSlot = iOffset; iSlot < MAX_ARTIFACTS; ++iSlot) { + if (g_rgiPlayerArtifacts[this][iSlot] == iId) { + return iSlot; + } + } + + return -1; +} + +RegisterArtifact(const szId[], const iPluginId, const iActivateFuncId, const iDeactivateFuncId) { + new iId = g_iArtifactCount; + + ArrayPushString(g_irgszArtifactIds, szId); + ArrayPushCell(g_irgiArtifactPluginId, iPluginId); + ArrayPushCell(g_irgiArtifactActivateFuncId, iActivateFuncId); + ArrayPushCell(g_irgiArtifactDeactivateFuncId, iDeactivateFuncId); + + TrieSetCell(g_iArtifactIdsMap, szId, iId); + + g_iArtifactCount++; + + return iId; +} + +GetHandler(const szId[]) { + new iId; + if (TrieGetCell(g_iArtifactIdsMap, szId, iId)) { + return iId; + } + + return -1; +} diff --git a/src/scripts/core/sw_player_attributes.sma b/src/scripts/core/sw_player_attributes.sma new file mode 100644 index 0000000..1e32527 --- /dev/null +++ b/src/scripts/core/sw_player_attributes.sma @@ -0,0 +1,68 @@ +#include +#include + +#include + +#define PLUGIN "[Snow Wars] Player Attributes" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +new g_rgiPlayerAttributes[MAX_PLAYERS + 1][SW_PlayerAttribute]; + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); + + RegisterHam(Ham_TakeDamage, "player", "Ham_Player_TakeDamage", .Post = 0); +} + +public plugin_natives() { + register_native("SW_Player_GetAttribute", "Native_GetAttribute") + register_native("SW_Player_SetAttribute", "Native_SetAttribute") +} + +public client_connect(pPlayer) { + @Player_ResetAttributes(pPlayer); +} + +public Native_GetAttribute(iPluginId, iArgc) { + new pPlayer = get_param(1); + new SW_PlayerAttribute:iAttrib = SW_PlayerAttribute:get_param(2); + + return @Player_GetAttribute(pPlayer, iAttrib); +} + +public Native_SetAttribute(iPluginId, iArgc) { + new pPlayer = get_param(1); + new SW_PlayerAttribute:iAttrib = SW_PlayerAttribute:get_param(2); + new any:value = any:get_param(3); + + @Player_SetAttribute(pPlayer, iAttrib, value); +} + +public Ham_Player_TakeDamage(this, pWeapon, pAttacker, Float:flDamage, iDamageBits) { + new Float:flRatio = CalculateDamageRatio(pAttacker, this); + SetHamParamFloat(4, flDamage * flRatio); + return HAM_HANDLED; +} + +public @Player_GetAttribute(this, SW_PlayerAttribute:iAttrib) { + return g_rgiPlayerAttributes[this][iAttrib]; +} + +public @Player_SetAttribute(this, SW_PlayerAttribute:iAttrib, any:value) { + g_rgiPlayerAttributes[this][iAttrib] = value; +} + +public @Player_ResetAttributes(this) { + for (new iAttrib = 0; iAttrib < _:SW_PlayerAttribute; ++iAttrib) { + g_rgiPlayerAttributes[this][SW_PlayerAttribute:iAttrib] = 0; + } +} + +Float:CalculateDamageRatio(pAttacker, pVictim) { + new Float:flPower = ExecuteHamB(Ham_IsPlayer, pAttacker) ? SW_Player_GetAttribute(pAttacker, SW_PlayerAttribute_Power) : 0.0; + new Float:flResistence = SW_Player_GetAttribute(pVictim, SW_PlayerAttribute_Resistance); + + return (1.0 + flPower) * (1.0 - floatmin(flResistence, 1.0)); +} + diff --git a/src/scripts/core/sw_shop.sma b/src/scripts/core/sw_shop.sma new file mode 100644 index 0000000..e94829e --- /dev/null +++ b/src/scripts/core/sw_shop.sma @@ -0,0 +1,199 @@ +#pragma semicolon 1 + +#include +#include +#include +#include + +#include +#include + +#define PLUGIN "[Snow Wars] Shop" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +enum ShopItemType { + ShopItem_Weapon, + ShopItem_Artifact +} + +new Array:g_irgShopItemTitles; +new Array:g_irgShopItemIds; +new Array:g_irgShopItemPrices; +new Array:g_irgShopItemTypes; +new g_iShopItemCount = 0; + +new g_iPlayerMenu[MAX_PLAYERS + 1]; + +public plugin_precache() { + g_irgShopItemTitles = ArrayCreate(32); + g_irgShopItemIds = ArrayCreate(64); + g_irgShopItemPrices = ArrayCreate(); + g_irgShopItemTypes = ArrayCreate(); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); + + register_clcmd("client_buy_open", "Command_ClientBuyOpen"); + register_clcmd("shop", "Command_Buy"); + register_clcmd("buy", "Command_Buy"); + register_clcmd("buyequip", "Command_Buy"); + + RegisterHam(Ham_Spawn, "player", "Ham_Player_Spawn_Post", .Post = 1); + RegisterHam(Ham_Killed, "player", "Ham_Player_Killed_Post", .Post = 1); + + RegisterItem("Slingshot", "snowwars/v090/weapon_slingshot", 4500, ShopItem_Weapon); + RegisterItem("Lemon Juice", "lemonjuice", 2500, ShopItem_Artifact); + RegisterItem("Down Jacket", "downjacket", 3100, ShopItem_Artifact); + RegisterItem("Surprise Box", "snowwars/v090/weapon_fireworksbox", 12000, ShopItem_Weapon); +} + +public plugin_destroy() { + ArrayDestroy(g_irgShopItemTitles); + ArrayDestroy(g_irgShopItemIds); + ArrayDestroy(g_irgShopItemPrices); + ArrayDestroy(g_irgShopItemTypes); +} + +public client_connect(pPlayer) { + g_iPlayerMenu[pPlayer] = -1; +} + +public client_disconnected(pPlayer) { + @Player_CloseBuyMenu(pPlayer); +} + +public CS_OnBuyAttempt(pPlayer) { + return PLUGIN_HANDLED; +} + +public Command_Buy(pPlayer) { + @Player_OpenBuyMenu(pPlayer); + + return PLUGIN_HANDLED; +} + +public Command_ClientBuyOpen(pPlayer) { + message_begin(MSG_ONE, get_user_msgid("BuyClose"), _, pPlayer); + message_end(); + + @Player_OpenBuyMenu(pPlayer); + + return PLUGIN_HANDLED; +} + +public Ham_Player_Spawn_Post(this) { + @Player_CloseBuyMenu(this); +} + +public Ham_Player_Killed_Post(this) { + @Player_CloseBuyMenu(this); +} + +public @Player_OpenBuyMenu(this) { + if (!is_user_alive(this)) { + return; + } + + if (!cs_get_user_buyzone(this)) { + return; + } + + @Player_CloseBuyMenu(this); + + g_iPlayerMenu[this] = menu_create("Buy Item\R$ Cost", "ShopMenuHandler"); + new iMenuCallback = menu_makecallback("ShopMenuCallback"); + + for (new i = 0; i < g_iShopItemCount; ++i) { + static szTitle[32]; + ArrayGetString(g_irgShopItemTitles, i, szTitle, charsmax(szTitle)); + new iPrice = ArrayGetCell(g_irgShopItemPrices, i); + format(szTitle, charsmax(szTitle), "%s\R\y$%d", szTitle, iPrice); + menu_additem(g_iPlayerMenu[this], szTitle, _, _, iMenuCallback); + } + + menu_display(this, g_iPlayerMenu[this]); +} + +public @Player_CloseBuyMenu(this) { + if (g_iPlayerMenu[this] == -1) { + return; + } + + show_menu(this, 0, "^n", 1); +} + +public @Player_BuyItem(this, iItem) { + if (!is_user_alive(this)) { + return false; + } + + if (!cs_get_user_buyzone(this)) { + return false; + } + + new iMoney = cs_get_user_money(this); + new iPrice = ArrayGetCell(g_irgShopItemPrices, iItem); + + if (iPrice > iMoney) { + return false; + } + + static szId[64]; + ArrayGetString(g_irgShopItemIds, iItem, szId, charsmax(szId)); + + new ShopItemType:iType = ArrayGetCell(g_irgShopItemTypes, iItem); + + switch (iType) { + case ShopItem_Weapon: { + new iSlotId = CW_GetWeaponData(CW_GetHandler(szId), CW_Data_SlotId); + rg_drop_items_by_slot(this, InventorySlotType:(iSlotId + 1)); + CW_GiveWeapon(this, szId); + } + case ShopItem_Artifact: { + if (SW_Player_HasArtifact(this, szId)) { + return false; + } + + SW_Player_GiveArtifact(this, szId); + } + } + + cs_set_user_money(this, iMoney - iPrice); + + return true; +} + +public ShopMenuHandler(pPlayer, iMenu, iItem) { + if (iItem != MENU_EXIT) { + @Player_BuyItem(pPlayer, iItem); + } + + menu_destroy(iMenu); + g_iPlayerMenu[pPlayer] = -1; + return PLUGIN_HANDLED; +} + +public ShopMenuCallback(pPlayer, iMenu, iItem) { + new iMoney = cs_get_user_money(pPlayer); + new iPrice = ArrayGetCell(g_irgShopItemPrices, iItem); + new ShopItemType:iType = ArrayGetCell(g_irgShopItemTypes, iItem); + + static szId[64]; + ArrayGetString(g_irgShopItemIds, iItem, szId, charsmax(szId)); + + if (iType == ShopItem_Artifact && SW_Player_HasArtifact(pPlayer, szId)) { + return ITEM_DISABLED; + } + + return iPrice <= iMoney ? ITEM_ENABLED : ITEM_DISABLED; +} + +RegisterItem(const szTitle[], const szId[], iPrice, ShopItemType:iType) { + ArrayPushString(g_irgShopItemTitles, szTitle); + ArrayPushString(g_irgShopItemIds, szId); + ArrayPushCell(g_irgShopItemPrices, iPrice); + ArrayPushCell(g_irgShopItemTypes, iType); + g_iShopItemCount++; +} diff --git a/src/scripts/entities/sw_entity_fireworkrocket.sma b/src/scripts/entities/sw_entity_fireworkrocket.sma new file mode 100644 index 0000000..b0ffb46 --- /dev/null +++ b/src/scripts/entities/sw_entity_fireworkrocket.sma @@ -0,0 +1,278 @@ +#pragma semicolon 1 + +#include +#include +#include +#include +#include + +#include +#include + +#define PLUGIN "[Entity] Firework Rocket" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +#define ENTITY_NAME "sw_fireworkrocket" +#define ROCKET_SPEED 1024.0 +#define ROCKET_HEALTH 3 + +new const g_rgszSprBeam[][] = { + "sprites/laserbeam.spr", + "sprites/shockwave.spr", + "sprites/shellchrome.spr", + "sprites/zbeam1.spr", + "sprites/zbeam2.spr", + "sprites/zbeam3.spr", + "sprites/zbeam4.spr", + "sprites/zbeam5.spr", + "sprites/zbeam6.spr", + "sprites/xbeam1.spr", + "sprites/xbeam2.spr", + "sprites/xbeam3.spr", + "sprites/xbeam4.spr", + "sprites/xbeam5.spr" +}; + +new const g_rgszSprTrail[][] = { + "sprites/flare1.spr", + "sprites/flare3.spr", + "sprites/muz2.spr", + "sprites/muz3.spr", + "sprites/muz4.spr", + "sprites/muz5.spr", + "sprites/muz6.spr", + "sprites/muz7.spr", + "sprites/muz8.spr" +}; + +new const g_szSndRocket[] = "snowwars/v090/rocket1.wav"; + +new g_iCeHandler; + +public plugin_precache() { + g_iCeHandler = CE_Register( + .szName = ENTITY_NAME, + .vMins = Float:{-4.0, -4.0, -4.0}, + .vMaxs = Float:{4.0, 4.0, 4.0}, + .modelIndex = precache_model("models/rpgrocket.mdl"), + .preset = CEPreset_Prop, + .fLifeTime = 1.5 + ); + + for (new i = 0; i < sizeof(g_rgszSprBeam); ++i) { + precache_model(g_rgszSprBeam[i]); + } + + for (new i = 0; i < sizeof(g_rgszSprTrail); ++i) { + precache_model(g_rgszSprTrail[i]); + } + + precache_sound(g_szSndRocket); + + CE_RegisterHook(CEFunction_Spawn, ENTITY_NAME, "@Entity_Spawn"); + CE_RegisterHook(CEFunction_Kill, ENTITY_NAME, "@Entity_Kill"); + + RegisterHam(Ham_Touch, CE_BASE_CLASSNAME, "Ham_Base_Touch_Post", .Post = 1); + RegisterHam(Ham_Think, CE_BASE_CLASSNAME, "Ham_Base_Think_Post", .Post = 1); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); +} + +public @Entity_Spawn(this) { + new iSprite = engfunc(EngFunc_ModelIndex, "sprites/smoke.spr"); + + set_pev(this, pev_solid, SOLID_TRIGGER); + set_pev(this, pev_movetype, MOVETYPE_BOUNCE); + set_pev(this, pev_gravity, 0.1); + + new Float:flColor[3]; + flColor[0] = float(random(256)); + flColor[1] = float(random(256)); + flColor[2] = float(random(256)); + + engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, Float:{0.0, 0.0, 0.0}, 0); + write_byte(TE_BEAMFOLLOW); + write_short(this); + write_short(iSprite); + write_byte(10); + write_byte(4); + write_byte(floatround(flColor[0])); + write_byte(floatround(flColor[1])); + write_byte(floatround(flColor[2])); + write_byte(255); + message_end(); + + static Float:vecVelocity[3]; + pev(this, pev_angles, vecVelocity); + angle_vector(vecVelocity, ANGLEVECTOR_FORWARD, vecVelocity); + // xs_vec_mul_scalar(vecVelocity, 1024.0, vecVelocity); + set_pev(this, pev_velocity, vecVelocity); + set_pev(this, pev_iuser4, 0); + + set_pev(this, pev_rendercolor, flColor); + dllfunc(DLLFunc_Think, this); + emit_sound(this, CHAN_BODY, g_szSndRocket, 0.5, ATTN_NORM, 0, PITCH_NORM); +} + +public @Entity_Kill(this) { + new iSprBeam = engfunc(EngFunc_ModelIndex, g_rgszSprBeam[random(sizeof(g_rgszSprBeam))]); + + static Float:vecOrigin[3]; + pev(this, pev_origin, vecOrigin); + + new pTarget; + new pPrevEntity; + while ((pTarget = engfunc(EngFunc_FindEntityInSphere, pTarget, vecOrigin, 256.0)) != 0) { + if (pPrevEntity >= pTarget) { + break; + } + + pPrevEntity = pTarget; + + if (!pev_valid(pTarget)) { + continue; + } + + if (pev(pTarget, pev_takedamage) == DAMAGE_NO) { + continue; + } + + static Float:vecSpot[3]; + ExecuteHamB(Ham_BodyTarget, pTarget, vecOrigin, vecSpot); + engfunc(EngFunc_TraceLine, vecOrigin, vecSpot, IGNORE_MONSTERS, this, 0); + + static Float:flFraction; + get_tr2(0, TR_flFraction, flFraction); + + if (flFraction != 1.0 && get_tr2(0, TR_pHit) != pTarget) { + continue; + } + + ExecuteHamB(Ham_TakeDamage, pTarget, this, pev(this, pev_owner), 500.0, DMG_GENERIC); + } + + static Float:flColor[3]; + pev(this, pev_rendercolor, flColor); + + engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_TAREXPLOSION); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + message_end(); + + engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_DLIGHT); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + write_byte(100); + write_byte(floatround(flColor[0])); + write_byte(floatround(flColor[1])); + write_byte(floatround(flColor[2])); + write_byte(10); + write_byte(64); + message_end(); + + engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_BEAMDISK); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2] + 128.0); + write_short(iSprBeam); + write_byte(0); + write_byte(0); + write_byte(25); + write_byte(255); + write_byte(0); + write_byte(floatround(flColor[0])); + write_byte(floatround(flColor[1])); + write_byte(floatround(flColor[2])); + write_byte(150); + write_byte(0); + message_end(); + + if (random(2)) { + new iSprTrail = engfunc(EngFunc_ModelIndex, g_rgszSprTrail[random(sizeof(g_rgszSprTrail))]); + + engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_SPRITETRAIL); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2] + 128.0); + write_short(iSprTrail); + write_byte(50); + write_byte(3); + write_byte(5); + write_byte(50); + write_byte(40); + message_end(); + } else { + engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_PARTICLEBURST); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + write_short(150); + write_byte(random(256)); + write_byte(10); + message_end(); + } +} + +public Ham_Base_Touch_Post(this, pTarget) { + if (CE_GetHandlerByEntity(this) != g_iCeHandler) { + return HAM_IGNORED; + } + + new iTouchCount = pev(this, pev_iuser4); + + if (iTouchCount < ROCKET_HEALTH) { + static Float:vecOrigin[3]; + pev(this, pev_origin, vecOrigin); + + new iContent = engfunc(EngFunc_PointContents, vecOrigin); + + if (iContent == CONTENTS_SKY) { + vecOrigin[2] -= 128.0; + set_pev(this, pev_origin, vecOrigin); + CE_Kill(this); + } else { + set_pev(this, pev_iuser4, iTouchCount + 1); + } + } else { + CE_Kill(this); + } + + return HAM_HANDLED; +} + +public Ham_Base_Think_Post(this) { + if (CE_GetHandlerByEntity(this) != g_iCeHandler) { + return HAM_IGNORED; + } + + static Float:vecVelocity[3]; + pev(this, pev_velocity, vecVelocity); + xs_vec_normalize(vecVelocity, vecVelocity); + xs_vec_mul_scalar(vecVelocity, ROCKET_SPEED, vecVelocity); + set_pev(this, pev_velocity, vecVelocity); + + static Float:vecAngles[3]; + vector_to_angle(vecVelocity, vecAngles); + // vecAngles[0] -= 90.0; + set_pev(this, pev_angles, vecAngles); + + set_pev(this, pev_nextthink, get_gametime() + 0.1); + + return HAM_HANDLED; +} diff --git a/src/scripts/entities/sw_entity_fireworksbox.sma b/src/scripts/entities/sw_entity_fireworksbox.sma new file mode 100644 index 0000000..8766a09 --- /dev/null +++ b/src/scripts/entities/sw_entity_fireworksbox.sma @@ -0,0 +1,97 @@ +#pragma semicolon 1 + +#include +#include +#include +#include +#include + +#include +#include + +#define PLUGIN "[Entity] Firework Installation" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +#define ENTITY_NAME "sw_fireworksbox" +#define ROCKET_COUNT 6 + +new const g_szSndMusic[] = "snowwars/v090/christmas_jingle.wav"; + +new g_iCeHandler; + +public plugin_precache() { + precache_sound(g_szSndMusic); + + g_iCeHandler = CE_Register( + .szName = ENTITY_NAME, + .vMins = Float:{-16.0, -16.0, 0.0}, + .vMaxs = Float:{16.0, 16.0, 32.0}, + .modelIndex = precache_model("models/snowwars/v090/weapons/w_fireworksbox.mdl"), + .preset = CEPreset_Prop + ); + + CE_RegisterHook(CEFunction_Spawn, ENTITY_NAME, "@Entity_Spawn"); + CE_RegisterHook(CEFunction_Remove, ENTITY_NAME, "@Entity_Remove"); + RegisterHam(Ham_Think, CE_BASE_CLASSNAME, "Ham_Base_Think_Post", .Post = 1); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); +} + +public @Entity_Spawn(this) { + set_pev(this, pev_solid, SOLID_TRIGGER); + set_pev(this, pev_movetype, MOVETYPE_TOSS); + set_pev(this, pev_iuser4, ROCKET_COUNT); + engfunc(EngFunc_DropToFloor, this); + set_pev(this, pev_nextthink, get_gametime() + 7.0); + emit_sound(this, CHAN_BODY, g_szSndMusic, VOL_NORM * 0.375, ATTN_IDLE, 0, PITCH_NORM); +} + +public @Entity_Remove(this) { + emit_sound(this, CHAN_BODY, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM); +} + +public Ham_Base_Think_Post(this) { + if (CE_GetHandlerByEntity(this) != g_iCeHandler) { + return HAM_IGNORED; + } + + new iRocketCount = pev(this, pev_iuser4); + + if (iRocketCount <= 0) { + CE_Kill(this); + return HAM_HANDLED; + } + + static Float:vecOrigin[3]; + pev(this, pev_origin, vecOrigin); + + + new pRocket = SpawnRocket(vecOrigin, pev(this, pev_owner)); + if (iRocketCount == ROCKET_COUNT) { + set_pev(this, pev_effects, pev(this, pev_effects) | EF_NODRAW); + CE_Kill(pRocket); + } + + set_pev(this, pev_iuser4, iRocketCount - 1); + set_pev(this, pev_nextthink, get_gametime() + 0.125); + + return HAM_HANDLED; +} + +SpawnRocket(const Float:vecOrigin[3], pOwner) { + new pRocket = CE_Create("sw_fireworkrocket", vecOrigin); + + static Float:vecAngles[3]; + vecAngles[0] = random_float(0.0, 90.0); + vecAngles[1] = random_float(-180.0, 180.0); + vecAngles[2] = 0.0; + set_pev(pRocket, pev_angles, vecAngles); + set_pev(pRocket, pev_owner, pOwner); + + dllfunc(DLLFunc_Spawn, pRocket); + + return pRocket; +} diff --git a/src/scripts/entities/sw_entity_item_artifact.sma b/src/scripts/entities/sw_entity_item_artifact.sma new file mode 100644 index 0000000..51d1386 --- /dev/null +++ b/src/scripts/entities/sw_entity_item_artifact.sma @@ -0,0 +1,44 @@ +#pragma semicolon 1 + +#include +#include +#include +#include + +#include +#include + +#define PLUGIN "[Entity] Snowball" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +#define ENTITY_NAME "sw_item_artifact" + +public plugin_precache() { + CE_Register( + .szName = ENTITY_NAME, + .vMins = Float:{-4.0, -4.0, -4.0}, + .vMaxs = Float:{4.0, 4.0, 4.0}, + .modelIndex = precache_model("models/w_isotopebox.mdl"), + .preset = CEPreset_Item + ); + + CE_RegisterHook(CEFunction_Pickup, ENTITY_NAME, "@Entity_Pickup"); + CE_RegisterHook(CEFunction_Picked, ENTITY_NAME, "@Entity_Picked"); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); +} + +public @Entity_Pickup(this, pPlayer) { + static szId[16]; + pev(this, pev_target, szId, charsmax(szId)); + return SW_Player_HasArtifact(pPlayer, szId) ? PLUGIN_CONTINUE : PLUGIN_HANDLED; +} + +public @Entity_Picked(this, pPlayer) { + static szId[16]; + pev(this, pev_target, szId, charsmax(szId)); + SW_Player_GiveArtifact(pPlayer, szId); +} diff --git a/src/scripts/entities/sw_entity_snowball.sma b/src/scripts/entities/sw_entity_snowball.sma new file mode 100644 index 0000000..7557eb0 --- /dev/null +++ b/src/scripts/entities/sw_entity_snowball.sma @@ -0,0 +1,270 @@ +#pragma semicolon 1 + +#include +#include +#include +#include +#include + +#include +#include +#include + +#define PLUGIN "[Entity] Snowball" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +#define ENTITY_NAME "sw_snowball" + +new const g_szSprBlood[] = "sprites/blood.spr"; +new const g_szMdlWSnowball[] = "models/snowwars/v090/weapons/w_snowball.mdl"; +new const g_szSndSnowballHit[] = "snowwars/v090/sbhit.wav"; + +new g_iCeHandler; +new g_iBloodModelIndex; + +new g_pCvarAimAssistRange; + +public plugin_precache() { + g_iCeHandler = CE_Register( + .szName = ENTITY_NAME, + .vMins = Float:{-4.0, -4.0, -4.0}, + .vMaxs = Float:{4.0, 4.0, 4.0}, + .modelIndex = precache_model(g_szMdlWSnowball), + .fLifeTime = 10.0 + ); + + CE_RegisterHook(CEFunction_Spawn, ENTITY_NAME, "@Entity_Spawn"); + CE_RegisterHook(CEFunction_Kill, ENTITY_NAME, "@Entity_Kill"); + + g_iBloodModelIndex = precache_model(g_szSprBlood); + precache_sound(g_szSndSnowballHit); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); + + RegisterHam(Ham_Touch, CE_BASE_CLASSNAME, "Ham_Base_Touch_Post", .Post = 1); + RegisterHam(Ham_Think, CE_BASE_CLASSNAME, "Ham_Base_Think", .Post = 0); + RegisterHam(Ham_TakeDamage, "player", "Ham_Player_TakeDamage_Post", .Post = 1); + + g_pCvarAimAssistRange = register_cvar("sw_snowball_aimassist_range", "16.0"); +} + +public @Entity_Spawn(this) { + set_pev(this, pev_solid, SOLID_BBOX); + set_pev(this, pev_movetype, MOVETYPE_BOUNCE); + set_pev(this, pev_gravity, 0.4); + set_pev(this, pev_sequence, 1); + set_pev(this, pev_framerate, 1.0); + set_pev(this, pev_dmg, 50.0); + set_pev(this, pev_takedamage, DAMAGE_YES); + set_pev(this, pev_health, 1.0); + set_pev(this, pev_nextthink, get_gametime() + 0.1); +} + +public @Entity_Kill(this) { + static Float:vecOrigin[3]; + pev(this, pev_origin, vecOrigin); + + engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0); + write_byte(TE_BLOODSPRITE); + engfunc(EngFunc_WriteCoord, vecOrigin[0]); + engfunc(EngFunc_WriteCoord, vecOrigin[1]); + engfunc(EngFunc_WriteCoord, vecOrigin[2]); + write_short(g_iBloodModelIndex); + write_short(g_iBloodModelIndex); + write_byte(12); + write_byte(8); + message_end(); + + emit_sound(this, CHAN_BODY, g_szSndSnowballHit, 0.5, ATTN_NORM, 0, PITCH_NORM); +} + +public @Player_SnowballHitEffect(this, Float:flRatio) { + UTIL_ScreenFade(this, { 255, 255, 255 }, 3.0 * flRatio, 1.0, floatround(100 * flRatio)); + + static Float:vecPunchangle[3]; + vecPunchangle[0] = random_float(-16.0 * flRatio, 16.0 * flRatio); + vecPunchangle[1] = random_float(-16.0 * flRatio, 24.0 * flRatio); + vecPunchangle[2] = random_float(-16.0 * flRatio, 16.0 * flRatio); + set_pev(this, pev_punchangle, vecPunchangle); +} + +public Ham_Base_Touch_Post(this, pTarget) { + if (CE_GetHandlerByEntity(this) != g_iCeHandler) { + return HAM_IGNORED; + } + + if (pev(pTarget, pev_solid) < SOLID_BBOX) { + return HAM_IGNORED; + } + + new pOwner = pev(this, pev_owner); + + static Float:vecOrigin[3]; + pev(this, pev_origin, vecOrigin); + + set_pev(this, pev_enemy, pTarget); + + // static Float:vecTarget[3]; + // global_get(glb_v_forward, vecTarget); + // xs_vec_mul_scalar(vecTarget, 32.0, vecTarget); + // xs_vec_add(vecOrigin, vecTarget, vecTarget); + + // static Float:vecTarget[3]; + // pev(this, pev_velocity, vecTarget); + // xs_vec_sub(vecTarget, vecOrigin, vecTarget); + // xs_vec_normalize(vecTarget, vecTarget); + // xs_vec_add(vecOrigin, vecTarget, vecTarget); + + if (IS_PLAYER(pTarget)) { + static Float:vecTarget[3]; + pev(pTarget, pev_origin, vecTarget); + + // static Float:vecStart[3]; + // pev(this, pev_origin, vecStart); + // pev(pTarget, pev_origin, vecStart); + + // static Float:vecEnd[3]; + // pev(pTarget, pev_origin, vecEnd); + // pev(pTarget, pev_origin, vecEnd); + // xs_vec_copy(vecStart, vecEnd); + // vecEnd[2] = vecOrigin[2]; + + // new pTr = create_tr2(); + // engfunc(EngFunc_TraceLine, vecStart, vecEnd, DONT_IGNORE_MONSTERS, this, pTr); + // new iHitgroup = get_tr2(pTr, TR_iHitgroup); + // free_tr2(pTr); + + new iHitgroup = vecOrigin[2] - vecTarget[2] >= 18.0 ? HIT_HEAD : 0; + + static Float:flDamage = 0.0; + pev(this, pev_dmg, flDamage); + + if (rg_is_player_can_takedamage(pTarget, pOwner)) { + ExecuteHamB(Ham_TakeDamage, pTarget, this, pOwner, flDamage, iHitgroup == HIT_HEAD ? DMG_DROWN : DMG_GENERIC); + } + + } else if (pev(pTarget, pev_takedamage) != DAMAGE_NO) { + ExecuteHamB(Ham_TakeDamage, pTarget, this, pOwner, 5.0, DMG_GENERIC); + } else { + // if (pev(this, pev_iuser3) < 1) { + // static Float:vecVelocity[3]; + // pev(this, pev_velocity, vecVelocity); + // xs_vec_mul_scalar(vecVelocity, 0.25, vecVelocity); + // set_pev(this, pev_velocity, vecVelocity); + // set_pev(this, pev_iuser3, pev(this, pev_iuser3) + 1); + // return HAM_IGNORED; + // } + } + + ExecuteHamB(Ham_TakeDamage, this, pTarget, pTarget, 1.0, DMG_GENERIC); + + return HAM_HANDLED; +} + +public Ham_Base_Think(this) { + if (CE_GetHandlerByEntity(this) != g_iCeHandler) { + return HAM_IGNORED; + } + + new Float:flAimAssistRange = get_pcvar_float(g_pCvarAimAssistRange); + + if (flAimAssistRange > 0.0) { + new pOwner = pev(this, pev_owner); + + static Float:vecOrigin[3]; + pev(this, pev_origin, vecOrigin); + + new pNearestPlayer = -1; + new Float:flNearestPlayerDistance = 0.0; + + for (new pPlayer = 1; pPlayer <= MaxClients; ++pPlayer) { + if (!is_user_alive(pPlayer)) { + continue; + } + + if (pOwner == pPlayer) { + continue; + } + + static Float:vecTargetOrigin[3]; + pev(pPlayer, pev_origin, vecTargetOrigin); + if (floatabs(vecOrigin[2] - vecTargetOrigin[2]) > 32.0) { + continue; + } + + if (!rg_is_player_can_takedamage(pPlayer, pOwner)) { + continue; + } + + new Float:flDistance = xs_vec_distance(vecOrigin, vecTargetOrigin); + if (pNearestPlayer == -1 || flDistance < flNearestPlayerDistance) { + pNearestPlayer = pPlayer; + flNearestPlayerDistance = flDistance; + } + } + + if (pNearestPlayer != -1) { + DoAimAssist(this, pNearestPlayer, flAimAssistRange); + } + } + + set_pev(this, pev_nextthink, get_gametime() + 0.1); + + return HAM_HANDLED; +} + +public Ham_Player_TakeDamage_Post(this, pWeapon, pAttacker, Float:flDamage, iDamageBits) { + if (CE_GetHandlerByEntity(pWeapon) != g_iCeHandler) { + return HAM_IGNORED; + } + + new Float:flRatio = flDamage / 100.0; + + new iHitgroup = get_member(this, m_LastHitGroup); + if (iHitgroup == HIT_HEAD) { + flRatio *= 2.0; + } + + @Player_SnowballHitEffect(this, flRatio); + + return HAM_HANDLED; +} + +DoAimAssist(pSnowball, pTarget, Float:flRange) { + new pTr = create_tr2(); + + static Float:vecOrigin[3]; + pev(pSnowball, pev_origin, vecOrigin); + + static Float:vecTarget[3]; + pev(pTarget, pev_origin, vecTarget); + vecTarget[2] = vecOrigin[2]; + xs_vec_sub(vecTarget, vecOrigin, vecTarget); + xs_vec_normalize(vecTarget, vecTarget); + xs_vec_mul_scalar(vecTarget, flRange, vecTarget); + xs_vec_add(vecOrigin, vecTarget, vecTarget); + engfunc(EngFunc_TraceMonsterHull, pSnowball, vecOrigin, vecTarget, DONT_IGNORE_MONSTERS, pSnowball, pTr); + + if (get_tr2(pTr, TR_pHit) == pTarget) { + static Float:vecVelocity[3]; + pev(pSnowball, pev_velocity, vecVelocity); + + new Float:flSpeed = xs_vec_len(vecVelocity); + + get_tr2(pTr, TR_vecEndPos, vecVelocity); + xs_vec_sub(vecVelocity, vecOrigin, vecVelocity); + xs_vec_normalize(vecVelocity, vecVelocity); + xs_vec_mul_scalar(vecVelocity, flSpeed, vecVelocity); + + set_pev(pSnowball, pev_velocity, vecVelocity); + } + + free_tr2(pTr); +} + +public IS_PLAYER(pEntity) { + return pEntity > 0 && pEntity <= MaxClients; +} diff --git a/src/scripts/weapons/sw_weapon_fireworksbox.sma b/src/scripts/weapons/sw_weapon_fireworksbox.sma new file mode 100644 index 0000000..5f65ae2 --- /dev/null +++ b/src/scripts/weapons/sw_weapon_fireworksbox.sma @@ -0,0 +1,76 @@ +#pragma semicolon 1 + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define PLUGIN "[Snow Wars] Weapon Fireworks Box" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +new const g_szMdlVFireworkbox[] = "models/snowwars/v090/weapons/v_fireworksbox.mdl"; +new const g_szMdlPFireworkbox[] = "models/snowwars/v090/weapons/p_fireworksbox.mdl"; +new const g_szMdlWFireworkbox[] = "models/snowwars/v090/weapons/w_fireworksbox.mdl"; + +new CW:g_iCwHandler; + +public plugin_precache() { + precache_generic("sprites/snowwars/v090/weapon_fireworksbox.txt"); + precache_model(g_szMdlVFireworkbox); + precache_model(g_szMdlPFireworkbox); + precache_model(g_szMdlWFireworkbox); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); + + g_iCwHandler = CW_Register("snowwars/v090/weapon_fireworksbox", CSW_FAMAS, _, _, _, _, _, 4, 1, _, "skull", CWF_NoBulletSmoke); + CW_Bind(g_iCwHandler, CWB_Idle, "@Weapon_Idle"); + CW_Bind(g_iCwHandler, CWB_Deploy, "@Weapon_Deploy"); + CW_Bind(g_iCwHandler, CWB_PrimaryAttack, "@Weapon_PrimaryAttack"); + CW_Bind(g_iCwHandler, CWB_WeaponBoxModelUpdate, "@Weapon_WeaponBoxSpawn"); + CW_Bind(g_iCwHandler, CWB_GetMaxSpeed, "@Weapon_GetMaxSpeed"); +} + +public @Weapon_Idle(this) { + // new pPlayer = CW_GetPlayer(this); +} + +public @Weapon_Deploy(this) { + // new pPlayer = CW_GetPlayer(this); + CW_DefaultDeploy(this, g_szMdlVFireworkbox, g_szMdlPFireworkbox, 0, "c4"); +} + +public @Weapon_PrimaryAttack(this) { + new pPlayer = CW_GetPlayer(this); + + static Float:vecOrigin[3]; + ExecuteHam(Ham_Player_GetGunPosition, pPlayer, vecOrigin); + + static Float:vecAngles[3]; + pev(pPlayer, pev_v_angle, vecAngles); + vecAngles[0] = 0.0; + vecAngles[2] = 0.0; + + new pInstallation = CE_Create("sw_fireworksbox", vecOrigin); + set_pev(pInstallation, pev_owner, pPlayer); + set_pev(pInstallation, pev_angles, vecAngles); + dllfunc(DLLFunc_Spawn, pInstallation); + + CW_RemovePlayerItem(this); +} + +public @Weapon_WeaponBoxSpawn(this, pWeaponBox) { + engfunc(EngFunc_SetModel, pWeaponBox, g_szMdlWFireworkbox); +} + +public Float:@Weapon_GetMaxSpeed(this) { + return 250.0; +} diff --git a/src/scripts/weapons/sw_weapon_slingshot.sma b/src/scripts/weapons/sw_weapon_slingshot.sma new file mode 100644 index 0000000..ac1486a --- /dev/null +++ b/src/scripts/weapons/sw_weapon_slingshot.sma @@ -0,0 +1,205 @@ +#pragma semicolon 1 + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define PLUGIN "[Snow Wars] Weapon Slingshot" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +#define CHARGE_TIME 1.0 +#define MISFIRE_DELAY 10.0 +#define MISFIRE_MAX_SHAKING 0.25 +#define MISFIRE_MAX_ERROR 0.125 + +new const g_szMdlVSnowball[] = "models/snowwars/v090/weapons/v_slingshot.mdl"; +new const g_szMdlPSnowball[] = "models/snowwars/v090/weapons/p_slingshot.mdl"; +new const g_szMdlWSnowball[] = "models/snowwars/v090/weapons/w_slingshot.mdl"; +new const g_szSndThrow[] = "snowwars/v090/snowthrow1.wav"; + +new g_bPlayerRedeploy[MAX_PLAYERS + 1]; + +new CW:g_iCwHandler; + +public plugin_precache() { + precache_generic("sprites/snowwars/v090/weapon_slingshot.txt"); + precache_model(g_szMdlVSnowball); + precache_model(g_szMdlPSnowball); + precache_model(g_szMdlWSnowball); + precache_sound(g_szSndThrow); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); + + g_iCwHandler = CW_Register("snowwars/v090/weapon_slingshot", CSW_AK47, 1, _, _, _, _, 0, 1, _, "skull", CWF_NoBulletSmoke); + CW_Bind(g_iCwHandler, CWB_Idle, "@Weapon_Idle"); + CW_Bind(g_iCwHandler, CWB_PrimaryAttack, "@Weapon_PrimaryAttack"); + CW_Bind(g_iCwHandler, CWB_Deploy, "@Weapon_Deploy"); + CW_Bind(g_iCwHandler, CWB_Holster, "@Weapon_Holster"); + // CW_Bind(g_iCwHandler, CWB_CanDrop, "@Weapon_CanDrop"); + CW_Bind(g_iCwHandler, CWB_WeaponBoxModelUpdate, "@Weapon_WeaponBoxSpawn"); + CW_Bind(g_iCwHandler, CWB_GetMaxSpeed, "@Weapon_GetMaxSpeed"); +} + +public @Weapon_Idle(this) { + new pPlayer = CW_GetPlayer(this); + + set_member(pPlayer, m_szAnimExtention, "shieldgun"); + + if (!get_member(this, m_flReleaseThrow) && get_member(this, m_flStartThrow)) { + set_member(this, m_flReleaseThrow, get_gametime()); + } + + if (get_member(this, m_flStartThrow)) { + new Float:flChargeDuration = GetChargeDuration(this); + new bool:bMissfire = flChargeDuration > MISFIRE_DELAY; + new Float:flPower = floatmax(floatmin(flChargeDuration / CHARGE_TIME, 1.0), 0.0); + + if (flPower > 0.2) { + ThrowGrenade(this, flPower, bMissfire); + emit_sound(pPlayer, CHAN_BODY, g_szSndThrow, 1.0, ATTN_NORM, 0, PITCH_NORM); + } else { + set_member(this, m_flReleaseThrow, 0.0); + set_member(this, m_flStartThrow, 0.0); + } + } else if (get_member(this, m_flReleaseThrow) > 0.0) { + // we've finished the throw, restart. + set_member(this, m_flStartThrow, 0.0); + set_member(this, m_flReleaseThrow, -1.0); + return; + } + + if (g_bPlayerRedeploy[pPlayer]) { + ExecuteHamB(Ham_Item_Deploy, this); + } else { + CW_PlayAnimation(this, 0, 31.0 / 30.0); + } +} + +public @Weapon_Deploy(this) { + new pPlayer = CW_GetPlayer(this); + CW_DefaultDeploy(this, g_szMdlVSnowball, g_szMdlPSnowball, 3, "shieldgun"); + g_bPlayerRedeploy[pPlayer] = false; +} + +public @Weapon_Holster(this) { + new pPlayer = CW_GetPlayer(this); + + if (!is_user_connected(pPlayer)) { + return; + } + + set_member(this, m_flReleaseThrow, 0.0); + set_member(this, m_flStartThrow, 0.0); +} + +// public @Weapon_CanDrop(this) { +// return PLUGIN_HANDLED; +// } + +public @Weapon_PrimaryAttack(this) { + new pPlayer = CW_GetPlayer(this); + + if (!get_member(this, m_flStartThrow)) { + set_member(this, m_flStartThrow, get_gametime()); + set_member(this, m_flReleaseThrow, 0.0); + CW_PlayAnimation(this, 1, 0.0); + } else { + new Float:flChargeDuration = GetChargeDuration(this); + + if (flChargeDuration > MISFIRE_DELAY) { + static Float:vecViewAngle[3]; + pev(pPlayer, pev_v_angle, vecViewAngle); + + for (new i = 0; i < 3; ++i) { + vecViewAngle[i] += random_float(-MISFIRE_MAX_SHAKING, MISFIRE_MAX_SHAKING); + } + + set_pev(pPlayer, pev_angles, vecViewAngle); + set_pev(pPlayer, pev_v_angle, vecViewAngle); + set_pev(pPlayer, pev_fixangle, 1); + } else if (flChargeDuration >= CHARGE_TIME) { + new pPlayer = CW_GetPlayer(this); + if (is_user_bot(pPlayer)) { // force throw for bots + CW_Idle(this); + } + } + } +} + +public @Weapon_WeaponBoxSpawn(this, pWeaponBox) { + engfunc(EngFunc_SetModel, pWeaponBox, g_szMdlWSnowball); +} + +public Float:@Weapon_GetMaxSpeed(this) { + return 250.0; +} + +ThrowGrenade(this, Float:flPower, bool:bMissfire = false) { + new pPlayer = CW_GetPlayer(this); + + static Float:vecSrc[3]; + ExecuteHam(Ham_Player_GetGunPosition, pPlayer, vecSrc); + + static Float:vecThrow[3]; + pev(pPlayer, pev_velocity, vecThrow); + + static Float:vecPunchangle[3]; + pev(pPlayer, pev_punchangle, vecPunchangle); + + static Float:vecThrowAngle[3]; + pev(pPlayer, pev_v_angle, vecThrowAngle); + engfunc(EngFunc_MakeVectors, vecThrowAngle); + + static Float:vecForward[3]; + get_global_vector(GL_v_forward, vecForward); + xs_vec_normalize(vecForward, vecForward); + + for (new i = 0; i < 3; ++i) { + new Float:flError = bMissfire ? random_float(-MISFIRE_MAX_ERROR, MISFIRE_MAX_ERROR) : 0.0; + vecSrc[i] += vecForward[i] * 16.0; + vecThrow[i] += (vecForward[i] + flError) * (2048.0 * flPower); + } + + ShootTimed(pPlayer, vecSrc, vecThrow); + + set_member(pPlayer, m_szAnimExtention, "onehanded"); + CW_PlayAnimation(this, 2, 11.0 / 30.0); + rg_set_animation(pPlayer, PLAYER_RELOAD); + + set_member(this, m_flReleaseThrow, 0.0); + set_member(this, m_flStartThrow, 0.0); + set_member(this, m_Weapon_flNextPrimaryAttack, 1.0); + set_member(this, m_Weapon_flNextSecondaryAttack, 1.0); + set_member(this, m_Weapon_flTimeWeaponIdle, 1.0); + + g_bPlayerRedeploy[pPlayer] = true; +} + +ShootTimed(pOwner, const Float:vecStart[3], const Float:vecVelocity[3]) { + new pSnowball = CE_Create("sw_snowball", vecStart); + set_pev(pSnowball, pev_owner, pOwner); + dllfunc(DLLFunc_Spawn, pSnowball); + engfunc(EngFunc_SetOrigin, pSnowball, vecStart); + set_pev(pSnowball, pev_velocity, vecVelocity); + + static Float:vecAngles[3]; + vector_to_angle(vecVelocity, vecAngles); + set_pev(pSnowball, pev_angles, vecAngles); + + return pSnowball; +} + +Float:GetChargeDuration(this) { + return get_gametime() - Float:get_member(this, m_flStartThrow); +} + diff --git a/src/scripts/weapons/sw_weapon_snowball.sma b/src/scripts/weapons/sw_weapon_snowball.sma new file mode 100644 index 0000000..03aa58e --- /dev/null +++ b/src/scripts/weapons/sw_weapon_snowball.sma @@ -0,0 +1,169 @@ +#pragma semicolon 1 + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define PLUGIN "[Snow Wars] Weapon Snowball" +#define VERSION SW_VERSION +#define AUTHOR "Hedgehog Fog" + +new const g_szMdlVSnowball[] = "models/snowwars/v090/weapons/v_snowball.mdl"; +new const g_szMdlPSnowball[] = "models/snowwars/v090/weapons/p_snowball.mdl"; +new const g_szMdlWSnowball[] = "models/snowwars/v090/weapons/w_snowball.mdl"; +new const g_szSndThrow[] = "snowwars/v090/snowthrow1.wav"; + +new g_bPlayerRedeploy[MAX_PLAYERS + 1]; + +new CW:g_iCwHandler; + +public plugin_precache() { + precache_generic("sprites/snowwars/v090/weapon_snowball.txt"); + precache_model(g_szMdlVSnowball); + precache_model(g_szMdlPSnowball); + precache_model(g_szMdlWSnowball); + precache_sound(g_szSndThrow); +} + +public plugin_init() { + register_plugin(PLUGIN, VERSION, AUTHOR); + + g_iCwHandler = CW_Register("snowwars/v090/weapon_snowball", CSW_DEAGLE, 1, _, _, _, _, 1, 1, _, "skull", CWF_NoBulletSmoke); + CW_Bind(g_iCwHandler, CWB_Idle, "@Weapon_Idle"); + CW_Bind(g_iCwHandler, CWB_PrimaryAttack, "@Weapon_PrimaryAttack"); + CW_Bind(g_iCwHandler, CWB_Deploy, "@Weapon_Deploy"); + CW_Bind(g_iCwHandler, CWB_CanDrop, "@Weapon_CanDrop"); + CW_Bind(g_iCwHandler, CWB_GetMaxSpeed, "@Weapon_GetMaxSpeed"); + CW_Bind(g_iCwHandler, CWB_WeaponBoxModelUpdate, "@Weapon_WeaponBoxSpawn"); +} + +public @Weapon_Idle(this) { + new pPlayer = CW_GetPlayer(this); + + if (!get_member(this, m_flReleaseThrow) && get_member(this, m_flStartThrow)) { + set_member(this, m_flReleaseThrow, get_gametime()); + } + + if (get_member(this, m_flStartThrow)) { + ThrowGrenade(this); + emit_sound(pPlayer, CHAN_BODY, g_szSndThrow, 1.0, ATTN_NORM, 0, PITCH_NORM); + return; + } + + if (get_member(this, m_flReleaseThrow) > 0.0) { + // we've finished the throw, restart. + set_member(this, m_flStartThrow, 0.0); + set_member(this, m_flReleaseThrow, -1.0); + return; + } + + if (g_bPlayerRedeploy[pPlayer]) { + ExecuteHamB(Ham_Item_Deploy, this); + } else { + CW_PlayAnimation(this, 0, 31.0 / 30.0); + } +} + +public @Weapon_Deploy(this) { + new pPlayer = CW_GetPlayer(this); + CW_DefaultDeploy(this, g_szMdlVSnowball, g_szMdlPSnowball, 3, "grenade"); + g_bPlayerRedeploy[pPlayer] = false; +} + +public @Weapon_CanDrop(this) { + return PLUGIN_HANDLED; +} + +public @Weapon_PrimaryAttack(this) { + if (!get_member(this, m_flStartThrow)) { + set_member(this, m_flStartThrow, get_gametime()); + set_member(this, m_flReleaseThrow, 0.0); + CW_PlayAnimation(this, 1, 31.0 / 35.0); + } else { + new pPlayer = CW_GetPlayer(this); + if (is_user_bot(pPlayer)) { // force throw for bots + CW_Idle(this); + } + } +} +public @Weapon_WeaponBoxSpawn(this, pWeaponBox) { + engfunc(EngFunc_SetModel, pWeaponBox, g_szMdlWSnowball); +} + +public Float:@Weapon_GetMaxSpeed(this) { + return 250.0; +} + +ThrowGrenade(this) { + new pPlayer = CW_GetPlayer(this); + + static Float:vecThrowAngle[3]; + pev(pPlayer, pev_v_angle, vecThrowAngle); + + static Float:vecPunchangle[3]; + pev(pPlayer, pev_punchangle, vecPunchangle); + + xs_vec_add(vecThrowAngle, vecPunchangle, vecThrowAngle); + + if (vecThrowAngle[0] < 0.0) { + vecThrowAngle[0] = -10.0 + vecThrowAngle[0] * ((90.0 - 10.0) / 90.0); + } else { + vecThrowAngle[0] = -10.0 + vecThrowAngle[0] * ((90.0 + 10.0) / 90.0); + } + + new Float:flVel = (90.0 - vecThrowAngle[0]) * 6.0; + if (flVel > 750.0) { + flVel = 750.0; + } + + engfunc(EngFunc_MakeVectors, vecThrowAngle); + + static Float:vecSrc[3]; + ExecuteHam(Ham_Player_GetGunPosition, pPlayer, vecSrc); + + static Float:vecThrow[3]; + pev(pPlayer, pev_velocity, vecThrow); + + static Float:vecForward[3]; + get_global_vector(GL_v_forward, vecForward); + + for (new i = 0; i < 3; ++i) { + vecSrc[i] += vecForward[i] * 16.0; + vecThrow[i] += vecForward[i] * flVel; + } + + new pSnowball = ShootTimed(pPlayer, vecSrc, vecThrow); + set_pev(pSnowball, pev_angles, vecThrowAngle); + + CW_PlayAnimation(this, 2, 11.0 / 30.0); + rg_set_animation(pPlayer, PLAYER_ATTACK1); + + set_member(this, m_flReleaseThrow, 0.0); + set_member(this, m_flStartThrow, 0.0); + set_member(this, m_Weapon_flTimeWeaponIdle, 0.5); + set_member(this, m_Weapon_flNextPrimaryAttack, 0.5); + set_member(this, m_Weapon_flNextSecondaryAttack, 0.5); + + g_bPlayerRedeploy[pPlayer] = true; +} + +ShootTimed(pOwner, const Float:vecStart[3], const Float:vecVelocity[3]) { + new pSnowball = CE_Create("sw_snowball", vecStart); + set_pev(pSnowball, pev_owner, pOwner); + dllfunc(DLLFunc_Spawn, pSnowball); + engfunc(EngFunc_SetOrigin, pSnowball, vecStart); + set_pev(pSnowball, pev_velocity, vecVelocity); + + static Float:vecAngles[3]; + vector_to_angle(vecVelocity, vecAngles); + set_pev(pSnowball, pev_angles, vecAngles); + + return pSnowball; +}